diff options
Diffstat (limited to 'gnu/packages/build-tools.scm')
-rw-r--r-- | gnu/packages/build-tools.scm | 258 |
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)) |