Define TEST_DATA_DIR so unit tests can be run from any current working directory
authorGavin Andresen <gavinandresen@gmail.com>
Thu, 26 Apr 2012 15:20:44 +0000 (11:20 -0400)
committerGavin Andresen <gavinandresen@gmail.com>
Thu, 26 Apr 2012 15:20:44 +0000 (11:20 -0400)
src/makefile.linux-mingw
src/makefile.mingw
src/makefile.osx
src/makefile.unix
src/test/script_tests.cpp

index 1ea65cd..8e4e638 100644 (file)
@@ -31,6 +31,7 @@ DEFS=-D_MT -DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB
 DEBUGFLAGS=-g
 CFLAGS=-O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
 
 ifdef USE_UPNP
        LIBPATHS += -L"$(DEPSDIR)/miniupnpc"
@@ -78,20 +79,19 @@ obj/%.o: %.cpp $(HEADERS)
 bitcoind.exe: $(OBJS:obj/%=obj/%)
        i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
+TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
 
-obj/test/%.o: obj/test/%.cpp $(HEADERS)
-       i586-mingw32msvc-g++ -c $(CFLAGS) -o $@ $<
+obj-test/%.o: test/%.cpp $(HEADERS)
+       i586-mingw32msvc-g++ -c $(TESTDEFS) $(CFLAGS) -o $@ $<
 
-test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
-       i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lboost_unit_test_framework-mt-s
+test_bitcoin.exe: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
+       i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework $(LIBS)
 
 
 clean:
        -rm -f obj/*.o
-       -rm -f obj/test/*.o
-       -rm -f test/*.o
-       -rm -f headers.h.gch
        -rm -f bitcoind.exe
+       -rm -f obj-test/*.o
        -rm -f test_bitcoin.exe
        -rm -f src/build.h
 
index 5584df5..abcdcce 100644 (file)
@@ -27,6 +27,7 @@ DEFS=-DWIN32 -D_WINDOWS -DNOPCH -DBOOST_THREAD_USE_LIB
 DEBUGFLAGS=-g
 CFLAGS=-mthreads -O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
 
 ifdef USE_UPNP
  INCLUDEPATHS += -I"C:\miniupnpc-1.6-mgw"
@@ -71,17 +72,16 @@ obj/%.o: %.cpp $(HEADERS)
 bitcoind.exe: $(OBJS:obj/%=obj/%)
        g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
-obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS)
-       g++ -c $(CFLAGS) -o $@ test/test_bitcoin.cpp
+TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
 
-test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
-       g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
+obj-test/%.o: test/%.cpp $(HEADERS)
+       g++ -c $(TESTDEFS) $(CFLAGS) -o $@ $<
+
+test_bitcoin.exe: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
+       g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework $(LIBS)
 
 clean:
        -del /Q bitcoind test_bitcoin
        -del /Q obj\*
-       -del /Q obj\nogui\*
-       -del /Q obj\test\*
-       -del /Q test\*.o
-       -del /Q headers.h.gch
+       -del /Q obj-test\*
        -del /Q build.h
index aaac670..be95aab 100644 (file)
@@ -22,6 +22,9 @@ LIBPATHS= \
 USE_UPNP:=1
 
 LIBS= -dead_strip
+
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
+
 ifdef STATIC
 # Build STATIC if you are redistributing the bitcoind binary
 TESTLIBS += \
index fc901ca..146f6b8 100644 (file)
@@ -9,6 +9,8 @@ DEFS=-DNOPCH
 DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH))
 LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH))
 
+TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
+
 LMODE = dynamic
 LMODE2 = dynamic
 ifdef STATIC
index 988bd24..745df4b 100644 (file)
@@ -5,8 +5,9 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/split.hpp>
-#include <boost/test/unit_test.hpp>
 #include <boost/foreach.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/test/unit_test.hpp>
 #include "json/json_spirit_reader_template.h"
 #include "json/json_spirit_writer_template.h"
 #include "json/json_spirit_utils.h"
@@ -87,10 +88,13 @@ read_json(const std::string& filename)
 {
     namespace fs = boost::filesystem;
     fs::path testFile = fs::current_path() / "test" / "data" / filename;
+
+#ifdef TEST_DATA_DIR
     if (!fs::exists(testFile))
     {
-        fs::path testFile = fs::path(__FILE__).parent_path() / "data" / filename;
+        testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename;
     }
+#endif
 
     ifstream ifs(testFile.string().c_str(), ifstream::in);
     Value v;