summaryrefslogtreecommitdiff
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.scm258
1 files changed, 195 insertions, 63 deletions
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 170d32f3e3..0480212087 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -1,23 +1,29 @@
;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 宋文武 <iyzsong@envs.net>
+;;; Copyright © 2016, 2018, 2020, 2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2018, 2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
+;;; Copyright © 2018 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020, 2023 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
;;; Copyright © 2021, 2023, 2024, 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2022, 2023 Juliana Sims <juli@incana.org>
;;; Copyright © 2024 Evgeny Pisemsky <mail@pisemsky.site>
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2025 Aiden Isik <aidenisik+git@member.fsf.org>
+;;; Copyright © 2025 Josep Bigorra <jjbigorra@gmail.com>
+;;; Copyright © 2025 John Kehayias <john.kehayias@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,18 +43,22 @@
(define-module (gnu packages build-tools)
#:use-module (ice-9 optargs)
#:use-module ((guix licenses) #:prefix license:)
- #:use-module (guix utils)
- #:use-module (guix packages)
- #:use-module (guix gexp)
- #:use-module (guix deprecation)
- #:use-module (guix download)
- #:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
+ #:use-module (guix build-system gnu)
#:use-module (guix build-system guile)
+ #:use-module (guix build-system meson)
+ #:use-module (guix build-system pyproject)
+ #:use-module (guix build-system python)
#:use-module (guix build-system trivial)
+ #:use-module (guix deprecation)
+ #:use-module (guix download)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
#:use-module (guix modules)
+ #:use-module (guix packages)
#:use-module (guix search-paths)
+ #:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages autotools)
@@ -62,6 +72,7 @@
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages guile)
+ #:use-module (gnu packages guile-xyz)
#:use-module (gnu packages linux)
#:use-module (gnu packages lisp)
#:use-module (gnu packages logging)
@@ -81,15 +92,12 @@
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages regex)
#:use-module (gnu packages rpc)
+ #:use-module (gnu packages serialization)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages tls)
#:use-module (gnu packages unicode)
#:use-module (gnu packages version-control)
- #:use-module (gnu packages xml)
- #:use-module (guix build-system gnu)
- #:use-module (guix build-system meson)
- #:use-module (guix build-system pyproject)
- #:use-module (guix build-system python))
+ #:use-module (gnu packages xml))
(define-public bam
(package
@@ -232,8 +240,8 @@ programs and other files depend.")
(license license:bsd-3)))
(define-public gn
- (let ((commit "1c4151ff5c1d6fbf7fa800b8d4bb34d3abc03a41")
- (revision "2072")) ;as returned by `git describe`, used below
+ (let ((commit "ee5b7e32b961a9da1933e9f46a018ba6cac8ef60")
+ (revision "2277")) ;as returned by `git describe`, used below
(package
(name "gn")
(version (git-version "0.0" revision commit))
@@ -243,7 +251,7 @@ programs and other files depend.")
(uri (git-reference (url home-page) (commit commit)))
(sha256
(base32
- "02621c9nqpr4pwcapy31x36l5kbyd0vdgd0wdaxj5p8hrxk67d6b"))
+ "19kkvwxl66vlzlfppbq03fmi59i5g8a1yc71fsfgwqqmx4wywd6w"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
@@ -305,7 +313,7 @@ files and generates build instructions for the Ninja build system.")
(define-public meson
(package
(name "meson")
- (version "1.5.2")
+ (version "1.9.0")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/mesonbuild/meson/"
@@ -313,8 +321,8 @@ files and generates build instructions for the Ninja build system.")
version ".tar.gz"))
(sha256
(base32
- "02wi62k9w7716xxdgrrx68q89vaq3ncnbpw5ms0g27npn2df0mgr"))))
- (build-system python-build-system)
+ "13a9pj7d2mxgv5gbd78di4pb4w722vjis0vmk38m1vdm95v2f9yd"))))
+ (build-system pyproject-build-system)
(arguments
(list #:tests? #f ;disabled to avoid extra dependencies
#:phases
@@ -324,12 +332,14 @@ files and generates build instructions for the Ninja build system.")
(replace 'wrap
(lambda* (#:key inputs outputs #:allow-other-keys)
(substitute* (search-input-file outputs "bin/meson")
- (("# EASY-INSTALL-ENTRY-SCRIPT")
- (format #f "\
-import sys
-sys.path.insert(0, '~a')
-# EASY-INSTALL-ENTRY-SCRIPT" (site-packages inputs outputs)))))))))
- (inputs (list python ninja/pinned))
+ (("import sys" all)
+ (string-append
+ all "\n"
+ "sys.path.insert(0, '"
+ (site-packages inputs outputs)
+ "')"))))))))
+ (native-inputs (list python-setuptools))
+ (inputs (list python ninja))
(home-page "https://mesonbuild.com/")
(synopsis "Build system designed to be fast and user-friendly")
(description
@@ -710,33 +720,36 @@ a build worked by accident.")
(define-public osc
(package
(name "osc")
- (version "0.172.0")
+ (version "1.19.0")
(source
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/openSUSE/osc")
- (commit version)))
+ (url "https://github.com/openSUSE/osc")
+ (commit version)))
(file-name (git-file-name name version))
(sha256
- (base32 "1sqdnkka3c6b6hwnrmlwrgy7w62cp8raq8mph9pgd2lydzzbvwlp"))))
- (build-system python-build-system)
+ (base32 "09an4c5gjc99a6bfy4ax5yyng14v7b4fknkdzwl0hn89q5990xab"))))
+ (build-system pyproject-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (add-after 'install 'fix-filename
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
- ;; Main osc tool is renamed in spec file, not setup.py, let's
- ;; do that too.
- (rename-file
- (string-append bin "osc-wrapper.py")
- (string-append bin "osc"))
- #t))))))
+ (list
+ #:tests? #f ; XXX: Fix tests.
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'check 'check-setup
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (setenv "HOME" (getcwd))))))))
(native-inputs
- (list python-chardet))
+ (list python-setuptools
+ python-wheel
+ diffstat))
(inputs
- (list python-m2crypto python-pycurl rpm)) ; for python-rpm
+ (list python-urllib3
+ python-ruamel.yaml
+ python-m2crypto
+ python-pycurl
+ rpm)) ; for python-rpm
(home-page "https://github.com/openSUSE/osc")
(synopsis "Open Build Service command line tool")
(description "@command{osc} is a command line interface to the Open Build
@@ -759,7 +772,10 @@ be reached via direct API calls.")
(sha256
(base32 "0f4x0gm5n1mr87dx3gzn5da16a1qhd2y3kz22dl5xsd9pd720l4w"))))
(build-system pyproject-build-system)
- (native-inputs (list python-setuptools python-wheel))
+ (arguments
+ (list
+ #:test-backend ''unittest))
+ (native-inputs (list python-setuptools))
(propagated-inputs (list python-configparser))
(home-page "https://github.com/Sarcasm/compdb")
(synopsis "Compilation database Swiss army knife")
@@ -774,28 +790,36 @@ right compilation options.")
(name "compiledb")
(version "0.10.1")
(source
- (origin
- (method url-fetch)
- (uri (pypi-uri "compiledb" version))
- (sha256
- (base32 "0vlngsdxfakyl8b7rnvn8h3l216lhbrrydr04yhy6kd03zflgfq6"))))
- (build-system python-build-system)
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/nickdiego/compiledb")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0qricdgqzry7j3rmgwyd43av3c2kxpzkh6f9zcqbzrjkn78qbpd4"))))
+ (build-system pyproject-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'no-compat-shim-dependency
- ;; shutilwhich is only needed for python 3.3 and earlier
- (lambda _
- (substitute* "setup.py" (("^ *'shutilwhich'\n") ""))
- (substitute* "compiledb/compiler.py" (("shutilwhich") "shutil")))))))
- (propagated-inputs
- (list python-bashlex python-click))
- (native-inputs
- (list python-pytest))
- (home-page
- "https://github.com/nickdiego/compiledb")
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'no-compat-shim-dependency
+ ;; shutilwhich is only needed for python 3.3 and earlier
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "setup.py"
+ (("^ *'shutilwhich'\n")
+ ""))
+ (substitute* "compiledb/compiler.py"
+ (("shutilwhich")
+ "shutil"))
+ (substitute* "tests/data/multiple_commands_oneline.txt"
+ (("/bin/echo")
+ (search-input-file inputs "bin/echo"))))))))
+ (propagated-inputs (list python-bashlex python-click))
+ (native-inputs (list python-pytest python-setuptools python-wheel))
+ (home-page "https://github.com/nickdiego/compiledb")
(synopsis
- "Generate Clang JSON Compilation Database files for make-based build systems")
+ "Generate Clang JSON Compilation Database files for make-based build systems")
(description
"@code{compiledb} provides a @code{make} python wrapper script which,
besides executing the make build command, updates the JSON compilation
@@ -1090,6 +1114,52 @@ maintenance-related files, for convenience.")
#:commit "9297749090b01720888dceeb5f6dab3d52dcef40"
#:hash (base32 "10qyhji7q71fhq2956aszj6bipbf11hn0xcrrpkwj9azwindw7ch")))
+(define-public maak
+ (package
+ (name "maak")
+ (version "0.2.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://codeberg.org/jjba23/maak.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "15s6khifk7k002hr9mqgl45r3ipmvsc56z9z8skwclxsj6w1cddl"))))
+ (build-system guile-build-system)
+ (arguments
+ (list
+ #:source-directory "src"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'build 'install-program-files
+ (lambda _
+ (let ((bin (string-append #$output "/bin"))
+ (share (string-append #$output "/share")))
+ (install-file "resources/help.txt"
+ (string-append share "/resources"))
+ (install-file "scripts/maak" bin)
+ (install-file "scripts/log.bash"
+ (string-append share "/scripts/"))
+ (install-file "scripts/maak-completion.bash"
+ (string-append share "/scripts/"))
+ (chmod (string-append bin "/maak") #o755)))))))
+ (native-inputs (list guile-3.0))
+ (inputs (list guile-3.0 bash-minimal))
+ (home-page "https://codeberg.org/jjba23/maak")
+ (synopsis "Command runner à la Make using Guile Scheme")
+ (description
+ "Maak is a command runner and control plane for your
+projects. It allows you to use the power of Lisp (Guile Scheme) to define
+your tasks, build steps, repetitive tasks or other automation.
+
+With Maak you can easily call external shell commands and integrate with
+your existing scripts and tools. It is inspired by the GNU Make utility
+but it does away with a lot of the complexity that comes with its history.")
+ (license license:gpl3+)))
+
+
(define-public pdpmake
(package
(name "pdpmake")
@@ -1168,3 +1238,65 @@ maintaining, updating, and regenerating programs. It is inspired by
the POSIX make utility and allows writing a build script in Guile
Scheme.")
(license license:expat))))
+
+(define-public waf
+ (package
+ (name "waf")
+ (version "2.0.19") ;TODO: newer version brakes API
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://waf.io/" "waf-" version ".tar.bz2"))
+ (sha256
+ (base32 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
+ (build-system pyproject-build-system)
+ (arguments
+ (list
+ #:test-backend #~'custom
+ ;; TODO: Project provides integration tests, see
+ ;; <.pipelines/Jenkinsfile> how to run them.
+ #:test-flags #~(list "waf" "--version")
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'build
+ (lambda _
+ ;; XXX: Find a way to add all extra tools.
+ (let ((tools '("gccdeps" "clang_compilation_database")))
+ (invoke "python" "waf-light" "configure" "build"
+ (string-append "--tools=" (string-join tools ","))))))
+ (replace 'install
+ (lambda _
+ (install-file "waf" (string-append #$output "/bin"))))
+ ;; waf breaks when it is wrapped.
+ (delete 'wrap))))
+ (home-page "https://waf.io/")
+ (synopsis "Multi-level general purpose build system")
+ (description
+ "Waf is a build system framework for configuring, compiling and
+installing applications.
+
+Features:
+@itemize
+@item Automatic build order: the build order is computed from input and output
+files, among others
+@item Automatic dependencies: tasks to execute are detected by hashing files
+and commands
+@item Performance: tasks are executed in parallel automatically, the startup
+time is meant to be fast (separation between configuration and build)
+@item Flexibility: new commands and tasks can be added very easily through
+subclassing, bottlenecks for specific builds can be eliminated through dynamic
+method replacement
+@item Extensibility: though many programming languages and compilers are
+already supported by default, many others are available as extensions
+@item IDE support: Eclipse, Visual Studio and Xcode project generators
+(waflib/extras/)
+@item Documentation: the application is based on a robust model documented in
+The Waf Book and in the API docs
+@item Python compatibility: cPython 2.7 to 3.x, Jython 2.7 and PyPy
+@end itemize")
+ (license license:bsd-3)))
+
+;; waf is the final program no need to prefix it with "python-", the same way
+;; as meson or ninja which are written in Python as well.
+(define-public python-waf
+ (deprecated-package "python-waf" waf))