From 57ec9861f45784a16a469d8bfaf0792969a45455 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Wed, 6 Mar 2019 16:39:00 +0100 Subject: gnu: python: Fix cross compilation. * gnu/packages/python.scm (python-2.7)[arguments]: Add a configure flag to disable a check failing when cross-compiling. This is covered here: https://lists.yoctoproject.org/pipermail/poky/2013-June/008997.html, [native-inputs]: Add self and which when cross-compiling, (python-3.7)[arguments]: Refer to native python when cross-compiling. --- gnu/packages/python.scm | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 644c9d76667..b7a664271b6 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -38,7 +38,7 @@ ;;; Copyright © 2017 Frederick M. Muriithi ;;; Copyright © 2017, 2018 Adriano Peluso ;;; Copyright © 2017 Ben Sturmfels -;;; Copyright © 2017, 2018 Mathieu Othacehe +;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe ;;; Copyright © 2017 José Miguel Sánchez García ;;; Copyright © 2017 Roel Janssen ;;; Copyright © 2017, 2018 Kei Kebreau @@ -150,6 +150,13 @@ "INSTALL=install -c" "MKDIR_P=mkdir -p" + ;; Disable runtime check failing if cross-compiling, see: + ;; https://lists.yoctoproject.org/pipermail/poky/2013-June/008997.html + ,@(if (%current-target-system) + '("ac_cv_buggy_getaddrinfo=no" + "ac_cv_file__dev_ptmx=no" + "ac_cv_file__dev_ptc=no") + '()) (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib")) ;; With no -j argument tests use all available cpus, so provide one. @@ -292,7 +299,12 @@ ("tcl" ,tcl) ("tk" ,tk))) ; for tkinter (native-inputs - `(("pkg-config" ,pkg-config))) + `(("pkg-config" ,pkg-config) + ;; When cross-compiling, a native version of Python itself is needed. + ,@(if (%current-target-system) + `(("self" ,this-package) + ("which" ,which)) + '()))) (native-search-paths (list (search-path-specification (variable "PYTHONPATH") @@ -388,13 +400,16 @@ data types.") (if (null? opt) "none" (car opt))) (for-each (lambda (file) (apply invoke - `(,(string-append out "/bin/python3") - ,@opt - "-m" "compileall" - "-f" ; force rebuild - ;; Don't build lib2to3, because it's Python 2 code. - "-x" "lib2to3/.*" - ,file))) + `(,,(if (%current-target-system) + "python3" + '(string-append out + "/bin/python3")) + ,@opt + "-m" "compileall" + "-f" ; force rebuild + ;; Don't build lib2to3, because it's Python 2 code. + "-x" "lib2to3/.*" + ,file))) (find-files out "\\.py$"))) (list '() '("-O") '("-OO"))) #t))))))) -- cgit v1.3 From ceb9de75a6b39fd5df585418953d937361237202 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Sat, 29 Jun 2019 17:31:07 +0200 Subject: gnu: python: Further cross-compilation fixes. * gnu/packages/patches/python-2.7-search-paths.patch: Add cross-compilation support. * gnu/packages/patches/python-3-search-paths.patch: Ditto. * gnu/packages/patches/python-cross-compile.patch: New patch. * gnu/local.mk (dist_patch_DATA): Add above new patch. * gnu/packages/python.scm (python-2.7)[patches]: Add new patch above, [arguments]: Set _PYTHON_HOST_PLATFORM env variable when cross compiling. --- gnu/local.mk | 1 + gnu/packages/patches/python-2.7-search-paths.patch | 10 +- gnu/packages/patches/python-3-search-paths.patch | 11 +- gnu/packages/patches/python-cross-compile.patch | 145 +++++++++++++++++++++ gnu/packages/python.scm | 23 +++- 5 files changed, 181 insertions(+), 9 deletions(-) create mode 100644 gnu/packages/patches/python-cross-compile.patch (limited to 'gnu/packages/python.scm') diff --git a/gnu/local.mk b/gnu/local.mk index d4006c56eb5..7bde8663f8f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1246,6 +1246,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-CVE-2018-14647.patch \ %D%/packages/patches/python-axolotl-AES-fix.patch \ %D%/packages/patches/python-cairocffi-dlopen-path.patch \ + %D%/packages/patches/python-cross-compile.patch \ %D%/packages/patches/python-cffi-x87-stack-clean.patch \ %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \ %D%/packages/patches/python-configobj-setuptools.patch \ diff --git a/gnu/packages/patches/python-2.7-search-paths.patch b/gnu/packages/patches/python-2.7-search-paths.patch index a012bc8fe0e..5a345c76916 100644 --- a/gnu/packages/patches/python-2.7-search-paths.patch +++ b/gnu/packages/patches/python-2.7-search-paths.patch @@ -3,13 +3,17 @@ looking for headers and libraries. --- Python-2.7.10/setup.py 2015-10-07 18:33:18.125153186 +0200 +++ Python-2.7.10/setup.py 2015-10-07 18:33:47.497347552 +0200 -@@ -526,6 +526,10 @@ class PyBuildExt(build_ext): +@@ -526,6 +526,14 @@ class PyBuildExt(build_ext): inc_dirs += ['/system/include', '/atheos/autolnk/include'] inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) + # Always honor these variables. -+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) -+ inc_dirs += os.getenv('CPATH', '').split(os.pathsep) ++ if not cross_compiling: ++ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) ++ inc_dirs += os.getenv('CPATH', '').split(os.pathsep) ++ else: ++ lib_dirs = os.getenv('CROSS_LIBRARY_PATH', '').split(os.pathsep) ++ inc_dirs = os.getenv('CROSS_CPATH', '').split(os.pathsep) + # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) if host_platform in ['osf1', 'unixware7', 'openunix8']: diff --git a/gnu/packages/patches/python-3-search-paths.patch b/gnu/packages/patches/python-3-search-paths.patch index 5fea9c66b68..cf1647207b9 100644 --- a/gnu/packages/patches/python-3-search-paths.patch +++ b/gnu/packages/patches/python-3-search-paths.patch @@ -3,7 +3,7 @@ looking for headers and libraries. --- a/setup.py 2015-10-07 23:32:58.891329173 +0200 +++ b/setup.py 2015-10-07 23:46:29.653349924 +0200 -@@ -575,8 +575,8 @@ +@@ -575,15 +575,15 @@ # if a file is found in one of those directories, it can # be assumed that no additional -I,-L directives are needed. if not cross_compiling: @@ -14,3 +14,12 @@ looking for headers and libraries. else: # Add the sysroot paths. 'sysroot' is a compiler option used to # set the logical path of the standard system headers and + # libraries. +- lib_dirs = (self.compiler.library_dirs + ++ lib_dirs = (os.getenv('CROSS_LIBRARY_PATH', '').split(os.pathsep) + + sysroot_paths(('LDFLAGS', 'CC'), system_lib_dirs)) +- inc_dirs = (self.compiler.include_dirs + ++ inc_dirs = (os.getenv('CROSS_CPATH', '').split(os.pathsep) + + sysroot_paths(('CPPFLAGS', 'CFLAGS', 'CC'), + system_include_dirs)) + exts = [] diff --git a/gnu/packages/patches/python-cross-compile.patch b/gnu/packages/patches/python-cross-compile.patch new file mode 100644 index 00000000000..5a470e1852d --- /dev/null +++ b/gnu/packages/patches/python-cross-compile.patch @@ -0,0 +1,145 @@ +Patch taken from https://bugs.python.org/issue22724 and augmented with +following Nix patch +https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/interpreters/python/cpython/2.7/cross-compile.patch +to fix the whole cross-compilation circus. + +--- + Makefile.pre.in | 14 +++++++------- + configure | 5 ++++- + setup.py | 9 ++++++--- + 3 files changed, 17 insertions(+), 11 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 2a14f3323b..6239fc32fc 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -492,7 +492,7 @@ $(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) + $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) + + platform: $(BUILDPYTHON) pybuilddir.txt +- $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform ++ $(RUNSHARED) $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform + + # Create build directory and generate the sysconfig build-time data there. + # pybuilddir.txt contains the name of the build dir and is used for +@@ -503,7 +503,7 @@ platform: $(BUILDPYTHON) pybuilddir.txt + # or removed in case of failure. + pybuilddir.txt: $(BUILDPYTHON) + @echo "none" > ./pybuilddir.txt +- $(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars ;\ ++ $(RUNSHARED) $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars ;\ + if test $$? -ne 0 ; then \ + echo "generate-posix-vars failed" ; \ + rm -f ./pybuilddir.txt ; \ +@@ -525,7 +525,7 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o + esac; \ + $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ +- $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build ++ $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build + + # Build static library + # avoid long command lines, same as LIBRARY_OBJS +@@ -928,7 +928,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoninstall bininstall maninstall @FRAMEWORKI + upgrade) ensurepip="--upgrade" ;; \ + install|*) ensurepip="" ;; \ + esac; \ +- $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ ++ $(RUNSHARED) $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) -m ensurepip \ + $$ensurepip --root=$(DESTDIR)/ ; \ + fi + +@@ -939,7 +939,7 @@ altinstall: commoninstall + upgrade) ensurepip="--altinstall --upgrade --no-default-pip" ;; \ + install|*) ensurepip="--altinstall --no-default-pip" ;; \ + esac; \ +- $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ ++ $(RUNSHARED) $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) -m ensurepip \ + $$ensurepip --root=$(DESTDIR)/ ; \ + fi + +@@ -1270,7 +1270,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods +- $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ ++ $(RUNSHARED) $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +@@ -1344,7 +1344,7 @@ frameworkinstallextras: + # This installs a few of the useful scripts in Tools/scripts + scriptsinstall: + SRCDIR=$(srcdir) $(RUNSHARED) \ +- $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \ ++ $(PY_BUILD_ENVIRON) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --root=$(DESTDIR)/ +diff --git a/configure b/configure +index 67300fe2b6..6050f588c5 100755 +--- a/configure ++++ b/configure +@@ -741,6 +741,7 @@ CONFIG_ARGS + SOVERSION + VERSION + PYTHON_FOR_BUILD ++PY_BUILD_ENVIRON + PYTHON_FOR_REGEN + host_os + host_vendor +@@ -2964,7 +2965,8 @@ $as_echo_n "checking for python interpreter for cross build... " >&6; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 + $as_echo "$interp" >&6; } +- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp ++ PY_BUILD_ENVIRON='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR)' ++ PYTHON_FOR_BUILD=$interp + fi + elif test "$cross_compiling" = maybe; then + as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5 +@@ -2974,6 +2976,7 @@ fi + + + ++ + if test "$prefix" != "/"; then + prefix=`echo "$prefix" | sed -e 's/\/$//g'` + fi +diff --git a/setup.py b/setup.py +index cb47a2339c..472e7e2b26 100644 +--- a/setup.py ++++ b/setup.py +@@ -497,8 +497,6 @@ class PyBuildExt(build_ext): + if not cross_compiling: + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') +- if cross_compiling: +- self.add_gcc_paths() + self.add_multiarch_paths() + + # Add paths specified in the environment variables LDFLAGS and +@@ -556,7 +554,10 @@ class PyBuildExt(build_ext): + # be assumed that no additional -I,-L directives are needed. + inc_dirs = self.compiler.include_dirs[:] + lib_dirs = self.compiler.library_dirs[:] +- if not cross_compiling: ++ if cross_compiling: ++ inc_dirs = [] ++ lib_dirs = [] ++ else: + for d in ( + '/usr/include', + ): +@@ -621,6 +622,8 @@ class PyBuildExt(build_ext): + # Some modules that are normally always on: + #exts.append( Extension('_weakref', ['_weakref.c']) ) + ++ self.compiler.library_dirs = lib_dirs + [ '.' ] ++ + # array objects + exts.append( Extension('array', ['arraymodule.c']) ) + +-- +2.17.1 + diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index b7a664271b6..504a468babb 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -109,7 +109,8 @@ "python-2-deterministic-build-info.patch" "python-2.7-site-prefixes.patch" "python-2.7-source-date-epoch.patch" - "python-2.7-adjust-tests.patch")) + "python-2.7-adjust-tests.patch" + "python-cross-compile.patch")) (modules '((guix build utils))) (snippet '(begin @@ -177,6 +178,12 @@ (add-before 'configure 'patch-lib-shells (lambda _ + ;; This variable is used in setup.py to enable cross compilation + ;; specific switches. As it is not set properly by configure + ;; script, set it manually. + ,@(if (%current-target-system) + '((setenv "_PYTHON_HOST_PLATFORM" "")) + '()) ;; Filter for existing files, since some may not exist in all ;; versions of python that are built with this recipe. (substitute* (filter file-exists? @@ -256,7 +263,9 @@ (if (null? opt) "none" (car opt))) (for-each (lambda (file) (apply invoke - `(,(string-append out "/bin/python") + `(,,(if (%current-target-system) + "python2" + '(string-append out "/bin/python")) ,@opt "-m" "compileall" "-f" ; force rebuild @@ -302,7 +311,7 @@ `(("pkg-config" ,pkg-config) ;; When cross-compiling, a native version of Python itself is needed. ,@(if (%current-target-system) - `(("self" ,this-package) + `(("python2" ,this-package) ("which" ,which)) '()))) (native-search-paths @@ -376,10 +385,11 @@ data types.") ((#:phases phases) `(modify-phases ,phases (add-before 'check 'set-TZDIR - (lambda* (#:key inputs #:allow-other-keys) + (lambda* (#:key inputs native-inputs #:allow-other-keys) ;; test_email requires the Olson time zone database. (setenv "TZDIR" - (string-append (assoc-ref inputs "tzdata") + (string-append (assoc-ref + (or native-inputs inputs) "tzdata") "/share/zoneinfo")) #t)) ;; Unset SOURCE_DATE_EPOCH while running the test-suite and set it @@ -415,6 +425,9 @@ data types.") #t))))))) (native-inputs `(("tzdata" ,tzdata-for-tests) + ,@(if (%current-target-system) + `(("python3" ,this-package)) + '()) ,@(package-native-inputs python-2))) (native-search-paths (list (search-path-specification -- cgit v1.3 From 5f1000d5d4cc4dfc9a1fe220457c17ad011d9e33 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Fri, 29 Nov 2019 23:56:03 +0100 Subject: gnu: libffi: Update to 3.3. * gnu/packages/patches/libffi-3.2.1-complex-alpha.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/libffi.scm (libffi): Update to 3.3. [source](patches): Remove. * gnu/packages/python.scm (python-3.7)[arguments]: Remove workaround. --- gnu/local.mk | 1 - gnu/packages/libffi.scm | 15 +++--------- .../patches/libffi-3.2.1-complex-alpha.patch | 28 ---------------------- gnu/packages/python.scm | 7 +----- 4 files changed, 4 insertions(+), 47 deletions(-) delete mode 100644 gnu/packages/patches/libffi-3.2.1-complex-alpha.patch (limited to 'gnu/packages/python.scm') diff --git a/gnu/local.mk b/gnu/local.mk index 25dfef38495..f13d8f3645e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1066,7 +1066,6 @@ dist_patch_DATA = \ %D%/packages/patches/libgnome-encoding.patch \ %D%/packages/patches/libgnomeui-utf8.patch \ %D%/packages/patches/libgpg-error-gawk-compat.patch \ - %D%/packages/patches/libffi-3.2.1-complex-alpha.patch \ %D%/packages/patches/libjpeg-turbo-CVE-2019-2201.patch \ %D%/packages/patches/libjxr-fix-function-signature.patch \ %D%/packages/patches/libjxr-fix-typos.patch \ diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm index b61dbc8657e..52654ddf3f6 100644 --- a/gnu/packages/libffi.scm +++ b/gnu/packages/libffi.scm @@ -41,7 +41,7 @@ (define-public libffi (package (name "libffi") - (version "3.2.1") + (version "3.3") (source (origin (method url-fetch) (uri @@ -49,21 +49,12 @@ name "-" version ".tar.gz")) (sha256 (base32 - "0dya49bnhianl0r65m65xndz6ls2jn1xngyn72gd28ls3n7bnvnh")) - (patches (search-patches "libffi-3.2.1-complex-alpha.patch")))) + "0mi0cpf8aa40ljjmzxb7im6dbj45bb0kllcd09xgmp834y9agyvj")))) (build-system gnu-build-system) (arguments `(;; Prevent the build system from passing -march and -mtune to the ;; compiler. See "ax_cc_maxopt.m4" and "ax_gcc_archflag.m4". - #:configure-flags '("--enable-portable-binary" "--without-gcc-arch") - #:phases - (modify-phases %standard-phases - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (define out (assoc-ref outputs "out")) - (symlink (string-append out "/lib/libffi-3.2.1/include") - (string-append out "/include")) - #t))))) + #:configure-flags '("--enable-portable-binary" "--without-gcc-arch"))) (outputs '("out" "debug")) (synopsis "Foreign function call interface library") (description diff --git a/gnu/packages/patches/libffi-3.2.1-complex-alpha.patch b/gnu/packages/patches/libffi-3.2.1-complex-alpha.patch deleted file mode 100644 index ebbc0635a5b..00000000000 --- a/gnu/packages/patches/libffi-3.2.1-complex-alpha.patch +++ /dev/null @@ -1,28 +0,0 @@ -The patch fixes build failure of form: - ../src/alpha/osf.S:298:2: error: #error "osf.S out of sync with ffi.h" -Upstream fixed the bug in a more invasive way -but didn't have releases since 3.2.1. - -The patch is taken from Gentoo: -https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-libs/libffi/files/libffi-3.2.1-complex_alpha.patch - ---- libffi-3.2.1/src/alpha/osf.S 2015-01-16 10:46:15.000000000 +0100 -+++ libffi-3.2.1/src/alpha/osf.S 2015-01-16 10:46:24.000000000 +0100 -@@ -279,6 +279,7 @@ - .gprel32 $load_64 # FFI_TYPE_SINT64 - .gprel32 $load_none # FFI_TYPE_STRUCT - .gprel32 $load_64 # FFI_TYPE_POINTER -+ .gprel32 $load_none # FFI_TYPE_COMPLEX - - /* Assert that the table above is in sync with ffi.h. */ - -@@ -294,7 +295,8 @@ - || FFI_TYPE_SINT64 != 12 \ - || FFI_TYPE_STRUCT != 13 \ - || FFI_TYPE_POINTER != 14 \ -- || FFI_TYPE_LAST != 14 -+ || FFI_TYPE_COMPLEX != 15 \ -+ || FFI_TYPE_LAST != 15 - #error "osf.S out of sync with ffi.h" - #endif - diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 43b4044e725..ef1c8e4a090 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -377,12 +377,7 @@ data types.") " --exclude test_mmap" ;; test_socket may hang and eventually run out of memory ;; on some systems: . - " test_socket" - ;; XXX: test_ctypes fails on some platforms due to a problem in - ;; libffi 3.2.1: . - ,@(if (string-prefix? "aarch64" (%current-system)) - '(" test_ctypes") - '())))) + " test_socket"))) ((#:phases phases) `(modify-phases ,phases (add-before 'check 'set-TZDIR -- cgit v1.3 From 2c854762cece1f1d49ab98e600dd4610b1aa05d7 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 14 Jan 2020 18:15:20 +0100 Subject: gnu: python2: Update to 2.7.17. * gnu/packages/python.scm (python-2.7): Update to 2.7.17. --- gnu/packages/python.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index ef1c8e4a090..7aa170ffc0b 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -97,7 +97,7 @@ (define-public python-2.7 (package (name "python2") - (version "2.7.16") + (version "2.7.17") (source (origin (method url-fetch) @@ -105,7 +105,7 @@ version "/Python-" version ".tar.xz")) (sha256 (base32 - "1mqfcqp5y8r0bfyr7ppl74n0lig45p9mc4b8adlcpvj74rhfy8pj")) + "0hds28cg226m8j8sr394nm9yc4gxhvlv109w0avsf2mxrlrz0hsd")) (patches (search-patches "python-2.7-search-paths.patch" "python-2-deterministic-build-info.patch" "python-2.7-site-prefixes.patch" -- cgit v1.3 From b15d1c467fd5de9724c3a47c4d0d9c26246e8dc9 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 14 Jan 2020 19:52:58 +0100 Subject: gnu: Python: Update to 3.8.1. * gnu/packages/python.scm (python-3.7): Rename to ... (python-3.8): ... this. Update to 3.8.1. [source](patches): Add "python-3.8-fix-tests.patch". [source](snippet): Adjust for renamed file. (python-3): Alias to PYTHON-3.8. * gnu/packages/patches/python-3-search-paths.patch: Adjust for 3.8. * gnu/packages/patches/python-3.8-search-paths.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. --- gnu/local.mk | 1 - gnu/packages/patches/python-3-search-paths.patch | 28 ++++++++--------- gnu/packages/patches/python-3.8-search-paths.patch | 17 ---------- gnu/packages/python.scm | 36 ++++------------------ 4 files changed, 20 insertions(+), 62 deletions(-) delete mode 100644 gnu/packages/patches/python-3.8-search-paths.patch (limited to 'gnu/packages/python.scm') diff --git a/gnu/local.mk b/gnu/local.mk index 63a3fcffbef..4f1385d73b6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1307,7 +1307,6 @@ dist_patch_DATA = \ %D%/packages/patches/python-3-deterministic-build-info.patch \ %D%/packages/patches/python-3-search-paths.patch \ %D%/packages/patches/python-3-fix-tests.patch \ - %D%/packages/patches/python-3.8-search-paths.patch \ %D%/packages/patches/python-3.8-fix-tests.patch \ %D%/packages/patches/python-CVE-2018-14647.patch \ %D%/packages/patches/python-axolotl-AES-fix.patch \ diff --git a/gnu/packages/patches/python-3-search-paths.patch b/gnu/packages/patches/python-3-search-paths.patch index cf1647207b9..aaf7236631b 100644 --- a/gnu/packages/patches/python-3-search-paths.patch +++ b/gnu/packages/patches/python-3-search-paths.patch @@ -3,23 +3,23 @@ looking for headers and libraries. --- a/setup.py 2015-10-07 23:32:58.891329173 +0200 +++ b/setup.py 2015-10-07 23:46:29.653349924 +0200 -@@ -575,15 +575,15 @@ +@@ -676,15 +676,15 @@ # if a file is found in one of those directories, it can # be assumed that no additional -I,-L directives are needed. - if not cross_compiling: -- lib_dirs = self.compiler.library_dirs + system_lib_dirs -- inc_dirs = self.compiler.include_dirs + system_include_dirs -+ lib_dirs = os.getenv('LIBRARY_PATH', '').split(os.pathsep) -+ inc_dirs = os.getenv('CPATH', '').split(os.pathsep) + if not CROSS_COMPILING: +- self.lib_dirs = self.compiler.library_dirs + system_lib_dirs +- self.inc_dirs = self.compiler.include_dirs + system_include_dirs ++ self.lib_dirs = os.getenv('LIBRARY_PATH', '').split(os.pathsep) ++ self.inc_dirs = os.getenv('CPATH', '').split(os.pathsep) else: # Add the sysroot paths. 'sysroot' is a compiler option used to # set the logical path of the standard system headers and # libraries. -- lib_dirs = (self.compiler.library_dirs + -+ lib_dirs = (os.getenv('CROSS_LIBRARY_PATH', '').split(os.pathsep) + - sysroot_paths(('LDFLAGS', 'CC'), system_lib_dirs)) -- inc_dirs = (self.compiler.include_dirs + -+ inc_dirs = (os.getenv('CROSS_CPATH', '').split(os.pathsep) + - sysroot_paths(('CPPFLAGS', 'CFLAGS', 'CC'), - system_include_dirs)) - exts = [] +- self.lib_dirs = (self.compiler.library_dirs + ++ self.lib_dirs = (os.getenv('CROSS_LIBRARY_PATH', '').split(os.pathsep) + + sysroot_paths(('LDFLAGS', 'CC'), system_lib_dirs)) +- self.inc_dirs = (self.compiler.include_dirs + ++ self.inc_dirs = (os.getenv('CROSS_CPATH', '').split(os.pathsep) + + sysroot_paths(('CPPFLAGS', 'CFLAGS', 'CC'), + system_include_dirs)) + diff --git a/gnu/packages/patches/python-3.8-search-paths.patch b/gnu/packages/patches/python-3.8-search-paths.patch deleted file mode 100644 index 88f19850bf0..00000000000 --- a/gnu/packages/patches/python-3.8-search-paths.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/setup.py b/setup.py -index 20d7f35..5751083 100644 ---- a/setup.py -+++ b/setup.py -@@ -676,8 +676,8 @@ class PyBuildExt(build_ext): - # if a file is found in one of those directories, it can - # be assumed that no additional -I,-L directives are needed. - if not CROSS_COMPILING: -- self.lib_dirs = self.compiler.library_dirs + system_lib_dirs -- self.inc_dirs = self.compiler.include_dirs + system_include_dirs -+ self.lib_dirs = os.getenv('LIBRARY_PATH', '').split(os.pathsep) -+ self.inc_dirs = os.getenv('CPATH', '').split(os.pathsep) - else: - # Add the sysroot paths. 'sysroot' is a compiler option used to - # set the logical path of the standard system headers and --- -2.23.0 diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 7aa170ffc0b..96caaae0b34 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -344,27 +344,28 @@ data types.") (name "python") (properties `((superseded . ,python-2))))) -(define-public python-3.7 +(define-public python-3.8 (package (inherit python-2) (name "python") - (version "3.7.4") + (version "3.8.1") (source (origin (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" version "/Python-" version ".tar.xz")) (patches (search-patches "python-3-fix-tests.patch" + "python-3.8-fix-tests.patch" "python-3-deterministic-build-info.patch" "python-3-search-paths.patch")) (sha256 (base32 - "0gxiv5617zd7dnqm5k9r4q2188lk327nf9jznwq9j6b8p0s92ygv")) + "1s4lwn5vzsajlc88m6hkghsvnjw4d00l2dsgng0m2w6vyqbl32bm")) (modules '((guix build utils))) (snippet '(begin ;; Delete the bundled copy of libexpat. (delete-file-recursively "Modules/expat") - (substitute* "Modules/Setup.dist" + (substitute* "Modules/Setup" ;; Link Expat instead of embedding the bundled one. (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n")) #t)))) @@ -432,33 +433,8 @@ data types.") (version-major+minor version) "/site-packages")))))))) -(define-public python-3.8 - (package - (inherit python-3.7) - (name "python-next") - (version "3.8.0") - (source - (origin - (inherit (package-source python-3.7)) - (uri (string-append "https://www.python.org/ftp/python/" - version "/Python-" version ".tar.xz")) - (sha256 (base32 "110d0did9rxn7rg85kf2fwli5hqq44xv2d8bi7d92m7v2d728mmk")) - (patches (search-patches - "python-3.8-search-paths.patch" - "python-3-fix-tests.patch" - "python-3.8-fix-tests.patch" - "python-3-deterministic-build-info.patch")) - (snippet - '(begin - ;; Delete the bundled copy of libexpat. - (delete-file-recursively "Modules/expat") - (substitute* "Modules/Setup" - ;; Link Expat instead of embedding the bundled one. - (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n")) - #t)))))) - ;; Current 3.x version. -(define-public python-3 python-3.7) +(define-public python-3 python-3.8) ;; Current major version. (define-public python python-3) -- cgit v1.3 From 53453242b7479b0d26939ac5c383b58a7d51f85d Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Thu, 5 Mar 2020 18:10:09 +0100 Subject: gnu: Python: Update to 3.8.2. * gnu/packages/python.scm (python-3.8): Update to 3.8.2. --- gnu/packages/python.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 96caaae0b34..8e28265fbed 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -347,7 +347,7 @@ data types.") (define-public python-3.8 (package (inherit python-2) (name "python") - (version "3.8.1") + (version "3.8.2") (source (origin (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" @@ -359,7 +359,7 @@ data types.") "python-3-search-paths.patch")) (sha256 (base32 - "1s4lwn5vzsajlc88m6hkghsvnjw4d00l2dsgng0m2w6vyqbl32bm")) + "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6")) (modules '((guix build utils))) (snippet '(begin -- cgit v1.3 From 67ca82e6ddc9f1c87fa8c033729a1f53b7c2b3ba Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 1 Apr 2020 12:58:32 +0200 Subject: gnu: Python: Fix test failure on ARMv7. * gnu/packages/patches/python-3-arm-alignment.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/python.scm (python-3.8)[source](patches): Add it when the current system is ARM. --- gnu/local.mk | 1 + gnu/packages/patches/python-3-arm-alignment.patch | 21 ++++++++++++++++++ gnu/packages/python.scm | 27 +++++++++++++++++------ 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 gnu/packages/patches/python-3-arm-alignment.patch (limited to 'gnu/packages/python.scm') diff --git a/gnu/local.mk b/gnu/local.mk index 208e25572fd..1599b0933a5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1344,6 +1344,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-2.7-search-paths.patch \ %D%/packages/patches/python-2.7-site-prefixes.patch \ %D%/packages/patches/python-2.7-source-date-epoch.patch \ + %D%/packages/patches/python-3-arm-alignment.patch \ %D%/packages/patches/python-3-deterministic-build-info.patch \ %D%/packages/patches/python-3-search-paths.patch \ %D%/packages/patches/python-3-fix-tests.patch \ diff --git a/gnu/packages/patches/python-3-arm-alignment.patch b/gnu/packages/patches/python-3-arm-alignment.patch new file mode 100644 index 00000000000..065c1a7bb2e --- /dev/null +++ b/gnu/packages/patches/python-3-arm-alignment.patch @@ -0,0 +1,21 @@ +Ensure memory accesses in the sha3 module are aligned on ARM as it causes +problems when running 32-bit code on a 64-bit kernel. + +Patch taken from upstream bug report: +https://bugs.python.org/issue36515 + +--- a/Modules/_sha3/sha3module.c ++++ b/Modules/_sha3/sha3module.c +@@ -64,6 +64,12 @@ + #define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN + #endif + ++/* Bus error on 32-bit ARM due to un-aligned memory accesses; 64-bit ARM ++ * doesn't complain but un-aligned memory accesses are sub-optimal */ ++#if defined(__arm__) || defined(__aarch64__) ++#define NO_MISALIGNED_ACCESSES ++#endif ++ + /* mangle names */ + #define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb + #define Keccak_HashFinal _PySHA3_Keccak_HashFinal diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 8e28265fbed..e9a20dc4183 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -26,7 +26,7 @@ ;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Dylan Jeffers ;;; Copyright © 2016 David Craven -;;; Copyright © 2016, 2017, 2018, 2019 Marius Bakke +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke ;;; Copyright © 2016, 2017 Stefan Reichör ;;; Copyright © 2016 Dylan Jeffers ;;; Copyright © 2016, 2017 Alex Vong @@ -92,7 +92,9 @@ #:use-module (guix download) #:use-module (guix utils) #:use-module (guix build-system gnu) - #:use-module (guix build-system trivial)) + #:use-module (guix build-system trivial) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) (define-public python-2.7 (package @@ -352,11 +354,22 @@ data types.") (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" version "/Python-" version ".tar.xz")) - (patches (search-patches - "python-3-fix-tests.patch" - "python-3.8-fix-tests.patch" - "python-3-deterministic-build-info.patch" - "python-3-search-paths.patch")) + (patches (append + ;; Disable unaligned accesses in the sha3 module on ARM as + ;; it causes a test failure when building 32-bit Python on a + ;; 64-bit kernel. See . + ;; TODO: Remove the conditional on the next rebuild cycle. + (let ((system (or (%current-target-system) + (%current-system)))) + (if (any (cute string-prefix? <> system) + '("arm" "aarch64")) + (list (search-patch "python-3-arm-alignment.patch")) + '())) + (search-patches + "python-3-fix-tests.patch" + "python-3.8-fix-tests.patch" + "python-3-deterministic-build-info.patch" + "python-3-search-paths.patch"))) (sha256 (base32 "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6")) -- cgit v1.3 From 3cff86db8a510bc2731b9899a6035ebda5225adc Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Thu, 2 Apr 2020 17:11:17 +0200 Subject: gnu: Python: Move arm-alignment.patch to a native-input + phase. This follows up 67ca82e6ddc9f1c87fa8c033729a1f53b7c2b3ba which was ineffective when running 'guix build --system=armhf-linux python' on e.g. x86_64-linux because the conditional would always return the native system. * gnu/packages/python.scm (python-3.8)[native-inputs]: Add "arm-alignment.patch". [arguments]: Add phase to apply it. [source](patches): Remove it. * gnu/packages/commencement.scm (python-boot0): Prevent inheriting the phase. --- gnu/packages/commencement.scm | 12 ++++++++++- gnu/packages/python.scm | 48 ++++++++++++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 18 deletions(-) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 4c51fa0cf1d..7e969faafe9 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -3182,7 +3182,17 @@ the bootstrap environment." ;; Python package won't interfere with this one. ((#:make-flags _ ''()) ''()) ((#:phases phases) - `(modify-phases ,phases + ;; Remove the 'apply-alignment-patch' phase if present to avoid + ;; rebuilding this package. TODO: for the next rebuild cycle, + ;; consider inlining all the arguments instead of inheriting to + ;; make it easier to patch Python without risking a full rebuild. + ;; Or better yet, change to 'python-on-guile'. + `(modify-phases ,@(list (match phases + (('modify-phases original-phases + changes ... + ('add-after unpack apply-alignment-patch _)) + `(modify-phases ,original-phases ,@changes)) + (_ phases))) (add-before 'configure 'disable-modules (lambda _ (substitute* "setup.py" diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index e9a20dc4183..f0a6193a921 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -354,22 +354,11 @@ data types.") (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" version "/Python-" version ".tar.xz")) - (patches (append - ;; Disable unaligned accesses in the sha3 module on ARM as - ;; it causes a test failure when building 32-bit Python on a - ;; 64-bit kernel. See . - ;; TODO: Remove the conditional on the next rebuild cycle. - (let ((system (or (%current-target-system) - (%current-system)))) - (if (any (cute string-prefix? <> system) - '("arm" "aarch64")) - (list (search-patch "python-3-arm-alignment.patch")) - '())) - (search-patches - "python-3-fix-tests.patch" - "python-3.8-fix-tests.patch" - "python-3-deterministic-build-info.patch" - "python-3-search-paths.patch"))) + (patches (search-patches + "python-3-fix-tests.patch" + "python-3.8-fix-tests.patch" + "python-3-deterministic-build-info.patch" + "python-3-search-paths.patch")) (sha256 (base32 "1ps5v323cp5czfshqjmbsqw7nvrdpcbk06f62jbzaqik4gfffii6")) @@ -394,6 +383,7 @@ data types.") " test_socket"))) ((#:phases phases) `(modify-phases ,phases + (add-before 'check 'set-TZDIR (lambda* (#:key inputs native-inputs #:allow-other-keys) ;; test_email requires the Olson time zone database. @@ -432,9 +422,33 @@ data types.") ,file))) (find-files out "\\.py$"))) (list '() '("-O") '("-OO"))) - #t))))))) + #t))) + ;; XXX: Apply patch on ARM platforms only to avoid a full rebuild. + ;; Remove this phase in the next rebuild cycle. + ,@(let ((system (or (%current-target-system) + (%current-system)))) + (if (any (cute string-prefix? <> system) + '("arm" "aarch64")) + '((add-after 'unpack 'apply-alignment-patch + (lambda* (#:key native-inputs inputs #:allow-other-keys) + (invoke "patch" "-p1" "--force" "--input" + (assoc-ref (or native-inputs inputs) + "arm-alignment.patch"))))) + '())))))) (native-inputs `(("tzdata" ,tzdata-for-tests) + + ;; Disable unaligned accesses in the sha3 module on ARM as + ;; it causes a test failure when building 32-bit Python on a + ;; 64-bit kernel. See . + ;; TODO: make this a regular patch in the next rebuild cycle. + ,@(let ((system (or (%current-target-system) + (%current-system)))) + (if (any (cute string-prefix? <> system) + '("arm" "aarch64")) + `(("arm-alignment.patch" ,(search-patch "python-3-arm-alignment.patch"))) + '())) + ,@(if (%current-target-system) `(("python3" ,this-package)) '()) -- cgit v1.3 From 189bfb555d1a5cac8d705588a0c7ccdeaafd6a99 Mon Sep 17 00:00:00 2001 From: "Jan (janneke) Nieuwenhuizen" Date: Mon, 13 Apr 2020 07:47:38 +0200 Subject: gnu: python: Build fix for the Hurd. * gnu/packages/python.scm (python-2.7)[arguments]: Add `fix-regen' stage to correct a reference to "/usr". (python-3.8): Remove build fix for 2.x..3.5.9 that breaks on 3.8.2. --- gnu/packages/python.scm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index f0a6193a921..a30ad6fb6ec 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -58,6 +58,7 @@ ;;; Copyright © 2018 Luther Thompson ;;; Copyright © 2018 Vagrant Cascadian ;;; Copyright © 2019 Tanguy Le Carrour +;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -81,6 +82,7 @@ #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages dbm) + #:use-module (gnu packages hurd) #:use-module (gnu packages libffi) #:use-module (gnu packages pkg-config) #:use-module (gnu packages readline) @@ -197,6 +199,14 @@ "Lib/test/test_subprocess.py")) (("/bin/sh") (which "sh"))) #t)) + ,@(if (hurd-system?) + `((add-before 'build 'patch-regen-for-hurd + (lambda* (#:key inputs #:allow-other-keys) + (let ((libc (assoc-ref inputs "libc"))) + (substitute* "Lib/plat-generic/regen" + (("/usr/include/") (string-append libc "/include/"))) + #t)))) + '()) (add-before 'configure 'do-not-record-configure-flags (lambda* (#:key configure-flags #:allow-other-keys) ;; Remove configure flags from the installed '_sysconfigdata.py' @@ -383,7 +393,9 @@ data types.") " test_socket"))) ((#:phases phases) `(modify-phases ,phases - + ,@(if (hurd-system?) + `((delete 'patch-regen-for-hurd)) ;regen was removed after 3.5.9 + '()) (add-before 'check 'set-TZDIR (lambda* (#:key inputs native-inputs #:allow-other-keys) ;; test_email requires the Olson time zone database. -- cgit v1.3