build: add option to warn on recursive dependency
authorEneas U de Queiroz <cotequeiroz@gmail.com>
Tue, 7 Apr 2020 20:07:24 +0000 (17:07 -0300)
committerPetr Štetiar <ynezz@true.cz>
Thu, 9 Apr 2020 10:51:10 +0000 (12:51 +0200)
This addes the option to treat recursive dependencies as warnings
instead of errors, by running make with WARN_RECURSIVE_DEP=1.

Note that the script/config targets will not get rebuilt when you add or
remove WARN_RECURSIVE_DEP while running make.  One must run
'make config-clean' before building config with a different setting.

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
include/toplevel.mk
scripts/config/README
scripts/config/symbol.c

index 2965f75c7cd7e66fef5b7562a77f134ff6ddb18f..def80503dd911d209d55bfa7a79fc3dd83f79d1c 100644 (file)
@@ -102,7 +102,7 @@ prepare-tmpinfo: FORCE
 ifneq ($(DISTRO_PKG_CONFIG),)
 scripts/config/%onf: export PATH:=$(dir $(DISTRO_PKG_CONFIG)):$(PATH)
 endif
-scripts/config/%onf: CFLAGS+= -O2
+scripts/config/%onf: CFLAGS+= -O2 $(if $(WARN_RECURSIVE_DEP),-DWARN_RECURSIVE_DEP)
 scripts/config/%onf:
        @$(_SINGLE)$(SUBMAKE) -s -C scripts/config $(notdir $@) CC="$(HOSTCC_WRAPPER)"
 
index ac5f094ff2933971a781acb78fa5f874778247c0..81243e8016dd888c3e80c67262d625bde701e3ce 100644 (file)
@@ -16,6 +16,10 @@ OpenWrt Buildroot:
  - reverted an upstream change that avoids writing symbols that are not
    visible to .config, which breaks OpenWrt busybox's '.config' generation
    logic.
+ - add a compilation option (-DWARN_RECURSIVE_DEP) to treat recursive deps
+   as a warning, avoiding a complete build failure because of unrelated or
+   minor recursive deps, or making a scrict check before commiting a change
+   that may cause one.
  - use pre-built *.lex.c *.tab.[ch] files by default, to avoid depending on
    flex & bison.  Rebuild/remove these files only if running make with
    BUILD_SHIPPED_FILES defined
index b1dd9be29d541217c931c61492810326e2e82d68..5c6f54031437a0d64b98ac6942d6892550c0b753 100644 (file)
@@ -1250,6 +1250,11 @@ struct symbol *sym_check_deps(struct symbol *sym)
                sym->flags &= ~SYMBOL_CHECK;
        }
 
+#ifdef WARN_RECURSIVE_DEP
+       if (sym2 && sym2 == sym)
+               sym2 = NULL;
+#endif
+
        return sym2;
 }