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.
This commit is contained in:
		
							parent
							
								
									06a8ac96e7
								
							
						
					
					
						commit
						5a1114ecdb
					
				
					 4 changed files with 22 additions and 22 deletions
				
			
		|  | @ -9,6 +9,11 @@ libexpr_SOURCES = \ | ||||||
| 
 | 
 | ||||||
| libexpr_LIBS = libutil libstore libformat | 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 | $(d)/parser-tab.cc $(d)/parser-tab.hh: $(d)/parser.y | ||||||
| 	bison -v -o $(libexpr_DIR)/parser-tab.cc $< -d | 	bison -v -o $(libexpr_DIR)/parser-tab.cc $< -d | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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() | EvalState::EvalState() | ||||||
|     : sWith(symbols.create("<with>")) |     : sWith(symbols.create("<with>")) | ||||||
|     , sOutPath(symbols.create("outPath")) |     , sOutPath(symbols.create("outPath")) | ||||||
|  | @ -158,6 +166,14 @@ EvalState::EvalState() | ||||||
| #if HAVE_BOEHMGC | #if HAVE_BOEHMGC | ||||||
|     static bool gcInitialised = false; |     static bool gcInitialised = false; | ||||||
|     if (!gcInitialised) { |     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
 |         /* Set the initial heap size to something fairly big (25% of
 | ||||||
|            physical RAM, up to a maximum of 384 MiB) so that in most |            physical RAM, up to a maximum of 384 MiB) so that in most | ||||||
|            cases we don't need to garbage collect at all.  (Collection |            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); |             debug(format("setting initial heap size to %1% bytes") % size); | ||||||
|             GC_expand_hp(size); |             GC_expand_hp(size); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|         gcInitialised = true; |         gcInitialised = true; | ||||||
|     } |     } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -5,5 +5,3 @@ libmain_DIR := $(d) | ||||||
| libmain_SOURCES = shared.cc stack.cc | libmain_SOURCES = shared.cc stack.cc | ||||||
| 
 | 
 | ||||||
| libmain_LIBS = libstore libutil libformat | libmain_LIBS = libstore libutil libformat | ||||||
| 
 |  | ||||||
| libmain_LDFLAGS_PROPAGATED = $(BDW_GC_LIBS) |  | ||||||
|  |  | ||||||
|  | @ -15,10 +15,6 @@ | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| 
 | 
 | ||||||
| #if HAVE_BOEHMGC |  | ||||||
| #include <gc/gc.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| namespace nix { | 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) | void showManPage(const string & name) | ||||||
| { | { | ||||||
|     string cmd = "man " + name; |     string cmd = "man " + name; | ||||||
|  | @ -268,14 +256,6 @@ int main(int argc, char * * argv) | ||||||
| 
 | 
 | ||||||
|     std::ios::sync_with_stdio(false); |     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 { | ||||||
|         try { |         try { | ||||||
|             initAndRun(argc, argv); |             initAndRun(argc, argv); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue