From cae63be6c95b19c236a2333c1f2456e016e13f0f Mon Sep 17 00:00:00 2001 From: Cory Fields Date: Mon, 16 Sep 2013 01:22:50 -0400 Subject: [PATCH] autotools: fix a parallel build race condition spotted by the pull-tester libleveldb.a and libmemenv.a should be able to build in parallel, but in practice calling the leveldb makefile ends up rewriting build_config.mk. If one target tries to build while the other is halfway through writing the .mk, the make ends up in an undefined state. Fix that by making one depend on the other. This also reorders the variables to be passed by param rather than via the environment, and combines the targets into a single rule to avoid needless duplication. --- src/Makefile.am | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 65e675e52..2935c2daa 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -50,13 +50,12 @@ bitcoind_SOURCES = bitcoind.cpp AM_CPPFLAGS += $(BDB_CPPFLAGS) bitcoind_LDADD += $(BDB_LIBS) -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && CXX="$(CXX)" CC="$(CC)" \ - PLATFORM=$(TARGET_OS) AR="$(AR)" $(MAKE) $(LEVELDB_TARGET_FLAGS) OPT="$(CXXFLAGS) $(CPPFLAGS)" libleveldb.a +leveldb/libleveldb.a: leveldb/libmemenv.a -leveldb/libmemenv.a: - @echo "Building LevelDB ..." && cd leveldb && CXX="$(CXX)" CC="$(CC)" \ - PLATFORM=$(TARGET_OS) AR="$(AR)" $(MAKE) $(LEVELDB_TARGET_FLAGS) OPT="$(CXXFLAGS) $(CPPFLAGS)" libmemenv.a +leveldb/%.a: + @echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \ + CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \ + OPT="$(CXXFLAGS) $(CPPFLAGS)" qt/bitcoinstrings.cpp: $(libbitcoin_a_SOURCES) @test -n $(XGETTEXT) || echo "xgettext is required for updating translations"