games-board/freedoko: Drop old
[gentoo.git] / net-p2p / datacoin-hp / files / datacoin-hp-sys_leveldb.patch
1 diff --git a/datacoin-qt.pro b/datacoin-qt.pro
2 index f531607..df0ecc4 100644
3 --- a/datacoin-qt.pro
4 +++ b/datacoin-qt.pro
5 @@ -4,7 +4,7 @@ macx:TARGET = "Datacoin-Qt"
6  VERSION = 0.8.3
7  INCLUDEPATH += src src/json src/qt
8  QT += network
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
12  CONFIG += thread
13  
14 @@ -104,25 +104,29 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) {
15      QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
16  }
17  
18 +contains(USE_SYSTEM_LEVELDB, 1) {
19 +    LIBS += -lleveldb
20 +} else {
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
24  !win32 {
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
28  } else {
29      # make an educated guess about what the ranlib command is called
30      isEmpty(QMAKE_RANLIB) {
31          QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib)
32      }
33      LIBS += -lshlwapi
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
36  }
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
41 +}
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
45  
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
50 --- a/src/leveldb.cpp
51 +++ b/src/leveldb.cpp
52 @@ -8,7 +8,9 @@
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
58 +#include <memenv.h>
59 +#endif
60  
61  #include <boost/filesystem.hpp>
62  
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;
66      if (fMemory) {
67 +#ifndef LEVELDB_WITHOUT_MEMENV
68          penv = leveldb::NewMemEnv(leveldb::Env::Default());
69          options.env = penv;
70 +#else
71 +       throw std::runtime_error("CLevelDB(): compiled without memenv support");
72 +#endif
73      } else {
74          if (fWipe) {
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)
83  
84 -OBJS= \
85 -    leveldb/libleveldb.a \
86 +BASEOBJS := \
87      obj/alert.o \
88      obj/version.o \
89      obj/checkpoints.o \
90 @@ -130,7 +129,6 @@ OBJS= \
91      obj/crypter.o \
92      obj/key.o \
93      obj/db.o \
94 -    obj/init.o \
95      obj/keystore.o \
96      obj/main.o \
97      obj/net.o \
98 @@ -150,25 +148,44 @@ OBJS= \
99      obj/hash.o \
100      obj/bloom.o \
101      obj/noui.o \
102 -    obj/leveldb.o \
103      obj/txdb.o \
104      obj/prime.o \
105      obj/checkpointsync.o
106  
107 +OBJS := \
108 +    obj/leveldb.o \
109 +    obj/init.o \
110 +    $(BASEOBJS)
111 +
112 +TESTOBJS := \
113 +    obj-test/leveldb.o \
114 +    $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) \
115 +    $(BASEOBJS)
116 +
117  all: datacoind
118  
119  test check: test_primecoin FORCE
120         ./test_primecoin
121  
122 +ifdef USE_SYSTEM_LEVELDB
123 +    LIBS += -lleveldb
124 +    TESTLIBS += -lmemenv
125 +else
126  #
127  # LevelDB support
128  #
129  MAKEOVERRIDES =
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
142 +endif
143  
144  # auto-generated dependencies:
145  -include obj/*.P
146 @@ -179,24 +196,22 @@ obj/build.h: FORCE
147  version.cpp: obj/build.h
148  DEFS += -DHAVE_BUILD_INFO
149  
150 -obj/%.o: %.cpp
151 -       $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $<
152 +P_TO_D = \
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); \
157           rm -f $(@:%.o=%.d)
158  
159 -datacoind: $(OBJS:obj/%=obj/%)
160 -       $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS)
161 +obj/%.o: %.cpp
162 +       $(CXX) -c $(xCXXFLAGS) -DLEVELDB_WITHOUT_MEMENV -MMD -MF $(@:%.o=%.d) -o $@ $<
163 +       $(P_TO_D)
164  
165 -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))
166 +datacoind: $(OBJS)
167 +       $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS)
168  
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); \
174 -         rm -f $(@:%.o=%.d)
175 +       $(CXX) -c $(xCXXFLAGS) -DLEVELDB_WITHOUT_MEMENV -MMD -MF $(@:%.o=%.d) -o $@ $<
176 +       $(P_TO_D)
177  
178  test_primecoin: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%))
179         $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS)