projects/guix·blob java-team · refs

767 lines · 31.6 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <[email protected]>
3;;; Copyright © 2014 Mark H Weaver <[email protected]>
4;;; Copyright © 2014 Eric Bavier <[email protected]>
5;;; Copyright © 2014 Ian Denhardt <[email protected]>
6;;; Copyright © 2015 Sou Bunnbu <[email protected]>
7;;; Copyright © 2016, 2024 Efraim Flashner <[email protected]>
8;;; Copyright © 2017, 2018, 2020, 2021 Marius Bakke <[email protected]>
9;;; Copyright © 2018 Arun Isaac <[email protected]>
10;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <[email protected]>
11;;; Copyright © 2019-2026 Maxim Cournoyer <[email protected]>
12;;; Copyright © 2019 Pierre-Moana Levesque <[email protected]>
13;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <[email protected]>
14;;; Copyright © 2021 Ricardo Wurmus <[email protected]>
15;;; Copyright © 2023 Simon South <[email protected]>
16;;; Copyright © 2024 John Kehayias <[email protected]>
17;;; Copyright © 2024 dan <[email protected]>
18;;; Copyright © 2024 Charles <[email protected]>
19;;; Copyright © 2024 Greg Hogan <[email protected]>
20;;;
21;;; This file is part of GNU Guix.
22;;;
23;;; GNU Guix is free software; you can redistribute it and/or modify it
24;;; under the terms of the GNU General Public License as published by
25;;; the Free Software Foundation; either version 3 of the License, or (at
26;;; your option) any later version.
27;;;
28;;; GNU Guix is distributed in the hope that it will be useful, but
29;;; WITHOUT ANY WARRANTY; without even the implied warranty of
30;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31;;; GNU General Public License for more details.
32;;;
33;;; You should have received a copy of the GNU General Public License
34;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
35
36(define-module (gnu packages cmake)
37 #:use-module ((guix licenses) #:prefix license:)
38 #:use-module (guix packages)
39 #:use-module (guix gexp)
40 #:use-module (guix download)
41 #:use-module (guix gexp)
42 #:use-module (guix git-download)
43 #:use-module (guix utils)
44 #:use-module (guix deprecation)
45 #:use-module (guix build-system gnu)
46 #:use-module (guix build-system cmake)
47 #:use-module (guix build-system copy)
48 #:use-module (guix build-system emacs)
49 #:use-module (guix build-system pyproject)
50 #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
51 #:use-module (gnu packages)
52 #:use-module (gnu packages backup)
53 #:use-module (gnu packages compression)
54 #:use-module (gnu packages cpp)
55 #:use-module (gnu packages crypto)
56 #:use-module (gnu packages curl)
57 #:use-module (gnu packages elf)
58 #:use-module (gnu packages file)
59 #:use-module (gnu packages kde-frameworks)
60 #:use-module (gnu packages libevent)
61 #:use-module (gnu packages python-build)
62 #:use-module (gnu packages python-xyz)
63 #:use-module (gnu packages ncurses)
64 #:use-module (gnu packages rust)
65 #:use-module (gnu packages serialization)
66 #:use-module (gnu packages sphinx)
67 #:use-module (gnu packages texinfo)
68 #:use-module (gnu packages xml)
69 #:use-module (ice-9 match)
70 #:use-module (srfi srfi-1))
71
72(define-public cmake-shared
73 (let ((commit "8122f2b96c8da38ea41b653cf69958e75fe2129d")
74 (revision "32"))
75 (package
76 (name "cmake-shared")
77 (version
78 (git-version "1.1.0" revision commit))
79 (source
80 (origin
81 (method git-fetch)
82 (uri
83 (git-reference
84 (url "https://github.com/lirios/cmake-shared.git")
85 (commit commit)))
86 (file-name
87 (git-file-name name version))
88 (sha256
89 (base32 "05avwzqcnliwx9h7qi1kl0iz4smqmxc4vkavyjbmlc6h2b97i58g"))
90 (modules '((guix build utils)
91 (ice-9 ftw)
92 (srfi srfi-1)))
93 (snippet
94 `(begin
95 (delete-file-recursively "3rdparty")))))
96 (build-system cmake-build-system)
97 (arguments
98 `(#:tests? #f)) ; No target
99 (native-inputs
100 (list extra-cmake-modules))
101 (synopsis "Shared CMake functions and macros")
102 (description "CMake-Shared are shared functions and macros for projects
103using the CMake build system.")
104 (home-page "https://github.com/lirios/cmake-shared/")
105 (license license:bsd-3))))
106
107;;; Build phases shared between 'cmake-bootstrap' and the later variants
108;;; that use cmake-build-system.
109(define (%common-build-phases)
110 `((add-after 'unpack 'split-package
111 ;; Remove files that have been packaged in other package recipes.
112 (lambda _
113 (delete-file "Auxiliary/cmake-mode.el")
114 (substitute* "Auxiliary/CMakeLists.txt"
115 ((".*cmake-mode.el.*") ""))))
116 ,@(if (target-x86-32?)
117 '((add-after 'unpack 'skip-cpack-txz-test
118 (lambda _
119 ;; In 'RunCMake.CPack_TXZ', the 'TXZ/THREADED_ALL' test
120 ;; would occasionally fail on i686 with "Internal error
121 ;; initializing compression library: Cannot allocate
122 ;; memory": <https://issues.guix.gnu.org/50617>. Skip it.
123 (substitute* "Tests/RunCMake/CPack/RunCMakeTest.cmake"
124 (("THREADED_ALL \"TXZ;DEB\"")
125 "THREADED_ALL \"DEB\"")))))
126 '())
127 (add-before 'configure 'patch-bin-sh
128 (lambda _
129 ;; Replace "/bin/sh" by the right path in... a lot of
130 ;; files.
131 (substitute*
132 '("Modules/CompilerId/Xcode-3.pbxproj.in"
133 "Modules/Internal/CPack/CPack.RuntimeScript.in"
134 "Source/cmGlobalXCodeGenerator.cxx"
135 "Source/cmLocalNinjaGenerator.cxx"
136 "Source/cmLocalUnixMakefileGenerator3.cxx"
137 "Source/cmExecProgramCommand.cxx"
138 "Tests/CMakeLists.txt"
139 "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
140 (("/bin/sh") (which "sh")))))))
141
142(define %common-disabled-tests
143 '(;; This test copies libgcc_s.so.1 from GCC and tries to modify its RPATH,
144 ;; but does not cope with the file being read-only.
145 "BundleUtilities"
146 ;; These tests require network access.
147 "CTestTestUpload" "CMake.FileDownload"
148 ;; This test requires 'ldconfig' which is not available in Guix.
149 "RunCMake.install"
150 ;; This test fails for unknown reason.
151 "RunCMake.file-GET_RUNTIME_DEPENDENCIES"
152 ;; These tests fail with gcc-14.
153 "LoadCommand"
154 "LoadedCommandOneConfig"))
155
156(define %common-disabled-tests/hurd
157 '("CTestTestTimeout"
158 "CTestTestRerunFailed"
159 "RunCMake.ctest_test"
160 "RunCMake.CTestTimeout"
161 "RunCMake.CTestTimeoutAfterMatch"
162 "RunCMake.CTestCommandLine"
163 ;; Fixed in v4.0.0
164 "RunCMake.RuntimePath"))
165
166(define %preserved-third-party-files
167 '(;; 'Source/cm_getdate.c' includes archive_getdate.c wholesale, so it must
168 ;; be available along with the required headers.
169 "Utilities/cmlibarchive/libarchive/archive_getdate.c"
170 "Utilities/cmlibarchive/libarchive/archive_getdate.h"
171 ;; ELF headers.
172 "Utilities/cmelf"
173 ;; CMake header wrappers.
174 "Utilities/cm3p"
175 ;; Pkg-config file format parser based on llparse.
176 "Utilities/cmllpkgc"))
177
178;;; The "bootstrap" CMake. It is used to build 'cmake-minimal' below, as well
179;;; as any dependencies that need cmake-build-system.
180(define-public cmake-bootstrap
181 (package
182 (name "cmake-bootstrap")
183 (version "3.31.10")
184 (source (origin
185 (method url-fetch)
186 (uri (string-append "https://cmake.org/files/v"
187 (version-major+minor version)
188 "/cmake-" version ".tar.gz"))
189 (sha256
190 (base32
191 "0a9y7nqr27rl8acvjyj8s57q87bdjxa9w2g5mphsh7ylsvgzl1ng"))))
192 (build-system gnu-build-system)
193 (arguments
194 (list
195 #:test-target "test"
196 #:configure-flags
197 #~(let ((parallel-job-count (number->string (parallel-job-count))))
198 (list "--verbose"
199 (string-append "--parallel=" parallel-job-count)
200 (string-append "--prefix=" #$output)
201 "--system-libs"
202 ;; By default, the man pages and other docs land
203 ;; in PREFIX/man and PREFIX/doc, but we want them
204 ;; in share/{man,doc}. Note that unlike
205 ;; autoconf-generated configure scripts, cmake's
206 ;; configure prepends "PREFIX/" to what we pass
207 ;; to --mandir and --docdir.
208 "--mandir=share/man"
209 (string-append "--docdir=share/doc/cmake-"
210 #$(version-major+minor version))
211
212 ;; By default CMake is built without any optimizations. Use
213 ;; the recommended Release target for a ~2.5x speedup.
214 "--" "-DCMAKE_BUILD_TYPE=Release"
215
216 ;; The debugger creates a circular dependency on cppdap.
217 "-DCMake_ENABLE_DEBUGGER=OFF"))
218 #:make-flags
219 #~(let ((skipped-tests
220 (list #$@%common-disabled-tests
221 "CTestTestSubdir" ; This test fails to build 2 of the 3 tests.
222 ;; This test fails when ARGS (below) is in use, see
223 ;; <https://gitlab.kitware.com/cmake/cmake/issues/17165>.
224 "CTestCoverageCollectGCOV"
225 #$@(if (target-hurd?)
226 %common-disabled-tests/hurd
227 #~()))))
228 (list
229 (string-append
230 ;; These arguments apply for the tests only.
231 "ARGS=-j " (number->string (parallel-job-count))
232 " --output-on-failure"
233 " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$")))
234 #:phases
235 #~(modify-phases %standard-phases
236 #$@(%common-build-phases)
237 (add-before 'configure 'set-paths
238 (lambda _
239 ;; Help cmake's bootstrap process to find system libraries
240 (begin
241 (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
242 (setenv "CMAKE_INCLUDE_PATH" (or (getenv "CPATH")
243 (getenv "C_INCLUDE_PATH"))))))
244 ;; CMake uses its own configure script.
245 (replace 'configure
246 (lambda* (#:key (configure-flags '()) #:allow-other-keys)
247 (apply invoke "./configure" configure-flags))))))
248 (inputs
249 (list bzip2
250 curl
251 expat
252 file
253 jsoncpp/pinned
254 libarchive
255 libuv
256 rhash
257 zlib))
258 (native-search-paths
259 (list (search-path-specification
260 (variable "CMAKE_PREFIX_PATH")
261 (files '("")))
262 ;; "cmake-curl-certificates.patch" changes CMake to honor 'SSL_CERT_DIR'
263 ;; and 'SSL_CERT_FILE', hence these search path entries.
264 $SSL_CERT_DIR
265 $SSL_CERT_FILE))
266 (home-page "https://cmake.org/")
267 (synopsis "Cross-platform build system")
268 (description
269 "CMake is a family of tools designed to build, test and package software.
270CMake is used to control the software compilation process using simple platform
271and compiler independent configuration files. CMake generates native makefiles
272and workspaces that can be used in the compiler environment of your choice.")
273 (properties '((hidden? . #t)))
274 (license (list license:bsd-3 ; cmake
275 license:expat ; cmjsoncpp is dual MIT/public domain
276 license:public-domain)))) ; cmlibarchive/archive_getdate.c
277
278;;; This minimal variant of CMake does not include the documentation. It is
279;;; used by the cmake-build-system.
280(define-public cmake-minimal
281 (package
282 (inherit cmake-bootstrap)
283 (name "cmake-minimal")
284 (properties (alist-delete 'hidden? (package-properties cmake-bootstrap)))
285 (source (origin
286 (inherit (package-source cmake-bootstrap))
287 ;; Purge CMakes bundled dependencies as they are no longer needed.
288 (modules '((ice-9 ftw)))
289 (snippet
290 `(begin
291 (define preserved-files ',%preserved-third-party-files)
292
293 (file-system-fold (lambda (dir stat result) ;enter?
294 (or (string=? "Utilities" dir) ;init
295 ;; The bundled dependencies are
296 ;; distinguished by having a "cm"
297 ;; prefix to their upstream names.
298 (and (string-prefix? "Utilities/cm" dir)
299 (not (member dir preserved-files)))))
300 (lambda (file stat result) ;leaf
301 (unless (or (member file preserved-files)
302 ;; Preserve top-level files.
303 (string=? "Utilities"
304 (dirname file)))
305 (delete-file file)))
306 (const #t) ;down
307 (lambda (dir stat result) ;up
308 (when (equal? (scandir dir) '("." ".."))
309 (rmdir dir)))
310 (const #t) ;skip
311 (lambda (file stat errno result)
312 (format (current-error-port)
313 "warning: failed to delete ~a: ~a~%"
314 file (strerror errno)))
315 #t
316 "Utilities"
317 lstat)
318 #t))))
319 (build-system cmake-build-system)
320 (arguments
321 (list
322 #:configure-flags
323 #~(list "-DCMAKE_USE_SYSTEM_LIBRARIES=ON"
324 ;; The debugger creates a circular dependency on cppdap.
325 "-DCMake_ENABLE_DEBUGGER=OFF"
326 (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-"
327 #$(version-major+minor (package-version
328 cmake-bootstrap))))
329
330 ;; This is the CMake used in cmake-build-system. Ensure compiler
331 ;; optimizations are enabled to save size and CPU cycles.
332 #:build-type "Release"
333 #:phases
334 #~(modify-phases %standard-phases
335 #$@(%common-build-phases)
336 (add-after 'install 'delete-help-documentation
337 (lambda _
338 (delete-file-recursively
339 (string-append #$output
340 "/share/cmake-"
341 #$(version-major+minor
342 (package-version cmake-bootstrap))
343 "/Help"))))
344 (replace 'check
345 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
346 (let ((skipped-tests (list #$@%common-disabled-tests
347 ;; This test requires the bundled libuv.
348 "BootstrapTest"
349 #$@(if (system-hurd?)
350 %common-disabled-tests/hurd
351 #~()))))
352 (if tests?
353 (begin
354 (invoke "ctest" "-j" (if parallel-tests?
355 (number->string (parallel-job-count))
356 "1")
357 "--output-on-failure"
358 "--exclude-regex"
359 (string-append "^(" (string-join skipped-tests "|") ")$")))
360 (format #t "test suite not run~%"))))))
361 #:cmake (if (%current-target-system)
362 cmake-minimal-cross
363 cmake-bootstrap)))))
364
365(define-public cmake-minimal-4
366 (package
367 (inherit cmake-minimal)
368 (version "4.3.3")
369 (source
370 (origin
371 (inherit (package-source cmake-minimal))
372 (method url-fetch)
373 (uri (string-append "https://cmake.org/files/v"
374 (version-major+minor version)
375 "/cmake-" version ".tar.gz"))
376 (snippet
377 (match (origin-snippet (package-source cmake-minimal))
378 (('begin ('define 'preserved-files ('quote x))
379 rest ...)
380 `(begin
381 (define preserved-files
382 ',(cons*
383 "Utilities/cmelf"
384 "Utilities/cmlibarchive/libarchive/archive_parse_date.c"
385 x))
386 ,@rest))))
387 (sha256
388 (base32
389 "11dvr50smd28vysw7a5k6pjanfrqjql96nghnrxqgwpd8ixbp96b"))))
390 (arguments
391 (substitute-keyword-arguments arguments
392 ((#:phases phases '%standard-phases)
393 #~(modify-phases #$phases
394 (replace 'delete-help-documentation
395 (lambda _
396 (delete-file-recursively
397 (string-append #$output
398 "/share/cmake-"
399 #$(version-major+minor
400 (package-version this-package))
401 "/Help"))))))))))
402
403;;; The "user-facing" CMake, now with manuals and HTML documentation.
404(define-public cmake
405 (package
406 (inherit cmake-minimal)
407 (name "cmake")
408 (version "4.1.3")
409 (source (origin
410 (inherit (package-source cmake-minimal))
411 (method url-fetch)
412 (uri (string-append "https://cmake.org/files/v"
413 (version-major+minor version)
414 "/cmake-" version ".tar.gz"))
415 (snippet (match (origin-snippet (package-source cmake-minimal))
416 (('begin ('define 'preserved-files ('quote x))
417 rest ...)
418 `(begin (define preserved-files
419 ',(cons "Utilities/cmelf" x))
420 ,@rest))))
421 (sha256
422 (base32
423 "125yhgkmh5ap14w9yyh442manbb7k96dws4pa3hz32qp7njpjn3n"))))
424 (outputs '("out" "doc"))
425 (arguments
426 (substitute-keyword-arguments arguments
427 ;; Use cmake-minimal this time.
428 ((#:cmake _ #f)
429 (if (%current-target-system)
430 cmake-minimal-cross
431 cmake-minimal))
432
433 ;; Enable debugging information for convenience.
434 ((#:build-type _ #f) "RelWithDebInfo")
435
436 ((#:configure-flags flags ''())
437 #~(append (list "-DSPHINX_INFO=ON" "-DSPHINX_MAN=ON" "-DSPHINX_HTML=ON"
438 (string-append "-DCMAKE_DOC_DIR=share/doc/cmake-"
439 #$(version-major+minor (package-version
440 cmake-minimal)))
441 (string-append "-DCMake_INSTALL_VIMFILES_DIR=" #$output
442 "/share/vim/vimfiles/pack/guix/start/cmake")
443 "-DCMAKE_INFO_DIR=share/info"
444 "-DCMAKE_MAN_DIR=share/man")
445 #$flags))
446 ((#:phases phases)
447 #~(modify-phases #$phases
448 (delete 'delete-help-documentation)
449 (add-after 'install 'move-html-doc
450 (lambda _
451 (let ((html (string-append "/share/doc/cmake-"
452 #$(version-major+minor
453 (package-version cmake-minimal))
454 "/html")))
455 (copy-recursively (string-append #$output html)
456 (string-append #$output:doc html))
457 (delete-file-recursively (string-append #$output html)))))))))
458 (inputs
459 (modify-inputs inputs
460 (prepend ncurses) ;required for ccmake
461 ;; Avoid circular dependency with (gnu packages debug).
462 (prepend (module-ref (resolve-interface '(gnu packages debug))
463 'cppdap))))
464 ;; Extra inputs required to build the documentation.
465 (native-inputs
466 (modify-inputs native-inputs
467 (append python-sphinx
468 texinfo)))))
469
470(define-public cmake-3.25
471 (hidden-package
472 (package/inherit cmake
473 (version "3.25.3")
474 (source (origin
475 (method url-fetch)
476 (uri (string-append "https://cmake.org/files/v"
477 (version-major+minor version)
478 "/cmake-" version ".tar.gz"))
479 (sha256
480 (base32
481 "074hw6pr7w4j6mfnpm3xh99cm6chjf4rjpi4qkmnvjlhsl0mg6fc")))))))
482
483(define-public cmake-minimal-cross
484 (package
485 (inherit cmake-minimal)
486 (name "cmake-minimal-cross")
487 (native-search-paths '())
488 (search-paths
489 (package-native-search-paths cmake-minimal))))
490
491(define-public cmakelang
492 (package
493 (name "cmakelang")
494 (version "0.6.13")
495 (source
496 (origin
497 (method url-fetch)
498 (uri (pypi-uri "cmakelang" version))
499 (sha256
500 (base32 "0zz6g1ignqanl4ja9f5nrlk5f3mvv7cp5y9yswjd0m06n23jx603"))))
501 (build-system pyproject-build-system)
502 (arguments
503 (list
504 #:tests? #f ;no test data in pypi archive
505 #:modules '((guix build pyproject-build-system)
506 (guix build utils)
507 (ice-9 textual-ports))
508 #:phases
509 #~(modify-phases %standard-phases
510 (add-after 'unpack 'adjust-setup.py
511 (lambda _
512 (substitute* "setup.py"
513 (("cmakelang/doc/README.rst")
514 "README.rst"))
515 ;; XXX: setup.py has multiple setup() calls, breaking the 'build
516 ;; phase ; in this case the package is wrong, but conveniently
517 ;; our goal is the first setup() call, so discard what comes from
518 ;; the second one.
519 (rename-file "setup.py" "setup.py.bak")
520 (call-with-input-file "setup.py.bak"
521 (lambda (in)
522 (call-with-output-file "setup.py"
523 (lambda (out)
524 (let loop ((line (get-line in))
525 (setup-seen #f))
526 (unless (or (eof-object? line)
527 (and (string-prefix? "setup(" line)
528 setup-seen))
529 (display line out)
530 (newline out)
531 (loop (get-line in)
532 (or setup-seen
533 (string-prefix? "setup(" line))))))))))))))
534 (native-inputs (list python-setuptools))
535 (inputs (list python-jinja2 python-pyyaml python-six))
536 (home-page "https://github.com/cheshirekow/cmake_format/")
537 (synopsis "Language tools for CMake (format, lint, etc.)")
538 (description "The cmakelang project provides quality assurance (QA) tools
539for CMake:
540@table @command
541@item cmake-annotate
542generate pretty HTML from your listfiles
543@item cmake-format
544format your listfiles nicely
545@item cmake-lint
546check your listfiles for problems
547@item ctest-to
548parse a ctest output tree and translate it into a more structured
549format (either JSON or XML).
550@end table")
551 (license license:gpl3+)))
552
553(define-public corrosion
554 (package
555 (name "corrosion")
556 (version "0.5.1")
557 (source (origin
558 (method git-fetch)
559 (uri (git-reference
560 (url "https://github.com/corrosion-rs/corrosion")
561 (commit (string-append "v" version))))
562 (file-name (git-file-name name version))
563 (sha256
564 (base32 "1bylfjji4yw88r00hgb69nfl9lz73bhc7q3n64myif4alr4b8ypx"))
565 (patches
566 (search-patches "corrosion-honor-CARGO_BUILD_TARGET.patch"))))
567 (build-system cmake-build-system)
568 (arguments
569 (list
570 #:phases
571 #~(modify-phases %standard-phases
572 (replace 'check
573 (lambda* (#:key tests? #:allow-other-keys)
574 (when tests?
575 (invoke "ctest" "-E"
576 (string-append
577 "(" (string-join
578 (list "cbindgen_rust2cpp"
579 "rustup_proxy"
580 "hostbuild"
581 "parse_target_triple")
582 "|")
583 ")"))))))))
584 (native-inputs
585 (list rust
586 `(,rust "cargo")))
587 (home-page "https://corrosion-rs.github.io/corrosion/")
588 (synopsis "Tool for integrating Rust into an existing CMake project")
589 (description "Corrosion, formerly known as cmake-cargo, is a tool for
590integrating Rust into an existing CMake project. Corrosion can automatically
591import executables, static libraries, and dynamic libraries from a workspace
592or package manifest (Cargo.toml file).")
593 (license license:expat)))
594
595(define-public emacs-cmake-mode
596 (package
597 (inherit cmake)
598 (name "emacs-cmake-mode")
599 (native-inputs '())
600 (inputs '())
601 (outputs '("out"))
602 (build-system emacs-build-system)
603 (arguments
604 (list #:lisp-directory "Auxiliary"))
605 (synopsis "Emacs major mode for editing Cmake expressions")
606 (description "@code{cmakeos-mode} provides an Emacs major mode for editing
607Cmake files. It supports syntax highlighting, indenting and refilling of
608comments.")))
609
610(define-public morse-cmake
611 (package
612 (name "morse-cmake")
613 ;; Project does not tag any releases, using latest commit.
614 (properties '((commit . "3f74c7935db26c118bae695a16b02fa83f1aeac0")
615 (revision . "0")))
616 (version (git-version "0.0.0"
617 (assoc-ref properties 'revision)
618 (assoc-ref properties 'commit)))
619 (source (origin
620 (method git-fetch)
621 (uri (git-reference
622 (url "https://gitlab.inria.fr/solverstack/morse_cmake")
623 (commit (assoc-ref properties 'commit))))
624 (file-name (git-file-name name version))
625 (sha256
626 (base32 "0pw56am3mz65bi700bk5bl4s1i5d5761gnhjmvh7xmdyxpi0qrj1"))))
627 (build-system copy-build-system)
628 (arguments
629 (list
630 #:install-plan
631 #~'(("modules" "share/morse-cmake/modules")
632 ("CONTRIBUTING.md" "share/morse-cmake/")
633 ("LICENCE.txt" "share/morse-cmake/")
634 ("README.md" "share/morse-cmake/"))))
635 (home-page "https://gitlab.inria.fr/solverstack/morse_cmake")
636 (synopsis "Collection of CMake modules that can be shared among projects")
637 (description
638 "This project provides a collection of CMake modules that can be shared
639among projects using CMake as build system. For now it is mainly constituted of
640@code{Find} modules that help detecting installed libraries on the system.")
641 (license license:cecill-c)))
642
643(define-public qmsetup
644 (package
645 (name "qmsetup")
646 (version "1.0.0.0")
647 (source (origin
648 (method git-fetch)
649 (uri (git-reference
650 (url "https://github.com/stdware/qmsetup")
651 (commit version)))
652 (file-name (git-file-name name version))
653 (sha256
654 (base32
655 "0cfl26ff8y384cbgi340l1znxvdjmc4f5s86kl20gkkwlkc11zdy"))))
656 (build-system cmake-build-system)
657 (arguments
658 (list
659 #:tests? #f ;no test suite
660 #:phases #~(modify-phases %standard-phases
661 (add-after 'unpack 'patch-paths
662 (lambda* (#:key inputs #:allow-other-keys)
663 (substitute* "src/corecmd/utils_unix.cpp"
664 (("\"patchelf\"")
665 (format #f "~s" (search-input-file
666 inputs "bin/patchelf")))))))))
667 (inputs (list patchelf syscmdline))
668 (home-page "https://github.com/stdware/qmsetup")
669 (synopsis "CMake modules and basic libraries for C/C++ projects")
670 (description "QMSetup is a set of CMake Modules and Basic Libraries for
671C/C++ projects. It features:
672@itemize
673@item Helpful CMake utilities
674@item Generate configuration header files
675@item Reorganize header files
676@item Deploy project dependencies and fix rpaths
677@item Support calling Doxygen via CMake conveniently
678@item Support calling Qt Linguist Tools via CMake conveniently
679@end itemize")
680 (license license:expat)))
681
682(define-public tinycmmc
683 ;; XXX: No tagged releases; this is the master tip.
684 (let ((commit "2e007ba059a4991c011a7193c9d7df28826c9adc")
685 (revision "1"))
686 (package
687 (name "tinycmmc")
688 (version (git-version "0.1.0" revision commit))
689 (source
690 (origin
691 (method git-fetch)
692 (uri (git-reference
693 (url "https://github.com/Grumbel/tinycmmc")
694 (commit commit)))
695 (file-name (git-file-name name version))
696 (sha256
697 (base32 "0ix2v0zrrcanflxdm0r4xpgda8lkls3ir7xqimdk2na4dfqnc05g"))))
698 (build-system cmake-build-system)
699 (arguments
700 (list #:tests? #f)) ; No tests.
701 (home-page "https://github.com/Grumbel/tinycmmc")
702 (synopsis "Tiny CMake Module Collections")
703 (description "The tinycmmc package contains a small collection of reusable
704CMake modules.")
705 (license license:zlib))))
706
707(define-public cpm-cmake
708 (package
709 (name "cpm-cmake")
710 (version "0.38.6")
711 (source
712 (origin
713 (method git-fetch)
714 (uri (git-reference
715 (url "https://github.com/cpm-cmake/CPM.cmake")
716 (commit (string-append "v" version))))
717 (file-name (git-file-name name version))
718 (sha256
719 (base32 "1qbbhdq6cz2y7qfyy1k11i98d13s229r3phd5y3n5maq51ky8bgb"))))
720 (build-system copy-build-system)
721 (arguments
722 (list
723 #:install-plan #~'(("cmake/CPM.cmake" "lib/cmake/CPM.cmake"))))
724 (home-page "https://github.com/cpm-cmake/CPM.cmake")
725 (synopsis "Package manager for CMake")
726 (description "CPM.cmake is a cross-platform CMake script that adds
727dependency management capabilities to CMake.")
728 (license license:expat)))
729
730(define-public sanitizers-cmake
731 (let ((commit "0573e2ea8651b9bb3083f193c41eb086497cc80a")
732 (revision "0"))
733 (package
734 (name "sanitizers-cmake")
735 (version (git-version "0.0" revision commit))
736 (source (origin
737 (method git-fetch)
738 (uri (git-reference
739 (url "https://github.com/arsenm/sanitizers-cmake")
740 (commit commit)))
741 (file-name (git-file-name name version))
742 (sha256
743 (base32
744 "1sqjmx65iif67k10jwlf1j8p279rsniy1i3ff660hfrynr0knlry"))))
745 (build-system cmake-build-system)
746 (arguments
747 (list
748 #:configure-flags
749 #~(list
750 ;; Otherwise optimizer will optimize away our faulty thing.
751 "-DCMAKE_BUILD_TYPE=Debug")
752 #:phases
753 #~(modify-phases %standard-phases
754 ;; No install target provided; manually copy files to a suitable
755 ;; folder in the output.
756 (replace 'install
757 (lambda* (#:key source #:allow-other-keys)
758 (copy-recursively
759 (string-append source "/cmake")
760 (string-append #$output "/share/" #$name "/cmake")))))))
761 (synopsis "CMake module to enable sanitizers for binary targets")
762 (description "@code{sanitizers-cmake} provides a module for the CMake
763build system that can enable address, memory, thread and undefined-behavior
764sanitizers for binary targets using flags appropriate for the compiler in
765use.")
766 (home-page "https://github.com/arsenm/sanitizers-cmake")
767 (license license:expat))))