diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/build-tools.scm | 80 | ||||
-rw-r--r-- | gnu/packages/patches/scons-test-environment.patch | 57 | ||||
-rw-r--r-- | gnu/packages/web.scm | 3 |
4 files changed, 128 insertions, 13 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 26dfb6afe2..2a26a3879b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1802,6 +1802,7 @@ dist_patch_DATA = \ %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch \ %D%/packages/patches/scalapack-gcc-10-compilation.patch \ %D%/packages/patches/scheme48-tests.patch \ + %D%/packages/patches/scons-test-environment.patch \ %D%/packages/patches/scotch-build-parallelism.patch \ %D%/packages/patches/scotch-integer-declarations.patch \ %D%/packages/patches/screen-hurd-path-max.patch \ diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm index 45f3ec559a..5c9d5409cb 100644 --- a/gnu/packages/build-tools.scm +++ b/gnu/packages/build-tools.scm @@ -34,6 +34,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix utils) #:use-module (guix packages) + #:use-module (guix gexp) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system cmake) @@ -53,6 +54,7 @@ #:use-module (gnu packages pretty-print) #:use-module (gnu packages protobuf) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) @@ -387,17 +389,79 @@ other lower-level build files."))) (define-public scons (package (name "scons") + (version "4.4.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/SCons/scons") + (commit version))) + (file-name (git-file-name name version)) + (patches (search-patches "scons-test-environment.patch")) + (sha256 + (base32 + "1czswx1fj2j48rspkrvarkr43k0vii9rsmz054c9yby1dq362fgr")))) + (build-system python-build-system) + (arguments + (list + #:modules (append %python-build-system-modules + '((ice-9 ftw) (srfi srfi-26))) + #:phases + #~(modify-phases (@ (guix build python-build-system) %standard-phases) + (add-after 'unpack 'adjust-hard-coded-paths + (lambda _ + (substitute* "SCons/Script/Main.py" + (("/usr/share/scons") + (string-append #$output "/share/scons"))))) + (add-before 'build 'bootstrap + (lambda _ + ;; XXX: Otherwise setup.py bdist_wheel fails. + (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH")) + (invoke "python" "scripts/scons.py"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "python" "runtest.py" "--all" "--unit-only")))) + (add-after 'install 'move-manuals + (lambda _ + ;; XXX: For some reason manuals get installed to the top-level + ;; #$output directory. + (with-directory-excursion #$output + (let ((man1 (string-append #$output "/share/man/man1")) + (stray-manuals (scandir "." + (cut string-suffix? ".1" <>)))) + (mkdir-p man1) + (for-each (lambda (manual) + (link manual (string-append man1 "/" manual)) + (delete-file manual)) + stray-manuals)))))))) + (native-inputs + ;; TODO: Add 'fop' when available in Guix to generate manuals. + (list python-wheel + ;;For tests. + python-psutil)) + (home-page "https://scons.org/") + (synopsis "Software construction tool written in Python") + (description + "SCons is a software construction tool. Think of SCons as an improved, +cross-platform substitute for the classic Make utility with integrated +functionality similar to autoconf/automake and compiler caches such as ccache. +In short, SCons is an easier, more reliable and faster way to build +software.") + (license license:x11))) + +(define-public scons-3 + (package + (inherit scons) (version "3.0.4") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/SCons/scons") (commit version))) - (file-name (git-file-name name version)) + (file-name (git-file-name "scons" version)) (sha256 (base32 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn")))) - (build-system python-build-system) (arguments `(#:use-setuptools? #f ; still relies on distutils #:tests? #f ; no 'python setup.py test' command @@ -414,19 +478,11 @@ other lower-level build files."))) (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix") (chdir "build/scons") #t))))) - (home-page "https://scons.org/") - (synopsis "Software construction tool written in Python") - (description - "SCons is a software construction tool. Think of SCons as an improved, -cross-platform substitute for the classic Make utility with integrated -functionality similar to autoconf/automake and compiler caches such as ccache. -In short, SCons is an easier, more reliable and faster way to build -software.") - (license license:x11))) + (native-inputs '()))) (define-public scons-python2 (package - (inherit (package-with-python2 scons)) + (inherit (package-with-python2 scons-3)) (name "scons-python2"))) (define-public tup diff --git a/gnu/packages/patches/scons-test-environment.patch b/gnu/packages/patches/scons-test-environment.patch new file mode 100644 index 0000000000..be5b61b2d4 --- /dev/null +++ b/gnu/packages/patches/scons-test-environment.patch @@ -0,0 +1,57 @@ +Inherit essential environment variables in tests. + +Note: it could be better to generalize this in SCons/Platform/posix.py +instead of just patching the tests. + +diff --git a/SCons/ActionTests.py b/SCons/ActionTests.py +--- a/SCons/ActionTests.py ++++ b/SCons/ActionTests.py +@@ -98,6 +98,7 @@ outfile2 = test.workpath('outfile2') + pipe_file = test.workpath('pipe.out') + + scons_env = SCons.Environment.Environment() ++scons_env['ENV']['PATH'] += os.environ['PATH'] + + # Capture all the stuff the Actions will print, + # so it doesn't clutter the output. +@@ -1090,6 +1091,8 @@ class CommandActionTestCase(unittest.TestCase): + except AttributeError: + env = Environment() + ++ env = Environment(ENV={'PATH': os.environ['PATH']}) ++ + cmd1 = r'%s %s %s xyzzy' % (_python_, act_py, outfile) + + act = SCons.Action.CommandAction(cmd1) +@@ -1884,7 +1887,7 @@ class ListActionTestCase(unittest.TestCase): + f.write("class2b\n") + + act = SCons.Action.ListAction([cmd2, function2, class2a(), class2b]) +- r = act([], [], Environment(out=outfile)) ++ r = act([], [], Environment(out=outfile, ENV={'PATH' : os.getenv('PATH')})) + assert isinstance(r.status, class2b), r.status + c = test.read(outfile, 'r') + assert c == "act.py: 'syzygy'\nfunction2\nclass2a\nclass2b\n", c +@@ -1948,7 +1951,7 @@ class LazyActionTestCase(unittest.TestCase): + a([], [], env=Environment(BAR=f, s=self)) + assert self.test == 1, self.test + cmd = r'%s %s %s lazy' % (_python_, act_py, outfile) +- a([], [], env=Environment(BAR=cmd, s=self)) ++ a([], [], env=Environment(BAR=cmd, s=self, ENV={'PATH' : os.getenv('PATH')})) + c = test.read(outfile, 'r') + assert c == "act.py: 'lazy'\n", c + +diff --git a/SCons/SConfTests.py b/SCons/SConfTests.py +--- a/SCons/SConfTests.py ++++ b/SCons/SConfTests.py +@@ -71,7 +71,9 @@ class SConfTestCase(unittest.TestCase): + # and we need a new environment, cause references may point to + # old modules (well, at least this is safe ...) + self.scons_env = self.Environment.Environment() +- self.scons_env.AppendENVPath('PATH', os.environ['PATH']) ++ # Inherit the OS environment to get essential variables. ++ inherited_env = os.environ.copy() ++ self.scons_env['ENV'] = inherited_env + + # we want to do some autodetection here + # this stuff works with diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index aac6bdd5eb..b687e4e3e7 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -1944,7 +1944,8 @@ from streaming URLs. It is a command-line wrapper for the libquvi library.") ;;("gss" ,gss) zlib)) (arguments - `(#:scons-flags (list (string-append "APR=" (assoc-ref %build-inputs "apr")) + `(#:scons ,scons-3 ;TODO: remove in the next rebuild cycle + #:scons-flags (list (string-append "APR=" (assoc-ref %build-inputs "apr")) (string-append "APU=" (assoc-ref %build-inputs "apr-util")) (string-append "OPENSSL=" (assoc-ref %build-inputs "openssl")) ;; (string-append "GSSAPI=" (assoc-ref %build-inputs "gss")) |