summary refs log tree commit diff
path: root/gnu/packages/build-tools.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/build-tools.scm')
-rw-r--r--gnu/packages/build-tools.scm101
1 files changed, 101 insertions, 0 deletions
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 38a7ee2783..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)
@@ -384,6 +386,105 @@ other lower-level build files.")
 scripted definition of a software project and outputs @file{Makefile}s or
 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 "scons" version))
+             (sha256
+              (base32
+               "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
+    (arguments
+     `(#:use-setuptools? #f                ; still relies on distutils
+       #:tests? #f                         ; no 'python setup.py test' command
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'bootstrap
+           (lambda _
+             (substitute* "src/engine/SCons/compat/__init__.py"
+               (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
+                "sys.modules[new] = __import__(old)"))
+             (substitute* "src/engine/SCons/Platform/__init__.py"
+               (("mod = imp.load_module\\(full_name, file, path, desc\\)")
+                "mod = __import__(full_name)"))
+             (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
+             (chdir "build/scons")
+             #t)))))
+    (native-inputs '())))
+
+(define-public scons-python2
+  (package
+    (inherit (package-with-python2 scons-3))
+    (name "scons-python2")))
+
 (define-public tup
   (package
     (name "tup")