forked from mirrors/nixpkgs
python34: remove
Python 3.4 will receive it's final patch release in March 2019 and there won't be any releases anymore after that, so also not during NixOS 2019.03. Python 3.4 is not used anymore in Nixpkgs. In any case, migrating code from 3.4 to 3.4+ is trivial.
This commit is contained in:
parent
6a73df797c
commit
b1bdce0793
|
@ -483,8 +483,8 @@ and in this case the `python35` interpreter is automatically used.
|
||||||
|
|
||||||
### Interpreters
|
### Interpreters
|
||||||
|
|
||||||
Versions 2.7, 3.4, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
Versions 2.7, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
||||||
respectively `python27`, `python34`, `python35` and `python36`. The PyPy interpreter
|
respectively `python27`, `python35` and `python36`. The PyPy interpreter
|
||||||
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
||||||
`python35`. The default interpreter, `python`, maps to `python2`.
|
`python35`. The default interpreter, `python`, maps to `python2`.
|
||||||
The Nix expressions for the interpreters can be found in
|
The Nix expressions for the interpreters can be found in
|
||||||
|
@ -507,7 +507,7 @@ Each interpreter has the following attributes:
|
||||||
- `buildEnv`. Function to build python interpreter environments with extra packages bundled together. See section *python.buildEnv function* for usage and documentation.
|
- `buildEnv`. Function to build python interpreter environments with extra packages bundled together. See section *python.buildEnv function* for usage and documentation.
|
||||||
- `withPackages`. Simpler interface to `buildEnv`. See section *python.withPackages function* for usage and documentation.
|
- `withPackages`. Simpler interface to `buildEnv`. See section *python.withPackages function* for usage and documentation.
|
||||||
- `sitePackages`. Alias for `lib/${libPrefix}/site-packages`.
|
- `sitePackages`. Alias for `lib/${libPrefix}/site-packages`.
|
||||||
- `executable`. Name of the interpreter executable, e.g. `python3.4`.
|
- `executable`. Name of the interpreter executable, e.g. `python3.7`.
|
||||||
- `pkgs`. Set of Python packages for that specific interpreter. The package set can be modified by overriding the interpreter and passing `packageOverrides`.
|
- `pkgs`. Set of Python packages for that specific interpreter. The package set can be modified by overriding the interpreter and passing `packageOverrides`.
|
||||||
|
|
||||||
### Building packages and applications
|
### Building packages and applications
|
||||||
|
@ -529,7 +529,6 @@ attribute set is created for each available Python interpreter. The available
|
||||||
sets are
|
sets are
|
||||||
|
|
||||||
* `pkgs.python27Packages`
|
* `pkgs.python27Packages`
|
||||||
* `pkgs.python34Packages`
|
|
||||||
* `pkgs.python35Packages`
|
* `pkgs.python35Packages`
|
||||||
* `pkgs.python36Packages`
|
* `pkgs.python36Packages`
|
||||||
* `pkgs.python37Packages`
|
* `pkgs.python37Packages`
|
||||||
|
@ -837,7 +836,7 @@ community to help save time. No tool is preferred at the moment.
|
||||||
|
|
||||||
### Deterministic builds
|
### Deterministic builds
|
||||||
|
|
||||||
Python 2.7, 3.5 and 3.6 are now built deterministically and 3.4 mostly.
|
The Python interpreters are now built deterministically.
|
||||||
Minor modifications had to be made to the interpreters in order to generate
|
Minor modifications had to be made to the interpreters in order to generate
|
||||||
deterministic bytecode. This has security implications and is relevant for
|
deterministic bytecode. This has security implications and is relevant for
|
||||||
those using Python in a `nix-shell`.
|
those using Python in a `nix-shell`.
|
||||||
|
|
|
@ -1,214 +0,0 @@
|
||||||
{ stdenv, fetchurl, fetchpatch
|
|
||||||
, bzip2
|
|
||||||
, expat
|
|
||||||
, libffi
|
|
||||||
, gdbm
|
|
||||||
, lzma
|
|
||||||
, ncurses
|
|
||||||
, openssl
|
|
||||||
, readline
|
|
||||||
, sqlite
|
|
||||||
, tcl ? null, tk ? null, tix ? null, libX11 ? null, xproto ? null, x11Support ? false
|
|
||||||
, zlib
|
|
||||||
, callPackage
|
|
||||||
, self
|
|
||||||
, CF, configd
|
|
||||||
, python-setup-hook
|
|
||||||
# For the Python package set
|
|
||||||
, packageOverrides ? (self: super: {})
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert x11Support -> tcl != null
|
|
||||||
&& tk != null
|
|
||||||
&& xproto != null
|
|
||||||
&& libX11 != null;
|
|
||||||
|
|
||||||
with stdenv.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
majorVersion = "3.4";
|
|
||||||
minorVersion = "9";
|
|
||||||
minorVersionSuffix = "";
|
|
||||||
version = "${majorVersion}.${minorVersion}${minorVersionSuffix}";
|
|
||||||
libPrefix = "python${majorVersion}";
|
|
||||||
sitePackages = "lib/${libPrefix}/site-packages";
|
|
||||||
|
|
||||||
buildInputs = filter (p: p != null) [
|
|
||||||
zlib bzip2 expat lzma libffi gdbm sqlite readline ncurses openssl ]
|
|
||||||
++ optionals x11Support [ tcl tk libX11 xproto ]
|
|
||||||
++ optionals stdenv.isDarwin [ CF configd ];
|
|
||||||
|
|
||||||
hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false);
|
|
||||||
|
|
||||||
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 = "1n9b1kavmw8b7rc3gkrka4fjzrbfq9iqy791yncaf09bp9v9cqjr";
|
|
||||||
};
|
|
||||||
|
|
||||||
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
|
||||||
|
|
||||||
# Determinism: The interpreter is patched to write null timestamps when compiling python files.
|
|
||||||
# This way python doesn't try to update them when we freeze timestamps in nix store.
|
|
||||||
DETERMINISTIC_BUILD=1;
|
|
||||||
# Determinism: We fix the hashes of str, bytes and datetime objects.
|
|
||||||
PYTHONHASHSEED=0;
|
|
||||||
|
|
||||||
prePatch = optionalString stdenv.isDarwin ''
|
|
||||||
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
|
||||||
substituteInPlace configure --replace '-Wl,-stack_size,1000000' ' '
|
|
||||||
'';
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./no-ldconfig.patch
|
|
||||||
./ld_library_path.patch
|
|
||||||
] ++ optionals (x11Support && stdenv.isDarwin) [
|
|
||||||
./use-correct-tcl-tk-on-darwin.patch
|
|
||||||
] ++ optionals hasDistutilsCxxPatch [
|
|
||||||
# Fix for http://bugs.python.org/issue1222585
|
|
||||||
# Upstream distutils is calling C compiler to compile C++ code, which
|
|
||||||
# only works for GCC and Apple Clang. This makes distutils to call C++
|
|
||||||
# compiler when needed.
|
|
||||||
(fetchpatch {
|
|
||||||
url = "https://bugs.python.org/file47046/python-3.x-distutils-C++.patch";
|
|
||||||
sha256 = "0dgdn9k2kmw4wh90vdnjcrnn97ylxgx7mbn9l87fwz6j501jqvk8";
|
|
||||||
extraPrefix = "";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
# Determinism
|
|
||||||
substituteInPlace "Lib/py_compile.py" --replace "source_stats['mtime']" "(1 if 'DETERMINISTIC_BUILD' in os.environ else source_stats['mtime'])"
|
|
||||||
# Determinism. This is done unconditionally
|
|
||||||
substituteInPlace "Lib/importlib/_bootstrap.py" --replace "source_mtime = int(source_stats['mtime'])" "source_mtime = 1"
|
|
||||||
'' + 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
|
|
||||||
'';
|
|
||||||
|
|
||||||
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"}";
|
|
||||||
|
|
||||||
configureFlags = [
|
|
||||||
"--enable-shared"
|
|
||||||
"--with-threads"
|
|
||||||
"--without-ensurepip"
|
|
||||||
"--with-system-expat"
|
|
||||||
"--with-system-ffi"
|
|
||||||
]
|
|
||||||
# Never even try to use lchmod on linux,
|
|
||||||
# don't rely on detecting glibc-isms.
|
|
||||||
++ optional stdenv.hostPlatform.isLinux "ac_cv_func_lchmod=no";
|
|
||||||
|
|
||||||
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
|
|
||||||
''
|
|
||||||
+ optionalString stdenv.hostPlatform.isMusl ''
|
|
||||||
export NIX_CFLAGS_COMPILE+=" -DTHREAD_STACK_SIZE=0x100000"
|
|
||||||
''}
|
|
||||||
'';
|
|
||||||
|
|
||||||
setupHook = python-setup-hook sitePackages;
|
|
||||||
|
|
||||||
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*
|
|
||||||
&& "$item" != */test/support
|
|
||||||
&& "$item" != */test/libregrtest
|
|
||||||
&& "$item" != */test/regrtest.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
|
|
||||||
|
|
||||||
# Determinism: Windows installers were not deterministic.
|
|
||||||
# We're also not interested in building Windows installers.
|
|
||||||
find "$out" -name 'wininst*.exe' | xargs -r rm -f
|
|
||||||
|
|
||||||
# Use Python3 as default python
|
|
||||||
ln -s "$out/bin/idle3" "$out/bin/idle"
|
|
||||||
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"
|
|
||||||
|
|
||||||
# Get rid of retained dependencies on -dev packages, and remove
|
|
||||||
# some $TMPDIR references to improve binary reproducibility.
|
|
||||||
# Note that the .pyc file of _sysconfigdata.py should be regenerated!
|
|
||||||
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
|
|
||||||
|
|
||||||
# Determinism: rebuild all bytecode
|
|
||||||
# We exclude lib2to3 because that's Python 2 code which fails
|
|
||||||
# We rebuild three times, once for each optimization level
|
|
||||||
find $out -name "*.py" | $out/bin/python -m compileall -q -f -x "lib2to3" -i -
|
|
||||||
find $out -name "*.py" | $out/bin/python -O -m compileall -q -f -x "lib2to3" -i -
|
|
||||||
find $out -name "*.py" | $out/bin/python -OO -m compileall -q -f -x "lib2to3" -i -
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = let
|
|
||||||
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {
|
|
||||||
python = self;
|
|
||||||
overrides = packageOverrides;
|
|
||||||
};
|
|
||||||
in rec {
|
|
||||||
inherit libPrefix sitePackages x11Support hasDistutilsCxxPatch;
|
|
||||||
executable = "${libPrefix}m";
|
|
||||||
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
|
|
||||||
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
|
|
||||||
pkgs = pythonPackages;
|
|
||||||
isPy3 = true;
|
|
||||||
isPy34 = true;
|
|
||||||
is_py3k = true; # deprecated
|
|
||||||
interpreter = "${self}/bin/${executable}";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
doCheck = false; # expensive, and fails
|
|
||||||
|
|
||||||
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; [ fridh ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
From 85991e0d7f0e631240f3f6233bd65d1128a66dec Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frederik Rietdijk <fridh@fridh.nl>
|
|
||||||
Date: Thu, 14 Sep 2017 10:00:31 +0200
|
|
||||||
Subject: [PATCH] ctypes.util: support LD_LIBRARY_PATH
|
|
||||||
|
|
||||||
Backports support for LD_LIBRARY_PATH from 3.6
|
|
||||||
---
|
|
||||||
Lib/ctypes/util.py | 26 +++++++++++++++++++++++++-
|
|
||||||
1 file changed, 25 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
|
||||||
index 780cd5d21b..d7ac15070f 100644
|
|
||||||
--- a/Lib/ctypes/util.py
|
|
||||||
+++ b/Lib/ctypes/util.py
|
|
||||||
@@ -181,8 +181,32 @@ elif os.name == "posix":
|
|
||||||
def _findSoname_ldconfig(name):
|
|
||||||
return None
|
|
||||||
|
|
||||||
+ def _findLib_ld(name):
|
|
||||||
+ # See issue #9998 for why this is needed
|
|
||||||
+ expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
|
|
||||||
+ cmd = ['ld', '-t']
|
|
||||||
+ libpath = os.environ.get('LD_LIBRARY_PATH')
|
|
||||||
+ if libpath:
|
|
||||||
+ for d in libpath.split(':'):
|
|
||||||
+ cmd.extend(['-L', d])
|
|
||||||
+ cmd.extend(['-o', os.devnull, '-l%s' % name])
|
|
||||||
+ result = None
|
|
||||||
+ try:
|
|
||||||
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
|
||||||
+ stderr=subprocess.PIPE,
|
|
||||||
+ universal_newlines=True)
|
|
||||||
+ out, _ = p.communicate()
|
|
||||||
+ res = re.search(expr, os.fsdecode(out))
|
|
||||||
+ if res:
|
|
||||||
+ result = res.group(0)
|
|
||||||
+ except Exception as e:
|
|
||||||
+ pass # result will be None
|
|
||||||
+ return result
|
|
||||||
+
|
|
||||||
def find_library(name):
|
|
||||||
- return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
|
|
||||||
+ # See issue #9998
|
|
||||||
+ return _findSoname_ldconfig(name) or \
|
|
||||||
+ _get_soname(_findLib_gcc(name) or _findLib_ld(name))
|
|
||||||
|
|
||||||
################################################################
|
|
||||||
# test code
|
|
||||||
--
|
|
||||||
2.14.1
|
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
From 81bd99ad9058feb1d0361bc8862e8567c21a6142 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frederik Rietdijk <fridh@fridh.nl>
|
|
||||||
Date: Mon, 28 Aug 2017 09:24:06 +0200
|
|
||||||
Subject: [PATCH] Don't use ldconfig and speed up uuid load
|
|
||||||
|
|
||||||
---
|
|
||||||
Lib/ctypes/util.py | 52 ++--------------------------------------------------
|
|
||||||
Lib/uuid.py | 50 ++------------------------------------------------
|
|
||||||
2 files changed, 4 insertions(+), 98 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
|
||||||
index 595113bffd..780cd5d21b 100644
|
|
||||||
--- a/Lib/ctypes/util.py
|
|
||||||
+++ b/Lib/ctypes/util.py
|
|
||||||
@@ -88,28 +88,7 @@ elif os.name == "posix":
|
|
||||||
import re, tempfile
|
|
||||||
|
|
||||||
def _findLib_gcc(name):
|
|
||||||
- expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
|
|
||||||
- fdout, ccout = tempfile.mkstemp()
|
|
||||||
- os.close(fdout)
|
|
||||||
- cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;' \
|
|
||||||
- 'LANG=C LC_ALL=C $CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name
|
|
||||||
- try:
|
|
||||||
- f = os.popen(cmd)
|
|
||||||
- try:
|
|
||||||
- trace = f.read()
|
|
||||||
- finally:
|
|
||||||
- rv = f.close()
|
|
||||||
- finally:
|
|
||||||
- try:
|
|
||||||
- os.unlink(ccout)
|
|
||||||
- except FileNotFoundError:
|
|
||||||
- pass
|
|
||||||
- if rv == 10:
|
|
||||||
- raise OSError('gcc or cc command not found')
|
|
||||||
- res = re.search(expr, trace)
|
|
||||||
- if not res:
|
|
||||||
- return None
|
|
||||||
- return res.group(0)
|
|
||||||
+ return None
|
|
||||||
|
|
||||||
|
|
||||||
if sys.platform == "sunos5":
|
|
||||||
@@ -200,34 +179,7 @@ elif os.name == "posix":
|
|
||||||
else:
|
|
||||||
|
|
||||||
def _findSoname_ldconfig(name):
|
|
||||||
- import struct
|
|
||||||
- if struct.calcsize('l') == 4:
|
|
||||||
- machine = os.uname().machine + '-32'
|
|
||||||
- else:
|
|
||||||
- machine = os.uname().machine + '-64'
|
|
||||||
- mach_map = {
|
|
||||||
- 'x86_64-64': 'libc6,x86-64',
|
|
||||||
- 'ppc64-64': 'libc6,64bit',
|
|
||||||
- 'sparc64-64': 'libc6,64bit',
|
|
||||||
- 's390x-64': 'libc6,64bit',
|
|
||||||
- 'ia64-64': 'libc6,IA-64',
|
|
||||||
- }
|
|
||||||
- abi_type = mach_map.get(machine, 'libc6')
|
|
||||||
-
|
|
||||||
- # XXX assuming GLIBC's ldconfig (with option -p)
|
|
||||||
- regex = os.fsencode(
|
|
||||||
- '\s+(lib%s\.[^\s]+)\s+\(%s' % (re.escape(name), abi_type))
|
|
||||||
- try:
|
|
||||||
- with subprocess.Popen(['/sbin/ldconfig', '-p'],
|
|
||||||
- stdin=subprocess.DEVNULL,
|
|
||||||
- stderr=subprocess.DEVNULL,
|
|
||||||
- stdout=subprocess.PIPE,
|
|
||||||
- env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
|
|
||||||
- res = re.search(regex, p.stdout.read())
|
|
||||||
- if res:
|
|
||||||
- return os.fsdecode(res.group(1))
|
|
||||||
- except OSError:
|
|
||||||
- pass
|
|
||||||
+ return None
|
|
||||||
|
|
||||||
def find_library(name):
|
|
||||||
return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
|
|
||||||
diff --git a/Lib/uuid.py b/Lib/uuid.py
|
|
||||||
index 1061bffc43..846f5819f5 100644
|
|
||||||
--- a/Lib/uuid.py
|
|
||||||
+++ b/Lib/uuid.py
|
|
||||||
@@ -451,57 +451,11 @@ def _netbios_getnode():
|
|
||||||
return ((bytes[0]<<40) + (bytes[1]<<32) + (bytes[2]<<24) +
|
|
||||||
(bytes[3]<<16) + (bytes[4]<<8) + bytes[5])
|
|
||||||
|
|
||||||
-# Thanks to Thomas Heller for ctypes and for his help with its use here.
|
|
||||||
|
|
||||||
-# If ctypes is available, use it to find system routines for UUID generation.
|
|
||||||
-# XXX This makes the module non-thread-safe!
|
|
||||||
_uuid_generate_random = _uuid_generate_time = _UuidCreate = None
|
|
||||||
-try:
|
|
||||||
- import ctypes, ctypes.util
|
|
||||||
|
|
||||||
- # The uuid_generate_* routines are provided by libuuid on at least
|
|
||||||
- # Linux and FreeBSD, and provided by libc on Mac OS X.
|
|
||||||
- for libname in ['uuid', 'c']:
|
|
||||||
- try:
|
|
||||||
- lib = ctypes.CDLL(ctypes.util.find_library(libname))
|
|
||||||
- except:
|
|
||||||
- continue
|
|
||||||
- if hasattr(lib, 'uuid_generate_random'):
|
|
||||||
- _uuid_generate_random = lib.uuid_generate_random
|
|
||||||
- if hasattr(lib, 'uuid_generate_time'):
|
|
||||||
- _uuid_generate_time = lib.uuid_generate_time
|
|
||||||
- if _uuid_generate_random is not None:
|
|
||||||
- break # found everything we were looking for
|
|
||||||
-
|
|
||||||
- # The uuid_generate_* functions are broken on MacOS X 10.5, as noted
|
|
||||||
- # in issue #8621 the function generates the same sequence of values
|
|
||||||
- # in the parent process and all children created using fork (unless
|
|
||||||
- # those children use exec as well).
|
|
||||||
- #
|
|
||||||
- # Assume that the uuid_generate functions are broken from 10.5 onward,
|
|
||||||
- # the test can be adjusted when a later version is fixed.
|
|
||||||
- import sys
|
|
||||||
- if sys.platform == 'darwin':
|
|
||||||
- import os
|
|
||||||
- if int(os.uname().release.split('.')[0]) >= 9:
|
|
||||||
- _uuid_generate_random = _uuid_generate_time = None
|
|
||||||
-
|
|
||||||
- # On Windows prior to 2000, UuidCreate gives a UUID containing the
|
|
||||||
- # hardware address. On Windows 2000 and later, UuidCreate makes a
|
|
||||||
- # random UUID and UuidCreateSequential gives a UUID containing the
|
|
||||||
- # hardware address. These routines are provided by the RPC runtime.
|
|
||||||
- # NOTE: at least on Tim's WinXP Pro SP2 desktop box, while the last
|
|
||||||
- # 6 bytes returned by UuidCreateSequential are fixed, they don't appear
|
|
||||||
- # to bear any relationship to the MAC address of any network device
|
|
||||||
- # on the box.
|
|
||||||
- try:
|
|
||||||
- lib = ctypes.windll.rpcrt4
|
|
||||||
- except:
|
|
||||||
- lib = None
|
|
||||||
- _UuidCreate = getattr(lib, 'UuidCreateSequential',
|
|
||||||
- getattr(lib, 'UuidCreate', None))
|
|
||||||
-except:
|
|
||||||
- pass
|
|
||||||
+_uuid_generate_time = _UuidCreate = None
|
|
||||||
+
|
|
||||||
|
|
||||||
def _unixdll_getnode():
|
|
||||||
"""Get the hardware address on Unix using ctypes."""
|
|
||||||
--
|
|
||||||
2.14.1
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
diff --git a/setup.py b/setup.py
|
|
||||||
index 2779658..902d0eb 100644
|
|
||||||
--- a/setup.py
|
|
||||||
+++ b/setup.py
|
|
||||||
@@ -1699,9 +1699,6 @@ class PyBuildExt(build_ext):
|
|
||||||
# Rather than complicate the code below, detecting and building
|
|
||||||
# AquaTk is a separate method. Only one Tkinter will be built on
|
|
||||||
# Darwin - either AquaTk, if it is found, or X11 based Tk.
|
|
||||||
- if (host_platform == 'darwin' and
|
|
||||||
- self.detect_tkinter_darwin(inc_dirs, lib_dirs)):
|
|
||||||
- return
|
|
||||||
|
|
||||||
# Assume we haven't found any of the libraries or include files
|
|
||||||
# The versions with dots are used on Unix, and the versions without
|
|
||||||
@@ -1747,22 +1744,6 @@ class PyBuildExt(build_ext):
|
|
||||||
if dir not in include_dirs:
|
|
||||||
include_dirs.append(dir)
|
|
||||||
|
|
||||||
- # Check for various platform-specific directories
|
|
||||||
- if host_platform == 'sunos5':
|
|
||||||
- include_dirs.append('/usr/openwin/include')
|
|
||||||
- added_lib_dirs.append('/usr/openwin/lib')
|
|
||||||
- elif os.path.exists('/usr/X11R6/include'):
|
|
||||||
- include_dirs.append('/usr/X11R6/include')
|
|
||||||
- added_lib_dirs.append('/usr/X11R6/lib64')
|
|
||||||
- added_lib_dirs.append('/usr/X11R6/lib')
|
|
||||||
- elif os.path.exists('/usr/X11R5/include'):
|
|
||||||
- include_dirs.append('/usr/X11R5/include')
|
|
||||||
- added_lib_dirs.append('/usr/X11R5/lib')
|
|
||||||
- else:
|
|
||||||
- # Assume default location for X11
|
|
||||||
- include_dirs.append('/usr/X11/include')
|
|
||||||
- added_lib_dirs.append('/usr/X11/lib')
|
|
||||||
-
|
|
||||||
# If Cygwin, then verify that X is installed before proceeding
|
|
||||||
if host_platform == 'cygwin':
|
|
||||||
x11_inc = find_file('X11/Xlib.h', [], include_dirs)
|
|
||||||
@@ -1786,10 +1767,6 @@ class PyBuildExt(build_ext):
|
|
||||||
if host_platform in ['aix3', 'aix4']:
|
|
||||||
libs.append('ld')
|
|
||||||
|
|
||||||
- # Finally, link with the X11 libraries (not appropriate on cygwin)
|
|
||||||
- if host_platform != "cygwin":
|
|
||||||
- libs.append('X11')
|
|
||||||
-
|
|
||||||
ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
|
|
||||||
define_macros=[('WITH_APPINIT', 1)] + defs,
|
|
||||||
include_dirs = include_dirs,
|
|
|
@ -7788,7 +7788,6 @@ with pkgs;
|
||||||
python2Full = python2.override{x11Support=true;};
|
python2Full = python2.override{x11Support=true;};
|
||||||
python27Full = python27.override{x11Support=true;};
|
python27Full = python27.override{x11Support=true;};
|
||||||
python3Full = python3.override{x11Support=true;};
|
python3Full = python3.override{x11Support=true;};
|
||||||
python34Full = python34.override{x11Support=true;};
|
|
||||||
python35Full = python35.override{x11Support=true;};
|
python35Full = python35.override{x11Support=true;};
|
||||||
python36Full = python36.override{x11Support=true;};
|
python36Full = python36.override{x11Support=true;};
|
||||||
python37Full = python37.override{x11Support=true;};
|
python37Full = python37.override{x11Support=true;};
|
||||||
|
@ -7802,10 +7801,6 @@ with pkgs;
|
||||||
self = python27;
|
self = python27;
|
||||||
inherit (darwin) CF configd;
|
inherit (darwin) CF configd;
|
||||||
};
|
};
|
||||||
python34 = callPackage ../development/interpreters/python/cpython/3.4 {
|
|
||||||
inherit (darwin) CF configd;
|
|
||||||
self = python34;
|
|
||||||
};
|
|
||||||
python35 = callPackage ../development/interpreters/python/cpython/3.5 {
|
python35 = callPackage ../development/interpreters/python/cpython/3.5 {
|
||||||
inherit (darwin) CF configd;
|
inherit (darwin) CF configd;
|
||||||
self = python35;
|
self = python35;
|
||||||
|
@ -7827,7 +7822,6 @@ with pkgs;
|
||||||
|
|
||||||
# Python package sets.
|
# Python package sets.
|
||||||
python27Packages = lib.hiPrioSet (recurseIntoAttrs python27.pkgs);
|
python27Packages = lib.hiPrioSet (recurseIntoAttrs python27.pkgs);
|
||||||
python34Packages = python34.pkgs;
|
|
||||||
python35Packages = python35.pkgs;
|
python35Packages = python35.pkgs;
|
||||||
python36Packages = recurseIntoAttrs python36.pkgs;
|
python36Packages = recurseIntoAttrs python36.pkgs;
|
||||||
python37Packages = python37.pkgs;
|
python37Packages = python37.pkgs;
|
||||||
|
|
Loading…
Reference in a new issue