Browse Source

Fix #4210: Remove builderDefs

This was one of the ways to build packages, we are trying
hard to minimize different ways so it's easier for newcomers
to learn only one way.

This also:

- removes texLive (old), fixes #14807
- removed upstream-updater, if that code is still used it should be in
  separate repo
- changes a few packages like gitit/mit-scheme to use new texlive
nixos-19.03
Domen Kožar 6 years ago
parent
commit
da421bc75f
  1. 14
      doc/old/update-upstream-data.txt
  2. 2
      nixos/modules/services/misc/gitit.nix
  3. 607
      pkgs/build-support/builder-defs/builder-defs.nix
  4. 48
      pkgs/build-support/builder-defs/template-auto-callable.nix
  5. 26
      pkgs/build-support/builder-defs/template-bdp-uud.nix
  6. 22
      pkgs/build-support/builder-defs/template-composing+config.nix
  7. 26
      pkgs/build-support/builder-defs/template-composing-builder.nix
  8. 21
      pkgs/build-support/upstream-updater/attrset-to-dir.sh
  9. 49
      pkgs/development/interpreters/octave/hg.nix
  10. 87
      pkgs/tools/typesetting/tex/texlive/aggregate.nix
  11. 25
      pkgs/tools/typesetting/tex/texlive/beamer.nix
  12. 35
      pkgs/tools/typesetting/tex/texlive/cm-super.nix
  13. 25
      pkgs/tools/typesetting/tex/texlive/context.nix
  14. 161
      pkgs/tools/typesetting/tex/texlive/default.nix
  15. 26
      pkgs/tools/typesetting/tex/texlive/extra.nix
  16. 24
      pkgs/tools/typesetting/tex/texlive/moderncv.nix
  17. 24
      pkgs/tools/typesetting/tex/texlive/moderntimeline.nix
  18. 7
      pkgs/tools/typesetting/tex/texlive/setup-hook.sh
  19. 37
      pkgs/tools/typesetting/tex/texlive/xcolor.nix
  20. 60
      pkgs/top-level/all-packages.nix
  21. 3
      pkgs/top-level/release-small.nix

14
doc/old/update-upstream-data.txt

@ -1,14 +0,0 @@
Semi-automatic source information updating using "update-upstream-data.sh" script and "src-{,info-}for-*.nix"
1. Recognizing when a pre-existing package uses this mechanism.
Packages using this automatical update mechanism have src-info-for-default.nix and src-for-default.nix next to default.nix. src-info-for-default.nix describes getting the freshest source from upstream web site; src-for-default.nix is a generated file with the current data about used source. Both files define a simple attrSet.
src-info-for-default.nix (for a file grabbed via http) contains at least downloadPage attribute - it is the page we need to look at to find out the latest version. It also contains baseName that is used for automatical generation of package name containing version. It can contain extra data for trickier cases.
src-for-default.nix will contain advertisedUrl (raw URL chosen on the site; its change prompts regeneration of source data), url for fetchurl, hash, version retrieved from the download URL and suggested package name.
2. Updating a package
nixpkgs/pkgs/build-support/upstream-updater directory contains some scripts. The worker script is called update-upstream-data.sh. This script requires main expression name (e.g. default.nix). It can optionally accpet a second parameter, URL which will be used instead of getting one by parsing the downloadPage (version extraction, mirror URL creation etc. will still be run). After running the script, check src-for-default.nix (or replace default.nix with expression name, if there are seceral expressions in the directory) for new version information.

2
nixos/modules/services/misc/gitit.nix

@ -663,7 +663,7 @@ in
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ curl ]
++ optional cfg.pdfExport texLiveFull
++ optional cfg.pdfExport texlive.combined.scheme-basic
++ optional (cfg.repositoryType == "darcs") darcs
++ optional (cfg.repositoryType == "mercurial") mercurial
++ optional (cfg.repositoryType == "git") git;

607
pkgs/build-support/builder-defs/builder-defs.nix

@ -1,607 +0,0 @@
args @ {stringsWithDeps, lib, stdenv, writeScript, fetchurl, fetchmtn, fetchgit, ...}: with args; with stringsWithDeps; with lib;
let inherit (builtins) head tail trace; in
(rec
{
inherit writeScript;
src = attrByPath ["src"] "" args;
addSbinPath = attrByPath ["addSbinPath"] false args;
forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"];
forceCopy = ["COPYING" "LICENSE" "DISTRIBUTION" "LEGAL"
"README" "AUTHORS" "ChangeLog" "CHANGES" "LICENCE" "COPYRIGHT"] ++
(optional (attrByPath ["forceCopyDoc"] true args) "doc");
hasSuffixHack = a: b: hasSuffix (a+(substring 0 0 b)) ((substring 0 0 a)+b);
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) ||
(hasSuffixHack ".tbz" s) then "tbz2"
else if hasSuffixHack ".tar.Z" s then "tZ"
else if hasSuffixHack ".tar.lzma" s then "tar.lzma"
else if hasSuffixHack ".tar.xz" s then "tar.xz"
else if hasSuffixHack ".rar" s then "rar"
else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip"
else if hasSuffixHack "-cvs-export" s then "cvs-dir"
else if hasSuffixHack "-git-export" s then "git-dir"
else if hasSuffixHack ".nar.bz2" s then "narbz2"
else if hasSuffixHack ".rpm" s then "rpm"
# 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"
else if hasSuffixHack ".gz" s then "plain-gz"
# For bootstrap calls
else if (s ==("" + (substring 0 0 s))) then "empty"
else (abort "unknown archive type : ${s}"));
# changing this ? see [1]
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"];
# changing this ? see [1]
defNest = noDepEntry ("
nestingLevel=0
startNest() {
nestingLevel=\$((\$nestingLevel + 1))
echo -en \"\\e[\$1p\"
}
stopNest() {
nestingLevel=\$((\$nestingLevel - 1))
echo -en \"\\e[q\"
}
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
}
trap \"closeNest\" EXIT
");
# changing this ? see [1]
minInit = fullDepEntry ("
${stdenv.preHook}
set -e
NIX_CC=${stdenv.cc}
export SHELL=${stdenv.shell}
PATH_DELIMITER=':'
# Set up the initial path.
PATH=
for i in \$NIX_CC ${toString stdenv.initialPath}; do
PATH=\$PATH\${PATH:+\"\${PATH_DELIMITER}\"}\$i/bin
done
export TZ=UTC
prefix=${if args ? prefix then (toString args.prefix) else "\$out"}
") ["defNest" "defAddToSearchPath"];
# if you change this rewrite using '' instead of "" to get rid of indentation in builder scripts
addInputs = fullDepEntry ("
# Recursively find all build inputs.
findInputs()
{
local pkg=\$1
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
}
pkgs=\"\"
for i in \$NIX_CC ${toString realBuildInputs}; 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
for i in \"\${envHooks[@]}\"; do
\$i \$pkg
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
PATH=\$_PATH\${_PATH:+\"\${PATH_DELIMITER}\"}\$PATH
") ["minInit"];
# changing this ? see [1]
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"];
# changing this ? see [1]
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) == "tZ" then "
uncompress < '${s}' | tar x
cd \"\$(uncompress < '${s}' | tar t | 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) == "tar.xz" then "
xz -d -c <'${s}' | tar xv
cd \"\$(xz -d -c <'${s}' | tar t | head -1 | sed -e 's@/.*@@' )\"
" else if (archiveType s) == "rar" then "
unrar x '${s}'
cd \"$(unrar lb '${s}' | tail -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) == "git-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) == "rpm" then ''
rpm2cpio ${s} > ${s}.cpio
cpio -iv < ${s}.cpio
test -f *.tar.* && tar -xvf *.tar.*
test -d */ && cd */
'' 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 if (archiveType s) == "plain-gz" then "
mkdir \$PWD/\$(basename ${s} .gz)
NAME=\$(basename ${s} .gz)
gzip -d <${s} > \$PWD/\$(basename ${s} .gz)/\${NAME#*-}
cd \$(basename ${s} .gz)
" else if (archiveType s) == "empty" then "
echo No source to unpack - doing nothing ..
" 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"];
configureCommand = attrByPath ["configureCommand"] "./configure" args;
# changing this ? see [1]
doConfigure = fullDepEntry ("
${configureCommand} --prefix=\"\$prefix\" ${toString configureFlags}
") ["minInit" "addInputs" "doUnpack"];
# changing this ? see [1]
doIntltool = fullDepEntry ("
mkdir -p config
intltoolize --copy --force
") ["minInit" "addInputs" "doUnpack"];
# changing this ? see [1]
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"];
# changing this ? see [1]
doAutogen = fullDepEntry (''
./autogen.sh
'')["minInit" "addInputs" "doUnpack"];
# changing this ? see [1]
doMake = fullDepEntry ("
make ${toString makeFlags}
") ["minInit" "addInputs" "doUnpack"];
doUnpack = toSrcDir (toString src);
# changing this ? see [1]
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"];
# changing this ? see [1]
doMakeInstall = fullDepEntry ("
make ${toString (attrByPath ["makeFlags"] "" args)} "+
"${toString (attrByPath ["installFlags"] "" args)} install") ["doMake"];
# changing this ? see [1]
doForceShare = fullDepEntry ("
mkdir -p \"\$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#*-}"
mkdir -p "$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";
saveEnv = noDepEntry ''export > "$TMP/env-vars" || true'';
doDumpBuildInputs = noDepEntry (''
echo "${toString realBuildInputs}"
'');
patchFlags = if args ? patchFlags then args.patchFlags else "-p1";
patches = attrByPath ["patches"] [] args;
toPatchCommand = s: "cat ${s} | patch ${toString patchFlags}";
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;
envAdder = envAdderInner "";
envAdderList = l: if l==[] then "" else
"echo export ${head l}='\"'\"\\\$${head l}:${head (tail l)}\"'\"';\n" +
envAdderList (tail (tail l));
# changing this ? see [1]
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 (attrByPath ["wrappedEnv"] [] args)) ["minInit"];
makeManyWrappers = wildcard : wrapperFlags : fullDepEntry (''
for i in ${wildcard}; do
wrapProgram "$i" ${wrapperFlags}
done
'') ["minInit" "addInputs" "defEnsureDir"];
wrapBinContentsPython = (makeManyWrappers
''$out/bin/*''
pythonWrapperArguments
);
pythonWrapperArguments =
(''--prefix PYTHONPATH : $(toPythonPath $out)'' +
''''${PYTHONPATH:+ --prefix PYTHONPATH : $PYTHONPATH}'');
preservePathWrapperArguments = ''''${PATH:+ --prefix PATH : $PATH }'';
doPropagate = fullDepEntry ("
mkdir -p \$out/nix-support
echo '${toString (attrByPath ["propagatedBuildInputs"] [] args)}' >\$out/nix-support/propagated-build-inputs
") ["minInit" "defEnsureDir"];
cmakeFlags = attrByPath ["cmakeFlags"] [] args;
cmakeRPathFlag = if attrByPath ["cmakeSkipRpath "] true args then " -DCMAKE_SKIP_BUILD_RPATH=ON " else "";
cmakeBuildDir = attrByPath ["cmakeBuildDir"] "build" args;
doCmake = fullDepEntry (''
mkdir ${cmakeBuildDir}
cd ${cmakeBuildDir}
cmake -D CMAKE_INSTALL_PREFIX="$out" ${cmakeRPathFlag}${toString cmakeFlags} ..
'') ["minInit" "addInputs" "doUnpack"];
doScons = fullDepEntry (''
mkdir -p $out
${if (attrByPath ["sconsCleanEnv"] false args)
then ""
else ''
sed -e '1iimport os' -i SConstruct
sed -e 's/env *= *Environment *.*/&; env['"'"'ENV'"'"']=os.environ;/' -i SConstruct
''
}
scons ${toString (attrByPath ["sconsFlags"] [] args)} PREFIX=$out
scons ${toString (attrByPath ["sconsFlags"] [] args)} PREFIX=$out install
'') ["minInit" "doUnpack" "addInputs" "defEnsureDir"];
/*debug = x:(trace x x);
debugX = x:(trace (toXML x) x);*/
makeNest = x: if x == defNest.text then x else "startNest\n" + x + "\nstopNest\n";
textClosure = a: steps: textClosureMap makeNest a (["defNest"] ++ steps);
inherit noDepEntry fullDepEntry packEntry;
defList = attrByPath ["defList"] [] args;
getVal = getValue args defList;
check = checkFlag args;
reqsList = attrByPath ["reqsList"] [] args;
buildInputsNames = filter (x: null != getVal x)
(uniqList {inputList =
(concatLists (map
(x: if x==[] then [] else builtins.tail x)
reqsList));});
configFlags = attrByPath ["configFlags"] [] args;
buildFlags = attrByPath ["buildFlags"] [] args;
nameSuffixes = attrByPath ["nameSuffixes"] [] args;
autoBuildInputs = assert (checkReqs args defList reqsList);
filter (x: x!=null) (map getVal buildInputsNames);
autoConfigureFlags = condConcat "" configFlags check;
autoMakeFlags = condConcat "" buildFlags check;
useConfig = attrByPath ["useConfig"] false args;
realBuildInputs =
lib.closePropagation ((if useConfig then
autoBuildInputs else
attrByPath ["buildInputs"] [] args)++
(attrByPath ["propagatedBuildInputs"] [] args));
configureFlags = if useConfig then autoConfigureFlags else
attrByPath ["configureFlags"] "" args;
makeFlags = if useConfig then autoMakeFlags else attrByPath ["makeFlags"] "" args;
inherit lib;
surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" +
x.text + "\n" + after ;};
createDirs = fullDepEntry (concatStringsSep ";"
(map (x: "mkdir -p ${x}") (attrByPath ["neededDirs"] [] args))
) ["minInit" "defEnsureDir"];
copyExtraDoc = fullDepEntry (''
name="$(basename $out)"
name="''${name#*-}"
mkdir -p "$out/share/doc/$name"
'' + (concatStringsSep ";"
(map
(x: ''cp "${x}" "$out/share/doc/$name" || true;'')
(attrByPath ["extraDoc"] [] args)))) ["minInit" "defEnsureDir" "doUnpack"];
realPhaseNames =
(optional ([] != attrByPath ["neededDirs"] [] args) "createDirs")
++
(attrByPath ["phaseNames"] [] args)
++
["doForceShare" "doPropagate" "doForceCopy"]
++
(optional ([] != attrByPath ["extraDoc"] [] args) "copyExtraDoc")
++
(optional (attrByPath ["doCheck"] false args) "doMakeCheck")
++
(optional (attrByPath ["alwaysFail"] false args) "doFail")
;
doFail = noDepEntry "
echo 'Failing to keep builddir (and to invalidate result).'
a() { return 127; } ; a ;
";
doMakeCheck = fullDepEntry (''
make check
'') ["minInit"];
extraDerivationAttrs = lib.attrByPath ["extraDerivationAttrs"] {} args;
# for overrides..
builderDefsArgs = args;
innerBuilderDefsPackage = bd: args: (
let localDefs = bd.passthru.function args; in
stdenv.mkDerivation ((rec {
inherit (localDefs) name;
buildCommand = textClosure localDefs localDefs.realPhaseNames;
meta = localDefs.meta;
passthru = localDefs.passthru // {inherit (localDefs) src; };
}) // (if localDefs ? propagatedBuildInputs then {
inherit (localDefs) propagatedBuildInputs;
} else {}) // extraDerivationAttrs)
);
builderDefsPackage = bd: func:
if builtins.isFunction func then
(foldArgs
(x: y: ((func (bd // x // y)) // y))
(innerBuilderDefsPackage bd)
{})
else
(builderDefsPackage bd (import (toString func)))
;
generateFontsFromSFD = fullDepEntry (''
for i in *.sfd; do
echo $i;
fontforge -c \
'Open($1);
${optionalString (args ? extraFontForgeCommands) args.extraFontForgeCommands
}Reencode("unicode");
${optionalString (attrByPath ["createTTF"] true args) ''Generate($1:r + ".ttf");''}
${optionalString (attrByPath ["createOTF"] true args) ''Generate($1:r + ".otf");''}
Reencode("TeX-Base-Encoding");
${optionalString (attrByPath ["createAFM"] true args) ''Generate($1:r + ".afm");''}
${optionalString (attrByPath ["createPFM"] true args) ''Generate($1:r + ".pfm");''}
${optionalString (attrByPath ["createPFB"] true args) ''Generate($1:r + ".pfb");''}
${optionalString (attrByPath ["createMAP"] true args) ''Generate($1:r + ".map");''}
${optionalString (attrByPath ["createENC"] true args) ''Generate($1:r + ".enc");''}
' $i;
done
'') ["minInit" "addInputs" "doUnpack"];
installFonts =
let retrievedName = (if args ? name then args.name else ""); in
fullDepEntry (''
mkdir -p $out/share/fonts/truetype/public/${retrievedName}
mkdir -p $out/share/fonts/opentype/public/${retrievedName}
mkdir -p $out/share/fonts/type1/public/${retrievedName}
mkdir -p $out/share/texmf/fonts/enc/${retrievedName}
mkdir -p $out/share/texmf/fonts/map/${retrievedName}
find -name '*.ttf' -exec cp {} $out/share/fonts/truetype/public/${retrievedName} \;
find -name '*.otf' -exec cp {} $out/share/fonts/opentype/public/${retrievedName} \;
find -name '*.pfm' -o -name '*.afm' -o -name '*.pfb' -exec cp {} $out/share/fonts/type1/public/${retrievedName} \;
find -name '*.enc' -exec cp {} $out/share/texmf/fonts/enc/${retrievedName} \;
find -name '*.map' -exec cp {} $out/share/texmf/fonts/map/${retrievedName} \;
'') ["minInit" "defEnsureDir"];
simplyShare = shareName: fullDepEntry (''
mkdir -p $out/share
cp -r . $out/share/${shareName}
'') ["doUnpack" "defEnsureDir"];
doPatchShebangs = dir: fullDepEntry (''
patchShebangFun() {
# Rewrite all script interpreter file names (`#! /path') under the
# specified directory tree to paths found in $PATH. E.g.,
# /bin/sh will be rewritten to /nix/store/<hash>-some-bash/bin/sh.
# Interpreters that are already in the store are left untouched.
echo "patching script interpreter paths"
local f
for f in $(find "${dir}" -xtype f -perm -0100); do
local oldPath=$(sed -ne '1 s,^#![ ]*\([^ ]*\).*$,\1,p' "$f")
if test -n "$oldPath" -a "''${oldPath:0:''${#NIX_STORE}}" != "$NIX_STORE"; then
local newPath=$(type -P $(basename $oldPath) || true)
if test -n "$newPath" -a "$newPath" != "$oldPath"; then
echo "$f: interpreter changed from $oldPath to $newPath"
sed -i "1 s,$oldPath,$newPath," "$f"
else
echo "$f: not changing interpreter from $oldPath"
fi
fi
done
}
patchShebangFun;
'') ["minInit"];
createPythonInstallationTarget = fullDepEntry (''
mkdir -p $(toPythonPath $out)
export PYTHONPATH=$PYTHONPATH''${PYTHONPATH:+:}$(toPythonPath $out)
'') ["minInit" "addInputs" "defEnsureDir"];
fetchUrlFromSrcInfo = srcInfo: fetchurl ({
url = srcInfo.url;
sha256 = srcInfo.hash;
} //
(if srcInfo ? downloadName then {name = srcInfo.downloadName;} else {}));
fetchGitFromSrcInfo = srcInfo: fetchgit {
url = srcInfo.url;
rev = srcInfo.rev;
sha256 = srcInfo.hash;
};
}) // args
# [1]: rewrite using '' instead of " so that indentation gets stripped. It's
# only about some spaces but in the end they will sum up

48
pkgs/build-support/builder-defs/template-auto-callable.nix

@ -1,48 +0,0 @@
x@{builderDefsPackage
(abort "Specify dependencies")
, ...}:
builderDefsPackage
(a :
let
helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++
[(abort "Specify helper argument names")];
buildInputs = map (n: builtins.getAttr n x)
(builtins.attrNames (builtins.removeAttrs x helperArgNames));
sourceInfo = rec {
baseName="${abort ''Specify package name''}";
version="";
name="${baseName}-${version}";
url="${name}";
hash="";
};
in
rec {
src = a.fetchurl {
url = sourceInfo.url;
sha256 = sourceInfo.hash;
};
inherit (sourceInfo) name version;
inherit buildInputs;
/* doConfigure should be removed if not needed */
phaseNames = ["doConfigure" "doMakeInstall"];
meta = {
description = "${abort ''Specify description''}";
maintainers = with a.lib.maintainers;
[
(abort "Specify maintainers")
];
platforms = with a.lib.platforms;
(abort "Specify platforms");
license = a.lib.licenses.(abort "Specify license");
};
passthru = {
updateInfo = {
downloadPage = "${abort ''Specify download page''}";
};
};
}) x

26
pkgs/build-support/builder-defs/template-bdp-uud.nix

@ -1,26 +0,0 @@
a :
let
s = import ./src-for-default.nix;
buildInputs = with a; [
];
in
rec {
src = a.fetchUrlFromSrcInfo s;
inherit (s) name;
inherit buildInputs;
configureFlags = [];
/* doConfigure should be removed if not needed */
phaseNames = ["doConfigure" "doMakeInstall"];
meta = {
description = "${abort "Specify description"}";
maintainers = [
a.lib.maintainers.(abort "Specify maintainer")
];
platforms = with a.lib.platforms;
(abort "Specify supported platforms");
};
}

22
pkgs/build-support/builder-defs/template-composing+config.nix

@ -1,22 +0,0 @@
args : with args; let localDefs = builderDefs (args // rec {
src = /* put a fetchurl here */
(abort "Specify source");
useConfig = true;
reqsList = [
["true" ]
["false"]
];
/* List consisiting of an even number of strings; "key" "value" */
configFlags = [
];
}) args null; /* null is a terminator for sumArgs */
in with localDefs;
stdenv.mkDerivation rec {
name = "${(abort "Specify name")}"+version;
builder = writeScript (name + "-builder")
(textClosure localDefs [(abort "Check phases") doMakeInstall doForceShare doPropagate]);
meta = {
description = "${(abort "Specify description")}";
inherit src;
};
}

26
pkgs/build-support/builder-defs/template-composing-builder.nix

@ -1,26 +0,0 @@
a :
let
fetchurl = a.fetchurl;
version = a.lib.attrByPath ["version"] "" a;
buildInputs = with a; [
];
in
rec {
src = /* Here a fetchurl expression goes */;
inherit buildInputs;
configureFlags = [];
/* doConfigure should be removed if not needed */
phaseNames = ["doConfigure" "doMakeInstall"];
name = "${abort "Specify name"}-" + version;
meta = {
description = "${abort "Specify description"}";
maintainers = [
a.lib.maintainers.(abort "Specify maintainer")
];
};
}

21
pkgs/build-support/upstream-updater/attrset-to-dir.sh

@ -1,21 +0,0 @@
#! /bin/sh
[ -n "$2" ] && NIXPKGS_ALL="$2";
[ -z "$NIXPKGS_ALL" ] && [ -d "/etc/nixos/nixpkgs" ] && NIXPKGS_ALL="/etc/nixos/nixpkgs";
[ -z "$NIXPKGS_ALL" ] && [ -d "$HOME/nixpkgs" ] && NIXPKGS_ALL="$HOME/nixpkgs";
[ -z "$NIXPKGS_ALL" ] && {
echo "Cannot find Nixpkgs source. Please specify it via NIXPKGS_ALL or second command line argument"
exit 1
};
derivation="$(nix-instantiate --show-trace - << EOF
let
pkgs = import "${NIXPKGS_ALL}" {};
attrSet = import "${1}";
in
pkgs.attrSetToDir attrSet
EOF
)"
echo "Derivation is: $derivation" >&2
output="$(nix-store -r "$derivation")"
echo "$output/attributes"

49
pkgs/development/interpreters/octave/hg.nix

@ -1,49 +0,0 @@
{stdenv, fetchurl, gfortran, readline, ncurses, perl, flex,
bison, autoconf, automake, sourceFromHead, config, lib, atlas, gperf, python, glibc, gnuplot, texinfo, texLive, qhull, libX11}:
let commonBuildInputs = [gfortran readline ncurses perl glibc qhull libX11 texinfo]; in
stdenv.mkDerivation ({
NIX_LDFLAGS = "-lpthread";
configureFlags = "--enable-readline --enable-dl";
meta = {
description = "High-level interactive language for numerical computations";
homepage = http://www.octave.org;
license = stdenv.lib.licenses.gpl3;
};
} // (
if config.octave.devVersion or false then {
name = "octave-hg"; # developement version mercurial repo
# REGION AUTO UPDATE: { name="octave"; type = "hg"; url = "http://www.octave.org/hg/octave"; }
src = sourceFromHead "octave-03b414516dd8.tar.gz"
(fetchurl { url = "http://mawercer.de/~nix/repos/octave-03b414516dd8.tar.gz"; sha256 = "30877f1e2ff1a456e7a76153aabf7c59ce7c7a8b63eda0515b1eead6a4351ce7"; });
# END
# HOME is set to $TMP because octave needs to access ${HOME}/.octave_hist while running targets
# in doc/interpreter.. Maybe this can be done better. This hack is fastest :)
preConfigure = ''
# glob is contained in glibc! Don't know why autotools want to use -lglob
sed -i 's/-lglob//' configure.in
./autogen.sh
export HOME=$TMP
'';
buildInputs = commonBuildInputs ++ [ flex bison autoconf automake gperf gnuplot texLive ]
++ lib.optionals (config.octave.atlas or true) [ python atlas ];
# it does build, but documentation doesn't.. So just remove that directory
# from the buildfile
buildPhase = ''
sed -i octMakefile \
-e 's/^\(INSTALL_SUBDIRS = .*\)doc \(.*\)$/\1 \2/' \
-e 's/^\(SUBDIRS = .*\)doc \(.*\)$/\1 \2/' \
-e 's/\$(MAKE) -C doc/#/'
make
'';
} else {
name = "octave-3.1.55";
src = fetchurl {
url = ftp://ftp.octave.org/pub/octave/bleeding-edge/octave-3.1.55.tar.bz2;
sha256 = "1lm4v85kdic4n5yxwzrdb0v6dc6nw06ljgx1q8hfkmi146kpg7s6";
};
buildInputs = commonBuildInputs ++ [ flex bison autoconf automake python ]
++ lib.optionals (config.octave.atlas or true) [ python atlas ];
}
))

87
pkgs/tools/typesetting/tex/texlive/aggregate.nix

@ -1,87 +0,0 @@
args @ {poppler, perl, makeWrapper, ... }: with args;
rec {
name = "TeXLive-linkdir";
buildInputs = lib.closePropagation paths
++ [perl]
++ stdenv.lib.optional stdenv.isDarwin makeWrapper;
phaseNames = [ "doAggregate" ];
doAggregate = fullDepEntry (''
set +o pipefail
mkdir -p $out/bin
for currentPath in ${lib.concatStringsSep " " buildInputs}; do
echo Symlinking "$currentPath"
find $currentPath/share/info $currentPath/share/man $(echo $currentPath/texmf*/) -type d | while read; do
REPLY="''${REPLY#$currentPath}"
mkdir -p $out/"$REPLY"
done
find $currentPath/share/info $currentPath/share/man $(echo $currentPath/texmf*/) ! -type d | while read; do
REPLY="''${REPLY#$currentPath}"
ln -fs $currentPath/"$REPLY" $out/"$REPLY"
echo
done | while read; do head -n 999 >/dev/null; echo -n .; done
for i in "$currentPath/bin/"* :; do
test "$i" != : || continue
echo -ne "#! $SHELL\\nexec $i \"\$@\"" > "$out/bin/$(basename "$i")" && \
chmod a+x "$out/bin/$(basename "$i")"
done
echo
cp -Trfp $currentPath/libexec $out/libexec || true
done
ln -s $out/texmf* $out/share/
rm -rf $out/texmf-config
find $out/texmf*/ -type d | while read; do
REPLY="''${REPLY#$out/texmf}"
mkdir -p $out/texmf-config/"$REPLY"
done
for i in $out/libexec/*/* :; do
test "$i" = : && continue;
test -f "$i" && \
test -x "$i" && \
echo -ne "#! $SHELL\\nexec $i \"\$@\"" >$out/bin/$(basename $i) && \
chmod a+x $out/bin/$(basename $i)
done
rm -f $out/texmf*/ls-R
for i in web2c texconfig fonts/map; do
mkdir -p $out/texmf-config/$i
cp -Lr $out/texmf*/$i/* $out/texmf-config/$i || true
done
chmod -R u+w $out/texmf-config
yes | TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
yes | PATH=$PATH:$out/bin mktexlsr $out/texmf*
yes | TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
yes | PATH=$PATH:$out/bin mktexlsr $out/texmf*
'' + stdenv.lib.optionalString stdenv.isDarwin ''
# did the same thing in texLive, but couldn't get it to carry to the
# binaries installed by texLiveFull
for prog in $out/bin/*; do
wrapProgram "$prog" --prefix DYLD_LIBRARY_PATH : "${poppler.out}/lib"
done
'' ) [ "minInit" "defEnsureDir" "addInputs" ];
preferLocalBuild = true;
meta = {
description = "TeX distribution directory";
longDescription = ''
Here all the files from different TeX-related
packages are collected in one directory. Of
course, mktexlsr is called. Later placed
directories take precedence. It is supposed that
share and libexec are symlinked, and bin is
recreated with wrappers for libexec-located
linked binaries.
'';
};
}

25
pkgs/tools/typesetting/tex/texlive/beamer.nix

@ -1,25 +0,0 @@
args @ {texLiveLatexXColor, texLivePGF, texLive, ...}: with args;
rec {
name = "texlive-beamer-2013";
src = fetchurl {
url = mirror://debian/pool/main/l/latex-beamer/latex-beamer_3.24.orig.tar.gz;
sha256 = "0rzjlbs67kzmvlh7lwga4yxgddvrvfkkhhx1ajdn4lqy2w9zxiv8";
};
buildInputs = [texLive];
propagatedBuildInputs = [texLiveLatexXColor texLivePGF];
phaseNames = ["doCopy"];
doCopy = fullDepEntry (''
mkdir -p $out/share/
mkdir -p $out/texmf-dist/tex/latex/beamer
cp -r * $out/texmf-dist/tex/latex/beamer
ln -s $out/texmf* $out/share/
'') ["minInit" "doUnpack" "defEnsureDir" "addInputs"];
meta = {
description = "Extra components for TeXLive: beamer class";
maintainers = [ stdenv.lib.maintainers.mornfall stdenv.lib.maintainers.jwiegley ];
};
}

35
pkgs/tools/typesetting/tex/texlive/cm-super.nix

@ -1,35 +0,0 @@
args @ {texLive, ...}: with args;
rec {
name = "texlive-cm-super-2009";
src = fetchurl {
url = mirror://debian/pool/main/c/cm-super/cm-super_0.3.4.orig.tar.gz;
sha256 = "0zrq4sr9ank35svkz3cfd7f978i9c8xbzdqm2c8kvxia2753v082";
};
phaseNames = ["doCopy"];
doCopy = fullDepEntry (''
mkdir -p $out/share/
mkdir -p $out/texmf-dist/fonts/enc
mkdir -p $out/texmf-dist/fonts/map
mkdir -p $out/texmf-dist/fonts/type1/public/cm-super
cp pfb/*.pfb $out/texmf-dist/fonts/type1/public/cm-super
mkdir -p $out/texmf-dist/dvips/cm-super
cp dvips/*.{map,enc} $out/texmf-dist/dvips/cm-super
cp dvips/*.enc $out/texmf-dist/fonts/enc
cp dvips/*.map $out/texmf-dist/fonts/map
mkdir -p $out/texmf-dist/dvipdfm/config
cp dvipdfm/*.map $out/texmf-dist/dvipdfm/config
ln -s $out/texmf* $out/share/
'') ["minInit" "doUnpack" "defEnsureDir" "addInputs"];
buildInputs = [texLive];
meta = {
description = "Extra components for TeXLive: CM-Super fonts";
maintainers = [ args.lib.maintainers.raskin ];
# Actually, arch-independent..
hydraPlatforms = [];
};
}

25
pkgs/tools/typesetting/tex/texlive/context.nix

@ -1,25 +0,0 @@
args @ { texLive, ... }: with args;
rec {
name = "context-2014.05.21";
src = fetchurl {
url = mirror://debian/pool/main/c/context/context_2014.05.21.20140528.orig.tar.gz;
sha256 = "1d744xrsjyl52x2xbh87k5ad826mzz8yqmhdznrmqrhk3qpjkzic";
};
buildInputs = [texLive];
phaseNames = ["doCopy"];
doCopy = fullDepEntry (''
mkdir -p $out/share/
mkdir -p $out/texmf-dist
cp -r * $out/texmf-dist
ln -s $out/texmf* $out/share/
'') ["minInit" "doUnpack" "defEnsureDir" "addInputs"];
meta = {
description = "ConTEXt TeX wrapper";
};
}

161
pkgs/tools/typesetting/tex/texlive/default.nix

@ -1,161 +0,0 @@
args @ {
builderDefs, zlib, bzip2, ncurses, libpng, ed, lesstif, ruby, potrace
, gd, t1lib, freetype, icu, perl, expat, curl, xz, pkgconfig, zziplib, texinfo
, libjpeg, bison, python, fontconfig, flex, poppler, libpaper, graphite2
, makeWrapper, gmp, mpfr, xpdf, config
, libXaw, libX11, xproto, libXt, libXpm
, libXmu, libXext, xextproto, libSM, libICE
, ... }: with args;
rec {
src = assert config.allowTexliveBuilds or true; fetchurl {
url = mirror://debian/pool/main/t/texlive-bin/texlive-bin_2014.20140926.35254.orig.tar.xz;
sha256 = "1c39x059jhn5jsy6i9j3akjbkm1kmmzssy1jyi1aw20rl2vp86w3";
};
texmfVersion = "2014.20141024";
texmfSrc = fetchurl {
url = "mirror://debian/pool/main/t/texlive-base/texlive-base_${texmfVersion}.orig.tar.xz";
sha256 = "1a6968myfi81s76n9p1qljgpwia9mi55pkkz1q6lbnwybf97akj1";
};
langTexmfVersion = "2014.20141024";
langTexmfSrc = fetchurl {
url = "mirror://debian/pool/main/t/texlive-lang/texlive-lang_${langTexmfVersion}.orig.tar.xz";
sha256 = "1ydz5m1v40n34g1l31r3vqg74rbr01x2f80drhz4igh21fm7zzpa";
};
passthru = { inherit texmfSrc langTexmfSrc; };
setupHook = ./setup-hook.sh;
doMainBuild = fullDepEntry ( stdenv.lib.optionalString stdenv.isDarwin ''
export DYLD_LIBRARY_PATH="${poppler.out}/lib"
'' + ''
mkdir -p $out
mkdir -p $out/nix-support
cp ${setupHook} $out/nix-support/setup-hook.sh
mkdir -p $out/share
tar xf ${texmfSrc} -C $out --strip-components=1
tar xf ${langTexmfSrc} -C $out --strip-components=1
sed -e s@/usr/bin/@@g -i $(grep /usr/bin/ -rl . )
sed -e 's@dehypht-x-2013-05-26@dehypht-x-2014-05-21@' -i $(grep 'dehypht-x' -rl $out )
sed -e 's@dehyphn-x-2013-05-26@dehyphn-x-2014-05-21@' -i $(grep 'dehyphn-x' -rl $out )
sed -e 's@\<env ruby@${ruby}/bin/ruby@' -i $(grep 'env ruby' -rl . )
sed -e 's@\<env perl@${perl}/bin/perl@' -i $(grep 'env perl' -rl . )
sed -e 's@\<env python@${python}/bin/python@' -i $(grep 'env python' -rl . )
sed -e '/ubidi_open/i#include <unicode/urename.h>' -i $(find . -name configure)
sed -e 's/-lttf/-lfreetype/' -i $(find . -name configure)
# sed -e s@ncurses/curses.h@curses.h@g -i $(grep ncurses/curses.h -rl . )
sed -e '1i\#include <string.h>\n\#include <stdlib.h>' -i $( find libs/teckit -name '*.cpp' -o -name '*.c' )
NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${icu.dev}/include/layout";
./Build --prefix="$out" --datadir="$out/share" --mandir="$out/share/man" --infodir="$out/share/info" \
${args.lib.concatStringsSep " " configureFlags}
cd Work
'' ) [ "minInit" "doUnpack" "addInputs" "defEnsureDir" ];
promoteLibexec = fullDepEntry (''
mkdir -p $out/libexec/
mv $out/bin $out/libexec/$(uname -m)
mkdir -p $out/bin
for i in "$out/libexec/"* "$out/libexec/"*"/"* ; do
test \( \! -d "$i" \) -a \( -x "$i" -o -L "$i" \) || continue
if [ -x "$i" ]; then
echo -ne "#! $SHELL\\nexec $i \"\$@\"" >$out/bin/$(basename $i)
chmod a+x $out/bin/$(basename $i)
else
mv "$i" "$out/libexec"
ln -s "$(readlink -f "$out/libexec/$(basename "$i")")" "$out/bin/$(basename "$i")";
ln -sf "$(readlink -f "$out/libexec/$(basename "$i")")" "$out/libexec/$(uname -m)/$(basename "$i")";
rm "$out/libexec/$(basename "$i")"
fi;
done
'') ["doMakeInstall"];
doPostInstall = fullDepEntry( ''
cp -r "$out/"texmf* "$out/share/" || true
rm -rf "$out"/texmf*
[ -d $out/share/texmf-config ] || ln -s $out/share/texmf-dist $out/share/texmf-config
ln -s "$out"/share/texmf* "$out"/
PATH=$PATH:$out/bin mktexlsr $out/share/texmf*
yes | HOME=. PATH=$PATH:$out/bin updmap-sys --syncwithtrees || echo $?
# Prebuild the format files, as it used to be done with TeXLive 2007.
# Luatex currently fails this way:
#
# This is a summary of all `failed' messages:
# `luatex -ini -jobname=luatex -progname=luatex luatex.ini' failed
# `luatex -ini -jobname=dviluatex -progname=dviluatex dviluatex.ini' failed
#
# I find it acceptable, hence the "|| true".
echo "building format files..."
mkdir -p "$out/share/tex