diff options
-rw-r--r-- | gnu/packages/cmake.scm | 225 |
1 files changed, 109 insertions, 116 deletions
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm index 4fb74a7c51..fe49bdf0fa 100644 --- a/gnu/packages/cmake.scm +++ b/gnu/packages/cmake.scm @@ -31,6 +31,7 @@ (define-module (gnu packages cmake) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) + #:use-module (guix gexp) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix utils) @@ -99,8 +100,7 @@ using the CMake build system.") (lambda _ (delete-file "Auxiliary/cmake-mode.el") (substitute* "Auxiliary/CMakeLists.txt" - ((".*cmake-mode.el.*") "")) - #t)) + ((".*cmake-mode.el.*") "")))) ,@(if (target-x86-32?) '((add-after 'unpack 'skip-cpack-txz-test (lambda _ @@ -124,8 +124,7 @@ using the CMake build system.") "Source/cmExecProgramCommand.cxx" "Tests/CMakeLists.txt" "Tests/RunCMake/File_Generate/RunCMakeTest.cmake") - (("/bin/sh") (which "sh"))) - #t)))) + (("/bin/sh") (which "sh"))))))) (define %common-disabled-tests '(;; This test copies libgcc_s.so.1 from GCC and tries to modify its RPATH, @@ -163,55 +162,54 @@ using the CMake build system.") (patches (search-patches "cmake-curl-certificates.patch")))) (build-system gnu-build-system) (arguments - `(#:test-target "test" - #:configure-flags - (let ((out (assoc-ref %outputs "out")) - (parallel-job-count (number->string (parallel-job-count)))) - (list "--verbose" - (string-append "--parallel=" parallel-job-count) - (string-append "--prefix=" out) - "--system-libs" - ;; By default, the man pages and other docs land - ;; in PREFIX/man and PREFIX/doc, but we want them - ;; in share/{man,doc}. Note that unlike - ;; autoconf-generated configure scripts, cmake's - ;; configure prepends "PREFIX/" to what we pass - ;; to --mandir and --docdir. - "--mandir=share/man" - ,(string-append "--docdir=share/doc/cmake-" - (version-major+minor version)) + (list + #:test-target "test" + #:configure-flags + #~(let ((parallel-job-count (number->string (parallel-job-count)))) + (list "--verbose" + (string-append "--parallel=" parallel-job-count) + (string-append "--prefix=" #$output) + "--system-libs" + ;; By default, the man pages and other docs land + ;; in PREFIX/man and PREFIX/doc, but we want them + ;; in share/{man,doc}. Note that unlike + ;; autoconf-generated configure scripts, cmake's + ;; configure prepends "PREFIX/" to what we pass + ;; to --mandir and --docdir. + "--mandir=share/man" + (string-append "--docdir=share/doc/cmake-" + #$(version-major+minor version)) - ;; By default CMake is built without any optimizations. Use - ;; the recommended Release target for a ~2.5x speedup. - "--" "-DCMAKE_BUILD_TYPE=Release")) - #:make-flags - (let ((skipped-tests - (list ,@%common-disabled-tests - "CTestTestSubdir" ; This test fails to build 2 of the 3 tests. - ;; This test fails when ARGS (below) is in use, see - ;; <https://gitlab.kitware.com/cmake/cmake/issues/17165>. - "CTestCoverageCollectGCOV"))) - (list - (string-append - ;; These arguments apply for the tests only. - "ARGS=-j " (number->string (parallel-job-count)) - " --output-on-failure" - " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$"))) - #:phases - (modify-phases %standard-phases - ,@(%common-build-phases) - (add-before 'configure 'set-paths - (lambda _ - ;; Help cmake's bootstrap process to find system libraries - (begin - (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH")) - (setenv "CMAKE_INCLUDE_PATH" (or (getenv "CPATH") - (getenv "C_INCLUDE_PATH"))) - #t))) - ;; CMake uses its own configure script. - (replace 'configure - (lambda* (#:key (configure-flags '()) #:allow-other-keys) - (apply invoke "./configure" configure-flags)))))) + ;; By default CMake is built without any optimizations. Use + ;; the recommended Release target for a ~2.5x speedup. + "--" "-DCMAKE_BUILD_TYPE=Release")) + #:make-flags + #~(let ((skipped-tests + (list #$@%common-disabled-tests + "CTestTestSubdir" ; This test fails to build 2 of the 3 tests. + ;; This test fails when ARGS (below) is in use, see + ;; <https://gitlab.kitware.com/cmake/cmake/issues/17165>. + "CTestCoverageCollectGCOV"))) + (list + (string-append + ;; These arguments apply for the tests only. + "ARGS=-j " (number->string (parallel-job-count)) + " --output-on-failure" + " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$"))) + #:phases + #~(modify-phases %standard-phases + #$@(%common-build-phases) + (add-before 'configure 'set-paths + (lambda _ + ;; Help cmake's bootstrap process to find system libraries + (begin + (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH")) + (setenv "CMAKE_INCLUDE_PATH" (or (getenv "CPATH") + (getenv "C_INCLUDE_PATH")))))) + ;; CMake uses its own configure script. + (replace 'configure + (lambda* (#:key (configure-flags '()) #:allow-other-keys) + (apply invoke "./configure" configure-flags)))))) (inputs (append (if (hurd-target?) @@ -287,44 +285,43 @@ and workspaces that can be used in the compiler environment of your choice.") #t)))) (build-system cmake-build-system) (arguments - `(#:configure-flags - (list "-DCMAKE_USE_SYSTEM_LIBRARIES=ON" - (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" - ,(version-major+minor (package-version - cmake-bootstrap)))) + (list + #:configure-flags + #~(list "-DCMAKE_USE_SYSTEM_LIBRARIES=ON" + (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" + #$(version-major+minor (package-version + cmake-bootstrap)))) - ;; This is the CMake used in cmake-build-system. Ensure compiler - ;; optimizations are enabled to save size and CPU cycles. - #:build-type "Release" - #:phases - (modify-phases %standard-phases - ,@(%common-build-phases) - (add-after 'install 'delete-help-documentation - (lambda* (#:key outputs #:allow-other-keys) - (delete-file-recursively - (string-append (assoc-ref outputs "out") + ;; This is the CMake used in cmake-build-system. Ensure compiler + ;; optimizations are enabled to save size and CPU cycles. + #:build-type "Release" + #:phases + #~(modify-phases %standard-phases + #$@(%common-build-phases) + (add-after 'install 'delete-help-documentation + (lambda _ + (delete-file-recursively + (string-append #$output "/share/cmake-" - ,(version-major+minor + #$(version-major+minor (package-version cmake-bootstrap)) - "/Help")) - #t)) - (replace 'check - (lambda* (#:key tests? parallel-tests? #:allow-other-keys) - (let ((skipped-tests (list ,@%common-disabled-tests - ;; This test requires the bundled libuv. - "BootstrapTest"))) - (if tests? - (begin - (invoke "ctest" "-j" (if parallel-tests? - (number->string (parallel-job-count)) - "1") - "--exclude-regex" - (string-append "^(" (string-join skipped-tests "|") ")$"))) - (format #t "test suite not run~%")) - #t)))) - ,@(if (%current-target-system) - '() - `(#:cmake ,cmake-bootstrap)))))) + "/Help")))) + (replace 'check + (lambda* (#:key tests? parallel-tests? #:allow-other-keys) + (let ((skipped-tests (list #$@%common-disabled-tests + ;; This test requires the bundled libuv. + "BootstrapTest"))) + (if tests? + (begin + (invoke "ctest" "-j" (if parallel-tests? + (number->string (parallel-job-count)) + "1") + "--exclude-regex" + (string-append "^(" (string-join skipped-tests "|") ")$"))) + (format #t "test suite not run~%")))))) + #:cmake (if (%current-target-system) + cmake-minimal-cross + cmake-bootstrap))))) ;;; The "user-facing" CMake, now with manuals and HTML documentation. (define-public cmake @@ -343,31 +340,28 @@ and workspaces that can be used in the compiler environment of your choice.") ((#:build-type _ #f) "RelWithDebInfo") ((#:configure-flags flags ''()) - `(append (list "-DSPHINX_INFO=ON" "-DSPHINX_MAN=ON" "-DSPHINX_HTML=ON" - (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" - ,(version-major+minor (package-version - cmake-minimal))) - "-DCMAKE_INFO_DIR=share/info" - "-DCMAKE_MAN_DIR=share/man") - ,flags)) + #~(append (list "-DSPHINX_INFO=ON" "-DSPHINX_MAN=ON" "-DSPHINX_HTML=ON" + (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-" + #$(version-major+minor (package-version + cmake-minimal))) + "-DCMAKE_INFO_DIR=share/info" + "-DCMAKE_MAN_DIR=share/man") + #$flags)) ((#:phases phases) - `(modify-phases ,phases - (delete 'delete-help-documentation) - (add-after 'install 'move-html-doc - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (doc (assoc-ref outputs "doc")) - (html (string-append "/share/doc/cmake-" - ,(version-major+minor - (package-version cmake-minimal)) - "/html"))) - (copy-recursively (string-append out html) - (string-append doc html)) - (delete-file-recursively (string-append out html))))))))) + #~(modify-phases #$phases + (delete 'delete-help-documentation) + (add-after 'install 'move-html-doc + (lambda _ + (let ((html (string-append "/share/doc/cmake-" + #$(version-major+minor + (package-version cmake-minimal)) + "/html"))) + (copy-recursively (string-append #$output html) + (string-append #$output:doc html)) + (delete-file-recursively (string-append #$output html))))))))) (inputs (modify-inputs (package-inputs cmake-minimal) - (prepend ncurses ;required for ccmake - ))) + (prepend ncurses))) ;required for ccmake ;; Extra inputs required to build the documentation. (native-inputs (modify-inputs (package-native-inputs cmake-minimal) @@ -392,13 +386,12 @@ and workspaces that can be used in the compiler environment of your choice.") (outputs '("out")) (build-system emacs-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'chdir-elisp - ;; Elisp directory is not in root of the source. - (lambda _ - (chdir "Auxiliary") - #t))))) + (list #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir-elisp + ;; Elisp directory is not in root of the source. + (lambda _ + (chdir "Auxiliary")))))) (synopsis "Emacs major mode for editing Cmake expressions") (description "@code{cmakeos-mode} provides an Emacs major mode for editing Cmake files. It supports syntax highlighting, indenting and refilling of |