diff --git a/dogecoin-qt.pro b/dogecoin-qt.pro index 7f1160326..ef3644f1a 100644 --- a/dogecoin-qt.pro +++ b/dogecoin-qt.pro @@ -27,11 +27,8 @@ UI_DIR = build # use: qmake "RELEASE=1" contains(RELEASE, 1) { - # Mac: compile for maximum compatibility (10.5, 32-bit) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - + # Mac: compile for maximum compatibility (10.6, 64-bit) + macx:QMAKE_MACOSX_DEPLOYMENT_TARGET=10.6 !win32:!macx { # Linux: static link and extra security (see: https://wiki.debian.org/Hardening) LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now @@ -69,7 +66,6 @@ contains(USE_QRCODE, 1) { contains(USE_UPNP, -) { message(Building without UPNP support) } else { - message(Building with UPNP support) count(USE_UPNP, 0) { USE_UPNP=1 } @@ -103,11 +99,62 @@ contains(BITCOIN_NEED_QT_PLUGINS, 1) { QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets } +macx: { + + isEmpty(DEPSDIR) { + + check_dir = /usr/local/Cellar + exists($$check_dir) { + DEPSDIR = /usr/local + } + + !exists($$check_dir) { + DEPSDIR = /opt/local + } + } + + isEmpty(BOOST_LIB_PATH) { + BOOST_LIB_PATH = $$DEPSDIR/lib + } + + isEmpty(BOOST_INCLUDE_PATH) { + BOOST_INCLUDE_PATH = $$DEPSDIR/include + } + + isEmpty(BDB_LIB_PATH) { + BDB_LIB_PATH = $$DEPSDIR/lib + } + + isEmpty(BDB_INCLUDE_PATH) { + BDB_INCLUDE_PATH = $$DEPSDIR/include + } + + HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h + OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm + LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices \ + $$BDB_LIB_PATH/libdb_cxx.a \ + $$BOOST_LIB_PATH/libboost_system-mt.a \ + $$BOOST_LIB_PATH/libboost_filesystem-mt.a \ + $$BOOST_LIB_PATH/libboost_program_options-mt.a \ + $$BOOST_LIB_PATH/libboost_thread-mt.a \ + $$BOOST_LIB_PATH/libboost_chrono-mt.a + DEFINES += MAC_OSX + ICON = src/mac/artwork/Dogecoin.icns + QMAKE_INFO_PLIST=src/mac/Info.plist + # osx 10.9 has changed the stdlib default to libc++. To prevent some link error, you may need to use libstdc++ + QMAKE_CXXFLAGS += -stdlib=libstdc++ + + #one of these is unnecessary, perhaps all + QMAKE_CFLAGS_THREAD += -pthread + QMAKE_LFLAGS_THREAD += -pthread + QMAKE_CXXFLAGS_THREAD += -pthread +} + INCLUDEPATH += src/leveldb/include src/leveldb/helpers LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a !win32 { # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a + genleveldb.commands = cd $$PWD/src/leveldb && chmod +x build_detect_platform && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a } else { # make an educated guess about what the ranlib command is called isEmpty(QMAKE_RANLIB) { @@ -366,11 +413,12 @@ OTHER_FILES += README.md \ src/test/*.cpp \ src/test/*.h \ src/qt/test/*.cpp \ - src/qt/test/*.h + src/qt/test/*.h \ + src/mac/Info.plist # platform specific defaults, if not overridden on command line isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = -mt + macx:BOOST_LIB_SUFFIX = -mt.a win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 } @@ -378,26 +426,6 @@ isEmpty(BOOST_THREAD_LIB_SUFFIX) { BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX } -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/local/lib/db48 -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -4.8 -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/local/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/local/include -} - win32:DEFINES += WIN32 WIN32_LEAN_AND_MEAN win32:RC_FILE = src/qt/res/bitcoin-qt.rc @@ -419,25 +447,20 @@ win32:!contains(MINGW_THREAD_BUGFIX, 0) { DEFINES += _FILE_OFFSET_BITS=64 } -macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/litecoin.icns -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread -macx:QMAKE_INFO_PLIST = share/qt/Info.plist # Set libraries and includes at end, to use platform-defined defaults if not overridden INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX +LIBS += -lssl -lcrypto # -lgdi32 has to happen after -lcrypto (see #681) -win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 -LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX -macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX +!macx { + LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX + LIBS += -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -lboost_chrono$$BOOST_LIB_SUFFIX -ldb_cxx$$BDB_LIB_SUFFIX +} + +win32: { + LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 +} contains(RELEASE, 1) { !win32:!macx { diff --git a/src/compat.h b/src/compat.h index 582300a92..3f61a9964 100644 --- a/src/compat.h +++ b/src/compat.h @@ -27,6 +27,10 @@ #include #endif +#if MAC_OSX +#define MSG_NOSIGNAL SO_NOSIGPIPE +#endif + typedef u_int SOCKET; #ifdef WIN32 #define MSG_NOSIGNAL 0 diff --git a/src/mac/Info.plist b/src/mac/Info.plist new file mode 100644 index 000000000..b3432ff1a --- /dev/null +++ b/src/mac/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleShortVersionString + 1.5.0.1 + CFBundleVersion + 1.5 Alpha 1 + NSPrincipalClass + NSApplication + CFBundleIconFile + Dogecoin.icns + CFBundlePackageType + APPL + NSHumanReadableCopyright + © Dogecoin + CFBundleSignature + DOGE + CFBundleExecutable + Dogecoin-Qt + CFBundleIdentifier + com.dogecoin.wallet-qt + CFBundleName + Dogecoin-Qt + + diff --git a/src/mac/artwork/Dogecoin.icns b/src/mac/artwork/Dogecoin.icns new file mode 100644 index 000000000..1ced687b5 Binary files /dev/null and b/src/mac/artwork/Dogecoin.icns differ diff --git a/src/makefile.osx b/src/makefile.osx index deab964e7..efa0d3996 100644 --- a/src/makefile.osx +++ b/src/makefile.osx @@ -4,21 +4,27 @@ # Distributed under the MIT/X11 software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. -# Mac OS X makefile for bitcoin +# Mac OS X makefile for Dogecoin # Originally by Laszlo Hanyecz (solar@heliacal.net) -CXX=llvm-g++ -DEPSDIR=/opt/local +CXX=c++ + +CHECKDIR=$(wildcard /usr/local/Cellar) + +ifneq ($(CHECK_DIR),) + DEPSDIR=/usr/local +else + DEPSDIR=/opt/local +endif + INCLUDEPATHS= \ -I"$(CURDIR)" \ -I"$(CURDIR)"/obj \ - -I"$(DEPSDIR)/include" \ - -I"$(DEPSDIR)/include/db48" + -I"$(DEPSDIR)/include" LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ - -L"$(DEPSDIR)/lib/db48" + -L"$(DEPSDIR)/lib" USE_UPNP:=1 USE_IPV6:=1 @@ -32,20 +38,20 @@ ifdef STATIC TESTLIBS += \ $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a LIBS += \ - $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ + $(DEPSDIR)/lib/libdb_cxx.a \ $(DEPSDIR)/lib/libboost_system-mt.a \ $(DEPSDIR)/lib/libboost_filesystem-mt.a \ $(DEPSDIR)/lib/libboost_program_options-mt.a \ $(DEPSDIR)/lib/libboost_thread-mt.a \ $(DEPSDIR)/lib/libboost_chrono-mt.a \ - $(DEPSDIR)/lib/libssl.a \ - $(DEPSDIR)/lib/libcrypto.a \ + -lssl \ + -lcrypto \ -lz else TESTLIBS += \ -lboost_unit_test_framework-mt LIBS += \ - -ldb_cxx-4.8 \ + -ldb_cxx \ -lboost_system-mt \ -lboost_filesystem-mt \ -lboost_program_options-mt \ @@ -57,13 +63,13 @@ LIBS += \ TESTDEFS += -DBOOST_TEST_DYN_LINK endif -DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DBOOST_SPIRIT_THREADSAFE +DEFS=-DMAC_OSX -DBOOST_SPIRIT_THREADSAFE ifdef RELEASE # Compile for maximum compatibility and smallest size. # This requires that dependencies are compiled # the same way. -CFLAGS = -mmacosx-version-min=10.5 -arch i386 -O3 +CFLAGS = -mmacosx-version-min=10.6 -O3 else DEBUGFLAGS = -g endif @@ -144,7 +150,7 @@ LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(CFLAGS)" libleveldb.a libmemenv.a && cd .. + @echo "Building LevelDB ..." && cd leveldb && chmod +x build_detect_platform && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(CFLAGS)" libleveldb.a libmemenv.a && cd .. # auto-generated dependencies: -include obj/*.P