From 50b1aaeffc311e3a0b6a1c16d2a6a57517f83fb6 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 14 Jun 2019 15:52:01 +0200 Subject: [PATCH] BUILD: makefile: clarify the "help" output and list options The list of enable and disabled build options now appears separately at the end of "make help". This is convenient to know what is enabled by default on a given target. For example : $ make help TARGET=linux2628 Enabled features for TARGET 'linux2628' (disable with 'USE_xxx=') : EPOLL NETFILTER POLL THREAD TPROXY LINUX_TPROXY LINUX_SPLICE LIBCRYPT CRYPT_H FUTEX ACCEPT4 CPU_AFFINITY DL RT PRCTL THREAD_DUMP Disabled features for TARGET 'linux2628' (enable with 'USE_xxx=1') : KQUEUE MY_EPOLL MY_SPLICE PCRE PCRE_JIT PCRE2 PCRE2_JIT PRIVATE_CACHE PTHREAD_PSHARED REGPARM STATIC_PCRE STATIC_PCRE2 VSYSCALL GETADDRINFO OPENSSL LUA MY_ACCEPT4 ZLIB SLZ TFO NS DEVICEATLAS 51DEGREES WURFL SYSTEMD OBSOLETE_LINKER EVPORTS --- Makefile | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5d838679c..0e123e937 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ # This GNU Makefile supports different OS and CPU combinations. # # You should use it this way : -# [g]make TARGET=os ARCH=arch CPU=cpu USE_xxx=1 ... +# [g]make TARGET=os [ARCH=arch] [CPU=cpu] USE_xxx=1 ... +# +# When in doubt, invoke help, possibly with a known target : +# [g]make help +# [g]make help TARGET=linux # # By default the detailed commands are hidden for a cleaner output, but you may # see them by appending "V=1" to the make command. @@ -54,7 +58,8 @@ # USE_THREAD_DUMP : use the more advanced thread state dump system. Automatic. # # Options can be forced by specifying "USE_xxx=1" or can be disabled by using -# "USE_xxx=" (empty string). +# "USE_xxx=" (empty string). The list of enabled and disabled options for a +# given TARGET is enumerated at the end of "make help". # # Variables useful for packagers : # CC is set to "gcc" by default and is used for compilation only. @@ -812,7 +817,19 @@ INCLUDES = $(wildcard include/*/*.h ebtree/*.h) DEP = $(INCLUDES) .build_opts help: - $(Q)sed -ne "/^[^#]*$$/q;s/^#\(.*\)/\1/p" Makefile + $(Q)sed -ne "/^[^#]*$$/q;s/^# \?\(.*\)/\1/p" Makefile + $(Q)echo; \ + if [ -n "$(TARGET)" ]; then \ + echo -n "Current TARGET: $(TARGET)"; \ + if [ -z "$(set_target_defaults)" ]; then echo -n " (custom target)";fi; \ + else \ + echo -n "TARGET not set."; \ + fi; \ + echo + $(Q)echo;echo "Enabled features for TARGET '$(TARGET)' (disable with 'USE_xxx=') :" + $(Q)set -- $(foreach opt,$(patsubst USE_%,%,$(use_opts)),$(if $(USE_$(opt)),$(opt),)); echo " $$*" | (fmt || cat) 2>/dev/null + $(Q)echo;echo "Disabled features for TARGET '$(TARGET)' (enable with 'USE_xxx=1') :" + $(Q)set -- $(foreach opt,$(patsubst USE_%,%,$(use_opts)),$(if $(USE_$(opt)),,$(opt))); echo " $$*" | (fmt || cat) 2>/dev/null # Used only to force a rebuild if some build options change build_opts = $(shell rm -f .build_opts.new; echo \'$(TARGET) $(BUILD_OPTIONS) $(VERBOSE_CFLAGS)\' > .build_opts.new; if cmp -s .build_opts .build_opts.new; then rm -f .build_opts.new; else mv -f .build_opts.new .build_opts; fi)