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 <jow@openwrt.org> SVN-Revision: 44269
This commit is contained in:
		| @@ -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. | # This is free software, licensed under the GNU General Public License v2. | ||||||
| # See /LICENSE for more information. | # See /LICENSE for more information. | ||||||
| @@ -20,12 +20,16 @@ prereq: | |||||||
| .SILENT: prereq | .SILENT: prereq | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | PREREQ_PREV= | ||||||
|  |  | ||||||
|  | # 1: display name | ||||||
|  | # 2: error message | ||||||
| define Require | define Require | ||||||
|   export PREREQ_CHECK=1 |   export PREREQ_CHECK=1 | ||||||
|   ifeq ($$(CHECK_$(1)),) |   ifeq ($$(CHECK_$(1)),) | ||||||
|     prereq: prereq-$(1) |     prereq: prereq-$(1) | ||||||
|  |  | ||||||
|     prereq-$(1): FORCE |     prereq-$(1): $(if $(PREREQ_PREV),prereq-$(PREREQ_PREV)) FORCE | ||||||
| 		echo -n "Checking '$(1)'... " | 		echo -n "Checking '$(1)'... " | ||||||
| 		if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) >/dev/null 2>/dev/null; then \ | 		if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) >/dev/null 2>/dev/null; then \ | ||||||
| 			echo 'ok.'; \ | 			echo 'ok.'; \ | ||||||
| @@ -41,6 +45,8 @@ define Require | |||||||
|     .SILENT: prereq-$(1) check-$(1) |     .SILENT: prereq-$(1) check-$(1) | ||||||
|     .NOTPARALLEL: |     .NOTPARALLEL: | ||||||
|   endif |   endif | ||||||
|  |  | ||||||
|  |   PREREQ_PREV=$(1) | ||||||
| endef | endef | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -60,3 +66,41 @@ define RequireHeader | |||||||
|   $$(eval $$(call Require,$(1),$(2))) |   $$(eval $$(call Require,$(1),$(2))) | ||||||
| endef | 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich