2011-01-22 21:34:18 +00:00
|
|
|
{ stdenv, fetchurl, cvsVersion ? true, fetchcvs ? null
|
|
|
|
, autoconf ? null, automake ? null, libtool ? null }:
|
2004-11-19 14:57:43 +00:00
|
|
|
|
2010-08-21 18:09:02 +01:00
|
|
|
let
|
2011-01-22 21:34:18 +00:00
|
|
|
cvs = cvsVersion;
|
|
|
|
version = if !cvs then "7.1" else "7.2pre20110122";
|
2010-08-21 18:09:02 +01:00
|
|
|
in
|
2010-04-01 11:05:58 +01:00
|
|
|
stdenv.mkDerivation ({
|
2008-09-05 09:03:44 +01:00
|
|
|
name = "boehm-gc-${version}";
|
|
|
|
|
2011-01-22 21:34:18 +00:00
|
|
|
src =
|
|
|
|
if version == "7.1"
|
|
|
|
then fetchurl {
|
|
|
|
url = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-${version}.tar.gz";
|
|
|
|
sha256 = "0c5zrsdw0rsli06lahcqwwz0prgah340fhfg7ggfgvz3iw1gdkp3";
|
|
|
|
/* else if version == "7.2alpha4" then
|
|
|
|
"1ya9hr1wbx0hrx29q5zy2k51ml71k9mhqzqs7f505qr9s6jsfh0b" */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Use the CVS version for now since it contains many, many fixes
|
|
|
|
compared to 7.1 and even 7.2alpha4 (e.g., interception of
|
|
|
|
`pthread_exit', dated 2010-08-14, which fixes possible deadlocks
|
|
|
|
on GNU/Linux.) */
|
|
|
|
else fetchcvs {
|
|
|
|
cvsRoot = ":pserver:anonymous@bdwgc.cvs.sourceforge.net:/cvsroot/bdwgc";
|
|
|
|
module = "bdwgc";
|
|
|
|
date = "20110121";
|
|
|
|
sha256 = "00f7aed82fa02211db93692c24b74e15010aff545f97691c5e362432a7ae283a";
|
|
|
|
};
|
2008-09-05 09:03:44 +01:00
|
|
|
|
2011-01-26 08:09:59 +00:00
|
|
|
patches = stdenv.lib.optional (stdenv.isCygwin && !cvs)
|
2009-09-18 15:30:10 +01:00
|
|
|
./cygwin-pthread-dl.patch;
|
|
|
|
|
2008-09-05 09:03:44 +01:00
|
|
|
doCheck = true;
|
|
|
|
|
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.
|
|
|
|
'';
|
|
|
|
|
2008-01-06 00:12:25 +00:00
|
|
|
homepage = http://www.hpl.hp.com/personal/Hans_Boehm/gc/;
|
2009-09-16 13:39:57 +01:00
|
|
|
|
|
|
|
# non-copyleft, X11-style license
|
|
|
|
license = "http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt";
|
|
|
|
|
|
|
|
maintainers = [ stdenv.lib.maintainers.ludo ];
|
2010-02-12 14:14:40 +00:00
|
|
|
platforms = stdenv.lib.platforms.all;
|
2004-11-19 14:57:43 +00:00
|
|
|
};
|
|
|
|
}
|
2010-04-01 10:26:29 +01:00
|
|
|
|
|
|
|
//
|
|
|
|
|
2011-01-22 21:34:18 +00:00
|
|
|
(if cvs
|
|
|
|
then {
|
|
|
|
buildInputs = [ autoconf automake libtool ];
|
|
|
|
preConfigure = "autoreconf -vfi";
|
|
|
|
}
|
|
|
|
else { })
|
|
|
|
|
|
|
|
//
|
|
|
|
|
2010-04-01 10:26:29 +01:00
|
|
|
(if stdenv.system == "x86_64-darwin"
|
|
|
|
# Fix "#error ucontext routines are deprecated, and require _XOPEN_SOURCE to be defined".
|
|
|
|
then { configureFlags = "CPPFLAGS=-D_XOPEN_SOURCE"; }
|
2010-04-01 11:05:58 +01:00
|
|
|
else {}))
|