about summary refs log tree commit diff
path: root/pkgs/applications/blockchains
diff options
context:
space:
mode:
authorrnhmjoj <rnhmjoj@inventati.org>2020-10-07 17:32:44 +0200
committerrnhmjoj <rnhmjoj@inventati.org>2020-10-08 00:07:24 +0200
commitcc90474581424f08ffed9abc3ed159eb96e60a12 (patch)
treebf1ed82788ccf15e70206268f8d40b6ca594d29d /pkgs/applications/blockchains
parente40ede1821088f6e0ac5041907767aec5364308f (diff)
monero: force use of system libraries
Diffstat (limited to 'pkgs/applications/blockchains')
-rw-r--r--pkgs/applications/blockchains/monero/default.nix24
-rw-r--r--pkgs/applications/blockchains/monero/use-system-libraries.patch69
2 files changed, 89 insertions, 4 deletions
diff --git a/pkgs/applications/blockchains/monero/default.nix b/pkgs/applications/blockchains/monero/default.nix
index 02e781d271cf6..f424624cc2983 100644
--- a/pkgs/applications/blockchains/monero/default.nix
+++ b/pkgs/applications/blockchains/monero/default.nix
@@ -2,11 +2,18 @@
 , cmake, pkgconfig
 , boost, miniupnpc, openssl, unbound
 , zeromq, pcsclite, readline, libsodium, hidapi
-, protobuf, randomx, rapidjson, libusb-compat-0_1
+, randomx, rapidjson
 , CoreData, IOKit, PCSC
+, trezorSupport ? true
+  , libusb1  ? null
+  , protobuf ? null
+  , python3  ? null
 }:
 
+with stdenv.lib;
+
 assert stdenv.isDarwin -> IOKit != null;
+assert trezorSupport -> all (x: x!=null) [ libusb1 protobuf python3 ];
 
 stdenv.mkDerivation rec {
   pname = "monero";
@@ -20,21 +27,30 @@ stdenv.mkDerivation rec {
     fetchSubmodules = true;
   };
 
+  patches = [ ./use-system-libraries.patch ];
+
+  postPatch = ''
+    # remove vendored libraries
+    rm -r external/{miniupnp,randomx,rapidjson,unbound}
+  '';
+
   nativeBuildInputs = [ cmake pkgconfig ];
 
   buildInputs = [
     boost miniupnpc openssl unbound
     zeromq pcsclite readline
     libsodium hidapi randomx rapidjson
-    protobuf libusb-compat-0_1
-  ] ++ stdenv.lib.optionals stdenv.isDarwin [ IOKit CoreData PCSC ];
+    protobuf
+  ] ++ optionals stdenv.isDarwin [ IOKit CoreData PCSC ]
+    ++ optionals trezorSupport [ libusb1 protobuf python3 ];
 
   cmakeFlags = [
     "-DCMAKE_BUILD_TYPE=Release"
     "-DUSE_DEVICE_TREZOR=ON"
     "-DBUILD_GUI_DEPS=ON"
     "-DReadline_ROOT_DIR=${readline.dev}"
-  ] ++ stdenv.lib.optional stdenv.isDarwin "-DBoost_USE_MULTITHREADED=OFF";
+    "-DRandomX_ROOT_DIR=${randomx}"
+  ] ++ optional stdenv.isDarwin "-DBoost_USE_MULTITHREADED=OFF";
 
   meta = with stdenv.lib; {
     description = "Private, secure, untraceable currency";
diff --git a/pkgs/applications/blockchains/monero/use-system-libraries.patch b/pkgs/applications/blockchains/monero/use-system-libraries.patch
new file mode 100644
index 0000000000000..57e2a2e9a6960
--- /dev/null
+++ b/pkgs/applications/blockchains/monero/use-system-libraries.patch
@@ -0,0 +1,69 @@
+diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
+index a8916a7d0..39ec7747b 100644
+--- a/external/CMakeLists.txt
++++ b/external/CMakeLists.txt
+@@ -37,34 +37,16 @@
+ 
+ find_package(Miniupnpc REQUIRED)
+ 
+-message(STATUS "Using in-tree miniupnpc")
+-add_subdirectory(miniupnp/miniupnpc)
+-set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
+-if(MSVC)
+-  set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
+-elseif(NOT MSVC)
+-  set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
+-endif()
+-if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+-	set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -D_NETBSD_SOURCE")
+-endif()
+-
+-set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
++set(UPNP_STATIC false PARENT_SCOPE)
++set(UPNP_INCLUDE ${MINIUPNP_INCLUDE_DIR} PARENT_SCOPE)
++set(UPNP_LIBRARIES ${MINIUPNP_LIBRARY} PARENT_SCOPE)
+ 
+ find_package(Unbound)
+ 
+ if(NOT UNBOUND_INCLUDE_DIR OR STATIC)
+-  # NOTE: If STATIC is true, CMAKE_FIND_LIBRARY_SUFFIXES has been reordered.
+-  # unbound has config tests which used OpenSSL libraries, so -ldl may need to
+-  # be set in this case.
+-  # The unbound CMakeLists.txt can set it, since it's also needed for the
+-  # static OpenSSL libraries set up there after with target_link_libraries.
+-  add_subdirectory(unbound)
+-
+-  set(UNBOUND_STATIC true PARENT_SCOPE)
+-  set(UNBOUND_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/unbound/libunbound" PARENT_SCOPE)
+-  set(UNBOUND_LIBRARY "unbound" PARENT_SCOPE)
+-  set(UNBOUND_LIBRARY_DIRS "${LIBEVENT2_LIBDIR}" PARENT_SCOPE)
++  set(UNBOUND_STATIC false PARENT_SCOPE)
++  set(UPNP_INCLUDE ${MINIUPNP_INCLUDE_DIR} PARENT_SCOPE)
++  set(UPNP_LIBRARIES ${MINIUPNP_LIBRARY} PARENT_SCOPE)
+ else()
+   message(STATUS "Found libunbound include (unbound.h) in ${UNBOUND_INCLUDE_DIR}")
+   if(UNBOUND_LIBRARIES)
+@@ -81,4 +63,5 @@ endif()
+ add_subdirectory(db_drivers)
+ add_subdirectory(easylogging++)
+ add_subdirectory(qrcodegen)
+-add_subdirectory(randomx EXCLUDE_FROM_ALL)
++
++find_library(RANDOMX_LIBRARIES NAMES RandomX)
+diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
+index 175741146..088b582f7 100644
+--- a/src/p2p/net_node.inl
++++ b/src/p2p/net_node.inl
+@@ -60,9 +60,9 @@
+ #include "cryptonote_core/cryptonote_core.h"
+ #include "net/parse.h"
+ 
+-#include <miniupnp/miniupnpc/miniupnpc.h>
+-#include <miniupnp/miniupnpc/upnpcommands.h>
+-#include <miniupnp/miniupnpc/upnperrors.h>
++#include <miniupnpc/miniupnpc.h>
++#include <miniupnpc/upnpcommands.h>
++#include <miniupnpc/upnperrors.h>
+ 
+ #undef MONERO_DEFAULT_LOG_CATEGORY
+ #define MONERO_DEFAULT_LOG_CATEGORY "net.p2p"