diff options
author | Marius Bakke <mbakke@fastmail.com> | 2019-08-13 20:42:06 +0200 |
---|---|---|
committer | Marius Bakke <mbakke@fastmail.com> | 2019-08-13 20:42:06 +0200 |
commit | 462ad9f56b9665b8d22960acee73ad91f1052c9c (patch) | |
tree | 814be463d6d0517e7db9b9e6f15dbc7516955674 /guix/build | |
parent | 7f5f61ae99321a7a6e08b0100cd428e11ce6a837 (diff) | |
parent | 1b1b006afd31c5526f34d157baef492c7dde2e9c (diff) | |
download | guix-patches-462ad9f56b9665b8d22960acee73ad91f1052c9c.tar guix-patches-462ad9f56b9665b8d22960acee73ad91f1052c9c.tar.gz |
Merge branch 'master' into core-updates
Diffstat (limited to 'guix/build')
-rw-r--r-- | guix/build/ant-build-system.scm | 10 | ||||
-rw-r--r-- | guix/build/cargo-build-system.scm | 48 | ||||
-rw-r--r-- | guix/build/svn.scm | 9 |
3 files changed, 51 insertions, 16 deletions
diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm index d79a2d55ed..49549c1b4b 100644 --- a/guix/build/ant-build-system.scm +++ b/guix/build/ant-build-system.scm @@ -43,7 +43,8 @@ (call-with-output-file "build.xml" (lambda (port) (sxml->xml - `(project (@ (basedir ".")) + `(project (@ (basedir ".") + (name ,jar-name)) (property (@ (name "classes.dir") (value "${basedir}/build/classes"))) (property (@ (name "manifest.dir") @@ -118,10 +119,9 @@ (target (@ (name "jar") (depends "compile, manifest")) (mkdir (@ (dir "${jar.dir}"))) - (exec (@ (executable "jar")) - (arg (@ (line ,(string-append "-cmf ${manifest.file} " - "${jar.dir}/" jar-name - " -C ${classes.dir} .")))))) + (jar (@ (destfile ,(string-append "${jar.dir}/" jar-name)) + (manifest "${manifest.file}") + (basedir "${classes.dir}")))) (target (@ (name "install")) (copy (@ (todir "${dist.dir}")) diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm index f38de16cf7..7d363a18a5 100644 --- a/guix/build/cargo-build-system.scm +++ b/guix/build/cargo-build-system.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016 David Craven <david@craven.ch> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -39,6 +40,21 @@ ;; ;; Code: +;; TODO: Move this to (guix build cargo-utils). Will cause a full rebuild +;; of all rust compilers. + +(define (generate-all-checksums dir-name) + (for-each + (lambda (filename) + (let* ((dir (dirname filename)) + (checksum-file (string-append dir "/.cargo-checksum.json"))) + (when (file-exists? checksum-file) (delete-file checksum-file)) + (display (string-append + "patch-cargo-checksums: generate-checksums for " + dir "\n")) + (generate-checksums dir))) + (find-files dir-name "Cargo.toml$"))) + (define (manifest-targets) "Extract all targets from the Cargo.toml manifest" (let* ((port (open-input-pipe "cargo read-manifest")) @@ -94,8 +110,7 @@ Cargo.toml file present at its root." ;; so that we can generate any cargo checksums. ;; The --strip-components argument is needed to prevent creating ;; an extra directory within `crate-dir`. - (invoke "tar" "xvf" path "-C" crate-dir "--strip-components" "1") - (generate-checksums crate-dir))))) + (invoke "tar" "xvf" path "-C" crate-dir "--strip-components" "1"))))) inputs) ;; Configure cargo to actually use this new directory. @@ -121,6 +136,31 @@ directory = '" port) (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc")) #t) +;; The Cargo.lock file tells the build system which crates are required for +;; building and hardcodes their version and checksum. In order to build with +;; the inputs we provide, we need to recreate the file with our inputs. +(define* (update-cargo-lock #:key + (vendor-dir "guix-vendor") + #:allow-other-keys) + "Regenerate the Cargo.lock file with the current build inputs." + (when (file-exists? "Cargo.lock") + (begin + ;; Unfortunately we can't generate a Cargo.lock file until the checksums + ;; are generated, so we have an extra round of generate-all-checksums here. + (generate-all-checksums vendor-dir) + (delete-file "Cargo.lock") + (invoke "cargo" "generate-lockfile"))) + #t) + +;; After the 'patch-generated-file-shebangs phase any vendored crates who have +;; their shebangs patched will have a mismatch on their checksum. +(define* (patch-cargo-checksums #:key + (vendor-dir "guix-vendor") + #:allow-other-keys) + "Patch the checksums of the vendored crates after patching their shebangs." + (generate-all-checksums vendor-dir) + #t) + (define* (build #:key skip-build? (cargo-build-flags '("--release")) @@ -162,7 +202,9 @@ directory = '" port) (replace 'configure configure) (replace 'build build) (replace 'check check) - (replace 'install install))) + (replace 'install install) + (add-after 'configure 'update-cargo-lock update-cargo-lock) + (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums patch-cargo-checksums))) (define* (cargo-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args) diff --git a/guix/build/svn.scm b/guix/build/svn.scm index 913f89471b..e3188add3e 100644 --- a/guix/build/svn.scm +++ b/guix/build/svn.scm @@ -36,7 +36,7 @@ "Fetch REVISION from URL into DIRECTORY. REVISION must be an integer, and a valid Subversion revision. Return #t on success, #f otherwise." (apply invoke svn-command - "checkout" "--non-interactive" + "export" "--non-interactive" ;; Trust the server certificate. This is OK as we ;; verify the checksum later. This can be removed when ;; ca-certificates package is added. @@ -46,13 +46,6 @@ valid Subversion revision. Return #t on success, #f otherwise." (string-append "--password=" password)) '()) ,url ,directory)) - - ;; The contents of '.svn' vary as a function of the current status - ;; of the repo. Since we want a fixed output, this directory needs - ;; to be taken out. - (with-directory-excursion directory - (for-each delete-file-recursively (find-files "." "^\\.svn$" #:directories? #t))) - #t) ;;; svn.scm ends here |