From 4286f809c29b18b52a4b2e8db0ba6525dde43a48 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Sun, 11 Mar 2018 00:01:48 +0900 Subject: [PATCH 1/4] update .gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 7280f2cd..a5d9191a 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ src/XPd # XP-Qt .qmake.stash +XP-Qt.dmg Makefile Makefile.debug Makefile.release @@ -60,3 +61,8 @@ release/ qrc_bitcoin.cpp XP-qt output/ +*.obj +*.o +.idea +*.orig +src/build.h From 7e1345a960d62d29ebeb9386c882256aebd89245 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Sun, 11 Mar 2018 00:48:29 +0900 Subject: [PATCH 2/4] Import UPnP code from novacoin(https://github.com/novacoin-project/novacoin/commit/1c7ed42093c5935e3958584ed98a2b03466a0023) Currently, supports only macOS XPd and XP-Qt. --- src/CMakeLists.txt | 60 +++++++++++- src/init.cpp | 13 ++- src/main.h | 6 ++ src/net.cpp | 180 ++++++++++++++++++++++++++++++++++ src/net.h | 3 + src/qt/bitcoinstrings.cpp | 2 + src/qt/forms/aboutdialog.ui | 2 +- src/qt/forms/optionsdialog.ui | 10 ++ src/qt/locale/bitcoin_en.qm | Bin 109068 -> 109997 bytes src/qt/locale/bitcoin_en.ts | 26 ++++- src/qt/locale/bitcoin_ru.qm | Bin 119437 -> 120979 bytes src/qt/locale/bitcoin_ru.ts | 24 ++++- src/qt/locale/bitcoin_uk.qm | Bin 117903 -> 119601 bytes src/qt/locale/bitcoin_uk.ts | 24 ++++- src/qt/optionsdialog.cpp | 6 ++ src/qt/optionsmodel.cpp | 9 ++ src/qt/optionsmodel.h | 1 + xp.pro | 17 ++++ 18 files changed, 372 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5562b05d..d78831a9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,6 +11,7 @@ project(XPd CXX C) # ---------------------------------------------------------------------------- option(USE_IPV6 "use IPV6" YES) option(USE_LEVELDB "use leveldb" NO) +option(USE_UPNP "use UPNP" NO) option(USE_ASM "use ASM" NO) option(USE_SSE2 "use SSE2" NO) if(MSVC) @@ -97,6 +98,19 @@ else() endif() endif() +## upnp +if(USE_UPNP) + if (DEFINED $ENV{MINIUPNPC_INCLUDE_PATH}) + include_directories($ENV{MINIUPNPC_INCLUDE_PATH}) + else() + if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + include_directories(${DEPSDIR}/miniupnpc/include) + elseif(MSVC) + # TODO: + endif() + endif() +endif() + # library directories ## openssl if (DEFINED $ENV{OPENSSL_LIB_PATH}) @@ -177,6 +191,19 @@ else() # TODO: endif() +## upnp +if(USE_UPNP) + if (DEFINED $ENV{MINIUPNPC_LIB_PATH}) + set(OPENSSL_LIB_PATH $ENV{MINIUPNPC_LIB_PATH}) + else() + if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + set(MINIUPNPC_LIB_PATH ${DEPSDIR}/miniupnpc/lib) + elseif(MSVC) + # TODO: + endif() + endif() + link_directories(${MINIUPNPC_LIB_PATH}) +endif() #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CXX_STANDARD 11) @@ -241,7 +268,26 @@ else() endif() endif() -add_definitions(-DUSE_IPV6=${USE_IPV6}) +if(USE_UPNP) + if(MSVC) + add_definitions(/DUSE_UPNP=1) + else() + add_definitions(-DUSE_UPNP=1) + endif() +endif() + +if(USE_IPV6) + set(USE_IPV6VAL 1) +else() + set(USE_IPV6VAL 0) +endif() + +if(MSVC) + add_definitions(/DUSE_IPV6=${USE_IPV6VAL}) +else() + add_definitions(-DUSE_IPV6=${USE_IPV6VAL}) +endif() + if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) add_definitions(-DMAC_OSX) add_definitions(-DMSG_NOSIGNAL=0) @@ -319,7 +365,11 @@ if(ENABLE_STATIC) ${OPENSSL_LIB_PATH}/libcrypto${CMAKE_FIND_LIBRARY_SUFFIXES} z ) - + endif() + if(USE_UPNP) + target_link_libraries(XPd + ${MINIUPNPC_LIB_PATH}/libminiupnpc${CMAKE_FIND_LIBRARY_SUFFIXES} + ) endif() else() target_link_libraries(XPd @@ -332,4 +382,10 @@ else() crypto z ) + if(USE_UPNP) + target_link_libraries(XPd + miniupnpc + ) endif() +endif() + diff --git a/src/init.cpp b/src/init.cpp index 899220eb..957ee9af 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -262,6 +262,13 @@ std::string HelpMessage() " -bantime= " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n" + " -maxreceivebuffer= " + _("Maximum per-connection receive buffer, *1000 bytes (default: 5000)") + "\n" + " -maxsendbuffer= " + _("Maximum per-connection send buffer, *1000 bytes (default: 1000)") + "\n" + +#ifdef USE_UPNP +#if USE_UPNP + " -upnp " + _("Use UPnP to map the listening port (default: 1 when listening)") + "\n" + +#else + " -upnp " + _("Use UPnP to map the listening port (default: 0)") + "\n" + +#endif +#endif " -detachdb " + _("Detach block and address databases. Increases shutdown time (default: 0)") + "\n" + #ifdef DB_LOG_IN_MEMORY @@ -421,6 +428,7 @@ bool AppInit2() if (!GetBoolArg("-listen", true)) { // do not map ports or try to retrieve public IP when not listening (pointless) + SoftSetBoolArg("-upnp", false); SoftSetBoolArg("-discover", false); } @@ -667,10 +675,13 @@ bool AppInit2() fNoListen = !GetBoolArg("-listen", true); fDiscover = GetBoolArg("-discover", true); fNameLookup = GetBoolArg("-dns", true); +#ifdef USE_UPNP + fUseUPnP = GetBoolArg("-upnp", USE_UPNP); +#endif } else { // Don't listen, discover addresses or search for nodes if IPv4 and IPv6 networking is disabled. fNoListen = true; - fDiscover = fNameLookup = false; + fDiscover = fNameLookup = fUseUPnP = false; SoftSetBoolArg("-irc", false); SoftSetBoolArg("-dnsseed", false); } diff --git a/src/main.h b/src/main.h index 3ca71bdb..480add90 100644 --- a/src/main.h +++ b/src/main.h @@ -53,6 +53,12 @@ static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 // Maximum number of script-checking threads allowed static const int MAX_SCRIPTCHECK_THREADS = 16; +#ifdef USE_UPNP +static const int fHaveUPnP = true; +#else +static const int fHaveUPnP = false; +#endif + static const uint256 hashGenesisBlock("0x0000065a10945931644cdda436d5ad0742d085e9dee3e7fdd51b822626727e78"); static const uint256 hashGenesisBlockTestNet("0x0000e097477b585e7289f4c23c4ff639a8775e8f4d2c715586f160fff8869278"); diff --git a/src/net.cpp b/src/net.cpp index ffc6f43e..e5fb84e4 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -16,6 +16,13 @@ #include #endif +#ifdef USE_UPNP +#include +#include +#include +#include +#endif + using namespace std; using namespace boost; @@ -25,6 +32,9 @@ void ThreadMessageHandler2(void* parg); void ThreadSocketHandler2(void* parg); void ThreadOpenConnections2(void* parg); void ThreadOpenAddedConnections2(void* parg); +#ifdef USE_UPNP +void ThreadMapPort2(void* parg); +#endif void ThreadDNSAddressSeed2(void* parg); // Fix for ancient MinGW versions, that don't have defined these in ws2tcpip.h. @@ -48,6 +58,7 @@ struct LocalServiceInfo { // bool fClient = false; bool fDiscover = true; +bool fUseUPnP = false; uint64_t nLocalServices = (fClient ? 0 : NODE_NETWORK); static CCriticalSection cs_mapLocalHost; static map mapLocalHost; @@ -934,6 +945,167 @@ void ThreadSocketHandler2(void* parg) } } + + + + + + + +#ifdef USE_UPNP +void ThreadMapPort(void* parg) +{ + // Make this thread recognisable as the UPnP thread + RenameThread("xpcoin-UPnP"); + + try + { + vnThreadsRunning[THREAD_UPNP]++; + ThreadMapPort2(parg); + vnThreadsRunning[THREAD_UPNP]--; + } + catch (std::exception& e) { + vnThreadsRunning[THREAD_UPNP]--; + PrintException(&e, "ThreadMapPort()"); + } catch (...) { + vnThreadsRunning[THREAD_UPNP]--; + PrintException(NULL, "ThreadMapPort()"); + } + printf("ThreadMapPort exited\n"); +} + +void ThreadMapPort2(void* parg) +{ + printf("ThreadMapPort started\n"); + + std::string port = strprintf("%u", GetListenPort()); + const char * multicastif = 0; + const char * minissdpdpath = 0; + struct UPNPDev * devlist = 0; + char lanaddr[64]; + +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0); +#elif MINIUPNPC_API_VERSION < 14 + /* miniupnpc 1.6 */ + int error = 0; + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error); +#else + /* miniupnpc 1.9.20150730 */ + int error = 0; + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 2, &error); +#endif + + struct UPNPUrls urls; + struct IGDdatas data; + int r; + + r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); + if (r == 1) + { + if (fDiscover) { + char externalIPAddress[40]; + r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); + if(r != UPNPCOMMAND_SUCCESS) + printf("UPnP: GetExternalIPAddress() returned %d\n", r); + else + { + if(externalIPAddress[0]) + { + printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); + AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP); + } + else + printf("UPnP: GetExternalIPAddress failed.\n"); + } + } + + string strDesc = "XPCoin " + FormatFullVersion(); +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0); +#else + /* miniupnpc 1.6 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0, "0"); +#endif + + if(r!=UPNPCOMMAND_SUCCESS) + printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + port.c_str(), port.c_str(), lanaddr, r, strupnperror(r)); + else + printf("UPnP Port Mapping successful.\n"); + int i = 1; + while (true) + { + if (fShutdown || !fUseUPnP) + { + r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0); + printf("UPNP_DeletePortMapping() returned : %d\n", r); + freeUPNPDevlist(devlist); devlist = 0; + FreeUPNPUrls(&urls); + return; + } + if (i % 600 == 0) // Refresh every 20 minutes + { +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0); +#else + /* miniupnpc 1.6 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0, "0"); +#endif + + if(r!=UPNPCOMMAND_SUCCESS) + printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + port.c_str(), port.c_str(), lanaddr, r, strupnperror(r)); + else + printf("UPnP Port Mapping successful.\n");; + } + Sleep(2000); + i++; + } + } else { + printf("No valid UPnP IGDs found\n"); + freeUPNPDevlist(devlist); devlist = 0; + if (r != 0) + FreeUPNPUrls(&urls); + while (true) + { + if (fShutdown || !fUseUPnP) + return; + Sleep(2000); + } + } +} + +void MapPort() +{ + if (fUseUPnP && vnThreadsRunning[THREAD_UPNP] < 1) + { + if (!NewThread(ThreadMapPort, NULL)) + printf("Error: ThreadMapPort(ThreadMapPort) failed\n"); + } +} +#else +void MapPort() +{ + // Intentionally left blank. +} +#endif + + + + + + + + + // DNS seeds // Each pair gives a source name and a seed name. // The first name is used as information source for addrman. @@ -1699,6 +1871,11 @@ void StartNode(void* parg) else if (!NewThread(ThreadDNSAddressSeed, NULL)) printf("Error: NewThread(ThreadDNSAddressSeed) failed\n"); + // Map ports with UPnP + if (!fUseUPnP) + printf("UPNP port mapping is disabled\n"); + else + MapPort(); // Get addresses from IRC and advertise ours if (!GetBoolArg("-irc", true)) @@ -1768,6 +1945,9 @@ bool StopNode() if (vnThreadsRunning[THREAD_MESSAGEHANDLER] > 0) printf("ThreadMessageHandler still running\n"); if (vnThreadsRunning[THREAD_RPCLISTENER] > 0) printf("ThreadRPCListener still running\n"); if (vnThreadsRunning[THREAD_RPCHANDLER] > 0) printf("ThreadsRPCServer still running\n"); +#ifdef USE_UPNP + if (vnThreadsRunning[THREAD_UPNP] > 0) printf("ThreadMapPort still running\n"); +#endif if (vnThreadsRunning[THREAD_DNSSEED] > 0) printf("ThreadDNSAddressSeed still running\n"); if (vnThreadsRunning[THREAD_ADDEDCONNECTIONS] > 0) printf("ThreadOpenAddedConnections still running\n"); if (vnThreadsRunning[THREAD_DUMPADDRESS] > 0) printf("ThreadDumpAddresses still running\n"); diff --git a/src/net.h b/src/net.h index 0e81008e..e00572b4 100644 --- a/src/net.h +++ b/src/net.h @@ -54,6 +54,7 @@ enum LOCAL_NONE, // unknown LOCAL_IF, // address a local interface listens on LOCAL_BIND, // address explicit bound to + LOCAL_UPNP, // address reported by UPnP LOCAL_IRC, // address reported by IRC (deprecated) LOCAL_HTTP, // address reported by whatismyip.com and similar LOCAL_MANUAL, // address explicitly specified (-externalip=) @@ -106,6 +107,7 @@ enum threadId THREAD_OPENCONNECTIONS, THREAD_MESSAGEHANDLER, THREAD_RPCLISTENER, + THREAD_UPNP, THREAD_DNSSEED, THREAD_ADDEDCONNECTIONS, THREAD_DUMPADDRESS, @@ -119,6 +121,7 @@ enum threadId extern bool fClient; extern bool fDiscover; +extern bool fUseUPnP; extern uint64_t nLocalServices; extern uint64_t nLocalHostNonce; extern CAddress addrSeenByPeer; diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 7be89fba..8f1968c9 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -162,6 +162,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'") QT_TRANSLATE_NOOP("bitcoin-core", "Upgrade wallet to latest format"), QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 0)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 1 when listening)"), QT_TRANSLATE_NOOP("bitcoin-core", "Use proxy to reach tor hidden services (default: same as -proxy)"), QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index c3ce2ec4..a68d42dd 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -111,7 +111,7 @@ Copyright © 2012-2018 The XP developers IBeamCursor - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p><p><br/></p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p><p><br/></p></body></html> true diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 9d55347d..ba99bc13 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -120,6 +120,16 @@ &Network + + + + Automatically open the XPCoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + Map port using &UPnP + + + diff --git a/src/qt/locale/bitcoin_en.qm b/src/qt/locale/bitcoin_en.qm index 4df57f57a464ee7cb319cc5c9904f31dab61c9c1..8ef1ed685f47211fd720a1a760f0cff988b72f27 100644 GIT binary patch delta 6290 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 L1H;#{{rdj`Yz#_M delta 5582 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 - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p><p><br/></p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p><p><br/></p></body></html> - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p></body></html> - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p></body></html> @@ -2002,6 +2002,16 @@ Reduce the number of addresses involved in the address creation. &Network &Network + + + Automatically open the XPCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the XPCoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + Map port using &UPnP + Connect to the XP network through a SOCKS proxy (e.g. when connecting through Tor). @@ -4358,6 +4368,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Use OpenSSL (https) for JSON-RPC connections Use OpenSSL (https) for JSON-RPC connections + + + Use UPnP to map the listening port (default: 0) + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + Use UPnP to map the listening port (default: 1 when listening) + Use proxy to reach tor hidden services (default: same as -proxy) diff --git a/src/qt/locale/bitcoin_ru.qm b/src/qt/locale/bitcoin_ru.qm index 6bf6ff0e2e489b115323c9c0a0bd105232d7a902..33322a0affe7d9afc10dfb4e28c65a5b0d3f9422 100644 GIT binary patch delta 7521 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 - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p><p><br/></p></body></html> - <html><head/><body><p><br/>Это экспериментальная программа.</p><p>Распространяется на правах лицензии MIT/X11, см. файл license.txt или <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Иконка приложения разработана VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). Этот продукт также включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) и криптографическое ПО, написанное Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p><p><br/></p></body></html> + <html><head/><body><p><br/>Это экспериментальная программа.</p><p>Распространяется на правах лицензии MIT/X11, см. файл license.txt или <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Иконка приложения разработана VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). Этот продукт также включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) и криптографическое ПО, написанное Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) и ПО для работы с UPnP, написанное Thomas Bernard (<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p></body></html> @@ -2004,6 +2004,16 @@ Reduce the number of addresses involved in the address creation. &Network &Сеть + + + Automatically open the XPCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматически открыть порт для XPCoin-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. + + + + Map port using &UPnP + Пробросить порт через &UPnP + Connect to the XP network through a SOCKS proxy (e.g. when connecting through Tor). @@ -4364,6 +4374,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Use OpenSSL (https) for JSON-RPC connections Использовать OpenSSL (https) для подключений JSON-RPC + + + Use UPnP to map the listening port (default: 0) + Использовать UPnP для проброса порта (по умолчанию: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + Использовать UPnP для проброса порта (по умолчанию: 1, если используется прослушивание) + Use proxy to reach tor hidden services (default: same as -proxy) diff --git a/src/qt/locale/bitcoin_uk.qm b/src/qt/locale/bitcoin_uk.qm index fd53d3e78b66f48eabb74771bf1b8a7cbcb1308a..6fd7b208a9cdb1afbbf001d2c35fa9d3f01c5513 100644 GIT binary patch delta 7693 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 Vb`pK>AGw#ZEM~dS=@1L6{a-TltZM)O delta 6455 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 diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts index 589a6591..8e338658 100644 --- a/src/qt/locale/bitcoin_uk.ts +++ b/src/qt/locale/bitcoin_uk.ts @@ -28,8 +28,8 @@ Copyright © 2012-2018 The XP developers - <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p><p><br/></p></body></html> - <html><head/><body><p><br/>Це програмне забезпечення є експериментальним.</p><p>Поширюється за ліцензією MIT/X11, додаткова інформація міститься у файлі COPYING та за адресою <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Піктограму програми розробили VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). Крім того, цей продукт також включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>), криптографічне програмне забезпечення, написане Еріком Янгом (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>).</p></body></html> + <html><head/><body><p><br/>This is experimental software.</p><p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Main icon was designed by VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). This product also includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>) and cryptographic software written by Eric Young (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>) and UPnP software written by Thomas Bernard(<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p><p><br/></p></body></html> + <html><head/><body><p><br/>Це програмне забезпечення є експериментальним.</p><p>Поширюється за ліцензією MIT/X11, додаткова інформація міститься у файлі COPYING та за адресою <br/><a href="http://www.opensource.org/licenses/mit-license.php"><span style=" text-decoration: underline; color:#0000ff;">http://www.opensource.org/licenses/mit-license.php</span></a>.</p><p>Піктограму програми розробили VisualPharm.com (<a href="mailto:team@visualpharm.com"><span style=" text-decoration: underline; color:#0000ff;">team@visualpharm.com</span></a>). Крім того, цей продукт також включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (<a href="http://www.openssl.org/"><span style=" text-decoration: underline; color:#0000ff;">http://www.openssl.org/</span></a>), криптографічне програмне забезпечення, написане Еріком Янгом (<a href="mailto:eay@cryptsoft.com"><span style=" text-decoration: underline; color:#0000ff;">eay@cryptsoft.com</span></a>), та функції для роботи з UPnP, написані Томасом Бернардом (<a href="mailto:miniupnp@free.fr"><span style=" text-decoration: underline; color:#0000ff;">miniupnp@free.fr</span></a>).</p></body></html> @@ -2007,6 +2007,16 @@ Reduce the number of addresses involved in the address creation. &Network &Мережа + + + Automatically open the XPCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматично відкривати порт для клієнту новакоін на роутері. Працює лише якщо ваш роутер підтримує UPnP і ця функція увімкнена. + + + + Map port using &UPnP + Відображення порту через &UPnP + Connect to the XP network through a SOCKS proxy (e.g. when connecting through Tor). @@ -4385,6 +4395,16 @@ If the file does not exist, create it with owner-readable-only file permissions. Використовувати OpenSSL (https) для JSON-RPC-з’єднань + + + Use UPnP to map the listening port (default: 0) + Намагатись використовувати UPnP для відображення порту, що прослуховується, на роутері (типово: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + Намагатись використовувати UPnP для відображення порту, що прослуховується на роутері (типово: 1 коли прослуховується) + Use proxy to reach tor hidden services (default: same as -proxy) diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 713e9279..f586a98b 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -30,6 +30,10 @@ OptionsDialog::OptionsDialog(QWidget *parent) : ui->setupUi(this); /* Network elements init */ +#ifndef USE_UPNP + ui->mapPortUpnp->setEnabled(false); +#endif + ui->proxyIp->setEnabled(false); ui->proxyPort->setEnabled(false); ui->proxyPort->setValidator(new QIntValidator(1, 65535, this)); @@ -154,6 +158,8 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->detachDatabases, OptionsModel::DetachDatabases); /* Network */ + mapper->addMapping(ui->mapPortUpnp, OptionsModel::MapPortUPnP); + mapper->addMapping(ui->connectSocks, OptionsModel::ProxyUse); mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP); mapper->addMapping(ui->proxyPort, OptionsModel::ProxyPort); diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index ce1b6ba3..cc3d4477 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -78,6 +78,8 @@ void OptionsModel::Init() // These are shared with core Bitcoin; we want // command-line options to override the GUI settings: + if (settings.contains("fUseUPnP")) + SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()); if ( !(settings.value("fTorOnly").toBool() && settings.contains("addrTor")) ) { if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool()) SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString()); @@ -121,6 +123,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const return QVariant(GUIUtil::GetStartOnSystemStartup()); case MinimizeToTray: return QVariant(fMinimizeToTray); + case MapPortUPnP: + return settings.value("fUseUPnP", GetBoolArg("-upnp", true)); case MinimizeOnClose: return QVariant(fMinimizeOnClose); case ProxyUse: @@ -197,6 +201,11 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in fMinimizeToTray = value.toBool(); settings.setValue("fMinimizeToTray", fMinimizeToTray); break; + case MapPortUPnP: + fUseUPnP = value.toBool(); + settings.setValue("fUseUPnP", fUseUPnP); + MapPort(); + break; case MinimizeOnClose: fMinimizeOnClose = value.toBool(); settings.setValue("fMinimizeOnClose", fMinimizeOnClose); diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index e3d2cae4..3a27427a 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -19,6 +19,7 @@ class OptionsModel : public QAbstractListModel enum OptionID { StartAtStartup, // bool MinimizeToTray, // bool + MapPortUPnP, // bool MinimizeOnClose, // bool ProxyUse, // bool ProxyIP, // QString diff --git a/xp.pro b/xp.pro index 0d358675..121a9cbd 100644 --- a/xp.pro +++ b/xp.pro @@ -445,6 +445,23 @@ isEmpty(QRENCODE_LIB_PATH) { windows:QRENCODE_LIB_PATH=$$PWD/MSVC/libqrencode/Release/Release } +# use: qmake "USE_UPNP=1" ( enabled by default; default) +# or: qmake "USE_UPNP=0" (disabled by default) +# or: qmake "USE_UPNP=-" (not supported) +# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support +contains(USE_UPNP, -) { + message(Building without UPNP support) +} else { + message(Building with UPNP support) + count(USE_UPNP, 0) { + USE_UPNP=1 + } + DEFINES += USE_UPNP=$$USE_UPNP STATICLIB MINIUPNP_STATICLIB + INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH + LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc + win32:LIBS += -liphlpapi +} + 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,) !windows: { From 0bb7bae561287f5c8dac4274f03740a10d1a8b51 Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Sun, 11 Mar 2018 11:01:25 +0900 Subject: [PATCH 3/4] supports linux XPd and XP-qt dynamic link --- src/CMakeLists.txt | 144 +++++++++++++++++++++++++++++++-------------- 1 file changed, 100 insertions(+), 44 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d78831a9..f115e7a6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,7 @@ # Root CMake file for simon and speck # ---------------------------------------------------------------------------- -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.5) project(XPd CXX C) @@ -123,14 +123,29 @@ else() endif() endif() link_directories(${OPENSSL_LIB_PATH}) -if(MSVC AND ENABLE_STATIC) - if(CMAKE_BUILD_TYPE MATCHES Release) - set(OPENSSL_LIB_SUFFIX MT) +if(ENABLE_STATIC) + if(MSVC) + set(OPENSSL_SSL_LIB_NAME "ssleay32") + set(OPENSSL_CRYPTO_LIB_NAME "libeay32") + + if(CMAKE_BUILD_TYPE MATCHES Release) + set(OPENSSL_LIB_SUFFIX MT) + else() + set(OPENSSL_LIB_SUFFIX MTd) + endif() else() - set(OPENSSL_LIB_SUFFIX MTd) + set(OPENSSL_SSL_LIB_NAME "libssl") + set(OPENSSL_CRYPTO_LIB_NAME "libcrypto") + + # TODO: endif() else() - # TODO: + if(MSVC) + # TODO: + else() + set(OPENSSL_SSL_LIB_NAME "ssl") + set(OPENSSL_CRYPTO_LIB_NAME "crypto") + endif() endif() ## boost @@ -139,7 +154,7 @@ if (DEFINED $ENV{BOOST_LIB_PATH}) else() if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) set(BOOST_LIB_PATH ${DEPSDIR}/boost/lib) - else(MSVC) + elseif(MSVC) # TODO: change msvc version if(WIN32) set(BOOST_LIB_PATH ${DEPSDIR}/boost_1_66_0/lib32-msvc-14.1) @@ -149,18 +164,33 @@ else() set(BOOST_LIB_PATH ${DEPSDIR}/boost_1_66_0/lib64-msvc-14.1) set(BOOST_LIB_ARCH x64) endif() + else() + # UNIX + # TODO: endif() endif() link_directories(${BOOST_LIB_PATH}) -if(MSVC AND ENABLE_STATIC) - # TODO: change msvc version - if(CMAKE_BUILD_TYPE MATCHES Release) - set(BOOST_LIB_SUFFIX vc141-mt-${BOOST_LIB_ARCH}-1_66) +if(ENABLE_STATIC) + if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + set(BOOST_LIB_SUFFIX -mt) + elseif(MSVC) + # TODO: change msvc version + if(CMAKE_BUILD_TYPE MATCHES Release) + set(BOOST_LIB_SUFFIX -vc141-mt-${BOOST_LIB_ARCH}-1_66) + else() + set(BOOST_LIB_SUFFIX -vc141-mt-gd-${BOOST_LIB_ARCH}-1_66) + endif() else() - set(BOOST_LIB_SUFFIX vc141-mt-gd-${BOOST_LIB_ARCH}-1_66) + set(BOOST_LIB_SUFFIX "") endif() else() - # TODO: + if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + set(BOOST_LIB_SUFFIX -mt) + elseif(MSVC) + # TODO: + else() + set(BOOST_LIB_SUFFIX "") + endif() endif() ## berkeley db @@ -178,17 +208,28 @@ else() set(BDB_LIB_PATH ${DEPSDIR}/db-4.8.30.NC/build_windows/Win32/Debug) endif() endif() + else() + # TODO: endif() endif() link_directories(${BDB_LIB_PATH}) -if(MSVC AND ENABLE_STATIC) - if(CMAKE_BUILD_TYPE MATCHES Release) - set(BDB_LIB_SUFFIX "") +if(ENABLE_STATIC) + if(MSVC) + set(BDB_LIB_NAME "libdb_stl48") + if(CMAKE_BUILD_TYPE MATCHES Release) + set(BDB_LIB_SUFFIX "") + else() + set(BDB_LIB_SUFFIX d) + endif() else() - set(BDB_LIB_SUFFIX d) + set(BDB_LIB_NAME "libdb_cxx-4.8") endif() else() - # TODO: + if(MSVC) + set(BDB_LIB_NAME "db_stl-48") + else() + set(BDB_LIB_NAME "db_cxx-4.8") + endif() endif() ## upnp @@ -203,6 +244,20 @@ if(USE_UPNP) endif() endif() link_directories(${MINIUPNPC_LIB_PATH}) + + if(ENABLE_STATIC) + if(MSVC) + # TODO: + else() + set(MINIUPNPC_LIB_NAME "libminiupnpc") + endif() + else() + if(MSVC) + # TODO: + else() + set(MINIUPNPC_LIB_NAME "miniupnpc") + endif() + endif() endif() #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") @@ -343,48 +398,49 @@ if(ENABLE_STATIC) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") endif() + target_link_libraries(XPd + ${BDB_LIB_PATH}/${BDB_LIB_NAME}${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${BOOST_LIB_PATH}/libboost_system${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${BOOST_LIB_PATH}/libboost_filesystem${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${BOOST_LIB_PATH}/libboost_program_options${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${BOOST_LIB_PATH}/libboost_thread${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${OPENSSL_LIB_PATH}/${OPENSSL_SSL_LIB_NAME}${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ${OPENSSL_LIB_PATH}/${OPENSSL_CRYPTO_LIB_NAME}${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} + ) if(MSVC) target_link_libraries(XPd - ${BDB_LIB_PATH}/libdb_stl48${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} ${BDB_LIB_PATH}/libdb48${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_system-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_filesystem-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_program_options-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_thread-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${OPENSSL_LIB_PATH}/ssleay32${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ${OPENSSL_LIB_PATH}/libeay32${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES} - ) + ) else() target_link_libraries(XPd - ${BDB_LIB_PATH}/libdb_cxx-4.8${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_system-mt${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_filesystem-mt${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_program_options-mt${CMAKE_FIND_LIBRARY_SUFFIXES} - ${BOOST_LIB_PATH}/libboost_thread-mt${CMAKE_FIND_LIBRARY_SUFFIXES} - ${OPENSSL_LIB_PATH}/libssl${CMAKE_FIND_LIBRARY_SUFFIXES} - ${OPENSSL_LIB_PATH}/libcrypto${CMAKE_FIND_LIBRARY_SUFFIXES} - z - ) + z + ) endif() + if(USE_UPNP) target_link_libraries(XPd - ${MINIUPNPC_LIB_PATH}/libminiupnpc${CMAKE_FIND_LIBRARY_SUFFIXES} + ${MINIUPNPC_LIB_PATH}/${MINIUPNPC_LIB_NAME}${CMAKE_FIND_LIBRARY_SUFFIXES} ) endif() else() target_link_libraries(XPd - db_cxx-4.8 - boost_system-mt - boost_filesystem-mt - boost_program_options-mt - boost_thread-mt - ssl - crypto + ${BDB_LIB_NAME} + boost_system${BOOST_LIB_SUFFIX} + boost_filesystem${BOOST_LIB_SUFFIX} + boost_program_options${BOOST_LIB_SUFFIX} + boost_thread${BOOST_LIB_SUFFIX} + ${OPENSSL_SSL_LIB_NAME} + ${OPENSSL_CRYPTO_LIB_NAME} + ) + if(NOT MSVC) + target_link_libraries(XPd z + pthread ) + endif() if(USE_UPNP) target_link_libraries(XPd - miniupnpc + ${MINIUPNPC_LIB_NAME} ) endif() endif() From 96f5eb38e51e960add45bd9ee4db28dec967c99d Mon Sep 17 00:00:00 2001 From: Naruto TAKAHASHI Date: Sun, 11 Mar 2018 18:42:19 +0900 Subject: [PATCH 4/4] update makefile.osx --- src/makefile.osx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/makefile.osx b/src/makefile.osx index 87e26094..92eb6f6b 100644 --- a/src/makefile.osx +++ b/src/makefile.osx @@ -61,6 +61,9 @@ LIBPATHS= \ -L"$(MINIUPNPC_LIB_PATH)" \ -L"$(QRENCODE_LIB_PATH)" +ifeq ($(USE_UPNP),) +USE_UPNP:=0 +endif ifeq ($(USE_LEVELDB),) USE_LEVELDB:=0 endif @@ -144,6 +147,18 @@ OBJS= \ obj/kernelrecord.o \ obj/kernel_worker.o +ifndef USE_UPNP + override USE_UPNP = - +endif +ifneq (${USE_UPNP}, -) + DEFS += -DUSE_UPNP=$(USE_UPNP) +ifdef STATIC + LIBS += $(DEPSDIR)/lib/libminiupnpc.a +else + LIBS += -lminiupnpc +endif +endif + ifneq (${USE_IPV6}, -) DEFS += -DUSE_IPV6=$(USE_IPV6) endif