From 94e528f159e1e2308e93f767c49f788e28c26ddb Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 5 Feb 2015 16:57:02 +0000 Subject: [PATCH] include: add TestHostCommand and SetupHostCommand macros Those macros allow testing various commands on the host system, also process the prereq tests in the order they're declared. Signed-off-by: Jo-Philipp Wich SVN-Revision: 44269 --- include/prereq.mk | 48 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/include/prereq.mk b/include/prereq.mk index 45ee77e9e6..d3b73663e3 100644 --- a/include/prereq.mk +++ b/include/prereq.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2007 OpenWrt.org +# Copyright (C) 2006-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -20,12 +20,16 @@ prereq: .SILENT: prereq endif +PREREQ_PREV= + +# 1: display name +# 2: error message define Require export PREREQ_CHECK=1 ifeq ($$(CHECK_$(1)),) prereq: prereq-$(1) - prereq-$(1): FORCE + prereq-$(1): $(if $(PREREQ_PREV),prereq-$(PREREQ_PREV)) FORCE echo -n "Checking '$(1)'... " if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) >/dev/null 2>/dev/null; then \ echo 'ok.'; \ @@ -41,6 +45,8 @@ define Require .SILENT: prereq-$(1) check-$(1) .NOTPARALLEL: endif + + PREREQ_PREV=$(1) endef @@ -60,3 +66,41 @@ define RequireHeader $$(eval $$(call Require,$(1),$(2))) endef +define QuoteHostCommand +'$(subst ','"'"',$(strip $(1)))' +endef + +# 1: display name +# 2: failure message +# 3: test +define TestHostCommand + define Require/$(1) + ($(3)) >/dev/null 2>/dev/null + endef + + $$(eval $$(call Require,$(1),$(2))) +endef + +# 1: canonical name +# 2: failure message +# 3+: candidates +define SetupHostCommand + define Require/$(1) + for cmd in $(call QuoteHostCommand,$(3)) $(call QuoteHostCommand,$(4)) \ + $(call QuoteHostCommand,$(5)) $(call QuoteHostCommand,$(6)) \ + $(call QuoteHostCommand,$(7)) $(call QuoteHostCommand,$(8)); do \ + if [ -n "$$$$$$$$cmd" ]; then \ + bin="$$$$$$$$(PATH="$(subst $(space),:,$(filter-out $(STAGING_DIR_HOST)/%,$(subst :,$(space),$(PATH))))" \ + which "$$$$$$$${cmd%% *}")"; \ + if [ -x "$$$$$$$$bin" ] && eval "$$$$$$$$cmd" >/dev/null 2>/dev/null; then \ + mkdir -p "$(STAGING_DIR_HOST)/bin"; \ + ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \ + exit 0; \ + fi; \ + fi; \ + done; \ + exit 1 + endef + + $$(eval $$(call Require,$(1),$(if $(2),$(2),Missing $(1) command))) +endef