gnu: Add python-pyshp.
[jackhill/guix/guix.git] / gnu / packages / bdw-gc.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
5 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
6 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
7 ;;;
8 ;;; This file is part of GNU Guix.
9 ;;;
10 ;;; GNU Guix is free software; you can redistribute it and/or modify it
11 ;;; under the terms of the GNU General Public License as published by
12 ;;; the Free Software Foundation; either version 3 of the License, or (at
13 ;;; your option) any later version.
14 ;;;
15 ;;; GNU Guix is distributed in the hope that it will be useful, but
16 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;;; GNU General Public License for more details.
19 ;;;
20 ;;; You should have received a copy of the GNU General Public License
21 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
22
23 (define-module (gnu packages bdw-gc)
24 #:use-module (guix licenses)
25 #:use-module (guix packages)
26 #:use-module (guix download)
27 #:use-module (guix utils)
28 #:use-module (guix build-system gnu)
29 #:use-module (gnu packages pkg-config)
30 #:use-module (gnu packages hurd))
31
32 (define-public libgc
33 (package
34 (name "libgc")
35 (version "8.0.4")
36 (source (origin
37 (method url-fetch)
38 (uri (string-append "https://github.com/ivmai/bdwgc/releases"
39 "/download/v" version "/gc-" version ".tar.gz"))
40 (sha256
41 (base32
42 "1798rp3mcfkgs38ynkbg2p47bq59pisrc6mn0l20pb5iczf0ssj3"))))
43 (build-system gnu-build-system)
44 (arguments
45 `(#:configure-flags
46 (list
47 ;; Install gc_cpp.h et al.
48 "--enable-cplusplus"
49 ;; In GNU/Hurd systems during the 'Check' phase,
50 ;; there is a deadlock caused by the 'gctest' test.
51 ;; To disable the error set "--disable-gcj-support"
52 ;; to configure script. See bug report and discussion:
53 ;; <https://lists.opendylan.org/pipermail/bdwgc/2017-April/006275.html>
54 ;; <https://lists.gnu.org/archive/html/bug-hurd/2017-01/msg00008.html>
55 ,@(if (hurd-triplet? (or (%current-system)
56 (%current-target-system)))
57 '("--disable-gcj-support")
58 '()))))
59 (native-inputs `(("pkg-config" ,pkg-config)))
60 (propagated-inputs
61 (if (%current-target-system)
62 ;; The build system refuses to check for compiler intrinsics when
63 ;; cross-compiling, and demands using libatomic-ops instead.
64 `(("libatomic-ops" ,libatomic-ops))
65 '()))
66 (outputs '("out" "debug"))
67 (synopsis "The Boehm-Demers-Weiser conservative garbage collector
68 for C and C++")
69 (description
70 "The Boehm-Demers-Weiser conservative garbage collector can be used
71 as a garbage collecting replacement for C malloc or C++ new. It allows
72 you to allocate memory basically as you normally would, without
73 explicitly deallocating memory that is no longer useful. The collector
74 automatically recycles memory when it determines that it can no longer
75 be otherwise accessed.
76
77 The collector is also used by a number of programming language
78 implementations that either use C as intermediate code, want to
79 facilitate easier interoperation with C libraries, or just prefer the
80 simple collector interface.
81
82 Alternatively, the garbage collector may be used as a leak detector for
83 C or C++ programs, though that is not its primary goal.")
84 (home-page "https://www.hboehm.info/gc/")
85
86 (license (x11-style (string-append home-page "license.txt")))))
87
88 (define-public libgc/disable-munmap
89 ;; TODO: Use '--disable-munmap' by default on next rebuild cycle.
90 (package/inherit libgc
91 (arguments
92 ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
93 (substitute-keyword-arguments (package-arguments libgc)
94 ((#:configure-flags flags ''())
95 `(cons "--disable-munmap" ,flags))))
96 (properties `((hidden? . #t)
97 ,@(package-properties libgc)))))
98
99 ;; TODO: Add a static output in libgc in the next rebuild cycle.
100 (define-public libgc/static-libs
101 (package/inherit
102 libgc
103 (arguments (substitute-keyword-arguments (package-arguments libgc)
104 ((#:configure-flags flags ''())
105 `(cons "--enable-static" ,flags))))
106 (properties '((hidden? . #t)))))
107
108 (define-public libgc-7
109 (package
110 (inherit libgc)
111 (version "7.6.12")
112 (source (origin
113 (method url-fetch)
114 (uri (string-append "https://github.com/ivmai/bdwgc/releases"
115 "/download/v" version "/gc-" version ".tar.gz"))
116 (sha256
117 (base32
118 "10jhhi79d5brwlsyhwgpnrmc8nhlf7aan2lk9xhgihk5jc6srbvc"))))
119 (propagated-inputs `(("libatomic-ops" ,libatomic-ops)))))
120
121 (define-public libgc/back-pointers
122 (package/inherit
123 libgc
124 (name "libgc-back-pointers")
125 (arguments
126 `(#:make-flags
127 (list "CPPFLAGS=-DKEEP_BACK_PTRS=1")
128 ,@(package-arguments libgc)))
129 (synopsis "The BDW garbage collector, with back-pointer tracking")))
130
131 (define-public libatomic-ops
132 (package
133 (name "libatomic-ops")
134 (version "7.6.10")
135 (source (origin
136 (method url-fetch)
137 (uri (string-append
138 "https://github.com/ivmai/libatomic_ops/releases/download/v"
139 version "/libatomic_ops-" version ".tar.gz"))
140 (sha256
141 (base32
142 "1bwry043f62pc4mgdd37zx3fif19qyrs8f5bw7qxlmkzh5hdyzjq"))))
143 (build-system gnu-build-system)
144 (outputs '("out" "debug"))
145 (synopsis "Accessing hardware atomic memory update operations")
146 (description
147 "This C library provides semi-portable access to hardware-provided atomic
148 memory update operations on a number of architectures. These might allow you to
149 write code that does more interesting things in signal handlers, write
150 lock-free code, experiment with thread programming paradigms, etc.")
151 (home-page "https://github.com/ivmai/libatomic_ops/")
152
153 ;; Some source files are X11-style, others are GPLv2+.
154 (license gpl2+)))