cab0b445be
Upstream won't support it, but let me trick the code into behaving as if glibc was older. It seems 3.3 branch should be unaffected.
159 lines
5.5 KiB
Nix
159 lines
5.5 KiB
Nix
{ stdenv, fetchurl
|
|
, bzip2
|
|
, gdbm
|
|
, lzma
|
|
, ncurses
|
|
, openssl
|
|
, readline
|
|
, sqlite
|
|
, tcl ? null, tk ? null, tix ? null, libX11 ? null, xproto ? null, x11Support ? false
|
|
, zlib
|
|
, callPackage
|
|
, self
|
|
, CF, configd
|
|
# For the Python package set
|
|
, pkgs, packageOverrides ? (self: super: {})
|
|
}:
|
|
|
|
assert x11Support -> tcl != null
|
|
&& tk != null
|
|
&& xproto != null
|
|
&& libX11 != null;
|
|
|
|
with stdenv.lib;
|
|
|
|
let
|
|
majorVersion = "3.4";
|
|
minorVersion = "6";
|
|
minorVersionSuffix = "";
|
|
pythonVersion = majorVersion;
|
|
version = "${majorVersion}.${minorVersion}${minorVersionSuffix}";
|
|
libPrefix = "python${majorVersion}";
|
|
sitePackages = "lib/${libPrefix}/site-packages";
|
|
|
|
buildInputs = filter (p: p != null) [
|
|
zlib bzip2 lzma gdbm sqlite readline ncurses openssl ]
|
|
++ optionals x11Support [ tcl tk libX11 xproto ]
|
|
++ optionals stdenv.isDarwin [ CF configd ];
|
|
|
|
in stdenv.mkDerivation {
|
|
name = "python3-${version}";
|
|
pythonVersion = majorVersion;
|
|
inherit majorVersion version;
|
|
|
|
inherit buildInputs;
|
|
|
|
src = fetchurl {
|
|
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
|
|
sha256 = "0h2z248hkf8x1ix1z8npkqs9cq62i322sl4rcjdkp7mawsxjhd7i";
|
|
};
|
|
|
|
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
|
|
|
prePatch = optionalString stdenv.isDarwin ''
|
|
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
|
substituteInPlace configure --replace '-Wl,-stack_size,1000000' ' '
|
|
'';
|
|
|
|
postPatch = optionalString (x11Support && (tix != null)) ''
|
|
substituteInPlace "Lib/tkinter/tix.py" --replace "os.environ.get('TIX_LIBRARY')" "os.environ.get('TIX_LIBRARY') or '${tix}/lib'"
|
|
''
|
|
# Avoid picking up getentropy() from glibc >= 2.25, as that would break
|
|
# on older kernels. http://bugs.python.org/issue29157
|
|
+ optionalString stdenv.isLinux
|
|
''
|
|
substituteInPlace Python/random.c --replace 'defined(HAVE_GETENTROPY)' '0'
|
|
cat Python/random.c
|
|
'';
|
|
|
|
preConfigure = ''
|
|
for i in /usr /sw /opt /pkg; do # improve purity
|
|
substituteInPlace ./setup.py --replace $i /no-such-path
|
|
done
|
|
${optionalString stdenv.isDarwin ''
|
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"
|
|
export MACOSX_DEPLOYMENT_TARGET=10.6
|
|
''}
|
|
|
|
configureFlagsArray=( --enable-shared --with-threads
|
|
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}"
|
|
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}"
|
|
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"
|
|
)
|
|
'';
|
|
|
|
setupHook = ./setup-hook.sh;
|
|
|
|
postInstall = ''
|
|
# needed for some packages, especially packages that backport functionality
|
|
# to 2.x from 3.x
|
|
for item in $out/lib/python${majorVersion}/test/*; do
|
|
if [[ "$item" != */test_support.py* ]]; then
|
|
rm -rf "$item"
|
|
else
|
|
echo $item
|
|
fi
|
|
done
|
|
touch $out/lib/python${majorVersion}/test/__init__.py
|
|
|
|
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
|
paxmark E $out/bin/python${majorVersion}
|
|
|
|
# Python on Nix is not manylinux1 compatible. https://github.com/NixOS/nixpkgs/issues/18484
|
|
echo "manylinux1_compatible=False" >> $out/lib/${libPrefix}/_manylinux.py
|
|
|
|
# Use Python3 as default python
|
|
ln -s "$out/bin/idle3" "$out/bin/idle"
|
|
ln -s "$out/bin/pip3" "$out/bin/pip"
|
|
ln -s "$out/bin/pydoc3" "$out/bin/pydoc"
|
|
ln -s "$out/bin/python3" "$out/bin/python"
|
|
ln -s "$out/bin/python3-config" "$out/bin/python-config"
|
|
ln -s "$out/lib/pkgconfig/python3.pc" "$out/lib/pkgconfig/python.pc"
|
|
'';
|
|
|
|
postFixup = ''
|
|
# Get rid of retained dependencies on -dev packages, and remove
|
|
# some $TMPDIR references to improve binary reproducibility.
|
|
for i in $out/lib/python${majorVersion}/_sysconfigdata.py $out/lib/python${majorVersion}/config-${majorVersion}m/Makefile; do
|
|
sed -i $i -e "s|-I/nix/store/[^ ']*||g" -e "s|-L/nix/store/[^ ']*||g" -e "s|$TMPDIR|/no-such-path|g"
|
|
done
|
|
|
|
# FIXME: should regenerate this.
|
|
rm $out/lib/python${majorVersion}/__pycache__/_sysconfigdata.cpython*
|
|
|
|
'';
|
|
|
|
passthru = let
|
|
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {python=self; overrides=packageOverrides;};
|
|
in rec {
|
|
inherit libPrefix sitePackages x11Support;
|
|
executable = "${libPrefix}m";
|
|
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
|
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
|
|
pkgs = pythonPackages;
|
|
isPy3 = true;
|
|
isPy34 = true;
|
|
is_py3k = true; # deprecated
|
|
interpreter = "${self}/bin/${executable}";
|
|
};
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = {
|
|
homepage = http://python.org;
|
|
description = "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 = licenses.psfl;
|
|
platforms = with platforms; linux ++ darwin;
|
|
maintainers = with maintainers; [ chaoflow domenkozar cstrahan ];
|
|
};
|
|
}
|