2019-06-18 10:07:56 +01:00
|
|
|
{ lib, stdenv, fetchurl
|
2019-11-11 18:53:02 +00:00
|
|
|
, autoreconfHook
|
2021-12-26 09:10:54 +00:00
|
|
|
, enableLargeConfig ? false # doc: https://github.com/ivmai/bdwgc/blob/v8.0.6/doc/README.macros (LARGE_CONFIG)
|
2022-01-26 18:54:08 +00:00
|
|
|
, nixVersions
|
2017-06-28 21:01:43 +01:00
|
|
|
}:
|
2004-11-19 14:57:43 +00:00
|
|
|
|
2012-10-03 19:06:53 +01:00
|
|
|
stdenv.mkDerivation rec {
|
2019-08-15 13:41:18 +01:00
|
|
|
pname = "boehm-gc";
|
2021-12-26 09:10:54 +00:00
|
|
|
version = "8.0.6";
|
2008-09-05 09:03:44 +01:00
|
|
|
|
2011-02-02 12:17:29 +00:00
|
|
|
src = fetchurl {
|
2017-12-27 00:03:12 +00:00
|
|
|
urls = [
|
|
|
|
"https://github.com/ivmai/bdwgc/releases/download/v${version}/gc-${version}.tar.gz"
|
2019-11-16 00:41:23 +00:00
|
|
|
"https://www.hboehm.info/gc/gc_source/gc-${version}.tar.gz"
|
2017-12-27 00:03:12 +00:00
|
|
|
];
|
2021-12-26 09:10:54 +00:00
|
|
|
sha256 = "3b4914abc9fa76593596773e4da671d7ed4d5390e3d46fbf2e5f155e121bea11";
|
2011-02-02 12:17:29 +00:00
|
|
|
};
|
2016-12-03 22:04:21 +00:00
|
|
|
|
2016-08-29 01:30:01 +01:00
|
|
|
outputs = [ "out" "dev" "doc" ];
|
2019-09-29 10:18:02 +01:00
|
|
|
separateDebugInfo = stdenv.isLinux && stdenv.hostPlatform.libc != "musl";
|
2013-08-26 11:04:19 +01:00
|
|
|
|
2021-01-21 17:00:13 +00:00
|
|
|
preConfigure = lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
|
2019-02-03 19:25:42 +00:00
|
|
|
export NIX_CFLAGS_COMPILE+=" -D_GNU_SOURCE -DUSE_MMAP -DHAVE_DL_ITERATE_PHDR"
|
2018-01-11 20:35:31 +00:00
|
|
|
'';
|
|
|
|
|
2021-10-06 08:11:30 +01:00
|
|
|
# boehm-gc whitelists GCC threading models
|
|
|
|
patches = lib.optional stdenv.hostPlatform.isMinGW ./mcfgthread.patch;
|
2018-01-11 20:35:31 +00:00
|
|
|
|
2014-09-18 11:16:12 +01:00
|
|
|
configureFlags =
|
2019-02-04 02:24:17 +00:00
|
|
|
[ "--enable-cplusplus" "--with-libatomic-ops=none" ]
|
2019-02-13 04:36:55 +00:00
|
|
|
++ lib.optional enableLargeConfig "--enable-large-config";
|
2012-10-03 19:06:53 +01:00
|
|
|
|
2019-11-11 18:53:02 +00:00
|
|
|
nativeBuildInputs =
|
|
|
|
lib.optional stdenv.hostPlatform.isMinGW autoreconfHook;
|
|
|
|
|
2018-01-08 07:19:47 +00:00
|
|
|
doCheck = true; # not cross;
|
2008-09-05 09:03:44 +01:00
|
|
|
|
2017-11-21 17:58:48 +00:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2022-01-26 18:54:08 +00:00
|
|
|
passthru.tests = nixVersions;
|
2021-12-11 15:53:16 +00:00
|
|
|
|
2008-01-06 00:12:25 +00:00
|
|
|
meta = {
|
2009-09-16 13:39:57 +01:00
|
|
|
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.
|
|
|
|
'';
|
|
|
|
|
2020-04-01 02:11:51 +01:00
|
|
|
homepage = "https://hboehm.info/gc/";
|
2009-09-16 13:39:57 +01:00
|
|
|
|
|
|
|
# non-copyleft, X11-style license
|
2020-04-01 02:11:51 +01:00
|
|
|
license = "https://hboehm.info/gc/license.txt";
|
2009-09-16 13:39:57 +01:00
|
|
|
|
2015-01-13 21:33:24 +00:00
|
|
|
maintainers = [ ];
|
2021-01-21 17:00:13 +00:00
|
|
|
platforms = lib.platforms.all;
|
2004-11-19 14:57:43 +00:00
|
|
|
};
|
|
|
|
}
|