chiark / gitweb /
Don't link against -lgc if not using garbage collection.
authorRichard Kettlewell <rjk@greenend.org.uk>
Tue, 17 Jul 2007 21:44:51 +0000 (22:44 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Tue, 17 Jul 2007 21:44:51 +0000 (22:44 +0100)
18 files changed:
clients/Makefile.am
clients/disorder.c
clients/disorderfm.c
clients/test-eclient.c
disobedience/Makefile.am
disobedience/disobedience.c
lib/Makefile.am
lib/mem.c
lib/mem.h
lib/memgc.c [new file with mode: 0644]
server/Makefile.am
server/cgimain.c
server/deadlock.c
server/disorderd.c
server/dump.c
server/rescan.c
server/speaker.c
server/trackname.c

index aaf0efb..b197b90 100644 (file)
@@ -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
index f7b4130..d2e3512 100644 (file)
@@ -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) {
index c0e2101..ccb2472 100644 (file)
@@ -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) {
index 3c2e92e..fa8eb5a 100644 (file)
@@ -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];
index 7d500ed..11298d8 100644 (file)
@@ -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)
 
index 7c6ef3d..e0a987a 100644 (file)
@@ -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);
index d9135ca..ece2b3b 100644 (file)
@@ -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
index 2b4848d..c2dd40c 100644 (file)
--- 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 <config.h>
 #include "types.h"
 
+#if GC
 #include <gc.h>
+#endif
 #include <errno.h>
 #include <string.h>
 #include <stdio.h>
 
 #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) {
index d8dc9d9..20f40f6 100644 (file)
--- a/lib/mem.h
+++ b/lib/mem.h
@@ -27,9 +27,8 @@
 
 #include <stdarg.h>
 
-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 (file)
index 0000000..1fbb30f
--- /dev/null
@@ -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"
index 9b9d094..4b01707 100644 (file)
@@ -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:
index bc189d7..467ed59 100644 (file)
@@ -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);
index 5fd745d..f6ae420 100644 (file)
@@ -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) {
index 50f8b8f..774ab6d 100644 (file)
@@ -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;
index f007f54..5809b82 100644 (file)
@@ -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();
index a2f2678..4c768a3 100644 (file)
@@ -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) {
index 1cdbd28..be783af 100644 (file)
@@ -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) {
index 743ac06..e06df66 100644 (file)
@@ -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) {