* Purity fix in building Python: don't let it search in /usr/include

and /usr/lib to determine what optional modules (like bzip2, zlib,
  dl, etc.) to build.  Unfortunately there doesn't seem to be a way to
  tell the Python build process to look anywhere else, so I had to
  patch setup.py.

svn path=/nixpkgs/trunk/; revision=8780
This commit is contained in:
Eelco Dolstra 2007-05-27 14:34:01 +00:00
parent eec1e8dc0e
commit c5e1ae5eaf
4 changed files with 65 additions and 6 deletions

View File

@ -1,24 +1,52 @@
{stdenv, fetchurl, zlib ? null, zlibSupport ? true}:
{stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2}:
assert zlibSupport -> zlib != null;
with stdenv.lib;
let
buildInputs =
optional (stdenv ? gcc && stdenv.gcc ? libc) stdenv.gcc.libc ++
[bzip2] ++
optional zlibSupport zlib;
in
stdenv.mkDerivation {
name = "python-2.4.4";
src = fetchurl {
url = http://www.python.org/ftp/python/2.4.4/Python-2.4.4.tar.bz2;
md5 = "0ba90c79175c017101100ebf5978e906";
};
buildInputs = [
(if zlibSupport then zlib else null)
patches = [
# Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff.
./search-path.patch
];
inherit zlibSupport;
inherit buildInputs;
C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs);
LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs);
configureFlags = "--enable-shared";
libPrefix = "python2.4";
preConfigure = "
# Purity.
for i in /usr /sw /opt /pkg; do
substituteInPlace ./setup.py --replace $i /no-such-path
done
";
postInstall = "
ensureDir $out/nix-support
cp ${./setup-hook.sh} $out/nix-support/setup-hook
rm -rf $out/lib/python2.4/test
";
passthru = {
inherit zlibSupport;
libPrefix = "python2.4";
};
}

View File

@ -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']

View File

@ -38,6 +38,10 @@ rec {
++ (intersperse separator (tail list));
concatStringsSep = separator: list:
concatStrings (intersperse separator list);
# Flatten the argument into a single list; that is, nested lists are
# spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5]
# == [1 2 3 4 5]' and `flatten 1 == [1]'.

View File

@ -885,7 +885,7 @@ rec {
};
python = import ../development/interpreters/python {
inherit fetchurl stdenv zlib;
inherit fetchurl stdenv zlib bzip2;
};
realPerl = import ../development/interpreters/perl {