From: Richard Kettlewell Date: Tue, 17 Jul 2007 21:44:51 +0000 (+0100) Subject: Don't link against -lgc if not using garbage collection. X-Git-Tag: debian-1_5_99dev8~266 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/320598d40fb55001274c097d4a1a09c31b8d0335 Don't link against -lgc if not using garbage collection. --- diff --git a/clients/Makefile.am b/clients/Makefile.am index aaf0efb..b197b90 100644 --- a/clients/Makefile.am +++ b/clients/Makefile.am @@ -23,18 +23,21 @@ noinst_PROGRAMS=test-eclient filename-bytes AM_CPPFLAGS=-I${top_srcdir}/lib -I../lib -disorder_SOURCES=disorder.c authorize.c authorize.h +disorder_SOURCES=disorder.c authorize.c authorize.h \ + ../lib/memgc.c disorder_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ $(LIBDL) $(LIBGC) $(LIBGCRYPT) $(LIBPCRE) disorder_DEPENDENCIES=$(LIBOBJS) ../lib/libdisorder.a -disorderfm_SOURCES=disorderfm.c +disorderfm_SOURCES=disorderfm.c \ + ../lib/memgc.c disorderfm_LDADD=$(LIBOBJS) ../lib/libdisorder.a $(LIBGC) $(LIBICONV) disorderfm_DEPENDENCIES=$(LIBOBJS) ../lib/libdisorder.a filename_bytes_SOURCES=filename-bytes.c -test_eclient_SOURCES=test-eclient.c +test_eclient_SOURCES=test-eclient.c \ + ../lib/memgc.c test_eclient_LDADD=../lib/libdisorder.a \ $(LIBDL) $(LIBGC) $(LIBGCRYPT) $(LIBPCRE) test_eclient_DEPENDENCIES=../lib/libdisorder.a diff --git a/clients/disorder.c b/clients/disorder.c index f7b4130..d2e3512 100644 --- a/clients/disorder.c +++ b/clients/disorder.c @@ -501,7 +501,7 @@ int main(int argc, char **argv) { int status = 0; struct vector args; - mem_init(1); + mem_init(); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVc:dHL", options, 0)) >= 0) { switch(n) { diff --git a/clients/disorderfm.c b/clients/disorderfm.c index c0e2101..ccb2472 100644 --- a/clients/disorderfm.c +++ b/clients/disorderfm.c @@ -351,7 +351,7 @@ int main(int argc, char **argv) { int n; struct pattern *p; - mem_init(1); + mem_init(); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVdf:t:i:e:ET:u:wlscn", options, 0)) >= 0) { switch(n) { diff --git a/clients/test-eclient.c b/clients/test-eclient.c index 3c2e92e..fa8eb5a 100644 --- a/clients/test-eclient.c +++ b/clients/test-eclient.c @@ -163,7 +163,7 @@ static void recent_completed(void *v, struct queue_entry *q) { int main(int argc, char **argv) { assert(argc > 0); - mem_init(1); + mem_init(); debugging = 0; /* turn on for even more verbosity */ if(config_read()) fatal(0, "config_read failed"); tracks = &argv[1]; diff --git a/disobedience/Makefile.am b/disobedience/Makefile.am index 7d500ed..11298d8 100644 --- a/disobedience/Makefile.am +++ b/disobedience/Makefile.am @@ -24,7 +24,8 @@ AM_CPPFLAGS=-I${top_srcdir}/lib -I../lib AM_CFLAGS=$(GLIB_CFLAGS) $(GTK_CFLAGS) disobedience_SOURCES=disobedience.h disobedience.c client.c queue.c \ - choose.c misc.c style.h control.c properties.c menu.c + choose.c misc.c style.h control.c properties.c menu.c \ + ../lib/memgc.c disobedience_LDADD=../lib/libdisorder.a $(LIBPCRE) $(LIBGC) $(LIBGCRYPT) disobedience_LDFLAGS=$(GTK_LIBS) diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 7c6ef3d..e0a987a 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -319,7 +319,7 @@ int main(int argc, char **argv) { int n; disorder_eclient *logclient; - mem_init(1); + mem_init(); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); gtk_init(&argc, &argv); gtk_rc_parse_string(style); diff --git a/lib/Makefile.am b/lib/Makefile.am index d9135ca..ece2b3b 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,4 +1,3 @@ - # # This file is part of DisOrder. # Copyright (C) 2004, 2005, 2006, s007 Richard Kettlewell @@ -78,7 +77,7 @@ defs.o: definitions.h defs.lo: definitions.h test_SOURCES=test.c -test_LDADD=libdisorder.a $(LIBPCRE) $(LIBGC) $(LIBICONV) +test_LDADD=libdisorder.a $(LIBPCRE) $(LIBICONV) test_DEPENDENCIES=libdisorder.a check: test diff --git a/lib/mem.c b/lib/mem.c index 2b4848d..c2dd40c 100644 --- a/lib/mem.c +++ b/lib/mem.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004, 2005, 2006 Richard Kettlewell + * Copyright (C) 2004, 2005, 2006, 2007 Richard Kettlewell * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,9 @@ #include #include "types.h" +#if GC #include +#endif #include #include #include @@ -34,11 +36,6 @@ #include "disorder.h" -static void *(*do_malloc)(size_t) = GC_malloc; -static void *(*do_realloc)(void *, size_t) = GC_realloc; -static void *(*do_malloc_atomic)(size_t) = GC_malloc_atomic; -static void (*do_free)(void *) = GC_free; - static void *malloc_and_zero(size_t n) { void *ptr = malloc(n); @@ -46,10 +43,23 @@ static void *malloc_and_zero(size_t n) { return ptr; } -void mem_init(int gc) { +#if GC +static void *(*do_malloc)(size_t) = GC_malloc; +static void *(*do_realloc)(void *, size_t) = GC_realloc; +static void *(*do_malloc_atomic)(size_t) = GC_malloc_atomic; +static void (*do_free)(void *) = GC_free; +#else +static void *(*do_malloc)(size_t) = malloc_and_zero; +static void *(*do_realloc)(void *, size_t) = realloc; +static void *(*do_malloc_atomic)(size_t) = malloc; +static void (*do_free)(void *) = free; +#endif + +void mem_init(void) { +#if GC const char *e; - if(!gc || ((e = getenv("DISORDER_GC")) && !strcmp(e, "no"))) { + if(((e = getenv("DISORDER_GC")) && !strcmp(e, "no"))) { do_malloc = malloc_and_zero; do_malloc_atomic = malloc; do_realloc = realloc; @@ -58,6 +68,7 @@ void mem_init(int gc) { GC_init(); assert(GC_all_interior_pointers); } +#endif } void *xmalloc(size_t n) { diff --git a/lib/mem.h b/lib/mem.h index d8dc9d9..20f40f6 100644 --- a/lib/mem.h +++ b/lib/mem.h @@ -27,9 +27,8 @@ #include -void mem_init(int gc); -/* initialize memory management. Set GC to 1 if garbage collection is - * desired. */ +void mem_init(void); +/* initialize memory management. */ void *xmalloc(size_t); void *xrealloc(void *, size_t); diff --git a/lib/memgc.c b/lib/memgc.c new file mode 100644 index 0000000..1fbb30f --- /dev/null +++ b/lib/memgc.c @@ -0,0 +1,22 @@ +/* + * This file is part of DisOrder. + * Copyright (C) 2007 Richard Kettlewell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#define GC 1 +#include "mem.c" diff --git a/server/Makefile.am b/server/Makefile.am index 9b9d094..4b01707 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -30,7 +30,8 @@ disorderd_SOURCES=disorderd.c \ play.c play.h \ server.c server.h \ state.c state.h \ - trackdb.c trackdb.h trackdb-int.h exports.c + trackdb.c trackdb.h trackdb-int.h exports.c \ + ../lib/memgc.c disorderd_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ $(LIBPCRE) $(LIBDB) $(LIBAO) $(LIBGC) $(LIBGCRYPT) $(LIBICONV) disorderd_LDFLAGS=-export-dynamic @@ -39,38 +40,40 @@ disorderd_DEPENDENCIES=../lib/libdisorder.a disorder_deadlock_SOURCES=deadlock.c \ trackdb.c trackdb.h disorder_deadlock_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ - $(LIBDB) $(LIBPCRE) $(LIBGC) $(LIBICONV) + $(LIBDB) $(LIBPCRE) $(LIBICONV) disorder_deadlock_DEPENDENCIES=../lib/libdisorder.a disorder_speaker_SOURCES=speaker.c disorder_speaker_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ - $(LIBASOUND) $(LIBGC) $(LIBPCRE) $(LIBICONV) + $(LIBASOUND) $(LIBPCRE) $(LIBICONV) disorder_speaker_DEPENDENCIES=../lib/libdisorder.a disorder_rescan_SOURCES=rescan.c \ api.c api-server.c \ - trackdb.c trackdb.h exports.c + trackdb.c trackdb.h exports.c \ + ../lib/memgc.c disorder_rescan_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ $(LIBDB) $(LIBGC) $(LIBPCRE) $(LIBICONV) disorder_rescan_LDFLAGS=-export-dynamic disorder_rescan_DEPENDENCIES=../lib/libdisorder.a -disorder_dump_SOURCES=dump.c \ - trackdb.c trackdb.h +disorder_dump_SOURCES=dump.c \ + trackdb.c trackdb.h \ + ../lib/memgc.c disorder_dump_LDADD=$(LIBOBJS) ../lib/libdisorder.a \ - $(LIBPCRE) $(LIBDB) $(LIBGC) $(LIBICONV) + $(LIBPCRE) $(LIBDB) $(LIBICONV) $(LIBGC) disorder_dump_DEPENDENCIES=$(LIBOBJS) ../lib/libdisorder.a disorder_cgi_SOURCES=dcgi.c dcgi.h \ api.c api-client.c api-client.h \ cgi.c cgi.h cgimain.c exports.c disorder_cgi_LDADD=../lib/libdisorder.a \ - $(LIBPCRE) $(LIBGC) $(LIBGCRYPT) $(LIBDL) + $(LIBPCRE) $(LIBGCRYPT) $(LIBDL) disorder_cgi_LDFLAGS=-export-dynamic disorder_cgi_DEPENDENCIES=../lib/libdisorder.a trackname_SOURCES=trackname.c -trackname_LDADD=../lib/libdisorder.a $(LIBGC) $(LIBPCRE) $(LIBICONV) +trackname_LDADD=../lib/libdisorder.a $(LIBPCRE) $(LIBICONV) trackname_DEPENDENCIES=../lib/libdisorder.a install-exec-hook: diff --git a/server/cgimain.c b/server/cgimain.c index bc189d7..467ed59 100644 --- a/server/cgimain.c +++ b/server/cgimain.c @@ -45,7 +45,6 @@ int main(int argc, char **argv) { dcgi_state s; cgi_sink output; - mem_init(0); if(argc > 0) progname = argv[0]; cgi_parse(); if((conf = getenv("DISORDER_CONFIG"))) configfile = xstrdup(conf); diff --git a/server/deadlock.c b/server/deadlock.c index 5fd745d..f6ae420 100644 --- a/server/deadlock.c +++ b/server/deadlock.c @@ -78,7 +78,6 @@ int main(int argc, char **argv) { int n, err, aborted; set_progname(argv); - mem_init(0); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVc:dD", options, 0)) >= 0) { switch(n) { diff --git a/server/disorderd.c b/server/disorderd.c index 50f8b8f..774ab6d 100644 --- a/server/disorderd.c +++ b/server/disorderd.c @@ -184,7 +184,7 @@ static void volumecheck_after(long offset) { int initial_rescan = 1; set_progname(argv); - mem_init(1); + mem_init(); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); /* garbage-collect PCRE's memory */ pcre_malloc = xmalloc; diff --git a/server/dump.c b/server/dump.c index f007f54..5809b82 100644 --- a/server/dump.c +++ b/server/dump.c @@ -390,7 +390,7 @@ int main(int argc, char **argv) { char *tmp; FILE *fp; - mem_init(1); + mem_init(); while((n = getopt_long(argc, argv, "hVc:dDutsrRaP", options, 0)) >= 0) { switch(n) { case 'h': help(); diff --git a/server/rescan.c b/server/rescan.c index a2f2678..4c768a3 100644 --- a/server/rescan.c +++ b/server/rescan.c @@ -306,7 +306,7 @@ int main(int argc, char **argv) { struct sigaction sa; set_progname(argv); - mem_init(1); + mem_init(); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVc:dD", options, 0)) >= 0) { switch(n) { diff --git a/server/speaker.c b/server/speaker.c index 1cdbd28..be783af 100644 --- a/server/speaker.c +++ b/server/speaker.c @@ -663,7 +663,6 @@ int main(int argc, char **argv) { #endif set_progname(argv); - mem_init(0); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVc:dD", options, 0)) >= 0) { switch(n) { diff --git a/server/trackname.c b/server/trackname.c index 743ac06..e06df66 100644 --- a/server/trackname.c +++ b/server/trackname.c @@ -66,7 +66,6 @@ int main(int argc, char **argv) { int n; const char *s; - mem_init(0); if(!setlocale(LC_CTYPE, "")) fatal(errno, "error calling setlocale"); while((n = getopt_long(argc, argv, "hVc:d", options, 0)) >= 0) { switch(n) {