Update source updater to support fetchgit; add aufs2 using that method. Unfortunately, AUFS2 seems to require some strict conditions on kernel options and version..

svn path=/nixpkgs/trunk/; revision=16983
This commit is contained in:
Michael Raskin 2009-09-08 09:35:21 +00:00
parent 9121ae7fb8
commit edd56d707a
8 changed files with 132 additions and 39 deletions

@ -526,4 +526,10 @@ let inherit (builtins) head tail trace; in
url = srcInfo.url;
sha256 = srcInfo.hash;
};
fetchGitFromSrcInfo = srcInfo: fetchgit {
url = srcInfo.url;
rev = srcInfo.rev;
sha256 = srcInfo.hash;
};
}) // args

@ -42,6 +42,8 @@ if test -z "$finalPath"; then
echo $tmpFile
git checkout $rev
fi
# Allow doing additional processing before .git removal
eval "$NIX_PREFETCH_GIT_CHECKOUT_HOOK"
find $tmpFile -name .git\* | xargs rm -rf
# Compute the hash.

@ -12,6 +12,7 @@ Attributes:
src-info-for-file.nix:
downloadPage
rev (for repos)
baseName (default = unnamed-package)
sourceRegexp (default = '.*[.]tar[.].*')
choiceCommand (default = 'head -1')

@ -26,55 +26,80 @@ getAttr () {
echo "$data"
}
if [ -z "$forcedUrl" ] ; then
freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" |
eval "egrep \"$(getAttr sourceRegexp '.*[.]tar[.].*')\"" |
eval "$(getAttr choiceCommand 'head -1')")"
if ! egrep ':' freshUrl ; then
freshUrl="$(dirname "$(getAttr downloadPage).")/$freshUrl"
fi
echo "Found download link: $freshUrl" >&2
else
freshUrl="$forcedUrl"
fi
if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then
echo "Source link not changed" >&2
exit
fi
version="$(echo "$freshUrl" |
eval "sed -re \"$(getAttr versionExtractorSedScript \
's/.*-([0-9.]+)[.].*/\1/')\"")"
mirrorUrl="$(echo "$freshUrl" |
eval "sed -r -e \"$(getAttr versionReferenceCreator \
's/-([0-9.]+)[.]/-${version}./')\"" |
eval "sed -r -e \"$(getAttr mirrorSedScript)\"")"
hash=$(nix-prefetch-url "$freshUrl")
method="$(getAttr method fetchurl)"
baseName="$(getAttr baseName 'unnamed-package')"
name="$baseName-$version"
commonPrefetchVars=" version name hash"
advertisedUrl="$freshUrl"
url="$mirrorUrl"
prefetchClause=""
[ fetchurl = "$method" ] && {
if [ -z "$forcedUrl" ] ; then
freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" |
eval "egrep \"$(getAttr sourceRegexp '.*[.]tar[.].*')\"" |
eval "$(getAttr choiceCommand 'head -1')")"
if ! egrep ':' freshUrl ; then
freshUrl="$(dirname "$(getAttr downloadPage).")/$freshUrl"
fi
echo "Found download link: $freshUrl" >&2
else
freshUrl="$forcedUrl"
fi
version="$(echo "$freshUrl" |
eval "sed -re \"$(getAttr versionExtractorSedScript \
's/.*-([0-9.]+)[.].*/\1/')\"")"
mirrorUrl="$(echo "$freshUrl" |
eval "sed -r -e \"$(getAttr versionReferenceCreator \
's/-([0-9.]+)[.]/-${version}./')\"" |
eval "sed -r -e \"$(getAttr mirrorSedScript)\"")"
name="$baseName-$version"
advertisedUrl="$freshUrl"
url="$mirrorUrl"
if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then
echo "Source link not changed" >&2
exit
fi
hash=$(nix-prefetch-url "$freshUrl")
prefetchVars="url advertisedUrl";
}
[ "fetchgit" = "$method" ] && {
repoUrl="$(getAttr repoUrl)"
export NIX_PREFETCH_GIT_CHECKOUT_HOOK="
cat .git/HEAD
"
export NIX_HASH_ALGO=sha256
rev="$(getAttr rev '')";
rev_and_hash="$("$own_dir"/../fetchgit/nix-prefetch-git "$repoUrl" "$rev" | tail -2)"
rev="$(echo "$rev_and_hash" | head -1)"
url="$repoUrl";
hash="$(echo "$rev_and_hash" | tail -1)"
version="$rev"
name="$baseName-$version"
prefetchVars="rev url";
}
prefetchAssignments="";
for i in $commonPrefetchVars $prefetchVars; do
prefetchAssignments="$prefetchAssignments $i=\"$(eval echo \"\$$i\")\";$(echo -e '\n ')"
done;
extraAssignments=""
for i in $(getAttr extraVars ''); do
eval "$(getAttr "eval_$i" 'i=""')"
extraAssignments="$extraAssignments $i=\"$(eval echo \"\$$i\")\";"
extraAssignments="$extraAssignments $i=\"$(eval echo \"\$$i\")\";$(echo -e '\n ')"
done
cat << EOF > "$new_src_file"
rec {
advertisedUrl="$advertisedUrl";
version = "$version";
url="$url";
hash = "$hash";
name = "$name";
$prefetchAssignments
$extraAssignments
}
EOF

@ -0,0 +1,40 @@
{stdenv, fetchgit, kernel}:
let s = import ./src-for-default.nix; in
stdenv.mkDerivation {
name = "${s.name}-${kernel.version}";
src = fetchgit {
inherit (s) url rev;
sha256 = s.hash;
};
buildPhase = ''
kernelVersion=$(cd ${kernel}/lib/modules && ls)
kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/source)
tar xvfj ${kernel.src}
kernelSource=$(echo $(pwd)/linux-*)
cp -prd $kernelBuild/* $kernelSource
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$PWD/include"
make KDIR=$kernelSource aufs.ko
'';
installPhase = ''
ensureDir $out/bin
cp util/aulchown $out/bin
ensureDir $out/share/man/man5
cp util/aufs.5 $out/share/man/man5
ensureDir $out/lib/modules/$kernelVersion/misc
cp aufs.ko $out/lib/modules/$kernelVersion/misc
'';
meta = {
description = "Another Unionfs implementation for Linux - second generation";
homepage = http://aufs.sourceforge.net/;
};
}

@ -0,0 +1,9 @@
rec {
version="4c023a5ec2703cfea465b7ecd6f16b3ef156e5d5";
name="aufs2-4c023a5ec2703cfea465b7ecd6f16b3ef156e5d5";
hash="8858eb487db24e9cf524d9428a3fdf8861ee366ddf22f41b446f52490a92da2b";
rev="4c023a5ec2703cfea465b7ecd6f16b3ef156e5d5";
url="http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git";
}

@ -0,0 +1,6 @@
{
repoUrl = "http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git";
rev = "origin/aufs2";
baseName="aufs2";
method="fetchgit";
}

@ -5298,6 +5298,10 @@ let
inherit fetchurl stdenv kernel;
};
aufs2 = import ../os-specific/linux/aufs2 {
inherit fetchgit stdenv kernel;
};
exmap = import ../os-specific/linux/exmap {
inherit fetchurl stdenv kernel boost pcre pkgconfig;
inherit (gtkLibs) gtkmm;