diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix new file mode 100644 index 00000000000..44579dd717f --- /dev/null +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -0,0 +1,97 @@ +{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 +, gdbmSupport ? true, gdbm ? null +, sqlite ? null +, db4 ? null +, readline ? null +, openssl ? null +, tk ? null +, tcl ? null +, libX11 ? null +, xproto ? null +, arch ? null +, sw_vers ? null +, ncurses ? null +}: + +assert zlibSupport -> zlib != null; +assert gdbmSupport -> gdbm != null; +assert stdenv.isDarwin -> arch != null; +assert stdenv.isDarwin -> sw_vers != null; + +with stdenv.lib; + +let + + majorVersion = "2.7"; + version = "${majorVersion}"; + + buildInputs = + optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ + [bzip2] + ++ optional zlibSupport zlib + ++ optional gdbmSupport gdbm + ++ optional (sqlite != null) sqlite + ++ optional (db4 != null) db4 + ++ optional (readline != null) readline + ++ optional (openssl != null) openssl + ++ optional (tk != null) tk + ++ optional (tcl != null) tcl + ++ optional (libX11 != null) libX11 + ++ optional (xproto != null) xproto + ++ optional (arch != null) arch + ++ optional (sw_vers != null) sw_vers + ++ optional (ncurses != null) ncurses + ; + +in + +stdenv.mkDerivation ( { + name = "python-${version}"; + + src = fetchurl { + url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.bz2"; + sha256 = "935d3316edfec5eb98c2f6930756b47b00dc27192541e62d6fd0077ffa008af8"; + }; + + patches = [ + # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. + ./search-path.patch + ]; + + inherit buildInputs; + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions"; + + preConfigure = '' + # Purity. + for i in /usr /sw /opt /pkg; do + substituteInPlace ./setup.py --replace $i /no-such-path + done + '' + (if readline != null then '' + export NIX_LDFLAGS="$NIX_LDFLAGS -lncurses" + '' else ""); + + setupHook = ./setup-hook.sh; + + postInstall = '' + rm -rf "$out/lib/python${majorVersion}/test" + ''; + + passthru = { + inherit zlibSupport; + sqliteSupport = sqlite != null; + db4Support = db4 != null; + readlineSupport = readline != null; + opensslSupport = openssl != null; + tkSupport = (tk != null) && (tcl != null); + libPrefix = "python${majorVersion}"; + }; + + enableParallelBuilding = true; + + meta = { + platforms = stdenv.lib.platforms.all; + maintainers = [ stdenv.lib.maintainers.simons ]; + }; +} // (if stdenv.isDarwin then { NIX_CFLAGS_COMPILE = "-msse2" ; patches = [./search-path.patch]; } else {} ) ) diff --git a/pkgs/development/interpreters/python/2.7/search-path.patch b/pkgs/development/interpreters/python/2.7/search-path.patch new file mode 100644 index 00000000000..2e7b7526c0c --- /dev/null +++ b/pkgs/development/interpreters/python/2.7/search-path.patch @@ -0,0 +1,27 @@ +diff -rc Python-2.4.4-orig/setup.py Python-2.4.4/setup.py +*** Python-2.4.4-orig/setup.py 2006-10-08 19:41:25.000000000 +0200 +--- Python-2.4.4/setup.py 2007-05-27 16:04:54.000000000 +0200 +*************** +*** 279,288 **** + # Check for AtheOS which has libraries in non-standard locations + if platform == 'atheos': + lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] +- lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) + inc_dirs += ['/system/include', '/atheos/autolnk/include'] +- inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) + + # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) + if platform in ['osf1', 'unixware7', 'openunix8']: + lib_dirs += ['/usr/ccs/lib'] +--- 279,289 ---- + # Check for AtheOS which has libraries in non-standard locations + if platform == 'atheos': + lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] + inc_dirs += ['/system/include', '/atheos/autolnk/include'] + ++ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) ++ inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) ++ + # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) + if platform in ['osf1', 'unixware7', 'openunix8']: + lib_dirs += ['/usr/ccs/lib'] diff --git a/pkgs/development/interpreters/python/2.7/setup-hook.sh b/pkgs/development/interpreters/python/2.7/setup-hook.sh new file mode 100644 index 00000000000..290525c3571 --- /dev/null +++ b/pkgs/development/interpreters/python/2.7/setup-hook.sh @@ -0,0 +1,15 @@ +addPythonPath() { + addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python2.6/site-packages +} + +toPythonPath() { + local paths="$1" + local result= + for i in $paths; do + p="$i/lib/python2.6/site-packages" + result="${result}${result:+:}$p" + done + echo $result +} + +envHooks=(${envHooks[@]} addPythonPath) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 122951b2dd2..063e49e9401 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2075,6 +2075,7 @@ let python = if getConfig ["python" "full"] false then pythonFull else pythonBase; python25 = if getConfig ["python" "full"] false then python25Full else python25Base; python26 = if getConfig ["python" "full"] false then python26Full else python26Base; + python27 = if getConfig ["python" "full"] false then python27Full else python27Base; pythonBase = python26Base; pythonFull = python26Full; @@ -2116,6 +2117,25 @@ let ncurses = if getConfig ["python" "curses"] true then ncurses else null; }); + python27Base = makeOverridable (import ../development/interpreters/python/2.7) { + inherit fetchurl stdenv zlib bzip2 gdbm; + arch = if stdenv.isDarwin then darwinArchUtility else null; + sw_vers = if stdenv.isDarwin then darwinSwVersUtility else null; + }; + + python27Full = lowPrio (python27Base.override { + # FIXME: We lack ncurses support, needed, e.g., for `gpsd'. + db4 = if getConfig ["python" "db4Support"] true then db4 else null; + sqlite = if getConfig ["python" "sqliteSupport"] true then sqlite else null; + readline = if getConfig ["python" "readlineSupport"] true then readline else null; + openssl = if getConfig ["python" "opensslSupport"] true then openssl else null; + tk = if getConfig ["python" "tkSupport"] true then tk else null; + tcl = if getConfig ["python" "tkSupport"] true then tcl else null; + libX11 = if getConfig ["python" "tkSupport"] true then xlibs.libX11 else null; + xproto = if getConfig ["python" "tkSupport"] true then xlibs.xproto else null; + ncurses = if getConfig ["python" "curses"] true then ncurses else null; + }); + python31Base = lowPrio (makeOverridable (import ../development/interpreters/python/3.1) { inherit fetchurl stdenv zlib bzip2 gdbm; arch = if stdenv.isDarwin then darwinArchUtility else null; @@ -3934,6 +3954,13 @@ let setuptools = setuptools_python26; }; + buildPython27Package = + import ../development/python-modules/generic { + inherit makeWrapper lib; + python = python26; + setuptools = setuptools_python27; + }; + pythonPackages = python26Packages; python25Packages = recurseIntoAttrs (import ./python-packages.nix { @@ -3946,6 +3973,12 @@ let buildPythonPackage = buildPython26Package; }); + python27Packages = recurseIntoAttrs (import ./python-packages.nix { + inherit pkgs; + python = python27; + buildPythonPackage = buildPython27Package; + }); + foursuite = callPackage ../development/python-modules/4suite { }; bsddb3 = callPackage ../development/python-modules/bsddb3 { }; @@ -4004,6 +4037,11 @@ let python = python26; }; + setuptools_python27 = builderDefsPackage (import ../development/python-modules/setuptools) { + inherit makeWrapper; + python = python27; + }; + wxPython = wxPython26; wxPython26 = callPackage ../development/python-modules/wxPython/2.6.nix {