Python 2.7: separate output for tkinter
This commit is contained in:
parent
1f72d9c424
commit
bee439207b
@ -1,8 +1,5 @@
|
||||
{ stdenv, fetchurl, fetchpatch, self, callPackage, python27Packages
|
||||
, bzip2, openssl, gettext
|
||||
|
||||
, includeModules ? false
|
||||
|
||||
, db, gdbm, ncurses, sqlite, readline
|
||||
|
||||
, tcl ? null, tk ? null, xlibsWrapper ? null, libX11 ? null, x11Support ? !stdenv.isCygwin
|
||||
@ -27,6 +24,7 @@ let
|
||||
pythonVersion = majorVersion;
|
||||
version = "${majorVersion}.${minorVersion}${minorVersionSuffix}";
|
||||
libPrefix = "python${majorVersion}";
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://www.python.org/ftp/python/${majorVersion}.${minorVersion}/Python-${version}.tar.xz";
|
||||
@ -113,10 +111,8 @@ let
|
||||
optional (stdenv ? cc && stdenv.cc.libc != null) stdenv.cc.libc ++
|
||||
[ bzip2 openssl ]
|
||||
++ optionals stdenv.isCygwin [ expat libffi ]
|
||||
++ optionals includeModules (
|
||||
[ db gdbm ncurses sqlite readline
|
||||
] ++ optionals x11Support [ tcl tk xlibsWrapper libX11 ]
|
||||
)
|
||||
++ [ db gdbm ncurses sqlite readline ]
|
||||
++ optionals x11Support [ tcl tk xlibsWrapper libX11 ]
|
||||
++ optional zlibSupport zlib
|
||||
++ optional stdenv.isDarwin CF;
|
||||
|
||||
@ -129,7 +125,8 @@ let
|
||||
|
||||
# Build the basic Python interpreter without modules that have
|
||||
# external dependencies.
|
||||
python = stdenv.mkDerivation {
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
name = "python-${version}";
|
||||
pythonVersion = majorVersion;
|
||||
|
||||
@ -165,20 +162,25 @@ let
|
||||
# Python on Nix is not manylinux1 compatible. https://github.com/NixOS/nixpkgs/issues/18484
|
||||
echo "manylinux1_compatible=False" >> $out/lib/${libPrefix}/_manylinux.py
|
||||
|
||||
${optionalString includeModules "$out/bin/python ./setup.py build_ext"}
|
||||
|
||||
rm "$out"/lib/python*/plat-*/regen # refers to glibc.dev
|
||||
'';
|
||||
|
||||
postFixup = optionalString x11Support ''
|
||||
# tkinter goes in a separate output
|
||||
mkdir -p $tkinter/${sitePackages}
|
||||
mv $out/lib/${libPrefix}/lib-dynload/_tkinter* $tkinter/${sitePackages}/
|
||||
'';
|
||||
|
||||
outputs = ["out"] ++ optional x11Support "tkinter";
|
||||
|
||||
passthru = rec {
|
||||
inherit libPrefix;
|
||||
inherit libPrefix sitePackages;
|
||||
inherit zlibSupport;
|
||||
isPy2 = true;
|
||||
isPy27 = true;
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python27Packages; };
|
||||
executable = libPrefix;
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
@ -200,99 +202,4 @@ let
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
maintainers = with stdenv.lib.maintainers; [ chaoflow domenkozar ];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
# This function builds a Python module included in the main Python
|
||||
# distribution in a separate derivation.
|
||||
buildInternalPythonModule =
|
||||
{ moduleName
|
||||
, internalName ? "_" + moduleName
|
||||
, deps
|
||||
}:
|
||||
if includeModules then null else stdenv.mkDerivation rec {
|
||||
name = "python-${moduleName}-${python.version}";
|
||||
|
||||
inherit src patches preConfigure postConfigure configureFlags;
|
||||
|
||||
buildInputs = [ python ] ++ deps;
|
||||
|
||||
# We need to set this for python.buildEnv
|
||||
pythonPath = [];
|
||||
|
||||
inherit (mkPaths buildInputs) C_INCLUDE_PATH LIBRARY_PATH;
|
||||
|
||||
# non-python gdbm has a libintl dependency on i686-cygwin, not on x86_64-cygwin
|
||||
buildPhase = (if (stdenv.system == "i686-cygwin" && moduleName == "gdbm") then ''
|
||||
sed -i setup.py -e "s:libraries = \['gdbm'\]:libraries = ['gdbm', 'intl']:"
|
||||
'' else '''') + ''
|
||||
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
|
||||
[ -z "$(find build -name '*_failed.so' -print)" ]
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
''
|
||||
dest=$out/lib/${python.libPrefix}/site-packages
|
||||
mkdir -p $dest
|
||||
cp -p $(find . -name "*.${if stdenv.isCygwin then "dll" else "so"}") $dest/
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
# The Python modules included in the main Python distribution, built
|
||||
# as separate derivations.
|
||||
modules = {
|
||||
|
||||
bsddb = buildInternalPythonModule {
|
||||
moduleName = "bsddb";
|
||||
deps = [ db ];
|
||||
};
|
||||
|
||||
curses = buildInternalPythonModule {
|
||||
moduleName = "curses";
|
||||
deps = [ ncurses ];
|
||||
};
|
||||
|
||||
curses_panel = buildInternalPythonModule {
|
||||
moduleName = "curses_panel";
|
||||
deps = [ ncurses modules.curses ];
|
||||
};
|
||||
|
||||
crypt = buildInternalPythonModule {
|
||||
moduleName = "crypt";
|
||||
internalName = "crypt";
|
||||
deps = optional (stdenv ? glibc) stdenv.glibc;
|
||||
};
|
||||
|
||||
gdbm = buildInternalPythonModule {
|
||||
moduleName = "gdbm";
|
||||
internalName = "gdbm";
|
||||
deps = [ gdbm ] ++ stdenv.lib.optional stdenv.isCygwin gettext;
|
||||
};
|
||||
|
||||
sqlite3 = buildInternalPythonModule {
|
||||
moduleName = "sqlite3";
|
||||
deps = [ sqlite ];
|
||||
};
|
||||
|
||||
} // optionalAttrs x11Support {
|
||||
|
||||
tkinter = if stdenv.isCygwin then null else (buildInternalPythonModule {
|
||||
moduleName = "tkinter";
|
||||
deps = [ tcl tk xlibsWrapper libX11 ];
|
||||
});
|
||||
|
||||
} // {
|
||||
|
||||
readline = buildInternalPythonModule {
|
||||
moduleName = "readline";
|
||||
internalName = "readline";
|
||||
deps = [ readline ];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
in python // { inherit modules; }
|
||||
}
|
||||
|
@ -1659,6 +1659,7 @@ in
|
||||
|
||||
fontforge = lowPrio (callPackage ../tools/misc/fontforge {
|
||||
inherit (darwin.apple_sdk.frameworks) Carbon Cocoa;
|
||||
python = pythonSmall;
|
||||
});
|
||||
fontforge-gtk = callPackage ../tools/misc/fontforge {
|
||||
withGTK = true;
|
||||
@ -5494,6 +5495,11 @@ in
|
||||
python2 = python27;
|
||||
python3 = python35;
|
||||
|
||||
# Python uses multiple outputs, and by default `python` is without X11/tkinter.
|
||||
# This package only exists to prevent an infinite recursion and should only be used
|
||||
# for packages Python itself depends on.
|
||||
pythonSmall = python.override {x11Support = false;};
|
||||
|
||||
# pythonPackages further below, but assigned here because they need to be in sync
|
||||
pythonPackages = python2Packages;
|
||||
python2Packages = python27Packages;
|
||||
@ -7143,7 +7149,9 @@ in
|
||||
|
||||
gtkmathview = callPackage ../development/libraries/gtkmathview { };
|
||||
|
||||
glib = callPackage ../development/libraries/glib { };
|
||||
glib = callPackage ../development/libraries/glib {
|
||||
python = pythonSmall;
|
||||
};
|
||||
glib-tested = glib.override { # checked version separate to break cycles
|
||||
doCheck = true;
|
||||
libffi = libffi.override { doCheck = true; };
|
||||
@ -8262,7 +8270,9 @@ in
|
||||
|
||||
libxmi = callPackage ../development/libraries/libxmi { };
|
||||
|
||||
libxml2 = callPackage ../development/libraries/libxml2 { };
|
||||
libxml2 = callPackage ../development/libraries/libxml2 {
|
||||
python = pythonSmall;
|
||||
};
|
||||
libxml2Python = pkgs.buildEnv { # slightly hacky
|
||||
name = "libxml2+py-${self.libxml2.version}";
|
||||
paths = with libxml2; [ dev bin py ];
|
||||
@ -10345,11 +10355,12 @@ in
|
||||
inherit clangStdenv fetchurl fetchgit fetchpatch stdenv pkgconfig intltool freetype fontconfig
|
||||
libxslt expat libpng zlib perl mesa_drivers spice_protocol libunwind
|
||||
dbus libuuid openssl gperf m4 libevdev tradcpp libinput mcpp makeWrapper autoreconfHook
|
||||
autoconf automake libtool xmlto asciidoc flex bison python mtdev pixman
|
||||
autoconf automake libtool xmlto asciidoc flex bison mtdev pixman
|
||||
cairo epoxy;
|
||||
inherit (darwin) apple_sdk cf-private libobjc;
|
||||
bootstrap_cmds = if stdenv.isDarwin then darwin.bootstrap_cmds else null;
|
||||
mesa = mesa_noglu;
|
||||
python = pythonSmall;
|
||||
udev = if stdenv.isLinux then udev else null;
|
||||
libdrm = if stdenv.isLinux then libdrm else null;
|
||||
fglrxCompat = config.xorg.fglrxCompat or false; # `config` because we have no `xorg.override`
|
||||
@ -11502,7 +11513,9 @@ in
|
||||
|
||||
bgnet = callPackage ../data/documentation/bgnet { };
|
||||
|
||||
cacert = callPackage ../data/misc/cacert { };
|
||||
cacert = callPackage ../data/misc/cacert {
|
||||
python = pythonSmall;
|
||||
};
|
||||
|
||||
caladea = callPackage ../data/fonts/caladea {};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user