1 diff --git a/datacoin-qt.pro b/datacoin-qt.pro
2 index f531607..df0ecc4 100644
5 @@ -4,7 +4,7 @@ macx:TARGET = "Datacoin-Qt"
7 INCLUDEPATH += src src/json src/qt
9 -DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE
10 +DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE LEVELDB_WITHOUT_MEMENV
11 CONFIG += no_include_pwd
14 @@ -104,25 +104,29 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) {
15 QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
18 +contains(USE_SYSTEM_LEVELDB, 1) {
21 INCLUDEPATH += src/leveldb/include src/leveldb/helpers
22 -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a
23 +LIBS += $$PWD/src/leveldb/libleveldb.a
25 # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences
26 - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a
27 + genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a
29 # make an educated guess about what the ranlib command is called
30 isEmpty(QMAKE_RANLIB) {
31 QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib)
34 - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
35 + genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a
37 genleveldb.target = $$PWD/src/leveldb/libleveldb.a
38 genleveldb.depends = FORCE
39 PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a
40 QMAKE_EXTRA_TARGETS += genleveldb
42 # Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it.
43 -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean
44 +QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb && $(MAKE) clean || true
46 # regenerate src/build.h
47 !win32|contains(USE_BUILD_INFO, 1) {
48 diff --git a/src/leveldb.cpp b/src/leveldb.cpp
49 index e66f851..2856d70 100644
53 #include <leveldb/env.h>
54 #include <leveldb/cache.h>
55 #include <leveldb/filter_policy.h>
56 -#include <memenv/memenv.h>
57 +#ifndef LEVELDB_WITHOUT_MEMENV
61 #include <boost/filesystem.hpp>
63 @@ -43,8 +45,12 @@ CLevelDB::CLevelDB(const boost::filesystem::path &path, size_t nCacheSize, bool
64 options = GetOptions(nCacheSize);
65 options.create_if_missing = true;
67 +#ifndef LEVELDB_WITHOUT_MEMENV
68 penv = leveldb::NewMemEnv(leveldb::Env::Default());
71 + throw std::runtime_error("CLevelDB(): compiled without memenv support");
75 printf("Wiping LevelDB in %s\n", path.string().c_str());
76 diff --git a/src/makefile.unix b/src/makefile.unix
77 index 359ac3d..ec1e075 100644
78 --- a/src/makefile.unix
79 +++ b/src/makefile.unix
80 @@ -120,8 +120,7 @@ xCXXFLAGS=-O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-para
81 # adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work.
82 xLDFLAGS=$(LDHARDENING) $(LDFLAGS)
85 - leveldb/libleveldb.a \
90 @@ -130,7 +129,6 @@ OBJS= \
98 @@ -150,25 +148,44 @@ OBJS= \
113 + obj-test/leveldb.o \
114 + $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) \
119 test check: test_primecoin FORCE
122 +ifdef USE_SYSTEM_LEVELDB
124 + TESTLIBS += -lmemenv
130 -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a
131 +LIBS += $(CURDIR)/leveldb/libleveldb.a
132 +TESTLIBS += $(CURDIR)/leveldb/libmemenv.a
133 DEFS += $(addprefix -I,$(CURDIR)/leveldb/include)
134 DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers)
135 leveldb/libleveldb.a:
136 - @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libleveldb.a libmemenv.a && cd ..
137 + @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libleveldb.a && cd ..
138 +leveldb/libmemenv.a:
139 + @echo "Building LevelDB memenv ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libmemenv.a && cd ..
140 +OBJS += leveldb/libleveldb.a
141 +TESTOBJS += leveldb/libmemenv.a
144 # auto-generated dependencies:
146 @@ -179,24 +196,22 @@ obj/build.h: FORCE
147 version.cpp: obj/build.h
148 DEFS += -DHAVE_BUILD_INFO
151 - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $<
153 @cp $(@:%.o=%.d) $(@:%.o=%.P); \
154 - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
155 + sed -e 's/\#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
156 -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
159 -datacoind: $(OBJS:obj/%=obj/%)
160 - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS)
162 + $(CXX) -c $(xCXXFLAGS) -DLEVELDB_WITHOUT_MEMENV -MMD -MF $(@:%.o=%.d) -o $@ $<
165 -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
167 + $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS)
169 obj-test/%.o: test/%.cpp
170 - $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $<
171 - @cp $(@:%.o=%.d) $(@:%.o=%.P); \
172 - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
173 - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
175 + $(CXX) -c $(xCXXFLAGS) -DLEVELDB_WITHOUT_MEMENV -MMD -MF $(@:%.o=%.d) -o $@ $<
178 test_primecoin: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
179 $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS)