diff --git a/Makefile.features b/Makefile.features index 4008a32b7c..b5990e80e4 100644 --- a/Makefile.features +++ b/Makefile.features @@ -1,3 +1,11 @@ # Process FEATURES variables include $(RIOTBOARD)/$(BOARD)/Makefile.features + + +# Resolve FEATURES_ variables +# Their value will only be complete after resolving dependencies + +# Features that are required by the application but not provided by the BSP +# Having features missing may case the build to fail. +FEATURES_MISSING = $(sort $(filter-out $(FEATURES_PROVIDED),$(FEATURES_REQUIRED))) diff --git a/Makefile.include b/Makefile.include index 8d31e2b880..3457cb5549 100644 --- a/Makefile.include +++ b/Makefile.include @@ -622,9 +622,9 @@ ifneq (, $(filter all flash, $(if $(MAKECMDGOALS), $(MAKECMDGOALS), all))) endif # Test if all feature requirements were met by the selected board. - ifneq (,$(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))) + ifneq (,$(FEATURES_MISSING)) $(shell $(COLOR_ECHO) "$(COLOR_RED)There are unsatisfied feature requirements:$(COLOR_RESET)"\ - "$(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED)))" 1>&2) + "$(FEATURES_MISSING)" 1>&2) EXPECT_ERRORS := 1 endif diff --git a/makefiles/info-global.inc.mk b/makefiles/info-global.inc.mk index 9895106c61..724be08f89 100644 --- a/makefiles/info-global.inc.mk +++ b/makefiles/info-global.inc.mk @@ -14,7 +14,6 @@ define board_missing_features DISABLE_MODULE := $(DISABLE_MODULE_GLOBAL) FEATURES_REQUIRED := $(FEATURES_REQUIRED_GLOBAL) FEATURES_OPTIONAL := $(FEATURES_OPTIONAL_GLOBAL) - FEATURES_MISSING := FEATURES_PROVIDED := include $(RIOTBASE)/Makefile.features @@ -28,8 +27,7 @@ define board_missing_features include $(RIOTBASE)/Makefile.dep - FEATURES_MISSING := $$(sort $$(filter-out $$(FEATURES_PROVIDED), $$(FEATURES_REQUIRED))) - ifneq (, $$(FEATURES_MISSING)) + ifneq (,$$(FEATURES_MISSING)) BOARDS_FEATURES_MISSING += "$(1) $$(FEATURES_MISSING)" BOARDS_WITH_MISSING_FEATURES += $(1) endif diff --git a/makefiles/info.inc.mk b/makefiles/info.inc.mk index 8ccd6cfeb5..5c7ec9440a 100644 --- a/makefiles/info.inc.mk +++ b/makefiles/info.inc.mk @@ -57,7 +57,7 @@ info-build: @echo 'FEATURES_MISSING (incl. optional features):' @echo ' $(or $(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED) $(FEATURES_OPTIONAL))), -none-)' @echo 'FEATURES_MISSING (only non optional features):' - @echo ' $(or $(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))), -none-)' + @echo ' $(or $(FEATURES_MISSING), -none-)' @echo '' @echo 'FEATURES_CONFLICT: $(FEATURES_CONFLICT)' @echo 'FEATURES_CONFLICT_MSG: $(FEATURES_CONFLICT_MSG)' @@ -130,7 +130,7 @@ info-features-required: @for i in $(sort $(FEATURES_REQUIRED)); do echo $$i; done info-features-missing: - @for i in $(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))); do echo $$i; done + @for i in $(FEATURES_MISSING); do echo $$i; done info-debug-variable-%: @echo $($*)