* Move python/2.7/modules.nix into python/2.7/default.nix. Also

remove the pythonModules attribute.  The built-in modules are now
  accessible as (e.g.) "python.modules.ssl" or "pythonPackages.ssl".

svn path=/nixpkgs/branches/modular-python/; revision=26559
This commit is contained in:
Eelco Dolstra 2011-03-28 09:48:57 +00:00
parent f510e6f7e4
commit 8ca5d5d8b6
4 changed files with 150 additions and 153 deletions

View File

@ -1,4 +1,5 @@
{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2
, sqlite, tcl, tk, x11, openssl, readline, db4, ncurses, gdbm
, darwinArchUtility ? null, darwinSwVersUtility ? null
}:
@ -13,23 +14,11 @@ let
majorVersion = "2.7";
version = "${majorVersion}.1";
buildInputs =
optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++
[ bzip2 ]
++ optional zlibSupport zlib
++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ];
in
stdenv.mkDerivation {
name = "python-${version}";
inherit majorVersion version;
src = fetchurl {
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.bz2";
sha256 = "14i2c7yqa7ljmx2i2bb827n61q33zn23ax96czi8rbkyyny8gqw0";
};
patches =
[ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff.
./search-path.patch
@ -41,51 +30,150 @@ stdenv.mkDerivation {
./nix-store-mtime.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";
buildInputs =
optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++
[ bzip2 ]
++ optional zlibSupport zlib
++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ];
preConfigure =
''
# Purity.
for i in /usr /sw /opt /pkg; do
substituteInPlace ./setup.py --replace $i /no-such-path
done
'';
# Build the basic Python interpreter without modules that have
# external dependencies.
python = stdenv.mkDerivation {
name = "python-${version}";
inherit majorVersion version src patches buildInputs;
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2";
C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs);
LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs);
setupHook = ./setup-hook.sh;
configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions";
postInstall =
''
rm -rf "$out/lib/python${majorVersion}/test"
'';
preConfigure =
''
# Purity.
for i in /usr /sw /opt /pkg; do
substituteInPlace ./setup.py --replace $i /no-such-path
done
'';
passthru = {
inherit zlibSupport;
libPrefix = "python${majorVersion}";
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2";
setupHook = ./setup-hook.sh;
postInstall =
''
rm -rf "$out/lib/python${majorVersion}/test"
'';
passthru = {
inherit zlibSupport;
libPrefix = "python${majorVersion}";
};
enableParallelBuilding = true;
meta = {
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";
platforms = stdenv.lib.platforms.all;
maintainers = [ stdenv.lib.maintainers.simons ];
};
};
enableParallelBuilding = true;
meta = {
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";
platforms = stdenv.lib.platforms.all;
maintainers = [ stdenv.lib.maintainers.simons ];
# This function builds a Python module included in the main Python
# distribution in a separate derivation.
buildInternalPythonModule =
{ moduleName
, internalName ? "_" + moduleName
, deps
}:
stdenv.mkDerivation rec {
name = "python-${moduleName}-${python.version}";
inherit src patches;
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.
ln -s ${python}/include/python*/pyconfig.h .
ln -s ${python}/lib/python*/config/Setup Modules/
ln -s ${python}/lib/python*/config/Setup.local Modules/
substituteInPlace setup.py --replace 'self.extensions = extensions' \
'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]'
python ./setup.py build_ext
'';
installPhase =
''
dest=$out/lib/${python.libPrefix}/site-packages
mkdir -p $dest
cp -p $(find . -name "*.so") $dest/
'';
};
# The Python modules included in the main Python distribution, built
# as separate derivations.
modules = {
bsddb = buildInternalPythonModule {
moduleName = "bsddb";
deps = [ db4 ];
};
curses = buildInternalPythonModule {
moduleName = "curses";
deps = [ ncurses ];
};
gdbm = buildInternalPythonModule {
moduleName = "gdbm";
internalName = "gdbm";
deps = [ gdbm ];
};
sqlite3 = buildInternalPythonModule {
moduleName = "sqlite3";
deps = [ sqlite ];
};
ssl = buildInternalPythonModule {
moduleName = "ssl";
deps = [ openssl ];
};
tkinter = buildInternalPythonModule {
moduleName = "tkinter";
deps = [ tcl tk x11 ];
};
readline = buildInternalPythonModule {
moduleName = "readline";
internalName = "readline";
deps = [ readline ];
};
};
}
in python // { inherit modules; }

View File

@ -1,86 +0,0 @@
{ stdenv, python, sqlite, tcl, tk, x11, openssl, readline, db4, ncurses, gdbm }:
with stdenv.lib;
let
buildInternalPythonModule =
{ moduleName
, internalName ? "_" + moduleName
, deps
}:
stdenv.mkDerivation rec {
name = "python-${moduleName}-${python.version}";
src = python.src;
patches = python.patches;
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.
ln -s ${python}/include/python*/pyconfig.h .
ln -s ${python}/lib/python*/config/Setup Modules/
ln -s ${python}/lib/python*/config/Setup.local Modules/
substituteInPlace setup.py --replace 'self.extensions = extensions' \
'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]'
python ./setup.py build_ext
'';
installPhase =
''
dest=$out/lib/${python.libPrefix}/site-packages
mkdir -p $dest
cp -p $(find . -name "*.so") $dest/
'';
};
in {
bsddb = buildInternalPythonModule {
moduleName = "bsddb";
deps = [ db4 ];
};
curses = buildInternalPythonModule {
moduleName = "curses";
deps = [ ncurses ];
};
gdbm = buildInternalPythonModule {
moduleName = "gdbm";
internalName = "gdbm";
deps = [ gdbm ];
};
sqlite3 = buildInternalPythonModule {
moduleName = "sqlite3";
deps = [ sqlite ];
};
ssl = buildInternalPythonModule {
moduleName = "ssl";
deps = [ openssl ];
};
tkinter = buildInternalPythonModule {
moduleName = "tkinter";
deps = [ tcl tk x11 ];
};
readline = buildInternalPythonModule {
moduleName = "readline";
internalName = "readline";
deps = [ readline ];
};
}

View File

@ -992,10 +992,8 @@ let
obexftp = callPackage ../tools/bluetooth/obexftp { };
offlineimap = import ../tools/networking/offlineimap {
inherit fetchurl;
buildPythonPackage = buildPython27Package;
ssl = pythonModules.ssl;
offlineimap = callPackage ../tools/networking/offlineimap {
ssl = pythonPackages.ssl;
};
opendbx = callPackage ../development/libraries/opendbx { };
@ -2267,7 +2265,6 @@ let
polyml = callPackage ../development/compilers/polyml { };
python = python27;
pythonModules = python27Modules;
python26 = if getConfig ["python" "full"] false then python26Full else python26Base;
pythonFull = python26Full;
@ -2295,10 +2292,6 @@ let
python27 = callPackage ../development/interpreters/python/2.7 { };
python27Modules = callPackage ../development/interpreters/python/2.7/modules.nix {
python = python27;
};
python3 = callPackage ../development/interpreters/python/3.1 {
arch = if stdenv.isDarwin then pkgs.darwinArchUtility else null;
sw_vers = if stdenv.isDarwin then pkgs.darwinSwVersUtility else null;
@ -4302,9 +4295,7 @@ let
### DEVELOPMENT / PYTHON MODULES
buildPythonPackage = import ../development/python-modules/generic {
inherit python setuptools makeWrapper lib;
};
buildPythonPackage = buildPython27Package;
buildPython26Package = import ../development/python-modules/generic {
inherit makeWrapper lib;
@ -4318,7 +4309,7 @@ let
setuptools = setuptools.override { python = python27; doCheck = false; };
};
pythonPackages = python26Packages;
pythonPackages = python27Packages;
python26Packages = recurseIntoAttrs (import ./python-packages.nix {
inherit pkgs;
@ -6283,7 +6274,7 @@ let
mercurial = callPackage ../applications/version-management/mercurial {
guiSupport = getConfig ["mercurial" "guiSupport"] false; # for hgk (gitk gui for hg)
inherit (python27Modules) ssl;
inherit (pythonPackages) ssl;
};
merkaartor = callPackage ../applications/misc/merkaartor {

View File

@ -1,8 +1,12 @@
{ pkgs, python, buildPythonPackage }:
rec {
python.modules // rec {
inherit (pkgs) fetchurl fetchsvn stdenv;
inherit (python.modules) ssl;
argparse = buildPythonPackage (rec {
name = "argparse-1.1";