]> granicus.if.org Git - esp-idf/commitdiff
Add --warn-undefined-variables to MAKEFLAGS
authorDeomid Ryabkov <rojer@cesanta.com>
Sat, 3 Dec 2016 22:11:22 +0000 (22:11 +0000)
committerAngus Gratton <gus@projectgus.com>
Tue, 5 Sep 2017 06:10:46 +0000 (16:10 +1000)
Fix warnings where undefined vars are used.

Make Kconfig emit "FOO=" for unset bool options
To ensure make variables are always defined, even if empty.

When writing auto.conf, include symbols disabled by dependency to make sure all make variables are always defined.

Fixes espressif/esp-idf#137

Cherry-picked from https://github.com/espressif/esp-idf/pull/138

21 files changed:
components/app_trace/component.mk
components/aws_iot/component.mk
components/bootloader/Makefile.projbuild
components/bootloader/subproject/main/component.mk
components/bootloader_support/component.mk
components/bt/component.mk
components/esp32/Kconfig
components/esp32/component.mk
components/esptool_py/Makefile.projbuild
components/freertos/component.mk
components/lwip/component.mk
components/newlib/component.mk
examples/protocols/aws_iot/subscribe_publish/main/component.mk
examples/protocols/aws_iot/thing_shadow/main/component.mk
make/common.mk
make/component_wrapper.mk
make/project.mk
make/project_config.mk
tools/kconfig/.gitignore
tools/kconfig/Makefile
tools/kconfig/confdata.c

index 235f19831d2fb7fc346c4dae43bd6e2bc49ea20f..7a1f39759df31237733077ecd1d4d44337826a4e 100644 (file)
@@ -8,7 +8,7 @@ COMPONENT_ADD_INCLUDEDIRS := include
 
 COMPONENT_ADD_LDFLAGS := -lapp_trace 
 
-ifdef CONFIG_SYSVIEW_ENABLE
+ifeq ("$(CONFIG_SYSVIEW_ENABLE)","y")
 #COMPONENT_EXTRA_INCLUDES := freertos
 
 COMPONENT_ADD_INCLUDEDIRS += \
index cd1b15eeead66819a7c7c4f747e8af740f9d74f4..aab25a71f3d89bca090696677151a6dd5cd01611 100644 (file)
@@ -2,7 +2,7 @@
 # Component Makefile
 #
 
-ifdef CONFIG_AWS_IOT_SDK
+ifeq ("$(CONFIG_AWS_IOT_SDK)","y")
 
 COMPONENT_ADD_INCLUDEDIRS := include aws-iot-device-sdk-embedded-C/include
 
index 7a35dc8ad172181a3259597eb95943ebd8225d45..db7f4f0a24850040eb359351b89ed8d0fda423ec 100644 (file)
@@ -13,6 +13,7 @@ BOOTLOADER_BUILD_DIR=$(abspath $(BUILD_DIR_BASE)/bootloader)
 BOOTLOADER_BIN=$(BOOTLOADER_BUILD_DIR)/bootloader.bin
 
 # signing key path is resolved relative to the project directory
+CONFIG_SECURE_BOOT_SIGNING_KEY ?=
 SECURE_BOOT_SIGNING_KEY=$(abspath $(call dequote,$(CONFIG_SECURE_BOOT_SIGNING_KEY)))
 export SECURE_BOOT_SIGNING_KEY  # used by bootloader_support component
 
@@ -107,7 +108,7 @@ $(BOOTLOADER_DIGEST_BIN): $(BOOTLOADER_BIN) $(SECURE_BOOTLOADER_KEY)
        @echo "DIGEST $(notdir $@)"
        $(Q) $(ESPSECUREPY) digest_secure_bootloader -k $(SECURE_BOOTLOADER_KEY) -o $@ $<
 
-else
+else # CONFIG_SECURE_BOOT_ENABLED && !CONFIG_SECURE_BOOTLOADER_REFLASHABLE && !CONFIG_SECURE_BOOTLOADER_ONE_TIME_FLASH
 bootloader:
        @echo "Invalid bootloader target: bad sdkconfig?"
        @exit 1
index a54fe30a9046d9249fc9d44fcb8ee723e37bf0ec..633051cb6392a980d641b32b8a7a7364f47d81e7 100644 (file)
@@ -12,7 +12,7 @@ LINKER_SCRIPTS := \
        $(IDF_PATH)/components/esp32/ld/esp32.peripherals.ld \
        esp32.bootloader.rom.ld
 
-ifndef CONFIG_SPI_FLASH_ROM_DRIVER_PATCH
+ifneq ("$(CONFIG_SPI_FLASH_ROM_DRIVER_PATCH)","y")
 LINKER_SCRIPTS += $(IDF_PATH)/components/esp32/ld/esp32.rom.spiflash.ld
 endif
 
index 6db815afffd32b3d09c660a438027dadb6ca3951..8ad21d3b9b704757919daf7933d86152335148b3 100755 (executable)
@@ -12,12 +12,12 @@ COMPONENT_SRCDIRS := src
 #
 # Secure boot signing key support
 #
-ifdef CONFIG_SECURE_BOOT_ENABLED
+ifneq ("$(CONFIG_SECURE_BOOT_ENABLED)","")
 
 # this path is created relative to the component build directory
 SECURE_BOOT_VERIFICATION_KEY := $(abspath signature_verification_key.bin)
 
-ifdef CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES
+ifneq ("$(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)","")
 # verification key derived from signing key.
 $(SECURE_BOOT_VERIFICATION_KEY): $(SECURE_BOOT_SIGNING_KEY) $(SDKCONFIG_MAKEFILE)
        $(ESPSECUREPY) extract_public_key --keyfile $< $@
index 8f6ce29d518b6a460d5afaff5bbc661362828475..86fddc8c11ba5ef4c5a15d39295c0343ee1d30d8 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Component Makefile
 #
-ifdef CONFIG_BT_ENABLED
+ifneq ("$(CONFIG_BT_ENABLED)","")
 
 COMPONENT_SRCDIRS := .
 
@@ -20,7 +20,7 @@ COMPONENT_SUBMODULES += lib
 endif
 
 
-ifdef CONFIG_BLUEDROID_ENABLED
+ifeq ("$(CONFIG_BLUEDROID_ENABLED)","y")
 
 COMPONENT_ADD_INCLUDEDIRS +=   bluedroid/bta/include                   \
                                bluedroid/bta/sys/include               \
index 86932c3bf83a04ccda97cc654e2ec636227dad5c..837a73afade91f63a9c58d89dc4f6dcfeeea5a68 100644 (file)
@@ -846,7 +846,7 @@ config ESP32_WIFI_NVS_ENABLED
 
 endmenu  # Wi-Fi
 
-menu Phy
+menu PHY
 
 config ESP32_PHY_CALIBRATION_AND_DATA_STORAGE
     bool "Do phy calibration and store calibration data in NVS"
index a8cd8606c723425a1b4bafc163e1e4fd7641464e..a151f81291c38139d3a575b8e2f72528cbe4c83c 100644 (file)
@@ -3,8 +3,9 @@
 #
 
 COMPONENT_SRCDIRS := . hwcrypto
-ifndef CONFIG_NO_BLOBS
-LIBS := core rtc net80211 pp wpa smartconfig coexist wps wpa2 phy
+LIBS ?=
+ifneq ("$(CONFIG_NO_BLOBS)","y")
+LIBS += core rtc net80211 pp wpa smartconfig coexist wps wpa2 phy
 endif
 
 #Linker scripts used to link the final application.
@@ -22,7 +23,7 @@ ifeq ("$(CONFIG_NEWLIB_NANO_FORMAT)","y")
 LINKER_SCRIPTS += esp32.rom.nanofmt.ld
 endif
 
-ifndef CONFIG_SPI_FLASH_ROM_DRIVER_PATCH
+ifneq ("$(CONFIG_SPI_FLASH_ROM_DRIVER_PATCH)","y")
 LINKER_SCRIPTS += esp32.rom.spiflash.ld
 endif
 
index b35dc11126297f2681363525bfbb1109c174d904..dce6b0af2828f8a017fc5e1230cf58d98e5ed4e4 100644 (file)
@@ -6,6 +6,8 @@ ESPFLASHMODE ?= $(CONFIG_ESPTOOLPY_FLASHMODE)
 ESPFLASHFREQ ?= $(CONFIG_ESPTOOLPY_FLASHFREQ)
 ESPFLASHSIZE ?= $(CONFIG_ESPTOOLPY_FLASHSIZE)
 
+CONFIG_ESPTOOLPY_COMPRESSED ?=
+
 PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
 
 # two commands that can be used from other components
index 4496355a0ea874aaa3ba5ea1b29c19c0655b9feb..88be5b8f6ddd9182887ade0b356b64949ab47a10 100644 (file)
@@ -6,6 +6,6 @@ COMPONENT_ADD_LDFLAGS += -Wl,--undefined=uxTopUsedPriority
 COMPONENT_ADD_INCLUDEDIRS := include
 COMPONENT_PRIV_INCLUDEDIRS := include/freertos
 
-#ifdef CONFIG_SYSVIEW_ENABLE
+#ifeq ("$(CONFIG_SYSVIEW_ENABLE)","y")
 #COMPONENT_ADD_INCLUDEDIRS += app_trace
 #endif
index 204e94fa72f178e0088a8f251a5755c81fa47f43..921cc591665a1451cf1726036341f61d07ca7165 100644 (file)
@@ -8,8 +8,10 @@ COMPONENT_ADD_INCLUDEDIRS := \
        include/lwip/posix \
        apps/ping
 
-ifdef CONFIG_PPP_SUPPORT
+ifeq ("$(CONFIG_PPP_SUPPORT)","y")
 LWIP_PPP_DIRS := netif/ppp/polarssl netif/ppp 
+else
+LWIP_PPP_DIRS :=
 endif
 
 COMPONENT_SRCDIRS := \
index 0bf6275bf2ff0d77093c1c98ddb8f599a3b443bf..ce5799dfb0e0ea34b6bc7011821f6f19ecba8358 100644 (file)
@@ -1,5 +1,4 @@
 
-
 ifeq ("$(CONFIG_SPIRAM_CACHE_WORKAROUND)","y")
 LIBC_PATH := $(COMPONENT_PATH)/lib/libc-psram-workaround.a
 LIBM_PATH := $(COMPONENT_PATH)/lib/libm-psram-workaround.a
@@ -14,7 +13,7 @@ endif
 
 LIBM_PATH := $(COMPONENT_PATH)/lib/libm.a
 
-endif
+endif  # CONFIG_SPIRAM_CACHE_WORKAROUND
 
 COMPONENT_ADD_LDFLAGS := $(LIBC_PATH) $(LIBM_PATH) -lnewlib
 
index bc11b6393322172f089b9bb9416089e02c48f743..1ed56547cb1afc8876669eb205ac743c35bd975a 100644 (file)
@@ -2,7 +2,7 @@
 # Main Makefile. This is basically the same as a component makefile.
 #
 
-ifdef CONFIG_EXAMPLE_EMBEDDED_CERTS
+ifeq ("$(CONFIG_EXAMPLE_EMBEDDED_CERTS)","y")
 # Certificate files. certificate.pem.crt & private.pem.key must be downloaded
 # from AWS, see README for details.
 COMPONENT_EMBED_TXTFILES := certs/aws-root-ca.pem certs/certificate.pem.crt certs/private.pem.key
index bc11b6393322172f089b9bb9416089e02c48f743..1ed56547cb1afc8876669eb205ac743c35bd975a 100644 (file)
@@ -2,7 +2,7 @@
 # Main Makefile. This is basically the same as a component makefile.
 #
 
-ifdef CONFIG_EXAMPLE_EMBEDDED_CERTS
+ifeq ("$(CONFIG_EXAMPLE_EMBEDDED_CERTS)","y")
 # Certificate files. certificate.pem.crt & private.pem.key must be downloaded
 # from AWS, see README for details.
 COMPONENT_EMBED_TXTFILES := certs/aws-root-ca.pem certs/certificate.pem.crt certs/private.pem.key
index 82652e63d75430a687bb507a6888b5c466357d87..358c8808890faf8af2c5101c563acd09f673cc84 100644 (file)
@@ -19,6 +19,7 @@ endif
 #
 # if V=1, $(summary) does nothing and $(details) will echo extra details
 # if V is unset or not 1, $(summary) echoes a summary and $(details) does nothing
+VERBOSE ?=
 V ?= $(VERBOSE)
 ifeq ("$(V)","1")
 summary := @true
@@ -28,7 +29,7 @@ summary := @echo
 details := @true
 
 # disable echoing of commands, directory names
-MAKEFLAGS += --silent
+MAKEFLAGS += --silent --warn-undefined-variables
 endif
 
 # General make utilities
index f9bdec672f64bd704626df927ec6f527484ce14d..6184668777023445b224af7ce97b29194a9ed039 100644 (file)
@@ -63,6 +63,13 @@ define compile_only_if_not
 $(eval $(if $(1), $(call compile_exclude, $(2)), $(call compile_include, $(2))))
 endef
 
+COMPONENT_ADD_LINKER_DEPS ?=
+COMPONENT_DEPENDS ?=
+COMPONENT_EXTRA_CLEAN ?=
+COMPONENT_EXTRA_INCLUDES ?=
+COMPONENT_OBJEXCLUDE ?=
+COMPONENT_OBJINCLUDE ?=
+COMPONENT_SUBMODULES ?=
 
 ################################################################################
 # 2) Include the component.mk for the specific component (COMPONENT_MAKEFILE) to
@@ -105,6 +112,7 @@ COMPONENT_EMBED_OBJS ?= $(addsuffix .bin.o,$(notdir $(COMPONENT_EMBED_FILES))) $
 # variable with all the include dirs from all the components in random order. This
 # means we can accidentally grab a header from another component before grabbing our own.
 # To make sure that does not happen, re-order the includes so ours come first.
+COMPONENT_PRIV_INCLUDEDIRS ?=
 OWN_INCLUDES:=$(abspath $(addprefix $(COMPONENT_PATH)/,$(COMPONENT_PRIV_INCLUDEDIRS) $(COMPONENT_ADD_INCLUDEDIRS)))
 COMPONENT_INCLUDES := $(OWN_INCLUDES) $(filter-out $(OWN_INCLUDES),$(COMPONENT_INCLUDES))
 
@@ -139,7 +147,7 @@ endef
 # component-specific feature, please don't! What you want is a
 # Makefile.projbuild for your component (see docs/build-system.rst for
 # more.)
-component_project_vars.mk::
+component_project_vars.mk:
        $(details) "Building component project variables list $(abspath $@)"
        @echo '# Automatically generated build file. Do not edit.' > $@
        @echo 'COMPONENT_INCLUDES += $(call MakeVariablePath,$(addprefix $(COMPONENT_PATH)/,$(COMPONENT_ADD_INCLUDEDIRS)))' >> $@
@@ -178,6 +186,8 @@ clean:
        rm -f $(CLEAN_FILES)
 endif
 
+DEBUG_FLAGS ?= -ggdb
+
 # Include all dependency files already generated
 -include $(COMPONENT_OBJS:.o=.d)
 
index d22a1b1dd00e7ebd9259b79d6e58b8da212fc2f2..31635d41d05acfea333a05b118091642473965c8 100644 (file)
@@ -56,6 +56,7 @@ $(error esp-idf build system doesn't support running 'clean' targets along with
 endif
 endif
 
+OS ?=
 
 # make IDF_PATH a "real" absolute path
 # * works around the case where a shell character is embedded in the environment variable value.
@@ -113,6 +114,7 @@ export BUILD_DIR_BASE
 # or the directory contains subdirectories which are components.)
 # The project Makefile can override these component dirs, or add extras via EXTRA_COMPONENT_DIRS
 ifndef COMPONENT_DIRS
+EXTRA_COMPONENT_DIRS ?=
 COMPONENT_DIRS := $(PROJECT_PATH)/components $(EXTRA_COMPONENT_DIRS) $(IDF_PATH)/components $(PROJECT_PATH)/main
 endif
 export COMPONENT_DIRS
@@ -146,15 +148,18 @@ export COMPONENTS
 COMPONENT_PATHS := $(foreach comp,$(COMPONENTS),$(firstword $(foreach cd,$(COMPONENT_DIRS),$(wildcard $(dir $(cd))$(comp) $(cd)/$(comp)))))
 
 # If TESTS_ALL set to 1, set TEST_COMPONENTS_LIST to all components
+ifdef TESTS_ALL
 ifeq ($(TESTS_ALL),1)
 TEST_COMPONENTS_LIST := $(COMPONENTS)
 else
 # otherwise, use TEST_COMPONENTS
 TEST_COMPONENTS_LIST := $(TEST_COMPONENTS)
 endif
+else
+TEST_COMPONENTS_LIST :=
+endif
 TEST_COMPONENT_PATHS := $(foreach comp,$(TEST_COMPONENTS_LIST),$(firstword $(foreach dir,$(COMPONENT_DIRS),$(wildcard $(dir)/$(comp)/test))))
-TEST_COMPONENT_NAMES :=  $(foreach comp,$(TEST_COMPONENT_PATHS),$(lastword $(subst /, ,$(dir $(comp))))_test)
-
+TEST_COMPONENT_NAMES := $(foreach comp,$(TEST_COMPONENT_PATHS),$(lastword $(subst /, ,$(dir $(comp))))_test)
 
 # Initialise project-wide variables which can be added to by
 # each component.
@@ -189,9 +194,9 @@ export COMPONENT_INCLUDES
 include $(IDF_PATH)/make/common.mk
 
 all:
-ifdef CONFIG_SECURE_BOOT_ENABLED
+ifneq ("$(CONFIG_SECURE_BOOT_ENABLED)","")
        @echo "(Secure boot enabled, so bootloader not flashed automatically. See 'make bootloader' output)"
-ifndef CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES
+ifeq ("$(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)","")
        @echo "App built but not signed. Sign app & partition data before flashing, via espsecure.py:"
        @echo "espsecure.py sign_data --keyfile KEYFILE $(APP_BIN)"
        @echo "espsecure.py sign_data --keyfile KEYFILE $(PARTITION_TABLE_BIN)"
@@ -206,6 +211,7 @@ endif
 IDF_VER := $(shell cd ${IDF_PATH} && git describe --always --tags --dirty)
 
 # Set default LDFLAGS
+EXTRA_LDFLAGS ?=
 LDFLAGS ?= -nostdlib \
        -u call_user_start_cpu0 \
        $(EXTRA_LDFLAGS) \
@@ -228,6 +234,8 @@ LDFLAGS ?= -nostdlib \
 
 # CPPFLAGS used by C preprocessor
 # If any flags are defined in application Makefile, add them at the end. 
+CPPFLAGS ?=
+EXTRA_CPPFLAGS ?=
 CPPFLAGS := -DESP_PLATFORM -D IDF_VER=\"$(IDF_VER)\" -MMD -MP $(CPPFLAGS) $(EXTRA_CPPFLAGS)
 
 # Warnings-related flags relevant both for C and C++
@@ -263,6 +271,8 @@ DEBUG_FLAGS ?= -ggdb
 
 # List of flags to pass to C compiler
 # If any flags are defined in application Makefile, add them at the end.
+CFLAGS ?=
+EXTRA_CFLAGS ?=
 CFLAGS := $(strip \
        -std=gnu99 \
        $(OPTIMIZATION_FLAGS) $(DEBUG_FLAGS) \
@@ -273,6 +283,8 @@ CFLAGS := $(strip \
 
 # List of flags to pass to C++ compiler
 # If any flags are defined in application Makefile, add them at the end.
+CXXFLAGS ?=
+EXTRA_CXXFLAGS ?=
 CXXFLAGS := $(strip \
        -std=gnu++11 \
        -fno-exceptions \
@@ -289,8 +301,16 @@ export CFLAGS CPPFLAGS CXXFLAGS
 HOSTCC := $(CC)
 HOSTLD := $(LD)
 HOSTAR := $(AR)
+ifdef OBJCOPY
 HOSTOBJCOPY := $(OBJCOPY)
+else
+HOSTOBJCOPY := objcopy
+endif
+ifdef SIZE
 HOSTSIZE := $(SIZE)
+else
+HOSTSIZE := size
+endif
 export HOSTCC HOSTLD HOSTAR HOSTOBJCOPY SIZE
 
 # Set target compiler. Defaults to whatever the user has
@@ -333,6 +353,7 @@ endif
 #
 # also depends on additional dependencies (linker scripts & binary libraries)
 # stored in COMPONENT_LINKER_DEPS, built via component.mk files' COMPONENT_ADD_LINKER_DEPS variable
+COMPONENT_LINKER_DEPS ?=
 $(APP_ELF): $(foreach libcomp,$(COMPONENT_LIBRARIES),$(BUILD_DIR_BASE)/$(libcomp)/lib$(libcomp).a) $(COMPONENT_LINKER_DEPS) $(COMPONENT_PROJECT_VARS)
        $(summary) LD $(patsubst $(PWD)/%,%,$@)
        $(CC) $(LDFLAGS) -o $@ -Wl,-Map=$(APP_MAP)
@@ -434,7 +455,7 @@ check-submodules: $(IDF_PATH)/$(1)/.git
 $(IDF_PATH)/$(1)/.git:
        @echo "WARNING: Missing submodule $(1)..."
        [ -e ${IDF_PATH}/.git ] || ( echo "ERROR: esp-idf must be cloned from git to work."; exit 1)
-       [ -x $(which git) ] || ( echo "ERROR: Need to run 'git submodule init $(1)' in esp-idf root directory."; exit 1)
+       [ -x $$(which git) ] || ( echo "ERROR: Need to run 'git submodule init $(1)' in esp-idf root directory."; exit 1)
        @echo "Attempting 'git submodule update --init $(1)' in esp-idf root directory..."
        cd ${IDF_PATH} && git submodule update --init $(1)
 
index c92d5292efed09a593779b675ee6de2b58f7af5b..0a212cd287c966322bd5d952b52a6b99f49614dc 100644 (file)
@@ -16,8 +16,8 @@ SDKCONFIG ?= $(PROJECT_PATH)/sdkconfig
 SDKCONFIG_DEFAULTS ?= $(PROJECT_PATH)/sdkconfig.defaults
 
 # reset MAKEFLAGS as the menuconfig makefile uses implicit compile rules
-$(KCONFIG_TOOL_DIR)/mconf $(KCONFIG_TOOL_DIR)/conf:
-       MAKEFLAGS=$(ORIGINAL_MAKEFLAGS) CC=$(HOSTCC) LD=$(HOSTLD) \
+$(KCONFIG_TOOL_DIR)/mconf $(KCONFIG_TOOL_DIR)/conf: $(wildcard $(KCONFIG_TOOL_DIR)/*.c)
+       MAKEFLAGS="" CC=$(HOSTCC) LD=$(HOSTLD) \
        $(MAKE) -C $(KCONFIG_TOOL_DIR)
 
 ifeq ("$(wildcard $(SDKCONFIG))","")
@@ -42,7 +42,7 @@ define RunConf
        $(KCONFIG_TOOL_DIR)/$1 $(IDF_PATH)/Kconfig
 endef
 
-ifeq ("$(MAKE_RESTARTS)","")
+ifndef MAKE_RESTARTS
 # menuconfig, defconfig and "GENCONFIG" configuration generation only
 # ever run on the first make pass, subsequent passes don't run these
 # (make often wants to re-run them as the conf tool can regenerate the
@@ -92,6 +92,6 @@ endif
 
 .PHONY: config-clean defconfig menuconfig
 config-clean:
-       $(summary RM CONFIG)
-       $(MAKE) -C $(KCONFIG_TOOL_DIR) clean
+       $(summary) RM CONFIG
+       MAKEFLAGS="" $(MAKE) -C $(KCONFIG_TOOL_DIR) clean
        rm -rf $(BUILD_DIR_BASE)/include/config $(BUILD_DIR_BASE)/include/sdkconfig.h
index 977c274ce30b15b83f1e78bd2f82a888a342cd5f..1950c8cb1b8fe05f0974ab6f967dce7bcecfd377 100644 (file)
@@ -2,6 +2,7 @@
 # Generated files
 #
 config*
+*.d
 *.lex.c
 *.tab.c
 *.tab.h
index 9680b741097ad174e696ba117bb52eee7f6ac2b1..c421365f2e29ae3b06c4eef7802c8bd4b52edc38 100644 (file)
@@ -145,7 +145,7 @@ check-lxdialog  := lxdialog/check-lxdialog.sh
 # Use recursively expanded variables so we do not call gcc unless
 # we really need to do so. (Do not call gcc as part of make mrproper)
 CFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
-                    -DLOCALE
+                    -DLOCALE -MD
 
 # ===========================================================================
 # Shared Makefile for the various kconfig executables:
@@ -173,7 +173,7 @@ gconf-objs  := gconf.o zconf.tab.o
 
 hostprogs-y := conf nconf mconf kxgettext qconf gconf
 
-clean-files    := qconf.moc .tmp_qtcheck .tmp_gtkcheck
+clean-files    := qconf.moc .tmp_qtcheck .tmp_gtkcheck *.d
 clean-files    += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
 clean-files += $(conf-objs) $(mconf-objs) conf mconf $(lxdialog)
 
@@ -309,3 +309,6 @@ zconf.tab.c: zconf.y
 
 clean: 
        rm -f $(clean-files)
+
+-include $(wildcard *.d)
+-include $(wildcard lxdialog/*.d)
index 1e3d1f35b2f62cd024b780ea31b8cb10d6f92d9b..2a8d5b54d65c501585971f2bb238530de63f6ec7 100644 (file)
@@ -141,7 +141,7 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
                        sym->flags |= def_flags;
                        break;
                }
-               if (p[0] == 'n') {
+               if (p[0] == 'n' || p[0] == '\0') {
                        sym->def[def].tri = no;
                        sym->flags |= def_flags;
                        break;
@@ -490,12 +490,7 @@ kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
        case S_BOOLEAN:
        case S_TRISTATE:
                if (*value == 'n') {
-                       bool skip_unset = (arg != NULL);
-
-                       if (!skip_unset)
-                               fprintf(fp, "# %s%s is not set\n",
-                                   CONFIG_, sym->name);
-                       return;
+                       value = "";
                }
                break;
        default:
@@ -986,17 +981,21 @@ int conf_write_autoconf(void)
 
        conf_write_heading(out_h, &header_printer_cb, NULL);
 
+       /* write symbols to auto.conf, tristate and header files */
        for_all_symbols(i, sym) {
-               sym_calc_value(sym);
-               if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
-                       continue;
-
-               /* write symbol to auto.conf, tristate and header files */
-               conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
-
-               conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
-
-               conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
+               if (!sym->name) continue;
+               if ((sym->flags & SYMBOL_WRITE) ||
+                   /*
+                    * If the symbol is disabled by dependency we still want it in auto.conf
+                    * so that all possible variables are always defined.
+                    */
+                   (sym->dir_dep.expr != NULL && sym->dir_dep.tri == no)) {
+                       conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
+               }
+               if (sym->flags & SYMBOL_WRITE) {
+                       conf_write_symbol(tristate, sym, &tristate_printer_cb, NULL);
+                       conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
+               }
        }
        fclose(out);
        fclose(tristate);