Only use D_DARWIN_C_SOURCE when building on darwin, so we don't inadvertently introduce issues elsewhere.
cc @theuni
@laanwj No worries!
Unfortunately this isn't quite as obvious as it looks. This change would clobber any default cflags. @fanquake Could you give this a try?
diff --git a/depends/packages/miniupnpc.mk b/depends/packages/miniupnpc.mk
index 9976db43c2..0a17f07e22 100644
--- a/depends/packages/miniupnpc.mk
+++ b/depends/packages/miniupnpc.mk
@@ -5,11 +5,10 @@ $(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_sha256_hash=90dda8c7563ca6cd4a83e23b3c66dbbea89603a1675bfdb852897c2c9cc220b7
define $(package)_set_vars
-$(package)_build_opts=CC="$($(package)_cc)"
+$(package)_build_opts=CC="$($(package)_cc)" AR="$($(package)_ar)"
$(package)_build_opts_darwin=OS=Darwin LIBTOOL="$($(package)_libtool)"
$(package)_build_opts_mingw32=-f Makefile.mingw
-$(package)_build_env+=CFLAGS="$($(package)_cflags) $($(package)_cppflags)" AR="$($(package)_ar)"
-$(package)_build_env+=CFLAGS=-D_DARWIN_C_SOURCE
+$(package)_cppflags_darwin+=-D_DARWIN_C_SOURCE
endef
define $(package)_preprocess_cmds
@@ -19,7 +18,7 @@ define $(package)_preprocess_cmds
endef
define $(package)_build_cmds
- $(MAKE) libminiupnpc.a $($(package)_build_opts)
+ CFLAGS="$($(package)_cflags) $($(package)_cppflags)" $(MAKE) libminiupnpc.a $($(package)_build_opts)
endef
define $(package)_stage_cmds
BTW; isn't this something that should ideally be fixed upstream?
@theuni using the patch you suggested, -D_DARWIN_C_SOURCE is now appearing twice in the build flags:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.8 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/Users/xxx/Github/bitcoin/depends/x86_64-apple-darwin17.4.0/include -D_DARWIN_C_SOURCE -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o miniwget.o miniwget.c
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.8 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/Users/xxx/Github/bitcoin/depends/x86_64-apple-darwin17.4.0/include -D_DARWIN_C_SOURCE -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o minixml.o minixml.c
I've pushed up your changes without the cppflags_darwin addition, we'll see what Travis thinks.
Looks like -D_DARWIN_C_SOURCE is being added without the specific cppflags_darwin +=. The build is failing differently:
/home/travis/build/bitcoin/bitcoin/depends/work/download/miniupnpc-2.0.20180203/miniupnpc-2.0.20180203.tar.gz.temp: OK
Extracting miniupnpc...
/home/travis/build/bitcoin/bitcoin/depends/sources/miniupnpc-2.0.20180203.tar.gz: OK
Preprocessing miniupnpc...
Configuring miniupnpc...
Building miniupnpc...
make[1]: Entering directory `/home/travis/build/bitcoin/bitcoin/depends/work/build/x86_64-apple-darwin11/miniupnpc/2.0.20180203-a0cb00241a9'
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o miniwget.o miniwget.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o minixml.o minixml.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o igd_desc_parse.o igd_desc_parse.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o minisoap.o minisoap.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o miniupnpc.o miniupnpc.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o upnpreplyparse.o upnpreplyparse.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o upnpcommands.o upnpcommands.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o upnperrors.o upnperrors.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o connecthostport.o connecthostport.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o portlistingparse.o portlistingparse.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o receivedata.o receivedata.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o upnpdev.o upnpdev.c
clang -target x86_64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot /home/travis/build/bitcoin/bitcoin/depends/SDKs/MacOSX10.11.sdk -mlinker-version=253.9 -D_DARWIN_C_SOURCE -fPIC -pipe -O2 -I/home/travis/build/bitcoin/bitcoin/depends/x86_64-apple-darwin11/include -Wall -W -Wstrict-prototypes -fno-common -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -c -o minissdpc.o minissdpc.c
/usr/bin/libtool -static -o libminiupnpc.a miniwget.o minixml.o igd_desc_parse.o minisoap.o miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o connecthostport.o portlistingparse.o receivedata.o upnpdev.o minissdpc.o
libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make[1]: *** [libminiupnpc.a] Error 1
make[1]: Leaving directory `/home/travis/build/bitcoin/bitcoin/depends/work/build/x86_64-apple-darwin11/miniupnpc/2.0.20180203-a0cb00241a9'
make: *** [/home/travis/build/bitcoin/bitcoin/depends/work/build/x86_64-apple-darwin11/miniupnpc/2.0.20180203-a0cb00241a9/./.stamp_built] Error 2
make: Leaving directory `/home/travis/build/bitcoin/bitcoin/depends'
@fanquake good catch! Upstream did add the define, as @laanwj mentioned that they should.
Our issue turns out to be that upstream added cross-build detection, which we partially override by defining OS. If we just let it be discovered as intended, all is fine. The problem you're seeing now is that LIBTOOL isn't defined (apple has a libtool utility that can handle ar's features, it's unrelated to gnu libtool).
Looks like the fix is as simple as:
--- a/depends/packages/miniupnpc.mk
+++ b/depends/packages/miniupnpc.mk
@@ -6,10 +6,9 @@ $(package)_sha256_hash=90dda8c7563ca6cd4a83e23b3c66dbbea89603a1675bfdb852897c2c9
define $(package)_set_vars
$(package)_build_opts=CC="$($(package)_cc)"
-$(package)_build_opts_darwin=OS=Darwin LIBTOOL="$($(package)_libtool)"
+$(package)_build_opts_darwin=LIBTOOL="$($(package)_libtool)"
$(package)_build_opts_mingw32=-f Makefile.mingw
$(package)_build_env+=CFLAGS="$($(package)_cflags) $($(package)_cppflags)" AR="$($(package)_ar)"
-$(package)_build_env+=CFLAGS=-D_DARWIN_C_SOURCE
endef
define $(package)_preprocess_cmds