[arch-haskell] Re: [extra] haskell-parallel
Nicolas Pouillard
nicolas.pouillard at gmail.com
Thu Nov 11 12:07:05 EST 2010
On Thu, Nov 11, 2010 at 5:59 PM, Peter Hercek <phercek at gmail.com> wrote:
> On 11/11/2010 05:44 PM, Magnus Therning wrote:
>>
>> On Thu, Nov 11, 2010 at 16:41, Peter Hercek<phercek at gmail.com> wrote:
>>>
>>> On 11/11/2010 05:16 PM, Magnus Therning wrote:
>>>>
>>>> Source
>>>>
>>>> The burden falls on the user to make sure that his system is sane.
>>>> Unfortunately it's rather simple to end up in a situation where this
>>>> isn't the case. However, this is already true!
>>>> Here's an example:
>>>>
>>>> 1. User installs haskell-platform, and gets haskell-hp-http 4000.0.9
>>>> (which provides haskell-http 4000.0.9)
>>>> 2. User installs haskell-pandoc from AUR, it's built against HTTP
>>>> 4000.0.9
>>>> 3. User now installs haskell-http 4000.0.10 from AUR
>>>> 4. User now removes haskell-hp-http, without removing/re-installing
>>>> haskell-pandoc
>>>>
>>>> Step four is possible, since all the dependencies of haskell-pandoc
>>>> are satisfied by the system (haskell-http>= 4000.0.5).
>>>
>>> Hmm, what we would need is so that when haskell-pandoc is being built
>>> it's
>>> PKGFILE is updated so that it requires haskell-http 4000.0.9 exactly.
>>> Then
>>> an attempt to uninstall haskell-hp-http later would require an
>>> uninstallation of haskell-pandoc too.
>>>
>>> Can pacman be forced to do this? We would need something like a new
>>> option
>>> in PKGFILE which would have meaning: "fix versions of dependencies of
>>> these
>>> packages exactly to the versions which are currently installed (installed
>>> during building)."
>>
>> Just for reference, this is basically what the Debian policy on
>> Haskell packages is.
>>
> Good policy, if they can have it automated. If pacman (or I should rather
> say makepkg) has such a option then great. If not we should check whether we
> can add it there. We want the final exact version for dependency to be fixed
> during build time. The PKGBUILD files need to contain the version ranges as
> the cabal files.
>
> If we cannot have this late version fix during makepkg then I say just let
> it be as it is. If a user wants to go into the troubles with the source
> packages then he/she should be able to take care about knowing and obeying
> the haskell quirks.
>
> Well maybe we could try to provide a small wraper over makepkg (something
> like haskell-makepkg) which should be used for haskell source packages ...
> if we cannot get this fixed in the makepkg itself.
A few weeks I hacked makepkg to add this very feature, I didn't took
time to test
it exhaustively nor to propose it to the authors.
As an attachment here is a diff against the makepkg found in pacman-3.4.1-1,
it adds the --freeze-deps flag that change the package versions to be exactly
the one on the build system.
I would be glad to see this feature used here, and then proposed to the authors
on the behalf of the Arch-Haskell team.
Best regards,
--
Nicolas Pouillard
http://nicolaspouillard.fr
-------------- next part --------------
--- /usr/bin/makepkg 2010-09-04 03:12:11.000000000 +0200
+++ makepkg-np 2010-10-22 10:39:44.000000000 +0200
@@ -58,6 +58,7 @@
DEP_BIN=0
FORCE=0
INFAKEROOT=0
+FREEZEDEPS=0
GENINTEG=0
SKIPINTEG=0
INSTALL=0
@@ -370,7 +371,7 @@
run_pacman() {
local cmd
printf -v cmd "%q " "$PACMAN" $PACMAN_OPTS "$@"
- if (( ! ASROOT )) && [[ $1 != "-T" && $1 != "-Qq" ]]; then
+ if (( ! ASROOT )) && [[ $1 != "-T" && $1 != "-Q" && $1 != "-Qq" ]]; then
if [ "$(type -p sudo)" ]; then
cmd="sudo $cmd"
else
@@ -933,9 +934,15 @@
for it in "${groups[@]}"; do
echo "group = $it" >>.PKGINFO
done
- for it in "${depends[@]}"; do
- echo "depend = $it" >>.PKGINFO
- done
+ if (( FREEZEDEPS )); then
+ for it in "${depends[@]}"; do
+ echo "depend = $(run_pacman -Q "$it" | sed -e's/ /==/')" >>.PKGINFO
+ done
+ else
+ for it in "${depends[@]}"; do
+ echo "depend = $it" >>.PKGINFO
+ done
+ fi
for it in "${optdepends[@]}"; do
echo "optdepend = $it" >>.PKGINFO
done
@@ -1510,6 +1517,7 @@
echo "$(gettext " --asroot Allow makepkg to run as root user")"
printf "$(gettext " --config <file> Use an alternate config file (instead of '%s')")\n" "$confdir/makepkg.conf"
echo "$(gettext " --holdver Prevent automatic version bumping for development PKGBUILDs")"
+ echo "$(gettext " --freeze-deps Use the exact current version of dependencies when packaging")"
echo "$(gettext " --pkg <list> Only build listed packages from a split package")"
echo "$(gettext " --skipinteg Do not fail when integrity checks are missing")"
echo "$(gettext " --source Generate a source-only tarball without downloaded sources")"
@@ -1546,7 +1554,7 @@
# Parse Command Line Options.
OPT_SHORT="AcCdefFghiLmop:rRsV"
OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps"
-OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver"
+OPT_LONG="$OPT_LONG,noextract,force,forcever:,freeze-deps,geninteg,help,holdver"
OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,pkg:,rmdeps,repackage,skipinteg"
OPT_LONG="$OPT_LONG,source,syncdeps,version,config:"
# Pacman Options
@@ -1578,6 +1586,7 @@
#hidden opt used by fakeroot call for svn/cvs/etc PKGBUILDs to set pkgver
--forcever) shift; FORCE_VER=$1;;
-F) INFAKEROOT=1 ;;
+ --freeze-deps) FREEZEDEPS=1 ;;
-g|--geninteg) GENINTEG=1 ;;
--holdver) HOLDVER=1 ;;
-i|--install) INSTALL=1 ;;
More information about the arch-haskell
mailing list