diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-11-23T20·19+0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-11-23T20·19+0000 |
commit | 5a1114ecdbbd115ec8aeb1a98326d793ff3e8058 (patch) | |
tree | fc14cd61a7bfc2b53b28957e0c6f60ac40d1b7d9 | |
parent | 06a8ac96e79547c092debfe3b93d78bcb862edc2 (diff) |
Drop the dependency on libgc in libmain
Instead, libexpr now depends on libgc. This means commands like nix-store that don't do any evaluation no longer require libgc.
-rw-r--r-- | src/libexpr/Makefile.new | 5 | ||||
-rw-r--r-- | src/libexpr/eval.cc | 17 | ||||
-rw-r--r-- | src/libmain/Makefile.new | 2 | ||||
-rw-r--r-- | src/libmain/shared.cc | 20 |
4 files changed, 22 insertions, 22 deletions
diff --git a/src/libexpr/Makefile.new b/src/libexpr/Makefile.new index ded112107fe8..cbae11c53c20 100644 --- a/src/libexpr/Makefile.new +++ b/src/libexpr/Makefile.new @@ -9,6 +9,11 @@ libexpr_SOURCES = \ libexpr_LIBS = libutil libstore libformat +# The dependency on libgc must be propagated (i.e. meaning that +# programs/libraries that use libexpr must explicitly pass -lgc), +# because inline functions in libexpr's header files call libgc. +libexpr_LDFLAGS_PROPAGATED = $(BDW_GC_LIBS) + $(d)/parser-tab.cc $(d)/parser-tab.hh: $(d)/parser.y bison -v -o $(libexpr_DIR)/parser-tab.cc $< -d diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index e4a0d7fd2b3e..12c6aa8dcd44 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -129,6 +129,14 @@ string showType(const Value & v) } +/* Called when the Boehm GC runs out of memory. */ +static void * oomHandler(size_t requested) +{ + /* Convert this to a proper C++ exception. */ + throw std::bad_alloc(); +} + + EvalState::EvalState() : sWith(symbols.create("<with>")) , sOutPath(symbols.create("outPath")) @@ -158,6 +166,14 @@ EvalState::EvalState() #if HAVE_BOEHMGC static bool gcInitialised = false; if (!gcInitialised) { + + /* Initialise the Boehm garbage collector. This isn't + necessary on most platforms, but for portability we do it + anyway. */ + GC_INIT(); + + GC_oom_fn = oomHandler; + /* Set the initial heap size to something fairly big (25% of physical RAM, up to a maximum of 384 MiB) so that in most cases we don't need to garbage collect at all. (Collection @@ -181,6 +197,7 @@ EvalState::EvalState() debug(format("setting initial heap size to %1% bytes") % size); GC_expand_hp(size); } + gcInitialised = true; } #endif diff --git a/src/libmain/Makefile.new b/src/libmain/Makefile.new index 86323dbd48ae..6ca49d583839 100644 --- a/src/libmain/Makefile.new +++ b/src/libmain/Makefile.new @@ -5,5 +5,3 @@ libmain_DIR := $(d) libmain_SOURCES = shared.cc stack.cc libmain_LIBS = libstore libutil libformat - -libmain_LDFLAGS_PROPAGATED = $(BDW_GC_LIBS) diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index b0b69f7f617d..8df2a7f52a52 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -15,10 +15,6 @@ #include <unistd.h> #include <signal.h> -#if HAVE_BOEHMGC -#include <gc/gc.h> -#endif - namespace nix { @@ -231,14 +227,6 @@ static void initAndRun(int argc, char * * argv) } -/* Called when the Boehm GC runs out of memory. */ -static void * oomHandler(size_t requested) -{ - /* Convert this to a proper C++ exception. */ - throw std::bad_alloc(); -} - - void showManPage(const string & name) { string cmd = "man " + name; @@ -268,14 +256,6 @@ int main(int argc, char * * argv) std::ios::sync_with_stdio(false); -#if HAVE_BOEHMGC - /* Initialise the Boehm garbage collector. This isn't necessary - on most platforms, but for portability we do it anyway. */ - GC_INIT(); - - GC_oom_fn = oomHandler; -#endif - try { try { initAndRun(argc, argv); |