diff options
author | Domen Kožar <domen@dev.si> | 2014-10-16 13:24:18 +0200 |
---|---|---|
committer | Domen Kožar <domen@dev.si> | 2014-10-16 13:24:18 +0200 |
commit | 74fde7c388b58168e2a1464c31ed268893100580 (patch) | |
tree | b50e9544a47c1f95dc55fb00781298f1d327a8fd /pkgs/development/interpreters/python | |
parent | c0e18dc4981b26e41f2141d0bd6b0366e66211a7 (diff) | |
parent | 68b183e309df1e7c6d47dac62dfe220af9d16fa4 (diff) |
Merge pull request #4495 from NixOS/pythonFull_improvements
PythonFull improvements
Diffstat (limited to 'pkgs/development/interpreters/python')
-rw-r--r-- | pkgs/development/interpreters/python/2.6/default.nix | 53 | ||||
-rw-r--r-- | pkgs/development/interpreters/python/2.7/default.nix | 63 | ||||
-rw-r--r-- | pkgs/development/interpreters/python/wrapper.nix | 7 |
3 files changed, 57 insertions, 66 deletions
diff --git a/pkgs/development/interpreters/python/2.6/default.nix b/pkgs/development/interpreters/python/2.6/default.nix index 3b2239791ae0a..cbdb55f4cc353 100644 --- a/pkgs/development/interpreters/python/2.6/default.nix +++ b/pkgs/development/interpreters/python/2.6/default.nix @@ -1,13 +1,11 @@ -{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 -, sqlite, tcl, tk, x11, openssl, readline, db, ncurses, gdbm -}: +{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2, includeModules ? false +, sqlite, tcl, tk, x11, openssl, readline, db, ncurses, gdbm}: assert zlibSupport -> zlib != null; with stdenv.lib; let - majorVersion = "2.6"; version = "${majorVersion}.9"; @@ -27,37 +25,42 @@ let # the Nix store to 1. So treat that as a special case. ./nix-store-mtime.patch ]; + + preConfigure = '' + # Purity. + for i in /usr /sw /opt /pkg; do + substituteInPlace ./setup.py --replace $i /no-such-path + done + '' + optionalString (stdenv ? gcc && stdenv.gcc.libc != null) '' + for i in Lib/plat-*/regen; do + substituteInPlace $i --replace /usr/include/ ${stdenv.gcc.libc}/include/ + done + '' + optionalString stdenv.isCygwin '' + # On Cygwin, `make install' tries to read this Makefile. + mkdir -p $out/lib/python${majorVersion}/config + touch $out/lib/python${majorVersion}/config/Makefile + mkdir -p $out/include/python${majorVersion} + touch $out/include/python${majorVersion}/pyconfig.h + ''; buildInputs = optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [ bzip2 openssl ] + [ bzip2 openssl ]++ optionals includeModules [ db openssl ncurses gdbm readline x11 tcl tk sqlite ] ++ optional zlibSupport zlib; # Build the basic Python interpreter without modules that have # external dependencies. python = stdenv.mkDerivation { - name = "python-${version}"; + name = "python${if includeModules then "" else "-minimal"}-${version}"; - inherit majorVersion version src patches buildInputs; + inherit majorVersion version src patches buildInputs preConfigure; C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); configureFlags = "--enable-shared --with-threads --enable-unicode"; - preConfigure = - '' - # Purity. - for i in /usr /sw /opt /pkg; do - substituteInPlace ./setup.py --replace $i /no-such-path - done - '' + optionalString (stdenv ? gcc && stdenv.gcc.libc != null) '' - for i in Lib/plat-*/regen; do - substituteInPlace $i --replace /usr/include/ ${stdenv.gcc.libc}/include/ - done - ''; - NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; setupHook = ./setup-hook.sh; @@ -69,6 +72,10 @@ let ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion} mv $out/share/man/man1/{python.1,python2.6.1} ln -s $out/share/man/man1/{python2.6.1,python.1} + + paxmark E $out/bin/python${majorVersion} + + ${ optionalString includeModules "$out/bin/python ./setup.py build_ext"} ''; passthru = rec { @@ -96,7 +103,7 @@ let ''; license = stdenv.lib.licenses.psfl; platforms = stdenv.lib.platforms.all; - maintainers = with stdenv.lib.maintainers; [ simons chaoflow ]; + maintainers = with stdenv.lib.maintainers; [ simons chaoflow iElectric ]; }; }; @@ -108,18 +115,16 @@ let , internalName ? "_" + moduleName , deps }: - stdenv.mkDerivation rec { + if includeModules then null else stdenv.mkDerivation rec { name = "python-${moduleName}-${python.version}"; - inherit src patches; + inherit src patches preConfigure; buildInputs = [ python ] ++ deps; C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - configurePhase = "true"; - buildPhase = '' # Fake the build environment that setup.py expects. diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index b8539d8e64a3a..32c7db7a5499e 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 +{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2, includeModules ? false , sqlite, tcl, tk, x11, openssl, readline, db, ncurses, gdbm, libX11 }: assert zlibSupport -> zlib != null; @@ -6,7 +6,6 @@ assert zlibSupport -> zlib != null; with stdenv.lib; let - majorVersion = "2.7"; version = "${majorVersion}.8"; @@ -32,32 +31,35 @@ let # http://bugs.python.org/issue21963 ./remove-avoid-daemon-thread-shutdown.patch ]; - - postPatch = stdenv.lib.optionalString (stdenv.gcc.libc != null) '' - substituteInPlace ./Lib/plat-generic/regen \ - --replace /usr/include/netinet/in.h \ - ${stdenv.gcc.libc}/include/netinet/in.h - ''; - - buildInputs = - optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [ bzip2 openssl ] - ++ optional zlibSupport zlib; - - ensurePurity = - '' + + preConfigure = '' # Purity. for i in /usr /sw /opt /pkg; do substituteInPlace ./setup.py --replace $i /no-such-path done + '' + optionalString (stdenv ? gcc && stdenv.gcc.libc != null) '' + for i in Lib/plat-*/regen; do + substituteInPlace $i --replace /usr/include/ ${stdenv.gcc.libc}/include/ + done + '' + optionalString stdenv.isCygwin '' + # On Cygwin, `make install' tries to read this Makefile. + mkdir -p $out/lib/python${majorVersion}/config + touch $out/lib/python${majorVersion}/config/Makefile + mkdir -p $out/include/python${majorVersion} + touch $out/include/python${majorVersion}/pyconfig.h ''; + buildInputs = + optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ + [ bzip2 openssl ] ++ optionals includeModules [ db openssl ncurses gdbm libX11 readline x11 tcl tk sqlite ] + ++ optional zlibSupport zlib; + # Build the basic Python interpreter without modules that have # external dependencies. python = stdenv.mkDerivation { name = "python-${version}"; - inherit majorVersion version src patches postPatch buildInputs; + inherit majorVersion version src patches buildInputs preConfigure; LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s"; C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); @@ -65,15 +67,6 @@ let configureFlags = "--enable-shared --with-threads --enable-unicode"; - preConfigure = "${ensurePurity}" + optionalString stdenv.isCygwin - '' - # On Cygwin, `make install' tries to read this Makefile. - mkdir -p $out/lib/python${majorVersion}/config - touch $out/lib/python${majorVersion}/config/Makefile - mkdir -p $out/include/python${majorVersion} - touch $out/include/python${majorVersion}/pyconfig.h - ''; - NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; setupHook = ./setup-hook.sh; @@ -86,6 +79,8 @@ let ln -s $out/share/man/man1/{python2.7.1.gz,python.1.gz} paxmark E $out/bin/python${majorVersion} + + ${ optionalString includeModules "$out/bin/python ./setup.py build_ext"} ''; passthru = rec { @@ -113,7 +108,7 @@ let ''; license = stdenv.lib.licenses.psfl; platforms = stdenv.lib.platforms.all; - maintainers = with stdenv.lib.maintainers; [ simons chaoflow ]; + maintainers = with stdenv.lib.maintainers; [ simons chaoflow iElectric ]; }; }; @@ -125,25 +120,17 @@ let , internalName ? "_" + moduleName , deps }: - stdenv.mkDerivation rec { + if includeModules then null else stdenv.mkDerivation rec { name = "python-${moduleName}-${python.version}"; - inherit src patches postPatch; + inherit src patches preConfigure; buildInputs = [ python ] ++ deps; C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - configurePhase = "${ensurePurity}"; - - buildPhase = - '' - # Fake the build environment that setup.py expects. - ln -s ${python}/include/python*/pyconfig.h . - ln -s ${python}/lib/python*/config/Setup Modules/ - ln -s ${python}/lib/python*/config/Setup.local Modules/ - + buildPhase = '' substituteInPlace setup.py --replace 'self.extensions = extensions' \ 'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]' diff --git a/pkgs/development/interpreters/python/wrapper.nix b/pkgs/development/interpreters/python/wrapper.nix index ccfbcfcdd42fa..37180b1472b1d 100644 --- a/pkgs/development/interpreters/python/wrapper.nix +++ b/pkgs/development/interpreters/python/wrapper.nix @@ -1,12 +1,11 @@ { stdenv, python, buildEnv, makeWrapper, recursivePthLoader, extraLibs ? [], postBuild ? "" -, stdLibs ? stdenv.lib.attrValues python.modules, ignoreCollisions ? false -}: +, ignoreCollisions ? false }: # Create a python executable that knows about additional packages. (buildEnv { - name = "python-${python.version}-wrapper"; - paths = stdenv.lib.filter (x : x ? pythonPath) (stdenv.lib.closePropagation extraLibs) ++ stdLibs ++ [ python recursivePthLoader ]; + name = "python-${python.version}-env"; + paths = stdenv.lib.filter (x : x ? pythonPath) (stdenv.lib.closePropagation extraLibs) ++ [ python recursivePthLoader ]; inherit ignoreCollisions; |