2010-08-11 16:49:03 +01:00
|
|
|
{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2
|
2011-01-04 14:47:36 +00:00
|
|
|
, darwinArchUtility ? null, darwinSwVersUtility ? null
|
2010-08-11 16:49:03 +01:00
|
|
|
}:
|
|
|
|
|
|
|
|
assert zlibSupport -> zlib != null;
|
2011-01-04 14:47:36 +00:00
|
|
|
assert stdenv.isDarwin -> darwinArchUtility != null;
|
|
|
|
assert stdenv.isDarwin -> darwinSwVersUtility != null;
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
with stdenv.lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
majorVersion = "2.7";
|
2011-01-03 15:52:48 +00:00
|
|
|
version = "${majorVersion}.1";
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
buildInputs =
|
|
|
|
optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++
|
2011-01-04 14:47:36 +00:00
|
|
|
[ bzip2 ]
|
2010-08-11 16:49:03 +01:00
|
|
|
++ optional zlibSupport zlib
|
2011-01-04 14:47:36 +00:00
|
|
|
++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ];
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
in
|
|
|
|
|
2011-01-04 14:47:36 +00:00
|
|
|
stdenv.mkDerivation {
|
2010-08-11 16:49:03 +01:00
|
|
|
name = "python-${version}";
|
2010-08-16 18:03:35 +01:00
|
|
|
inherit majorVersion version;
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
src = fetchurl {
|
|
|
|
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.bz2";
|
2011-01-03 15:52:48 +00:00
|
|
|
sha256 = "14i2c7yqa7ljmx2i2bb827n61q33zn23ax96czi8rbkyyny8gqw0";
|
2010-08-11 16:49:03 +01:00
|
|
|
};
|
|
|
|
|
2011-01-04 14:47:36 +00:00
|
|
|
patches =
|
|
|
|
[ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff.
|
|
|
|
./search-path.patch
|
2011-01-04 15:10:03 +00:00
|
|
|
|
|
|
|
# Python recompiles a Python if the mtime stored *in* the
|
|
|
|
# pyc/pyo file differs from the mtime of the source file. This
|
|
|
|
# doesn't work in Nix because Nix changes the mtime of files in
|
|
|
|
# the Nix store to 1. So treat that as a special case.
|
|
|
|
./nix-store-mtime.patch
|
2011-01-04 14:47:36 +00:00
|
|
|
];
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
inherit buildInputs;
|
2011-01-04 14:47:36 +00:00
|
|
|
|
2010-08-11 16:49:03 +01:00
|
|
|
C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs);
|
|
|
|
LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs);
|
2011-01-04 14:47:36 +00:00
|
|
|
|
2010-08-11 16:49:03 +01:00
|
|
|
configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions";
|
|
|
|
|
2011-01-04 14:47:36 +00:00
|
|
|
preConfigure =
|
|
|
|
''
|
|
|
|
# Purity.
|
|
|
|
for i in /usr /sw /opt /pkg; do
|
|
|
|
substituteInPlace ./setup.py --replace $i /no-such-path
|
|
|
|
done
|
|
|
|
'';
|
|
|
|
|
|
|
|
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2";
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
setupHook = ./setup-hook.sh;
|
|
|
|
|
2011-01-04 14:47:36 +00:00
|
|
|
postInstall =
|
|
|
|
''
|
|
|
|
rm -rf "$out/lib/python${majorVersion}/test"
|
|
|
|
'';
|
2010-08-11 16:49:03 +01:00
|
|
|
|
|
|
|
passthru = {
|
|
|
|
inherit zlibSupport;
|
|
|
|
libPrefix = "python${majorVersion}";
|
|
|
|
};
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
meta = {
|
2010-08-18 16:03:34 +01:00
|
|
|
homepage = "http://python.org";
|
|
|
|
description = "Python -- a high-level dynamically-typed programming language";
|
|
|
|
longDescription = ''
|
|
|
|
Python is a remarkably powerful dynamic programming language that
|
|
|
|
is used in a wide variety of application domains. Some of its key
|
|
|
|
distinguishing features include: clear, readable syntax; strong
|
|
|
|
introspection capabilities; intuitive object orientation; natural
|
|
|
|
expression of procedural code; full modularity, supporting
|
|
|
|
hierarchical packages; exception-based error handling; and very
|
|
|
|
high level dynamic data types.
|
|
|
|
'';
|
|
|
|
license = "GPLv2";
|
2010-08-11 16:49:03 +01:00
|
|
|
platforms = stdenv.lib.platforms.all;
|
|
|
|
maintainers = [ stdenv.lib.maintainers.simons ];
|
|
|
|
};
|
2011-01-04 14:47:36 +00:00
|
|
|
}
|