diff options
-rw-r--r-- | pkgs/applications/version-management/bazaar/default.nix | 8 | ||||
-rw-r--r-- | pkgs/build-support/trivial-builders.nix | 10 | ||||
-rw-r--r-- | pkgs/development/python-modules/generic/default.nix | 45 | ||||
-rw-r--r-- | pkgs/development/python-modules/generic/wrap.sh | 40 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 7 |
5 files changed, 59 insertions, 51 deletions
diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix index 4509d4f9b6e..71572f85fbc 100644 --- a/pkgs/applications/version-management/bazaar/default.nix +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, python, pythonPackages, makeWrapper }: +{ stdenv, fetchurl, python, pythonPackages, wrapPython }: stdenv.mkDerivation rec { version = "2.3"; @@ -10,11 +10,13 @@ stdenv.mkDerivation rec { sha256 = "07kx41w4gqv68bcykdflsg68wvpmcyqknzyb4vr1zqlf27hahp53"; }; - buildInputs = [ python makeWrapper ]; + buildInputs = [ python wrapPython ]; + + pythonPath = [ pythonPackages.ssl ]; installPhase = '' python setup.py install --prefix=$out - wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out ${pythonPackages.ssl})" + wrapPythonPrograms ''; meta = { diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 992e28476f0..1998d91d126 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -45,12 +45,14 @@ rec { # Make a package that just contains a setup hook with the given contents. - makeSetupHook = script: - runCommand "hook" {} - '' + makeSetupHook = deps: script: + runCommand "hook" { } + ('' ensureDir $out/nix-support cp ${script} $out/nix-support/setup-hook - ''; + '' + stdenv.lib.optionalString (deps != []) '' + echo ${toString deps} > $out/nix-support/propagated-build-native-inputs + ''); # Write the references (i.e. the runtime dependencies in the Nix store) of `path' to a file. diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 1152a0aa447..146de620d57 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -3,7 +3,7 @@ (http://pypi.python.org/pypi/setuptools/), which represents a large number of Python packages nowadays. */ -{ python, setuptools, makeWrapper, lib }: +{ python, setuptools, wrapPython, lib }: { name, namePrefix ? "python-" @@ -36,7 +36,7 @@ python.stdenv.mkDerivation (attrs // { name = namePrefix + name; - buildInputs = [ python makeWrapper setuptools ] ++ buildInputs ++ pythonPath; + buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath; pythonPath = [ setuptools] ++ pythonPath; @@ -54,47 +54,8 @@ python.stdenv.mkDerivation (attrs // { postFixup = '' - declare -A pythonPathsSeen + wrapPythonPrograms - addToPythonPath() { - local dir="$1" - if [ -n "''${pythonPathsSeen[$dir]}" ]; then return; fi - pythonPathsSeen[$dir]=1 - addToSearchPath program_PYTHONPATH $dir/lib/${python.libPrefix}/site-packages - addToSearchPath program_PATH $dir/bin - local prop="$dir/nix-support/propagated-build-native-inputs" - if [ -e $prop ]; then - local i - for i in $(cat $prop); do - addToPythonPath $i - done - fi - } - - wrapPythonPrograms() { - local dir="$1" - local pythonPath="$2" - local i - - pythonPathsSeen=() - program_PYTHONPATH= - program_PATH= - for i in $pythonPath; do - addToPythonPath $i - done - - for i in $(find "$out" -type f -perm +0100); do - if head -n1 "$i" | grep -q "${python}"; then - echo "wrapping \`$i'..." - wrapProgram "$i" \ - --prefix PYTHONPATH ":" $program_PYTHONPATH \ - --prefix PATH ":" $program_PATH - fi - done - } - - wrapPythonPrograms $out "$out $pythonPath" - # If a user installs a Python package, she probably also wants its # dependencies in the user environment (since Python modules don't # have something like an RPATH, so the only way to find the diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh new file mode 100644 index 00000000000..98162c8807f --- /dev/null +++ b/pkgs/development/python-modules/generic/wrap.sh @@ -0,0 +1,40 @@ +wrapPythonPrograms() { + wrapPythonProgramsIn $out "$out $pythonPath" +} + +wrapPythonProgramsIn() { + local dir="$1" + local pythonPath="$2" + local i + + declare -A pythonPathsSeen=() + program_PYTHONPATH= + program_PATH= + for i in $pythonPath; do + _addToPythonPath $i + done + + for i in $(find "$dir" -type f -perm +0100); do + if head -n1 "$i" | grep -q /python; then + echo "wrapping \`$i'..." + wrapProgram "$i" \ + --prefix PYTHONPATH ":" $program_PYTHONPATH \ + --prefix PATH ":" $program_PATH + fi + done +} + +_addToPythonPath() { + local dir="$1" + if [ -n "${pythonPathsSeen[$dir]}" ]; then return; fi + pythonPathsSeen[$dir]=1 + addToSearchPath program_PYTHONPATH $dir/lib/python2.7/site-packages + addToSearchPath program_PATH $dir/bin + local prop="$dir/nix-support/propagated-build-native-inputs" + if [ -e $prop ]; then + local i + for i in $(cat $prop); do + _addToPythonPath $i + done + fi +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9219da5db65..b126367dbce 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -312,7 +312,9 @@ let inherit stdenv perl cpio contents ubootChooser; }; - makeWrapper = makeSetupHook ../build-support/make-wrapper/make-wrapper.sh; + makeWrapper = makeSetupHook [] ../build-support/make-wrapper/make-wrapper.sh; + + wrapPython = makeSetupHook [ makeWrapper ] ../development/python-modules/generic/wrap.sh; makeModulesClosure = {kernel, rootModules, allowMissing ? false}: import ../build-support/kernel/modules-closure.nix { @@ -343,6 +345,7 @@ let }; platforms = import ./platforms.nix; + ### TOOLS @@ -4264,7 +4267,7 @@ let buildPythonPackage = buildPython27Package; buildPython27Package = import ../development/python-modules/generic { - inherit makeWrapper lib; + inherit wrapPython lib; python = python27; setuptools = setuptools.override { python = python27; doCheck = false; }; }; |