Added doCheck support to builder-defs.nix
svn path=/nixpkgs/trunk/; revision=12371
This commit is contained in:
parent
ecefcac4d7
commit
622634d6dd
1 changed files with 364 additions and 358 deletions
|
@ -1,380 +1,380 @@
|
|||
args: with args; with stringsWithDeps; with lib;
|
||||
(rec
|
||||
{
|
||||
inherit writeScript;
|
||||
inherit writeScript;
|
||||
|
||||
src = getAttr ["src"] "" args;
|
||||
src = getAttr ["src"] "" args;
|
||||
|
||||
addSbinPath = getAttr ["addSbinPath"] false args;
|
||||
addSbinPath = getAttr ["addSbinPath"] false args;
|
||||
|
||||
forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"];
|
||||
forceCopy = ["COPYING" "LICENSE" "DISTRIBUTION" "LEGAL"
|
||||
"README" "AUTHORS" "ChangeLog" "CHANGES"] ++
|
||||
(optional (getAttr ["forceCopyDoc"] true args) "doc");
|
||||
forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"];
|
||||
forceCopy = ["COPYING" "LICENSE" "DISTRIBUTION" "LEGAL"
|
||||
"README" "AUTHORS" "ChangeLog" "CHANGES"] ++
|
||||
(optional (getAttr ["forceCopyDoc"] true args) "doc");
|
||||
|
||||
archiveType = s:
|
||||
(if hasSuffixHack ".tar" s then "tar"
|
||||
else if (hasSuffixHack ".tar.gz" s) || (hasSuffixHack ".tgz" s) then "tgz"
|
||||
else if (hasSuffixHack ".tar.bz2" s) || (hasSuffixHack ".tbz2" s) then "tbz2"
|
||||
else if (hasSuffixHack ".tar.lzma" s) then "tar.lzma"
|
||||
else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip"
|
||||
else if (hasSuffixHack "-cvs-export" s) then "cvs-dir"
|
||||
else if (hasSuffixHack ".nar.bz2" s) then "narbz2"
|
||||
archiveType = s:
|
||||
(if hasSuffixHack ".tar" s then "tar"
|
||||
else if (hasSuffixHack ".tar.gz" s) || (hasSuffixHack ".tgz" s) then "tgz"
|
||||
else if (hasSuffixHack ".tar.bz2" s) || (hasSuffixHack ".tbz2" s) then "tbz2"
|
||||
else if (hasSuffixHack ".tar.lzma" s) then "tar.lzma"
|
||||
else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip"
|
||||
else if (hasSuffixHack "-cvs-export" s) then "cvs-dir"
|
||||
else if (hasSuffixHack ".nar.bz2" s) then "narbz2"
|
||||
|
||||
# Mostly for manually specified directories..
|
||||
else if (hasSuffixHack "/" s) then "dir"
|
||||
# Mostly for manually specified directories..
|
||||
else if (hasSuffixHack "/" s) then "dir"
|
||||
|
||||
# Last block - for single files!! It should be always after .tar.*
|
||||
else if (hasSuffixHack ".bz2" s) then "plain-bz2"
|
||||
# Last block - for single files!! It should be always after .tar.*
|
||||
else if (hasSuffixHack ".bz2" s) then "plain-bz2"
|
||||
|
||||
else (abort "unknown archive type : ${s}"));
|
||||
else (abort "unknown archive type : ${s}"));
|
||||
|
||||
defAddToSearchPath = FullDepEntry ("
|
||||
addToSearchPathWithCustomDelimiter() {
|
||||
local delimiter=\$1
|
||||
local varName=\$2
|
||||
local needDir=\$3
|
||||
local addDir=\${4:-\$needDir}
|
||||
local prefix=\$5
|
||||
if [ -d \$prefix\$needDir ]; then
|
||||
if [ -z \${!varName} ]; then
|
||||
eval export \${varName}=\${prefix}\$addDir
|
||||
else
|
||||
eval export \${varName}=\${!varName}\${delimiter}\${prefix}\$addDir
|
||||
fi
|
||||
fi
|
||||
}
|
||||
defAddToSearchPath = FullDepEntry ("
|
||||
addToSearchPathWithCustomDelimiter() {
|
||||
local delimiter=\$1
|
||||
local varName=\$2
|
||||
local needDir=\$3
|
||||
local addDir=\${4:-\$needDir}
|
||||
local prefix=\$5
|
||||
if [ -d \$prefix\$needDir ]; then
|
||||
if [ -z \${!varName} ]; then
|
||||
eval export \${varName}=\${prefix}\$addDir
|
||||
else
|
||||
eval export \${varName}=\${!varName}\${delimiter}\${prefix}\$addDir
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
addToSearchPath()
|
||||
{
|
||||
addToSearchPathWithCustomDelimiter \"\${PATH_DELIMITER}\" \"\$@\"
|
||||
}
|
||||
") ["defNest"];
|
||||
addToSearchPath()
|
||||
{
|
||||
addToSearchPathWithCustomDelimiter \"\${PATH_DELIMITER}\" \"\$@\"
|
||||
}
|
||||
") ["defNest"];
|
||||
|
||||
defNest = noDepEntry ("
|
||||
nestingLevel=0
|
||||
defNest = noDepEntry ("
|
||||
nestingLevel=0
|
||||
|
||||
startNest() {
|
||||
nestingLevel=\$((\$nestingLevel + 1))
|
||||
echo -en \"\\e[\$1p\"
|
||||
}
|
||||
startNest() {
|
||||
nestingLevel=\$((\$nestingLevel + 1))
|
||||
echo -en \"\\e[\$1p\"
|
||||
}
|
||||
|
||||
stopNest() {
|
||||
nestingLevel=\$((\$nestingLevel - 1))
|
||||
echo -en \"\\e[q\"
|
||||
}
|
||||
stopNest() {
|
||||
nestingLevel=\$((\$nestingLevel - 1))
|
||||
echo -en \"\\e[q\"
|
||||
}
|
||||
|
||||
header() {
|
||||
startNest \"\$2\"
|
||||
echo \"\$1\"
|
||||
}
|
||||
header() {
|
||||
startNest \"\$2\"
|
||||
echo \"\$1\"
|
||||
}
|
||||
|
||||
# Make sure that even when we exit abnormally, the original nesting
|
||||
# level is properly restored.
|
||||
closeNest() {
|
||||
while test \$nestingLevel -gt 0; do
|
||||
stopNest
|
||||
done
|
||||
}
|
||||
# Make sure that even when we exit abnormally, the original nesting
|
||||
# level is properly restored.
|
||||
closeNest() {
|
||||
while test \$nestingLevel -gt 0; do
|
||||
stopNest
|
||||
done
|
||||
}
|
||||
|
||||
trap \"closeNest\" EXIT
|
||||
");
|
||||
trap \"closeNest\" EXIT
|
||||
");
|
||||
|
||||
minInit = FullDepEntry ("
|
||||
set -e
|
||||
NIX_GCC=${stdenv.gcc}
|
||||
export SHELL=${stdenv.shell}
|
||||
PATH_DELIMITER=':'
|
||||
" + (if ((stdenv ? preHook) && (stdenv.preHook != null) &&
|
||||
((toString stdenv.preHook) != "")) then
|
||||
"
|
||||
param1=${stdenv.param1}
|
||||
param2=${stdenv.param2}
|
||||
param3=${stdenv.param3}
|
||||
param4=${stdenv.param4}
|
||||
param5=${stdenv.param5}
|
||||
source ${stdenv.preHook}
|
||||
" +
|
||||
"
|
||||
# Set up the initial path.
|
||||
PATH=
|
||||
for i in \$NIX_GCC ${toString stdenv.initialPath}; do
|
||||
PATH=\$PATH\${PATH:+\"\${PATH_DELIMITER}\"}\$i/bin
|
||||
done
|
||||
minInit = FullDepEntry ("
|
||||
set -e
|
||||
NIX_GCC=${stdenv.gcc}
|
||||
export SHELL=${stdenv.shell}
|
||||
PATH_DELIMITER=':'
|
||||
" + (if ((stdenv ? preHook) && (stdenv.preHook != null) &&
|
||||
((toString stdenv.preHook) != "")) then
|
||||
"
|
||||
param1=${stdenv.param1}
|
||||
param2=${stdenv.param2}
|
||||
param3=${stdenv.param3}
|
||||
param4=${stdenv.param4}
|
||||
param5=${stdenv.param5}
|
||||
source ${stdenv.preHook}
|
||||
" +
|
||||
"
|
||||
# Set up the initial path.
|
||||
PATH=
|
||||
for i in \$NIX_GCC ${toString stdenv.initialPath}; do
|
||||
PATH=\$PATH\${PATH:+\"\${PATH_DELIMITER}\"}\$i/bin
|
||||
done
|
||||
|
||||
export TZ=UTC
|
||||
export TZ=UTC
|
||||
|
||||
prefix=${if args ? prefix then (toString args.prefix) else "\$out"}
|
||||
prefix=${if args ? prefix then (toString args.prefix) else "\$out"}
|
||||
|
||||
"
|
||||
else "")) ["defNest" "defAddToSearchPath"];
|
||||
|
||||
addInputs = FullDepEntry ("
|
||||
# Recursively find all build inputs.
|
||||
findInputs()
|
||||
{
|
||||
local pkg=\$1
|
||||
"
|
||||
else "")) ["defNest" "defAddToSearchPath"];
|
||||
|
||||
addInputs = FullDepEntry ("
|
||||
# Recursively find all build inputs.
|
||||
findInputs()
|
||||
{
|
||||
local pkg=\$1
|
||||
|
||||
case \$pkgs in
|
||||
*\\ \$pkg\\ *)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
pkgs=\"\$pkgs \$pkg \"
|
||||
case \$pkgs in
|
||||
*\\ \$pkg\\ *)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
pkgs=\"\$pkgs \$pkg \"
|
||||
|
||||
echo \$pkg
|
||||
if test -f \$pkg/nix-support/setup-hook; then
|
||||
source \$pkg/nix-support/setup-hook
|
||||
fi
|
||||
}
|
||||
echo \$pkg
|
||||
if test -f \$pkg/nix-support/setup-hook; then
|
||||
source \$pkg/nix-support/setup-hook
|
||||
fi
|
||||
}
|
||||
|
||||
pkgs=\"\"
|
||||
for i in \$NIX_GCC ${toString buildInputs}; do
|
||||
findInputs \$i
|
||||
done
|
||||
pkgs=\"\"
|
||||
for i in \$NIX_GCC ${toString buildInputs}; do
|
||||
findInputs \$i
|
||||
done
|
||||
|
||||
|
||||
# Set the relevant environment variables to point to the build inputs
|
||||
# found above.
|
||||
addToEnv()
|
||||
{
|
||||
local pkg=\$1
|
||||
"+
|
||||
(if !((args ? ignoreFailedInputs) && (args.ignoreFailedInputs == 1)) then "
|
||||
if [ -e \$1/nix-support/failed ]; then
|
||||
echo \"failed input \$1\" >&2
|
||||
fail
|
||||
fi
|
||||
" else "")
|
||||
+(if addSbinPath then "
|
||||
if test -d \$1/sbin; then
|
||||
export _PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$1/sbin
|
||||
fi
|
||||
" else "")
|
||||
+"
|
||||
if test -d \$1/bin; then
|
||||
export _PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$1/bin
|
||||
fi
|
||||
# Set the relevant environment variables to point to the build inputs
|
||||
# found above.
|
||||
addToEnv()
|
||||
{
|
||||
local pkg=\$1
|
||||
"+
|
||||
(if !((args ? ignoreFailedInputs) && (args.ignoreFailedInputs == 1)) then "
|
||||
if [ -e \$1/nix-support/failed ]; then
|
||||
echo \"failed input \$1\" >&2
|
||||
fail
|
||||
fi
|
||||
" else "")
|
||||
+(if addSbinPath then "
|
||||
if test -d \$1/sbin; then
|
||||
export _PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$1/sbin
|
||||
fi
|
||||
" else "")
|
||||
+"
|
||||
if test -d \$1/bin; then
|
||||
export _PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$1/bin
|
||||
fi
|
||||
|
||||
for i in \"\${envHooks[@]}\"; do
|
||||
\$i \$pkg
|
||||
done
|
||||
}
|
||||
for i in \"\${envHooks[@]}\"; do
|
||||
\$i \$pkg
|
||||
done
|
||||
}
|
||||
|
||||
for i in \$pkgs; do
|
||||
addToEnv \$i
|
||||
done
|
||||
for i in \$pkgs; do
|
||||
addToEnv \$i
|
||||
done
|
||||
|
||||
|
||||
# Add the output as an rpath.
|
||||
if test \"\$NIX_NO_SELF_RPATH\" != \"1\"; then
|
||||
export NIX_LDFLAGS=\"-rpath \$out/lib \$NIX_LDFLAGS\"
|
||||
fi
|
||||
# Add the output as an rpath.
|
||||
if test \"\$NIX_NO_SELF_RPATH\" != \"1\"; then
|
||||
export NIX_LDFLAGS=\"-rpath \$out/lib \$NIX_LDFLAGS\"
|
||||
fi
|
||||
|
||||
PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$PATH
|
||||
") ["minInit"];
|
||||
|
||||
defEnsureDir = FullDepEntry ("
|
||||
# Ensure that the given directories exists.
|
||||
ensureDir() {
|
||||
local dir
|
||||
for dir in \"\$@\"; do
|
||||
if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi
|
||||
done
|
||||
}
|
||||
") ["minInit"];
|
||||
PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$PATH
|
||||
") ["minInit"];
|
||||
|
||||
defEnsureDir = FullDepEntry ("
|
||||
# Ensure that the given directories exists.
|
||||
ensureDir() {
|
||||
local dir
|
||||
for dir in \"\$@\"; do
|
||||
if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi
|
||||
done
|
||||
}
|
||||
") ["minInit"];
|
||||
|
||||
toSrcDir = s : FullDepEntry ((if (archiveType s) == "tar" then "
|
||||
tar xvf '${s}'
|
||||
cd \"\$(tar tf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tgz" then "
|
||||
tar xvzf '${s}'
|
||||
cd \"\$(tar tzf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tbz2" then "
|
||||
tar xvjf '${s}'
|
||||
cd \"\$(tar tjf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tar.lzma" then "
|
||||
unlzma -d -c <'${s}' | tar xv
|
||||
cd \"\$(unlzma -d -c <'${s}' | tar t | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "zip" then "
|
||||
unzip '${s}'
|
||||
cd \"$( unzip -lqq '${s}' | tail -1 |
|
||||
sed -e 's@^\\(\\s\\+[-0-9:]\\+\\)\\{3,3\\}\\s\\+\\([^/]\\+\\)/.*@\\2@' )\"
|
||||
" else if (archiveType s) == "cvs-dir" then "
|
||||
cp -r '${s}' .
|
||||
cd \$(basename ${s})
|
||||
chmod u+rwX -R .
|
||||
" else if (archiveType s) == "dir" then "
|
||||
cp -r '${s}' .
|
||||
cd \$(basename ${s})
|
||||
chmod u+rwX -R .
|
||||
" else if (archiveType s) == "narbz2" then "
|
||||
bzip2 <${s} | nix-store --restore \$PWD/\$(basename ${s} .nar.bz2)
|
||||
cd \$(basename ${s} .nar.bz2)
|
||||
" else if (archiveType s) == "plain-bz2" then "
|
||||
mkdir \$PWD/\$(basename ${s} .bz2)
|
||||
NAME=\$(basename ${s} .bz2)
|
||||
bzip2 -d <${s} > \$PWD/\$(basename ${s} .bz2)/\${NAME#*-}
|
||||
cd \$(basename ${s} .bz2)
|
||||
" else (abort "unknown archive type : ${s}"))+
|
||||
toSrcDir = s : FullDepEntry ((if (archiveType s) == "tar" then "
|
||||
tar xvf '${s}'
|
||||
cd \"\$(tar tf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tgz" then "
|
||||
tar xvzf '${s}'
|
||||
cd \"\$(tar tzf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tbz2" then "
|
||||
tar xvjf '${s}'
|
||||
cd \"\$(tar tjf '${s}' | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "tar.lzma" then "
|
||||
unlzma -d -c <'${s}' | tar xv
|
||||
cd \"\$(unlzma -d -c <'${s}' | tar t | head -1 | sed -e 's@/.*@@' )\"
|
||||
" else if (archiveType s) == "zip" then "
|
||||
unzip '${s}'
|
||||
cd \"$( unzip -lqq '${s}' | tail -1 |
|
||||
sed -e 's@^\\(\\s\\+[-0-9:]\\+\\)\\{3,3\\}\\s\\+\\([^/]\\+\\)/.*@\\2@' )\"
|
||||
" else if (archiveType s) == "cvs-dir" then "
|
||||
cp -r '${s}' .
|
||||
cd \$(basename ${s})
|
||||
chmod u+rwX -R .
|
||||
" else if (archiveType s) == "dir" then "
|
||||
cp -r '${s}' .
|
||||
cd \$(basename ${s})
|
||||
chmod u+rwX -R .
|
||||
" else if (archiveType s) == "narbz2" then "
|
||||
bzip2 <${s} | nix-store --restore \$PWD/\$(basename ${s} .nar.bz2)
|
||||
cd \$(basename ${s} .nar.bz2)
|
||||
" else if (archiveType s) == "plain-bz2" then "
|
||||
mkdir \$PWD/\$(basename ${s} .bz2)
|
||||
NAME=\$(basename ${s} .bz2)
|
||||
bzip2 -d <${s} > \$PWD/\$(basename ${s} .bz2)/\${NAME#*-}
|
||||
cd \$(basename ${s} .bz2)
|
||||
" else (abort "unknown archive type : ${s}"))+
|
||||
# goSrcDir is typically something like "cd mysubdir" .. but can be anything else
|
||||
(if args ? goSrcDir then args.goSrcDir else "")
|
||||
) ["minInit"];
|
||||
(if args ? goSrcDir then args.goSrcDir else "")
|
||||
) ["minInit"];
|
||||
|
||||
configureCommand = getAttr ["configureCommand"] "./configure" args;
|
||||
configureCommand = getAttr ["configureCommand"] "./configure" args;
|
||||
|
||||
doConfigure = FullDepEntry ("
|
||||
${configureCommand} --prefix=\"\$prefix\" ${toString configureFlags}
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
doConfigure = FullDepEntry ("
|
||||
${configureCommand} --prefix=\"\$prefix\" ${toString configureFlags}
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
|
||||
doAutotools = FullDepEntry ("
|
||||
mkdir -p config
|
||||
libtoolize --copy --force
|
||||
aclocal --force
|
||||
#Some packages do not need this
|
||||
autoheader || true;
|
||||
automake --add-missing --copy
|
||||
autoconf
|
||||
")["minInit" "addInputs" "doUnpack"];
|
||||
doAutotools = FullDepEntry ("
|
||||
mkdir -p config
|
||||
libtoolize --copy --force
|
||||
aclocal --force
|
||||
#Some packages do not need this
|
||||
autoheader || true;
|
||||
automake --add-missing --copy
|
||||
autoconf
|
||||
")["minInit" "addInputs" "doUnpack"];
|
||||
|
||||
doMake = FullDepEntry ("
|
||||
make ${toString makeFlags}
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
doMake = FullDepEntry ("
|
||||
make ${toString makeFlags}
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
|
||||
doUnpack = toSrcDir (toString src);
|
||||
doUnpack = toSrcDir (toString src);
|
||||
|
||||
installPythonPackage = FullDepEntry ("
|
||||
python setup.py install --prefix=\"\$prefix\"
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
installPythonPackage = FullDepEntry ("
|
||||
python setup.py install --prefix=\"\$prefix\"
|
||||
") ["minInit" "addInputs" "doUnpack"];
|
||||
|
||||
doPythonConfigure = FullDepEntry (''
|
||||
pythonVersion=$(toPythonPath "$prefix")
|
||||
pythonVersion=''${pythonVersion#*/lib/python}
|
||||
pythonVersion=''${pythonVersion%%/site-packages}
|
||||
${if args ? extraPythonConfigureCommand then
|
||||
args.extraPythonConfigureCommand
|
||||
else ""}
|
||||
python configure.py -b "$prefix/bin" -d "$(toPythonPath "$prefix")" -v "$prefix/share/sip" ${toString configureFlags}
|
||||
'') ["minInit" "addInputs" "doUnpack"];
|
||||
doPythonConfigure = FullDepEntry (''
|
||||
pythonVersion=$(toPythonPath "$prefix")
|
||||
pythonVersion=''${pythonVersion#*/lib/python}
|
||||
pythonVersion=''${pythonVersion%%/site-packages}
|
||||
${if args ? extraPythonConfigureCommand then
|
||||
args.extraPythonConfigureCommand
|
||||
else ""}
|
||||
python configure.py -b "$prefix/bin" -d "$(toPythonPath "$prefix")" -v "$prefix/share/sip" ${toString configureFlags}
|
||||
'') ["minInit" "addInputs" "doUnpack"];
|
||||
|
||||
doMakeInstall = FullDepEntry ("
|
||||
make ${toString (getAttr ["makeFlags"] "" args)} "+
|
||||
"${toString (getAttr ["installFlags"] "" args)} install") ["doMake"];
|
||||
doMakeInstall = FullDepEntry ("
|
||||
make ${toString (getAttr ["makeFlags"] "" args)} "+
|
||||
"${toString (getAttr ["installFlags"] "" args)} install") ["doMake"];
|
||||
|
||||
doForceShare = FullDepEntry ("
|
||||
ensureDir \"\$prefix/share\"
|
||||
for d in ${toString forceShare}; do
|
||||
if [ -d \"\$prefix/\$d\" -a ! -d \"\$prefix/share/\$d\" ]; then
|
||||
mv -v \"\$prefix/\$d\" \"\$prefix/share\"
|
||||
ln -sv share/\$d \"\$prefix\"
|
||||
fi;
|
||||
done;
|
||||
") ["minInit" "defEnsureDir"];
|
||||
doForceShare = FullDepEntry ("
|
||||
ensureDir \"\$prefix/share\"
|
||||
for d in ${toString forceShare}; do
|
||||
if [ -d \"\$prefix/\$d\" -a ! -d \"\$prefix/share/\$d\" ]; then
|
||||
mv -v \"\$prefix/\$d\" \"\$prefix/share\"
|
||||
ln -sv share/\$d \"\$prefix\"
|
||||
fi;
|
||||
done;
|
||||
") ["minInit" "defEnsureDir"];
|
||||
|
||||
doForceCopy = FullDepEntry (''
|
||||
name=$(basename $out)
|
||||
name=''${name#*-}
|
||||
ensureDir "$prefix/share/$name"
|
||||
for f in ${toString forceCopy}; do
|
||||
cp -r "$f" "$prefix/share/$name/$f" || true
|
||||
done;
|
||||
'') ["minInit" "defEnsureDir"];
|
||||
doForceCopy = FullDepEntry (''
|
||||
name=$(basename $out)
|
||||
name=''${name#*-}
|
||||
ensureDir "$prefix/share/$name"
|
||||
for f in ${toString forceCopy}; do
|
||||
cp -r "$f" "$prefix/share/$name/$f" || true
|
||||
done;
|
||||
'') ["minInit" "defEnsureDir"];
|
||||
|
||||
doDump = n: noDepEntry "echo Dump number ${n}; set";
|
||||
doDump = n: noDepEntry "echo Dump number ${n}; set";
|
||||
|
||||
patchFlags = if args ? patchFlags then args.patchFlags else "-p1";
|
||||
patchFlags = if args ? patchFlags then args.patchFlags else "-p1";
|
||||
|
||||
patches = getAttr ["patches"] [] args;
|
||||
patches = getAttr ["patches"] [] args;
|
||||
|
||||
toPatchCommand = s: "cat ${toString s} | patch ${toString patchFlags}";
|
||||
toPatchCommand = s: "cat ${toString s} | patch ${toString patchFlags}";
|
||||
|
||||
doPatch = FullDepEntry (concatStringsSep ";"
|
||||
(map toPatchCommand patches)
|
||||
) ["minInit" "doUnpack"];
|
||||
doPatch = FullDepEntry (concatStringsSep ";"
|
||||
(map toPatchCommand patches)
|
||||
) ["minInit" "doUnpack"];
|
||||
|
||||
envAdderInner = s: x: if x==null then s else y:
|
||||
a: envAdderInner (s+"echo export ${x}='\"'\"\$${x}:${y}\";'\"'\n") a;
|
||||
envAdderInner = s: x: if x==null then s else y:
|
||||
a: envAdderInner (s+"echo export ${x}='\"'\"\$${x}:${y}\";'\"'\n") a;
|
||||
|
||||
envAdder = envAdderInner "";
|
||||
envAdder = envAdderInner "";
|
||||
|
||||
envAdderList = l: if l==[] then "" else
|
||||
"echo export ${__head l}='\"'\"\\\$${__head l}:${__head (__tail l)}\"'\"';\n" +
|
||||
envAdderList (__tail (__tail l));
|
||||
envAdderList = l: if l==[] then "" else
|
||||
"echo export ${__head l}='\"'\"\\\$${__head l}:${__head (__tail l)}\"'\"';\n" +
|
||||
envAdderList (__tail (__tail l));
|
||||
|
||||
wrapEnv = cmd: env: "
|
||||
mv \"${cmd}\" \"${cmd}-orig\";
|
||||
touch \"${cmd}\";
|
||||
chmod a+rx \"${cmd}\";
|
||||
(${envAdderList env}
|
||||
echo '\"'\"${cmd}-orig\"'\"' '\"'\\\$@'\"' \n) > \"${cmd}\"";
|
||||
wrapEnv = cmd: env: "
|
||||
mv \"${cmd}\" \"${cmd}-orig\";
|
||||
touch \"${cmd}\";
|
||||
chmod a+rx \"${cmd}\";
|
||||
(${envAdderList env}
|
||||
echo '\"'\"${cmd}-orig\"'\"' '\"'\\\$@'\"' \n) > \"${cmd}\"";
|
||||
|
||||
doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) ["minInit"];
|
||||
doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) ["minInit"];
|
||||
|
||||
makeManyWrappers = wildcard : wrapperFlags : FullDepEntry (''
|
||||
for i in ${wildcard}; do
|
||||
wrapProgram "$i" ${wrapperFlags}
|
||||
done
|
||||
'') ["minInit" "addInputs" "defEnsureDir"];
|
||||
makeManyWrappers = wildcard : wrapperFlags : FullDepEntry (''
|
||||
for i in ${wildcard}; do
|
||||
wrapProgram "$i" ${wrapperFlags}
|
||||
done
|
||||
'') ["minInit" "addInputs" "defEnsureDir"];
|
||||
|
||||
wrapBinContentsPython = (makeManyWrappers
|
||||
''$out/bin/*''
|
||||
pythonWrapperArguments
|
||||
);
|
||||
wrapBinContentsPython = (makeManyWrappers
|
||||
''$out/bin/*''
|
||||
pythonWrapperArguments
|
||||
);
|
||||
|
||||
pythonWrapperArguments =
|
||||
(''--prefix PYTHONPATH : $(toPythonPath $out)'' +
|
||||
''''${PYTHONPATH:+ --prefix PYTHONPATH : $PYTHONPATH}'');
|
||||
pythonWrapperArguments =
|
||||
(''--prefix PYTHONPATH : $(toPythonPath $out)'' +
|
||||
''''${PYTHONPATH:+ --prefix PYTHONPATH : $PYTHONPATH}'');
|
||||
|
||||
preservePathWrapperArguments = ''''${PATH:+ --prefix PATH : $PATH }'';
|
||||
preservePathWrapperArguments = ''''${PATH:+ --prefix PATH : $PATH }'';
|
||||
|
||||
doPropagate = FullDepEntry ("
|
||||
ensureDir \$out/nix-support
|
||||
echo '${toString (getAttr ["propagatedBuildInputs"] [] args)}' >\$out/nix-support/propagated-build-inputs
|
||||
") ["minInit" "defEnsureDir"];
|
||||
doPropagate = FullDepEntry ("
|
||||
ensureDir \$out/nix-support
|
||||
echo '${toString (getAttr ["propagatedBuildInputs"] [] args)}' >\$out/nix-support/propagated-build-inputs
|
||||
") ["minInit" "defEnsureDir"];
|
||||
|
||||
/*debug = x:(__trace x x);
|
||||
debugX = x:(__trace (__toXML x) x);*/
|
||||
/*debug = x:(__trace x x);
|
||||
debugX = x:(__trace (__toXML x) x);*/
|
||||
|
||||
replaceScriptVar = file: name: value: ("sed -e 's`^${name}=.*`${name}='\\''${value}'\\''`' -i ${file}");
|
||||
replaceInScript = file: l: (concatStringsSep "\n" ((pairMap (replaceScriptVar file) l)));
|
||||
replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l));
|
||||
doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit];
|
||||
makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n");
|
||||
replaceScriptVar = file: name: value: ("sed -e 's`^${name}=.*`${name}='\\''${value}'\\''`' -i ${file}");
|
||||
replaceInScript = file: l: (concatStringsSep "\n" ((pairMap (replaceScriptVar file) l)));
|
||||
replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l));
|
||||
doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit];
|
||||
makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n");
|
||||
textClosure = a : steps : textClosureMapOveridable makeNest a (["defNest"] ++ steps);
|
||||
|
||||
inherit noDepEntry FullDepEntry PackEntry;
|
||||
inherit noDepEntry FullDepEntry PackEntry;
|
||||
|
||||
defList = (getAttr ["defList"] [] args);
|
||||
getVal = getValue args defList;
|
||||
check = checkFlag args;
|
||||
reqsList = getAttr ["reqsList"] [] args;
|
||||
buildInputsNames = filter (x: (null != getVal x))
|
||||
(uniqList {inputList =
|
||||
(concatLists (map
|
||||
(x:(if (x==[]) then [] else builtins.tail x))
|
||||
reqsList));});
|
||||
configFlags = getAttr ["configFlags"] [] args;
|
||||
buildFlags = getAttr ["buildFlags"] [] args;
|
||||
nameSuffixes = getAttr ["nameSuffixes"] [] args;
|
||||
autoBuildInputs = assert (checkReqs args defList reqsList);
|
||||
filter (x: x!=null) (map getVal buildInputsNames);
|
||||
autoConfigureFlags = condConcat "" configFlags check;
|
||||
autoMakeFlags = condConcat "" buildFlags check;
|
||||
useConfig = getAttr ["useConfig"] false args;
|
||||
buildInputs =
|
||||
lib.closePropagation ((if useConfig then
|
||||
autoBuildInputs else
|
||||
getAttr ["buildInputs"] [] args)++
|
||||
(getAttr ["propagatedBuildInputs"] [] args));
|
||||
configureFlags = if useConfig then autoConfigureFlags else
|
||||
getAttr ["configureFlags"] "" args;
|
||||
makeFlags = if useConfig then autoMakeFlags else getAttr ["makeFlags"] "" args;
|
||||
defList = (getAttr ["defList"] [] args);
|
||||
getVal = getValue args defList;
|
||||
check = checkFlag args;
|
||||
reqsList = getAttr ["reqsList"] [] args;
|
||||
buildInputsNames = filter (x: (null != getVal x))
|
||||
(uniqList {inputList =
|
||||
(concatLists (map
|
||||
(x:(if (x==[]) then [] else builtins.tail x))
|
||||
reqsList));});
|
||||
configFlags = getAttr ["configFlags"] [] args;
|
||||
buildFlags = getAttr ["buildFlags"] [] args;
|
||||
nameSuffixes = getAttr ["nameSuffixes"] [] args;
|
||||
autoBuildInputs = assert (checkReqs args defList reqsList);
|
||||
filter (x: x!=null) (map getVal buildInputsNames);
|
||||
autoConfigureFlags = condConcat "" configFlags check;
|
||||
autoMakeFlags = condConcat "" buildFlags check;
|
||||
useConfig = getAttr ["useConfig"] false args;
|
||||
buildInputs =
|
||||
lib.closePropagation ((if useConfig then
|
||||
autoBuildInputs else
|
||||
getAttr ["buildInputs"] [] args)++
|
||||
(getAttr ["propagatedBuildInputs"] [] args));
|
||||
configureFlags = if useConfig then autoConfigureFlags else
|
||||
getAttr ["configureFlags"] "" args;
|
||||
makeFlags = if useConfig then autoMakeFlags else getAttr ["makeFlags"] "" args;
|
||||
|
||||
inherit lib;
|
||||
inherit lib;
|
||||
|
||||
surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" +
|
||||
x.text + "\n" + after ;};
|
||||
surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" +
|
||||
x.text + "\n" + after ;};
|
||||
|
||||
|
||||
# some haskell stuff - untested!
|
||||
|
@ -439,62 +439,68 @@ args: with args; with stringsWithDeps; with lib;
|
|||
GHC_PACKAGE_PATH=\$PACKAGE_DB ./register.sh
|
||||
" ["defCreateEmptyPackageDatabaseAndSetupHook" "defCabalSetupCmd"];
|
||||
|
||||
realPhaseNames = args.phaseNames ++
|
||||
["doForceShare" "doPropagate" "doForceCopy"]
|
||||
++
|
||||
(optional (getAttr ["alwaysFail"] false args) "doFail")
|
||||
;
|
||||
realPhaseNames = args.phaseNames ++
|
||||
["doForceShare" "doPropagate" "doForceCopy"]
|
||||
++
|
||||
(optional (getAttr ["doCheck"] false args) "doMakeCheck")
|
||||
++
|
||||
(optional (getAttr ["alwaysFail"] false args) "doFail")
|
||||
;
|
||||
|
||||
doFail = noDepEntry "
|
||||
echo 'Failing to keep builddir (and to invalidate result).'
|
||||
a() { return 127; } ; a ;
|
||||
";
|
||||
|
||||
extraDerivationAttrs = lib.getAttr ["extraDerivationAttrs"] {} args;
|
||||
doFail = noDepEntry "
|
||||
echo 'Failing to keep builddir (and to invalidate result).'
|
||||
a() { return 127; } ; a ;
|
||||
";
|
||||
|
||||
builderDefsPackage = bd: func: args: (
|
||||
let localDefs = bd (func ((bd null) // args)) args null; in
|
||||
doMakeCheck = FullDepEntry (''
|
||||
make check
|
||||
'') ["minInit"];
|
||||
|
||||
stdenv.mkDerivation ((rec {
|
||||
inherit (localDefs) name;
|
||||
builder = writeScript (name + "-builder")
|
||||
(textClosure localDefs localDefs.realPhaseNames);
|
||||
meta = localDefs.meta // {inherit src;};
|
||||
}) // (if localDefs ? propagatedBuildInputs then {
|
||||
inherit (localDefs) propagatedBuildInputs;
|
||||
} else {}) // extraDerivationAttrs)
|
||||
);
|
||||
extraDerivationAttrs = lib.getAttr ["extraDerivationAttrs"] {} args;
|
||||
|
||||
builderDefsPackage = bd: func: args: (
|
||||
let localDefs = bd (func ((bd null) // args)) args null; in
|
||||
|
||||
stdenv.mkDerivation ((rec {
|
||||
inherit (localDefs) name;
|
||||
builder = writeScript (name + "-builder")
|
||||
(textClosure localDefs localDefs.realPhaseNames);
|
||||
meta = localDefs.meta // {inherit src;};
|
||||
}) // (if localDefs ? propagatedBuildInputs then {
|
||||
inherit (localDefs) propagatedBuildInputs;
|
||||
} else {}) // extraDerivationAttrs)
|
||||
);
|
||||
|
||||
generateFontsFromSFD = noDepEntry(''
|
||||
for i in *.sfd; do
|
||||
${args.fontforge}/bin/fontforge -c \
|
||||
'Open($1);
|
||||
${optionalString (args ? extraFontForgeCommands) args.extraFontForgeCommands
|
||||
}Reencode("unicode");
|
||||
${optionalString (getAttr ["createTTF"] true args) ''Generate($1:r + ".ttf");''}
|
||||
${optionalString (getAttr ["createOTF"] true args) ''Generate($1:r + ".otf");''}
|
||||
Reencode("TeX-Base-Encoding");
|
||||
${optionalString (getAttr ["createAFM"] true args) ''Generate($1:r + ".afm");''}
|
||||
${optionalString (getAttr ["createPFM"] true args) ''Generate($1:r + ".pfm");''}
|
||||
${optionalString (getAttr ["createPFB"] true args) ''Generate($1:r + ".pfb");''}
|
||||
${optionalString (getAttr ["createMAP"] true args) ''Generate($1:r + ".map");''}
|
||||
${optionalString (getAttr ["createENC"] true args) ''Generate($1:r + ".enc");''}
|
||||
' $i;
|
||||
done
|
||||
for i in *.sfd; do
|
||||
${args.fontforge}/bin/fontforge -c \
|
||||
'Open($1);
|
||||
${optionalString (args ? extraFontForgeCommands) args.extraFontForgeCommands
|
||||
}Reencode("unicode");
|
||||
${optionalString (getAttr ["createTTF"] true args) ''Generate($1:r + ".ttf");''}
|
||||
${optionalString (getAttr ["createOTF"] true args) ''Generate($1:r + ".otf");''}
|
||||
Reencode("TeX-Base-Encoding");
|
||||
${optionalString (getAttr ["createAFM"] true args) ''Generate($1:r + ".afm");''}
|
||||
${optionalString (getAttr ["createPFM"] true args) ''Generate($1:r + ".pfm");''}
|
||||
${optionalString (getAttr ["createPFB"] true args) ''Generate($1:r + ".pfb");''}
|
||||
${optionalString (getAttr ["createMAP"] true args) ''Generate($1:r + ".map");''}
|
||||
${optionalString (getAttr ["createENC"] true args) ''Generate($1:r + ".enc");''}
|
||||
' $i;
|
||||
done
|
||||
'');
|
||||
|
||||
installFonts = FullDepEntry (''
|
||||
ensureDir $out/share/fonts/truetype/public/${args.name}
|
||||
ensureDir $out/share/fonts/opentype/public/${args.name}
|
||||
ensureDir $out/share/fonts/type1/public/${args.name}
|
||||
ensureDir $out/share/texmf/fonts/enc/${args.name}
|
||||
ensureDir $out/share/texmf/fonts/map/${args.name}
|
||||
ensureDir $out/share/fonts/truetype/public/${args.name}
|
||||
ensureDir $out/share/fonts/opentype/public/${args.name}
|
||||
ensureDir $out/share/fonts/type1/public/${args.name}
|
||||
ensureDir $out/share/texmf/fonts/enc/${args.name}
|
||||
ensureDir $out/share/texmf/fonts/map/${args.name}
|
||||
|
||||
cp *.ttf $out/share/fonts/truetype/public/${args.name} || echo No TrueType fonts
|
||||
cp *.otf $out/share/fonts/opentype/public/${args.name} || echo No OpenType fonts
|
||||
cp *.{pfm,afm,pfb} $out/share/fonts/type1/public/${args.name} || echo No Type1 Fonts
|
||||
cp *.enc $out/share/texmf/fonts/enc/${args.name} || echo No fontenc data
|
||||
cp *.map $out/share/texmf/fonts/map/${args.name} || echo No fontmap data
|
||||
cp *.ttf $out/share/fonts/truetype/public/${args.name} || echo No TrueType fonts
|
||||
cp *.otf $out/share/fonts/opentype/public/${args.name} || echo No OpenType fonts
|
||||
cp *.{pfm,afm,pfb} $out/share/fonts/type1/public/${args.name} || echo No Type1 Fonts
|
||||
cp *.enc $out/share/texmf/fonts/enc/${args.name} || echo No fontenc data
|
||||
cp *.map $out/share/texmf/fonts/map/${args.name} || echo No fontmap data
|
||||
'') ["minInit" "defEnsureDir"];
|
||||
|
||||
simplyShare = shareName: FullDepEntry (''
|
||||
|
|
Loading…
Reference in a new issue