From: hboehm Date: Thu, 24 May 2007 00:23:26 +0000 (+0000) Subject: 2007-05-23 Hans Boehm X-Git-Tag: gc7_0~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8d93569561f9fc0ef2fc0cf78c964bd9f292d1a;p=gc 2007-05-23 Hans Boehm * Makefile.am: Move includes to bottom. Add better library dependencies. Increment library version. Remove "SUBDIRS += .". * cord/cord.am, tests/tests.am: Add better library dependencies. Remove now unnecessary dependencies. * Makefile.in: Regenerate. * include/gc.h (GC_begin_thread_ex, GC_endthreadex, GC_ExitThread): Move to define on all Windows platforms. (_beginthread): define to generate error if used. --- diff --git a/ChangeLog b/ChangeLog index 5ba092fa..09ca5d4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-05-23 Hans Boehm + + * Makefile.am: Move includes to bottom. Add better library + dependencies. Increment library version. Remove "SUBDIRS += .". + * cord/cord.am, tests/tests.am: Add better library dependencies. + Remove now unnecessary dependencies. + * Makefile.in: Regenerate. + * include/gc.h (GC_begin_thread_ex, GC_endthreadex, GC_ExitThread): + Move to define on all Windows platforms. (_beginthread): define + to generate error if used. + 2007-05-22 Hans Boehm * include/private/gc_locks.h: Format to 80 columns. diff --git a/Makefile.am b/Makefile.am index a842c7ac..648e0405 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,8 +32,6 @@ # endif SUBDIRS = -SUBDIRS += . - # Initialize variables so that we can declare files locally. EXTRA_DIST = lib_LTLIBRARIES = @@ -46,12 +44,6 @@ TESTS = pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = bdw-gc.pc -include include/include.am -include cord/cord.am -include tests/tests.am -include doc/doc.am - - # C Library # --------- @@ -91,7 +83,8 @@ endif # linuxthread semaphore functions get linked: libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS) libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:2:0 +libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:3:0 +# -no-undefined doesn't work here, since we get a reference to __tls_get_addr. EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ mips_sgi_mach_dep.s mips_ultrix_mach_dep.s \ @@ -106,8 +99,8 @@ if CPLUSPLUS lib_LTLIBRARIES += libgccpp.la pkginclude_HEADERS += include/gc_cpp.h include/gc_allocator.h libgccpp_la_SOURCES = gc_cpp.cc -libgccpp_la_LIBADD = $(THREADDLLIBS) $(UNWINDLIBS) -libgccpp_la_LDFLAGS = -version-info 1:2:0 +libgccpp_la_LIBADD = $(top_builddir)/libgc.la +libgccpp_la_LDFLAGS = -version-info 1:3:0 -no-undefined endif # FIXME: If Visual C++ users use Makefile.am, this should go into @@ -203,3 +196,12 @@ EXTRA_DIST += libtool.m4 # it will not remove dest if building fails .S.s: if $(CPP) $< >$@ ; then :; else rm -f $@; fi + +include include/include.am +include cord/cord.am +include tests/tests.am +include doc/doc.am +# Putting these at the top causes cord to be built first, and not find libgc.a +# on HP/UX. There may be a better fix. + + diff --git a/Makefile.in b/Makefile.in index 54e6d79a..70ae6a7a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -97,6 +97,17 @@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \ $(am__EXEEXT_1) $(am__EXEEXT_2) + +# C Library: Architecture Dependent +# --------------------------------- +@PTHREADS_TRUE@am__append_1 = pthread_support.c pthread_stop_world.c +@DARWIN_THREADS_TRUE@am__append_2 = darwin_stop_world.c +@WIN32_THREADS_TRUE@am__append_3 = win32_threads.c + +# C++ Interface +# ------------- +@CPLUSPLUS_TRUE@am__append_4 = libgccpp.la +@CPLUSPLUS_TRUE@am__append_5 = include/gc_cpp.h include/gc_allocator.h DIST_COMMON = $(am__configure_deps) $(am__pkginclude_HEADERS_DIST) \ $(dist_noinst_HEADERS) $(dist_noinst_SCRIPTS) \ $(dist_pkgconfig_DATA) $(dist_pkgdata_DATA) $(include_HEADERS) \ @@ -111,21 +122,10 @@ DIST_COMMON = $(am__configure_deps) $(am__pkginclude_HEADERS_DIST) \ #check_PROGRAMS += tracetest #tracetest_SOURCES = tests/trace_test.c #tracetest_LDADD = $(test_ldadd) -@THREADS_TRUE@am__append_1 = threadleaktest$(EXEEXT) -@THREADS_TRUE@am__append_2 = threadleaktest -@CPLUSPLUS_TRUE@am__append_3 = test_cpp$(EXEEXT) -@CPLUSPLUS_TRUE@am__append_4 = test_cpp - -# C Library: Architecture Dependent -# --------------------------------- -@PTHREADS_TRUE@am__append_5 = pthread_support.c pthread_stop_world.c -@DARWIN_THREADS_TRUE@am__append_6 = darwin_stop_world.c -@WIN32_THREADS_TRUE@am__append_7 = win32_threads.c - -# C++ Interface -# ------------- -@CPLUSPLUS_TRUE@am__append_8 = libgccpp.la -@CPLUSPLUS_TRUE@am__append_9 = include/gc_cpp.h include/gc_allocator.h +@THREADS_TRUE@am__append_6 = threadleaktest$(EXEEXT) +@THREADS_TRUE@am__append_7 = threadleaktest +@CPLUSPLUS_TRUE@am__append_8 = test_cpp$(EXEEXT) +@CPLUSPLUS_TRUE@am__append_9 = test_cpp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ @@ -147,7 +147,7 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(pkgincludedir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) -libcord_la_LIBADD = +libcord_la_DEPENDENCIES = $(top_builddir)/libgc.la am__dirstamp = $(am__leading_dot)dirstamp am_libcord_la_OBJECTS = cord/cordbscs.lo cord/cordprnt.lo \ cord/cordtest.lo cord/cordxtra.lo @@ -175,8 +175,7 @@ am_libgc_la_OBJECTS = allchblk.lo alloc.lo blacklst.lo checksums.lo \ @NEED_ATOMIC_OPS_ASM_TRUE@nodist_libgc_la_OBJECTS = \ @NEED_ATOMIC_OPS_ASM_TRUE@ atomic_ops_sysdeps.lo libgc_la_OBJECTS = $(am_libgc_la_OBJECTS) $(nodist_libgc_la_OBJECTS) -@CPLUSPLUS_TRUE@libgccpp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@CPLUSPLUS_TRUE@ $(am__DEPENDENCIES_1) +@CPLUSPLUS_TRUE@libgccpp_la_DEPENDENCIES = $(top_builddir)/libgc.la am__libgccpp_la_SOURCES_DIST = gc_cpp.cc @CPLUSPLUS_TRUE@am_libgccpp_la_OBJECTS = gc_cpp.lo libgccpp_la_OBJECTS = $(am_libgccpp_la_OBJECTS) @@ -185,8 +184,7 @@ libgccpp_la_OBJECTS = $(am_libgccpp_la_OBJECTS) @CPLUSPLUS_TRUE@am__EXEEXT_2 = test_cpp$(EXEEXT) am_gctest_OBJECTS = tests/test.$(OBJEXT) gctest_OBJECTS = $(am_gctest_OBJECTS) -am__DEPENDENCIES_2 = $(top_builddir)/libgc.la $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am__DEPENDENCIES_2 = $(top_builddir)/libgc.la $(am__DEPENDENCIES_1) am_leaktest_OBJECTS = tests/leak_test.$(OBJEXT) leaktest_OBJECTS = $(am_leaktest_OBJECTS) leaktest_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -246,13 +244,12 @@ dist_pkgconfigDATA_INSTALL = $(INSTALL_DATA) dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) DATA = $(dist_pkgconfig_DATA) $(dist_pkgdata_DATA) includeHEADERS_INSTALL = $(INSTALL_HEADER) -am__pkginclude_HEADERS_DIST = include/gc.h include/gc_typed.h \ - include/gc_inline.h include/gc_mark.h include/gc_cpp.h \ - include/weakpointer.h include/new_gc_alloc.h \ - include/gc_allocator.h include/gc_backptr.h include/gc_gcj.h \ - include/leak_detector.h include/gc_amiga_redirects.h \ - include/gc_pthread_redirects.h include/gc_config_macros.h \ - include/gc_tiny_fl.h +am__pkginclude_HEADERS_DIST = include/gc_cpp.h include/gc_allocator.h \ + include/gc.h include/gc_typed.h include/gc_inline.h \ + include/gc_mark.h include/weakpointer.h include/new_gc_alloc.h \ + include/gc_backptr.h include/gc_gcj.h include/leak_detector.h \ + include/gc_amiga_redirects.h include/gc_pthread_redirects.h \ + include/gc_config_macros.h include/gc_tiny_fl.h pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(dist_noinst_HEADERS) $(include_HEADERS) \ $(pkginclude_HEADERS) @@ -425,7 +422,7 @@ target_vendor = @target_vendor@ # else # SUBDIRS = # endif -SUBDIRS = . +SUBDIRS = # Initialize variables so that we can declare files locally. @@ -447,43 +444,42 @@ SUBDIRS = . # :FIXME: why do we distribute this one??? # -EXTRA_DIST = cord/cordbscs.c cord/cordtest.c cord/de.c cord/cordprnt.c \ - cord/cordxtra.c cord/de_cmds.h cord/de_win.h cord/de_win.c \ - cord/de_win.RC cord/de_win.ICO gc_cpp.cpp README.QUICK \ - BCC_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE OS2_MAKEFILE \ - PCR-Makefile digimars.mak EMX_MAKEFILE Makefile.direct \ - Makefile.dj Makefile.DLLs SMakefile.amiga WCC_MAKEFILE \ - configure_atomic_ops.sh NT_STATIC_THREADS_MAKEFILE \ - add_gc_prefix.c gcname.c if_mach.c if_not_there.c \ - hpux_test_and_clear.s gc.mak MacOS.c MacProjects.sit.hqx \ - mach_dep.c setjmp_t.c threadlibs.c AmigaOS.c \ - Mac_files/datastart.c Mac_files/dataend.c \ +EXTRA_DIST = gc_cpp.cpp README.QUICK BCC_MAKEFILE NT_MAKEFILE \ + NT_THREADS_MAKEFILE OS2_MAKEFILE PCR-Makefile digimars.mak \ + EMX_MAKEFILE Makefile.direct Makefile.dj Makefile.DLLs \ + SMakefile.amiga WCC_MAKEFILE configure_atomic_ops.sh \ + NT_STATIC_THREADS_MAKEFILE add_gc_prefix.c gcname.c if_mach.c \ + if_not_there.c hpux_test_and_clear.s gc.mak MacOS.c \ + MacProjects.sit.hqx mach_dep.c setjmp_t.c threadlibs.c \ + AmigaOS.c Mac_files/datastart.c Mac_files/dataend.c \ Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \ include/private/msvc_dbg.h msvc_dbg.c libatomic_ops-1.2 \ - libtool.m4 + libtool.m4 cord/cordbscs.c cord/cordtest.c cord/de.c \ + cord/cordprnt.c cord/cordxtra.c cord/de_cmds.h cord/de_win.h \ + cord/de_win.c cord/de_win.RC cord/de_win.ICO # C Library # --------- -lib_LTLIBRARIES = libcord.la libgc.la $(am__append_8) +lib_LTLIBRARIES = libgc.la $(am__append_4) libcord.la include_HEADERS = # installed headers # -pkginclude_HEADERS = include/gc.h include/gc_typed.h \ +pkginclude_HEADERS = $(am__append_5) include/gc.h include/gc_typed.h \ include/gc_inline.h include/gc_mark.h include/gc_cpp.h \ include/weakpointer.h include/new_gc_alloc.h \ include/gc_allocator.h include/gc_backptr.h include/gc_gcj.h \ include/leak_detector.h include/gc_amiga_redirects.h \ include/gc_pthread_redirects.h include/gc_config_macros.h \ - include/gc_tiny_fl.h $(am__append_9) + include/gc_tiny_fl.h # headers which are not installed +# (see include/include.am for more) # # headers which are not installed -# (see include/include.am for more) # -dist_noinst_HEADERS = include/private/gc_hdrs.h \ +dist_noinst_HEADERS = version.h include/private/gc_hdrs.h \ include/private/gc_priv.h include/private/gcconfig.h \ include/private/gc_pmark.h include/private/gc_locks.h \ include/private/dbg_mlc.h include/private/specific.h \ @@ -492,11 +488,57 @@ dist_noinst_HEADERS = include/private/gc_hdrs.h \ include/private/darwin_semaphore.h \ include/private/darwin_stop_world.h \ include/private/thread_local_alloc.h include/cord.h \ - include/ec.h include/javaxfc.h version.h + include/ec.h include/javaxfc.h TESTS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \ - $(am__append_1) $(am__append_3) + $(am__append_6) $(am__append_8) pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = bdw-gc.pc +libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ + dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c malloc.c \ + mallocx.c mark.c mark_rts.c misc.c new_hblk.c obj_map.c \ + os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \ + specific.c stubborn.c typd_mlc.c backgraph.c \ + thread_local_alloc.c $(am__append_1) $(am__append_2) \ + $(am__append_3) +@NEED_ATOMIC_OPS_ASM_TRUE@nodist_libgc_la_SOURCES = atomic_ops_sysdeps.S +@USE_INTERNAL_LIBATOMIC_OPS_TRUE@nodist_libgc_la_SOURCES = atomic_ops.c + +# Include THREADDLLIBS here to ensure that the correct versions of +# linuxthread semaphore functions get linked: +libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS) +libgc_la_DEPENDENCIES = @addobjs@ +libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:3:0 +# -no-undefined doesn't work here, since we get a reference to __tls_get_addr. +EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ + mips_sgi_mach_dep.s mips_ultrix_mach_dep.s \ + rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ + sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s + +@CPLUSPLUS_TRUE@libgccpp_la_SOURCES = gc_cpp.cc +@CPLUSPLUS_TRUE@libgccpp_la_LIBADD = $(top_builddir)/libgc.la +@CPLUSPLUS_TRUE@libgccpp_la_LDFLAGS = -version-info 1:3:0 -no-undefined + +# Misc +# ---- +AM_CXXFLAGS = @GC_CFLAGS@ +AM_CFLAGS = @GC_CFLAGS@ +@COMPILER_XLC_FALSE@ASM_CPP_OPTIONS = -Wp,-P -x assembler-with-cpp + +#all_objs = @addobjs@ $(libgc_la_OBJECTS) +#$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ +#include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \ +#include/gc_pthread_redirects.h include/gc_config_macros.h \ +#include/private/thread_local_alloc.h include/private_support.h \ +#include/private/pthread_stop_world.h \ +#include/gc_mark.h @addincludes@ +@COMPILER_XLC_TRUE@ASM_CPP_OPTIONS = +dist_noinst_SCRIPTS = callprocs configure.host + +# this is an auxiliary shell file used by Makefile and Makefile.direct +# +CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host +libcord_la_LIBADD = $(top_builddir)/libgc.la +libcord_la_LDFLAGS = -version-info 1:3:0 -no-undefined libcord_la_SOURCES = \ cord/cordbscs.c \ cord/cordprnt.c \ @@ -505,10 +547,7 @@ libcord_la_SOURCES = \ # Common libs to _LDADD for all tests. -test_ldadd = \ - $(top_builddir)/libgc.la \ - $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS) - +test_ldadd = $(top_builddir)/libgc.la $(EXTRA_TEST_LIBS) gctest_SOURCES = tests/test.c gctest_LDADD = $(test_ldadd) gctest_DEPENDENCIES = $(top_builddir)/libgc.la @@ -559,49 +598,6 @@ dist_pkgdata_DATA = \ doc/simple_example.html \ doc/porting.html -libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ - dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c malloc.c \ - mallocx.c mark.c mark_rts.c misc.c new_hblk.c obj_map.c \ - os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \ - specific.c stubborn.c typd_mlc.c backgraph.c \ - thread_local_alloc.c $(am__append_5) $(am__append_6) \ - $(am__append_7) -@NEED_ATOMIC_OPS_ASM_TRUE@nodist_libgc_la_SOURCES = atomic_ops_sysdeps.S -@USE_INTERNAL_LIBATOMIC_OPS_TRUE@nodist_libgc_la_SOURCES = atomic_ops.c - -# Include THREADDLLIBS here to ensure that the correct versions of -# linuxthread semaphore functions get linked: -libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS) -libgc_la_DEPENDENCIES = @addobjs@ -libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:2:0 -EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \ - mips_sgi_mach_dep.s mips_ultrix_mach_dep.s \ - rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \ - sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s - -@CPLUSPLUS_TRUE@libgccpp_la_SOURCES = gc_cpp.cc -@CPLUSPLUS_TRUE@libgccpp_la_LIBADD = $(THREADDLLIBS) $(UNWINDLIBS) -@CPLUSPLUS_TRUE@libgccpp_la_LDFLAGS = -version-info 1:2:0 - -# Misc -# ---- -AM_CXXFLAGS = @GC_CFLAGS@ -AM_CFLAGS = @GC_CFLAGS@ -@COMPILER_XLC_FALSE@ASM_CPP_OPTIONS = -Wp,-P -x assembler-with-cpp - -#all_objs = @addobjs@ $(libgc_la_OBJECTS) -#$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \ -#include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \ -#include/gc_pthread_redirects.h include/gc_config_macros.h \ -#include/private/thread_local_alloc.h include/private_support.h \ -#include/private/pthread_stop_world.h \ -#include/gc_mark.h @addincludes@ -@COMPILER_XLC_TRUE@ASM_CPP_OPTIONS = -dist_noinst_SCRIPTS = callprocs configure.host - -# this is an auxiliary shell file used by Makefile and Makefile.direct -# -CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host all: all-recursive .SUFFIXES: @@ -1400,6 +1396,9 @@ uninstall-info: uninstall-info-recursive # it will not remove dest if building fails .S.s: if $(CPP) $< >$@ ; then :; else rm -f $@; fi + +# Putting these at the top causes cord to be built first, and not find libgc.a +# on HP/UX. There may be a better fix. # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/cord/cord.am b/cord/cord.am index 2ce61808..fc5e8cc2 100644 --- a/cord/cord.am +++ b/cord/cord.am @@ -1,6 +1,9 @@ lib_LTLIBRARIES += libcord.la +libcord_la_LIBADD = $(top_builddir)/libgc.la +libcord_la_LDFLAGS = -version-info 1:3:0 -no-undefined + libcord_la_SOURCES = \ cord/cordbscs.c \ cord/cordprnt.c \ diff --git a/include/gc.h b/include/gc.h index d4a1d2d5..f3d17d1a 100644 --- a/include/gc.h +++ b/include/gc.h @@ -1026,6 +1026,16 @@ GC_register_has_static_roots_callback DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); + + GC_API uintptr_t GC_beginthreadex( + void *security, unsigned stack_size, + unsigned ( __stdcall *start_address )( void * ), + void *arglist, unsigned initflag, unsigned *thrdaddr); + + GC_API void GC_endthreadex(unsigned retval); + + GC_API void WINAPI GC_ExitThread(DWORD dwExitCode); + # if defined(_WIN32_WCE) /* * win32_threads.c implements the real WinMain, which will start a new thread @@ -1036,16 +1046,6 @@ GC_register_has_static_roots_callback HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ); - - GC_API uintptr_t GC_beginthreadex( - void *security, unsigned stack_size, - unsigned ( __stdcall *start_address )( void * ), - void *arglist, unsigned initflag, unsigned *thrdaddr); - - GC_API void GC_endthreadex(unsigned retval); - - GC_API void WINAPI GC_ExitThread(DWORD dwExitCode); - # ifndef GC_BUILD # define WinMain GC_WinMain # endif @@ -1060,6 +1060,7 @@ GC_API void GC_use_DllMain(void); # define ExitThread GC_ExitThread # define _beginthreadex GC_beginthreadex # define _endthreadex GC_endthreadex +# define _beginthread { > "Please use _beginthreadex instead of _beginthread" < } #endif /* defined(GC_WIN32_THREADS) && !cygwin */ diff --git a/tests/tests.am b/tests/tests.am index 7dbff382..aedac1fa 100644 --- a/tests/tests.am +++ b/tests/tests.am @@ -17,10 +17,7 @@ # Common libs to _LDADD for all tests. -test_ldadd = \ - $(top_builddir)/libgc.la \ - $(THREADDLLIBS) $(UNWINDLIBS) $(EXTRA_TEST_LIBS) - +test_ldadd = $(top_builddir)/libgc.la $(EXTRA_TEST_LIBS) TESTS += gctest$(EXEEXT)