diff options
author | Stanislav Sedov <stas@FreeBSD.org> | 2009-12-18 04:08:01 +0000 |
---|---|---|
committer | Stanislav Sedov <stas@FreeBSD.org> | 2009-12-18 04:08:01 +0000 |
commit | 3c4f18635e797c2c88ac9a2448c03cac8d8bca2d (patch) | |
tree | f22e1d2467845bdb4597598236e90df704d20c08 /devel/boehm-gc-threaded | |
parent | 006d834cf51b82687d48e8ded28e85adca64353c (diff) | |
download | ports-3c4f18635e797c2c88ac9a2448c03cac8d8bca2d.tar.gz ports-3c4f18635e797c2c88ac9a2448c03cac8d8bca2d.zip |
- Add port for boehm-gc garbage collector variant with threads support.
This port will install only shared libraries with threads support enabled,
that will allow for easy dependency handling for ports that required libgc
build with specific features and will allow to avoid hacks of building own
version of libgc library.
Notes
Notes:
svn path=/head/; revision=246111
Diffstat (limited to 'devel/boehm-gc-threaded')
-rw-r--r-- | devel/boehm-gc-threaded/Makefile | 66 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/distinfo | 3 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-dbg_mlc.c | 77 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-dyn_load.c | 15 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-include-gc.h | 10 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h | 63 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/files/patch-os_dep.c | 29 | ||||
-rw-r--r-- | devel/boehm-gc-threaded/pkg-descr | 20 |
8 files changed, 283 insertions, 0 deletions
diff --git a/devel/boehm-gc-threaded/Makefile b/devel/boehm-gc-threaded/Makefile new file mode 100644 index 000000000000..c10a6159b0c0 --- /dev/null +++ b/devel/boehm-gc-threaded/Makefile @@ -0,0 +1,66 @@ +# New ports collection makefile for: boehm-gc-redirect +# Date created: 12/17/2009 +# Whom: stas +# +# $FreeBSD$ +# + +PORTNAME= boehm-gc +PORTVERSION= 7.1 +CATEGORIES= devel +MASTER_SITES= http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ +PKGNAMESUFFIX= -${GC_VARIANT} +DISTNAME= gc-${PORTVERSION:S/.a/alpha/} + +MAINTAINER= stas@FreeBSD.org +COMMENT= Garbage collection and memory leak detection for C and C++ + +RUN_DEPENDS= ${PREFIX}/include/gc/gc.h:${PORTSDIR}/devel/boehm-gc + +GNU_CONFIGURE= yes +USE_GNOME= gnometarget +USE_LDCONFIG= yes +CONFIGURE_ARGS= --enable-cplusplus --disable-static --enable-threads=posix \ + --enable-thread-local-alloc +CONFIGURE_ENV= CFLAGSS="${CFLAGS} LIBS="${LIBS} +MAKE_JOBS_UNSAFE= yes +INSTLIBS= cord gc gccpp +GC_VARIANT= threaded +SOVER= 1 + +OPTIONS= PARALLEL_MARK "Parallel-thread marking (faster for SMP)" off \ + FULLDEBUG "Debugging support (see documentation)" off + +PLIST_FILES= ${INSTLIBS:S,^,lib/lib,g:S,$,-${GC_VARIANT}.so.${SOVER},g} \ + ${INSTLIBS:S,^,lib/lib,g:S,$,-${GC_VARIANT}.so,g} + +.include <bsd.port.pre.mk> + +.if ${ARCH} == "ia64" +BROKEN= Does not compile on ia64 +.endif + +.if defined(WITH_PARALLEL_MARK) +CONFIGURE_ARGS+= --enable-parallel-mark +.endif + +.if defined(WITH_FULLDEBUG) +CONFIGURE_ARGS+= --enable-gc-debug +PKGNAMESUFFIX:= ${PKGNAMESUFFIX}+fulldebug +.endif + +post-patch: + ${REINPLACE_CMD} -E -e 's,libgc\.la,libgc-${GC_VARIANT}.la,g' \ + -e 's,libgccpp\.la,libgccpp-${GC_VARIANT}.la,g' \ + -e 's,libcord\.la,libcord-${GC_VARIANT}.la,g' \ + ${WRKSRC}/Makefile.in + +do-install: +.for LIB in ${INSTLIBS} + ${INSTALL_DATA} ${WRKSRC}/.libs/lib${LIB}-${GC_VARIANT}.so.${SOVER} \ + ${PREFIX}/lib/lib${LIB}-${GC_VARIANT}.so.${SOVER} + @(cd ${PREFIX}/lib && ${LN} -s lib${LIB}-${GC_VARIANT}.so.${SOVER} \ + lib${LIB}-${GC_VARIANT}.so) +.endfor + +.include <bsd.port.post.mk> diff --git a/devel/boehm-gc-threaded/distinfo b/devel/boehm-gc-threaded/distinfo new file mode 100644 index 000000000000..d4f8223a8eb4 --- /dev/null +++ b/devel/boehm-gc-threaded/distinfo @@ -0,0 +1,3 @@ +MD5 (gc-7.1.tar.gz) = 2ff9924c7249ef7f736ecfe6f08f3f9b +SHA256 (gc-7.1.tar.gz) = e3cef6028fe3efe7de3bcf4107c880eae50b3ee79841450d885467c09bcebf30 +SIZE (gc-7.1.tar.gz) = 1077714 diff --git a/devel/boehm-gc-threaded/files/patch-dbg_mlc.c b/devel/boehm-gc-threaded/files/patch-dbg_mlc.c new file mode 100644 index 000000000000..52a801da9c3a --- /dev/null +++ b/devel/boehm-gc-threaded/files/patch-dbg_mlc.c @@ -0,0 +1,77 @@ +--- dbg_mlc.c.orig 2009-10-20 00:34:39.000000000 +0400 ++++ dbg_mlc.c 2009-10-20 00:41:22.000000000 +0400 +@@ -456,10 +456,34 @@ + GC_register_displacement((word)sizeof(oh) + offset); + } + ++#if defined(__FreeBSD__) ++#include <dlfcn.h> ++static void GC_caller_func_offset(ad, symp, offp) ++const GC_word ad; ++const char **symp; ++int *offp; ++{ ++ Dl_info caller; ++ if (dladdr((const void *)ad, &caller) && caller.dli_sname != NULL) { ++ *symp = caller.dli_sname; ++ *offp = (const char *)ad - (const char *)caller.dli_saddr; ++ } ++} ++#else ++#define GC_caller_func(ad, symp, offp) ++#endif ++ + void * GC_debug_malloc(size_t lb, GC_EXTRA_PARAMS) + { + void * result = GC_malloc(lb + DEBUG_BYTES); +- ++ ++#ifdef GC_ADD_CALLER ++ if (s == NULL) { ++ GC_caller_func_offset(ra, &s, &i); ++ if (s == NULL) ++ s = "unknown"; ++ } ++#endif + if (result == 0) { + GC_err_printf("GC_debug_malloc(%lu) returning NIL (", + (unsigned long) lb); +@@ -764,6 +788,13 @@ + size_t old_sz; + hdr * hhdr; + ++#ifdef GC_ADD_CALLER ++ if (s == NULL) { ++ GC_caller_func_offset(ra, &s, &i); ++ if (s == NULL) ++ s = "unknown"; ++ } ++#endif + if (p == 0) return(GC_debug_malloc(lb, OPT_RA s, i)); + if (base == 0) { + GC_err_printf("Attempt to reallocate invalid pointer %p\n", p); +@@ -1041,17 +1072,21 @@ + } + + #ifdef GC_ADD_CALLER +-# define RA GC_RETURN_ADDR, ++# ifdef GC_RETURN_ADDR_PARENT ++# define RA GC_RETURN_ADDR_PARENT, ++# else ++# define RA GC_RETURN_ADDR, ++# endif + #else + # define RA + #endif + + void * GC_debug_malloc_replacement(size_t lb) + { +- return GC_debug_malloc(lb, RA "unknown", 0); ++ return GC_debug_malloc(lb, RA NULL, 0); + } + + void * GC_debug_realloc_replacement(void *p, size_t lb) + { +- return GC_debug_realloc(p, lb, RA "unknown", 0); ++ return GC_debug_realloc(p, lb, RA NULL, 0); + } diff --git a/devel/boehm-gc-threaded/files/patch-dyn_load.c b/devel/boehm-gc-threaded/files/patch-dyn_load.c new file mode 100644 index 000000000000..e8b954ecffb8 --- /dev/null +++ b/devel/boehm-gc-threaded/files/patch-dyn_load.c @@ -0,0 +1,15 @@ +--- dyn_load.c.orig Thu May 6 08:03:06 2004 ++++ dyn_load.c Sun Oct 31 01:53:01 2004 +@@ -97,6 +97,12 @@ + # else + # define ElfW(type) Elf64_##type + # endif ++# elif defined(__FreeBSD__) ++# if __ELF_WORD_SIZE == 32 ++# define ElfW(type) Elf32_##type ++# else ++# define ElfW(type) Elf64_##type ++# endif + # else + # if !defined(ELF_CLASS) || ELF_CLASS == ELFCLASS32 + # define ElfW(type) Elf32_##type diff --git a/devel/boehm-gc-threaded/files/patch-include-gc.h b/devel/boehm-gc-threaded/files/patch-include-gc.h new file mode 100644 index 000000000000..44ee87d92268 --- /dev/null +++ b/devel/boehm-gc-threaded/files/patch-include-gc.h @@ -0,0 +1,10 @@ +--- include/gc.h.orig Wed Jun 4 17:07:33 2003 ++++ include/gc.h Wed May 12 20:03:22 2004 +@@ -487,6 +487,7 @@ + /* gcc knows how to retrieve return address, but we don't know */ + /* how to generate call stacks. */ + # define GC_RETURN_ADDR (GC_word)__builtin_return_address(0) ++# define GC_RETURN_ADDR_PARENT (GC_word)__builtin_return_address(1) + # else + /* Just pass 0 for gcc compatibility. */ + # define GC_RETURN_ADDR 0 diff --git a/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h b/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h new file mode 100644 index 000000000000..da83c49ebb91 --- /dev/null +++ b/devel/boehm-gc-threaded/files/patch-include-private-gcconfig.h @@ -0,0 +1,63 @@ +--- include/private/gcconfig.h.orig 2008-02-20 22:23:00.000000000 +0300 ++++ include/private/gcconfig.h 2009-10-20 01:08:38.000000000 +0400 +@@ -64,7 +64,7 @@ + /* Determine the machine type: */ + # if defined(__arm__) || defined(__thumb__) + # define ARM32 +-# if !defined(LINUX) && !defined(NETBSD) ++# if !defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD) + # define NOSYS + # define mach_type_known + # endif +@@ -334,10 +334,26 @@ + # define X86_64 + # define mach_type_known + # endif ++# if defined(__FreeBSD__) && defined(__amd64__) ++# define X86_64 ++# define mach_type_known ++# endif ++# if defined(__FreeBSD__) && defined(__ia64__) ++# define IA64 ++# define mach_type_known ++# endif + # if defined(FREEBSD) && defined(__sparc__) + # define SPARC + # define mach_type_known + # endif ++# if defined(FREEBSD) && defined(__powerpc__) ++# define POWERPC ++# define mach_type_known ++# endif ++# if defined(FREEBSD) && defined(__arm__) ++# define ARM32 ++# define mach_type_known ++# endif + # if defined(bsdi) && (defined(i386) || defined(__i386__)) + # define I386 + # define BSDI +@@ -1771,6 +1787,16 @@ + # define OS_TYPE "MSWINCE" + # define DATAEND /* not needed */ + # endif ++# ifdef FREEBSD ++# define ALIGNMENT 4 ++# define OS_TYPE "FREEBSD" ++# ifdef __ELF__ ++# define DYNAMIC_LOADING ++# endif ++# define HEURISTIC2 ++ extern char etext[]; ++# define SEARCH_FOR_DATA_START ++# endif + # ifdef NOSYS + /* __data_start is usually defined in the target linker script. */ + extern int __data_start[]; +@@ -1800,6 +1826,7 @@ + # define OS_TYPE "MSWINCE" + # define DATAEND /* not needed */ + # endif ++ + # ifdef LINUX + # define OS_TYPE "LINUX" + # define LINUX_STACKBOTTOM diff --git a/devel/boehm-gc-threaded/files/patch-os_dep.c b/devel/boehm-gc-threaded/files/patch-os_dep.c new file mode 100644 index 000000000000..910777fe2b47 --- /dev/null +++ b/devel/boehm-gc-threaded/files/patch-os_dep.c @@ -0,0 +1,29 @@ +--- os_dep.c.orig 2008-02-29 22:01:28.000000000 +0300 ++++ os_dep.c 2009-10-20 00:48:39.000000000 +0400 +@@ -816,7 +816,7 @@ + || defined(HURD) || defined(NETBSD) + static struct sigaction old_segv_act; + # if defined(_sigargs) /* !Irix6.x */ || defined(HPUX) \ +- || defined(HURD) || defined(NETBSD) ++ || defined(HURD) || defined(NETBSD) || defined(FREEBSD) + static struct sigaction old_bus_act; + # endif + # else +@@ -826,7 +826,7 @@ + void GC_set_and_save_fault_handler(handler h) + { + # if defined(SUNOS5SIGS) || defined(IRIX5) \ +- || defined(OSF1) || defined(HURD) || defined(NETBSD) ++ || defined(OSF1) || defined(HURD) || defined(NETBSD) || defined(FREEBSD) + struct sigaction act; + + act.sa_handler = h; +@@ -846,7 +846,7 @@ + # else + (void) sigaction(SIGSEGV, &act, &old_segv_act); + # if defined(IRIX5) && defined(_sigargs) /* Irix 5.x, not 6.x */ \ +- || defined(HPUX) || defined(HURD) || defined(NETBSD) ++ || defined(HPUX) || defined(HURD) || defined(NETBSD) || defined(FREEBSD) + /* Under Irix 5.x or HP/UX, we may get SIGBUS. */ + /* Pthreads doesn't exist under Irix 5.x, so we */ + /* don't have to worry in the threads case. */ diff --git a/devel/boehm-gc-threaded/pkg-descr b/devel/boehm-gc-threaded/pkg-descr new file mode 100644 index 000000000000..8c3345931da2 --- /dev/null +++ b/devel/boehm-gc-threaded/pkg-descr @@ -0,0 +1,20 @@ +The Boehm-Weiser garbage collection package, for C and C++ - +garbage collection and memory leak detection libraries. + +A garbage collector is something which automatically frees malloc'd +memory for you by working out what parts of memory your program +no longer has pointers to. As a result, garbage collectors can also +inform you of memory leaks (if they find memory they can free, it means +you have lost all of your pointers to it, but you didn't free it). + +C programs may be linked against either of these, and should run (with +GC or leak detection) without change. C++ programs must include a header +to use garbage collection, though leak detection should work without +such source code modifications. See the man page and header files. + +This package only brings Boehm-GC libraries with threading support. + +-- Mike McGaughey <mmcg@cs.monash.edu.au> +ps: garbage collection is addictive. + +WWW: http://www.hpl.hp.com/personal/Hans_Boehm/gc/ |