xamarin-macios/mk/versions.mk

96 строки
3.3 KiB
Makefile
Исходник Обычный вид История

2016-04-21 11:59:27 +03:00
# usage $(call CheckSubmoduleTemplate (name,MAKEFILE VAR,repo name))
# usage $(call CheckSubmoduleTemplate (mono,MONO,mono))
define CheckSubmoduleTemplate
#$(eval NEEDED_$(2)_VERSION:=$(shell git --git-dir $(abspath $($(2)_PATH)/../..)/.git --work-tree $(abspath $($(2)_PATH)/../..) ls-tree HEAD --full-tree -- external/$(1) | awk -F' ' '{printf "%s",$$3}'))
2016-04-21 11:59:27 +03:00
#$(eval $(2)_VERSION:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git rev-parse HEAD 2>/dev/null))
check-$(1)::
ifeq ($$(IGNORE_$(2)_VERSION),)
@if test ! -d $($(2)_PATH); then \
if test x$$(RESET_VERSIONS) != "x"; then \
make reset-$(1) || exit 1; \
else \
echo "Your $(1) checkout is missing, please run 'git submodule update --init --recursive -- external/$(1)'"; \
touch .check-versions-failure; \
fi; \
else \
if test "x$($(2)_VERSION)" != "x$(NEEDED_$(2)_VERSION)" ; then \
if test x$$(RESET_VERSIONS) != "x"; then \
make reset-$(1) || exit 1; \
else \
echo "Your $(1) version is out of date, please run 'make reset-$(1)' (found $($(2)_VERSION), expected $(NEEDED_$(2)_VERSION)). Alternatively export IGNORE_$(2)_VERSION=1 to skip this check."; \
2016-04-21 11:59:27 +03:00
test -z "$(BUILD_REVISION)" || $(MAKE) test-$(1); \
touch .check-versions-failure; \
fi; \
else \
echo "$(1) is up-to-date."; \
fi; \
fi
else
@echo "$(1) is ignored."
endif
test-$(1)::
@echo $(1)
@echo " NEEDED_$(2)_VERSION=$(NEEDED_$(2)_VERSION)"
@echo " $(2)_VERSION=$($(2)_VERSION)"
@echo " $(2)_PATH=$($(2)_PATH) => $(abspath $($(2)_PATH))"
reset-$(1)::
ifneq ($$(IGNORE_$(2)_VERSION),)
@echo "*** Not resetting $(1) because IGNORE_$(2)_VERSION is set"
else
@echo "*** git submodule update --init --recursive --force -- $(TOP)/external/$(1)"
cd $(abspath $($(2)_PATH)/../..) && git submodule update --init --recursive --force -- ./external/$(1)
2016-04-21 11:59:27 +03:00
endif
print-$(1)::
@printf "*** %-16s %-45s %s (%s)\n" "$(1)" "$(shell git config submodule.external/$(1).url)" "$(NEEDED_$(2)_VERSION)" "$(shell git config -f $(abspath $(TOP)/.gitmodules) submodule.external/$(1).branch)"
.PHONY: check-$(1) reset-$(1) print-$(1)
reset-versions:: reset-$(1)
check-versions:: check-$(1)
print-versions:: print-$(1)
endef
2016-04-21 14:18:44 +03:00
$(shell rm -f .check-versions-failure)
$(eval $(call CheckSubmoduleTemplate,llvm,LLVM))
$(eval $(call CheckSubmoduleTemplate,mono,MONO))
2016-04-21 14:56:47 +03:00
$(eval $(call CheckSubmoduleTemplate,fsharp,FSHARP))
2016-04-21 15:30:02 +03:00
$(eval $(call CheckSubmoduleTemplate,MonoTouch.Dialog,MONOTOUCH_DIALOG))
$(eval $(call CheckSubmoduleTemplate,Touch.Unit,TOUCH_UNIT))
$(eval $(call CheckSubmoduleTemplate,opentk,OPENTK))
2016-04-21 16:40:25 +03:00
$(eval $(call CheckSubmoduleTemplate,Xamarin.MacDev,XAMARIN_MACDEV))
$(eval $(call CheckSubmoduleTemplate,guiunit,GUI_UNIT))
$(eval $(call CheckSubmoduleTemplate,linker,LINKER_TOOLS))
2016-04-21 14:18:44 +03:00
include $(TOP)/mk/xamarin.mk
2016-04-21 14:18:44 +03:00
# some hackish reset-* targets to deal with what needs to happen in various parts of the build tree when you reset a module
reset-mono::
$(Q) rm -f $(TOP)/.stamp-build* $(MONO_PATH)/configure
reset-llvm::
$(Q) $(MAKE) -C $(TOP)/builds clean-llvm
2016-04-21 14:56:47 +03:00
reset-fsharp::
$(Q) cd $(FSHARP_PATH) && git clean -xffdq
2016-04-21 11:59:27 +03:00
check-versions::
@if test -e .check-versions-failure; then \
rm .check-versions-failure; \
echo One or more modules needs update; \
exit 1; \
else \
echo All dependent modules up to date; \
fi
all-local:: check-versions
reset:
@make check-versions RESET_VERSIONS=1