From 79ba4866ecc08487268e43e52ddceae6b89fbe5a Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Wed, 19 Feb 2020 16:17:47 +0100 Subject: [PATCH] build: unbreak if CFLAGS is defined in make's env Don't let make pollute subprojects' environment with our own `CFLAGS`, which are quite strict because that breaks at least libwally-core: ```sh $ ./configure ... $ CFLAGS=whatever_this_is_irrelevant make ... cd external/libwally-core-build && ../libwally-core/configure ... ... CFLAGS = -DBINTOPKGLIBEXECDIR="\"../libexec/c-lightning\"" -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror -std=gnu11 -g -fstack-protector -I ccan -I external/libwally-core/include/ -I external/libwally-core/src/secp256k1/include/ -I external/jsmn/ -I external/libbacktrace/ -I external/libbacktrace-build -I . -I/usr/local/include -DCCAN_TAKE_DEBUG=1 -DCCAN_TAL_DEBUG=1 -DCCAN_JSON_OUT_DEBUG=1 -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS -DBUILD_ELEMENTS=1 -W -std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings -fvisibility=hidden -O3 ... In file included from ../../libwally-core/src/base58.c:4: ../../libwally-core/src/ccan/ccan/endian/endian.h:71:24: error: unused function 'bswap_16' [-Werror,-Wunused-function] static inline uint16_t bswap_16(uint16_t val) ^ ``` If `CFLAGS` is set in its environment, then `make` would export our own `CFLAGS` to any subprocesses it starts, which means subprojects would inherit our `CFLAGS="-Wall -Werror"` in their environments. GNU Make's documentation: https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion > make exports a variable only if it is either defined in the environment initially... Example: ```make A = x default: echo $$A ``` then: ```sh $ make # prints nothing, A is not exported to the subprocess $ A=y make # prints "x", our A=x is exported to the subprocess ``` Changelog-None --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index db4d3e587..096d582a7 100644 --- a/Makefile +++ b/Makefile @@ -192,6 +192,12 @@ ALL_PROGRAMS = CPPFLAGS += -DBINTOPKGLIBEXECDIR="\"$(shell sh tools/rel.sh $(bindir) $(pkglibexecdir))\"" CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . -I/usr/local/include $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) -DBUILD_ELEMENTS=1 +# If CFLAGS is already set in the environment of make (to whatever value, it +# does not matter) then it would export it to subprocesses with the above value +# we set, including CWARNFLAGS which by default contains -Wall -Werror. This +# breaks at least libwally-core which tries to switch off some warnings with +# -Wno-whatever. So, tell make to not export our CFLAGS to subprocesses. +unexport CFLAGS # We can get configurator to run a different compile cmd to cross-configure. CONFIGURATOR_CC := $(CC)