1diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
2index 538e4d215..cc4b0a346 100644
3--- a/external/CMakeLists.txt
4+++ b/external/CMakeLists.txt
5@@ -35,26 +35,14 @@
6 # ...except for FreeBSD, because FreeBSD is a special case that doesn't play well with
7 # others.
8
9-find_package(Miniupnpc REQUIRED)
10-
11-message(STATUS "Using in-tree miniupnpc")
12-set(UPNPC_NO_INSTALL TRUE CACHE BOOL "Disable miniupnp installation" FORCE)
13-set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Disable building shared library" FORCE)
14-add_subdirectory(miniupnp/miniupnpc)
15-set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
16-set_property(TARGET libminiupnpc-static PROPERTY POSITION_INDEPENDENT_CODE ON)
17-if(MSVC)
18- set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
19-elseif(NOT MSVC)
20- set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
21-endif()
22-if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
23- set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -D_NETBSD_SOURCE")
24-endif()
25-
26-set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
27+find_package(PkgConfig REQUIRED)
28+pkg_check_modules(MINIUPNPC REQUIRED miniupnpc)
29+link_libraries(${MINIUPNPC_LIBRARIES})
30+include_directories(${MINIUPNPC_INCLUDE_DIRS})
31
32+find_package(RapidJSON)
33 find_package(Unbound)
34+find_library(RANDOMX_LIBRARY randomx)
35
36 if(NOT UNBOUND_INCLUDE_DIR)
37 die("Could not find libunbound")
38@@ -70,4 +58,3 @@ endif()
39 add_subdirectory(db_drivers)
40 add_subdirectory(easylogging++)
41 add_subdirectory(qrcodegen)
42-add_subdirectory(randomx EXCLUDE_FROM_ALL)
43diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
44index 884a7b5fc..24c10334e 100644
45--- a/src/p2p/net_node.inl
46+++ b/src/p2p/net_node.inl
47@@ -60,9 +60,9 @@
48 #include "cryptonote_core/cryptonote_core.h"
49 #include "net/parse.h"
50
51-#include <miniupnp/miniupnpc/miniupnpc.h>
52-#include <miniupnp/miniupnpc/upnpcommands.h>
53-#include <miniupnp/miniupnpc/upnperrors.h>
54+#include <miniupnpc/miniupnpc.h>
55+#include <miniupnpc/upnpcommands.h>
56+#include <miniupnpc/upnperrors.h>
57
58 #undef MONERO_DEFAULT_LOG_CATEGORY
59 #define MONERO_DEFAULT_LOG_CATEGORY "net.p2p"
60@@ -2989,7 +2989,8 @@ namespace nodetool
61 UPNPUrls urls;
62 IGDdatas igdData;
63 char lanAddress[64];
64- result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress);
65+ char wanAddress[64];
66+ result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress, wanAddress, sizeof wanAddress);
67 freeUPNPDevlist(deviceList);
68 if (result > 0) {
69 if (result == 1) {
70@@ -3057,7 +3058,8 @@ namespace nodetool
71 UPNPUrls urls;
72 IGDdatas igdData;
73 char lanAddress[64];
74- result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress);
75+ char wanAddress[64];
76+ result = UPNP_GetValidIGD(deviceList, &urls, &igdData, lanAddress, sizeof lanAddress, wanAddress, sizeof wanAddress);
77 freeUPNPDevlist(deviceList);
78 if (result > 0) {
79 if (result == 1) {