about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix')
-rw-r--r--nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix b/nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix
new file mode 100644
index 000000000000..e951bdc34e4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, libatomic_ops
+, enableLargeConfig ? false # doc: https://github.com/ivmai/bdwgc/blob/v7.6.6/doc/README.macros#L179
+}:
+
+stdenv.mkDerivation rec {
+  pname = "boehm-gc";
+  version = "7.6.6";
+
+  src = fetchurl {
+    urls = [
+      "https://www.hboehm.info/gc/gc_source/gc-${version}.tar.gz"
+      "https://github.com/ivmai/bdwgc/releases/download/v${version}/gc-${version}.tar.gz"
+    ];
+    sha256 = "1p1r015a7jbpvkkbgzv1y8nxrbbp6dg0mq3ksi6ji0qdz3wfss79";
+  };
+
+  buildInputs = [ libatomic_ops ];
+  nativeBuildInputs = [ pkg-config ];
+
+  outputs = [ "out" "dev" "doc" ];
+  separateDebugInfo = stdenv.isLinux;
+
+  preConfigure = lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
+    export NIX_CFLAGS_COMPILE+=" -D_GNU_SOURCE -DUSE_MMAP -DHAVE_DL_ITERATE_PHDR"
+  '';
+
+  patches =
+    # https://github.com/ivmai/bdwgc/pull/208
+    lib.optional stdenv.hostPlatform.isRiscV ./riscv.patch;
+
+  configureFlags =
+    [ "--enable-cplusplus" ]
+    ++ lib.optional enableLargeConfig "--enable-large-config"
+    ++ lib.optional (stdenv.hostPlatform.libc == "musl") "--disable-static";
+
+  doCheck = true; # not cross;
+
+  # Don't run the native `strip' when cross-compiling.
+  dontStrip = stdenv.hostPlatform != stdenv.buildPlatform;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "The Boehm-Demers-Weiser conservative garbage collector for C and C++";
+
+    longDescription = ''
+      The Boehm-Demers-Weiser conservative garbage collector can be used as a
+      garbage collecting replacement for C malloc or C++ new.  It allows you
+      to allocate memory basically as you normally would, without explicitly
+      deallocating memory that is no longer useful.  The collector
+      automatically recycles memory when it determines that it can no longer
+      be otherwise accessed.
+
+      The collector is also used by a number of programming language
+      implementations that either use C as intermediate code, want to
+      facilitate easier interoperation with C libraries, or just prefer the
+      simple collector interface.
+
+      Alternatively, the garbage collector may be used as a leak detector for
+      C or C++ programs, though that is not its primary goal.
+    '';
+
+    homepage = "https://hboehm.info/gc/";
+
+    # non-copyleft, X11-style license
+    license = "https://hboehm.info/gc/license.txt";
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}