Add an optional dependency on xamarin-specific build logic.

This commit is contained in:
Rolf Bjarne Kvinge 2016-04-21 18:01:11 +02:00
Родитель 68df944ad6
Коммит 24870304ba
7 изменённых файлов: 117 добавлений и 2 удалений

Просмотреть файл

@ -221,6 +221,7 @@ NUNITLITE_PATH=$(TOP)/external/NUnitLite
OPENTK_PATH=$(TOP)/external/opentk
MODERNHTTPCLIENT_PATH=$(TOP)/external/ModernHttpClient
XAMARIN_MACDEV_PATH=$(TOP)/external/Xamarin.MacDev
MACCORE_PATH=$(TOP)/../maccore
MONO_PREFIX ?= /Library/Frameworks/Mono.framework/Versions/Current
SYSTEM_MCS=$(MONO_PREFIX)/bin/mcs
@ -271,5 +272,9 @@ PRODUCT_KEY_PATH?=$(TOP)/product.snk
include $(TOP)/mk/quiet.mk
ifdef ENABLE_XAMARIN
-include $(MACCORE_PATH)/Make.config
endif
.SUFFIXES:
MAKEFLAGS += --no-builtin-rules

Просмотреть файл

@ -177,3 +177,7 @@ fix-install-permissions:
sudo chown -R $(USER) /Library/Frameworks/Mono.framework/External/
sudo chown -R $(USER) /Library/Frameworks/Xamarin.iOS.framework
sudo chown -R $(USER) /Library/Frameworks/Xamarin.Mac.framework
ifdef ENABLE_XAMARIN
SUBDIRS += $(MACCORE_PATH)
endif

Просмотреть файл

@ -11,6 +11,7 @@ IPHONEOS_PREFIX=$(MONOTOUCH_PREFIX)/SDKs/MonoTouch.iphoneos.sdk/usr
ifdef ENABLE_XAMARIN
XAMARIN_AUTOGEN_FLAGS=--enable-extension-module=xamarin
XAMARIN_CONFIGURE_FLAGS=--enable-extension-module=xamarin
-include $(MACCORE_PATH)/builds/Makefile.include
endif
ifndef DISABLE_STRIP

2
external/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,2 @@
mono-extensions

Просмотреть файл

@ -2,7 +2,7 @@
# usage $(call CheckSubmoduleTemplate (mono,MONO,mono))
define CheckSubmoduleTemplate
#$(eval NEEDED_$(2)_VERSION:=$(shell git ls-tree HEAD --full-tree -- external/$(1) | awk -F' ' '{printf "%s",$$3}'))
#$(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}'))
#$(eval $(2)_VERSION:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git rev-parse HEAD 2>/dev/null))
check-$(1)::
@ -42,7 +42,7 @@ 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)"
@git submodule update --init --recursive --force -- $(TOP)/external/$(1)
cd $(abspath $($(2)_PATH)/../..) && git submodule update --init --recursive --force -- ./external/$(1)
endif
print-$(1)::
@ -68,6 +68,8 @@ $(eval $(call CheckSubmoduleTemplate,opentk,OPENTK))
$(eval $(call CheckSubmoduleTemplate,ModernHttpClient,MODERNHTTPCLIENT))
$(eval $(call CheckSubmoduleTemplate,Xamarin.MacDev,XAMARIN_MACDEV))
include $(TOP)/mk/xamarin.mk
# 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::

96
mk/xamarin.mk Normal file
Просмотреть файл

@ -0,0 +1,96 @@
ifdef ENABLE_XAMARIN
NEEDED_MACCORE_VERSION := 32be4a29841f17f835d37d759a461267c7079b00
NEEDED_MACCORE_BRANCH := xamarin-macios
MACCORE_DIRECTORY := maccore
MACCORE_MODULE := git@github.com:xamarin/maccore.git
MACCORE_VERSION := $(shell cd $(MACCORE_PATH) 2> /dev/null && git rev-parse HEAD 2> /dev/null)
MACCORE_BRANCH := $(shell cd $(MACCORE_PATH) 2> /dev/null && git symbolic-ref --short HEAD 2> /dev/null)
MACCORE_REMOTE := origin
MACCORE_BRANCH_AND_REMOTE := $(NEEDED_MACCORE_BRANCH) $(MACCORE_REMOTE)/$(NEEDED_MACCORE_BRANCH)
NEEDED_MACCORE_REMOTE := $(MACCORE_REMOTE)
define CheckVersionTemplate
check-$(1)::
@if test x$$(IGNORE_$(2)_VERSION) = "x"; then \
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 'make reset-$(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))"; \
test -z "$(BUILD_REVISION)" || $(MAKE) test-$(1); \
touch .check-versions-failure; \
fi; \
elif test "x$($(2)_BRANCH)" != "x$(NEEDED_$(2)_BRANCH)" ; then \
if test x$$(RESET_VERSIONS) != "x"; then \
test -z "$(BUILD_REVISION)" || $(MAKE) test-$(1); \
make reset-$(1) || exit 1; \
else \
echo "Your $(1) branch is out of date, please run 'make reset-$(1)' (found $($(2)_BRANCH), expected $(NEEDED_$(2)_BRANCH))"; \
touch .check-versions-failure; \
fi; \
else \
echo "$(1) is up-to-date."; \
fi; \
fi; \
fi
test-$(1)::
@echo $(1)
@echo " $(2)_DIRECTORY=$($(2)_DIRECTORY)"
@echo " $(2)_MODULE=$($(2)_MODULE)"
@echo " NEEDED_$(2)_VERSION=$(NEEDED_$(2)_VERSION)"
@echo " $(2)_VERSION=$($(2)_VERSION)"
@echo " $(2)_BRANCH_AND_REMOTE=$($(2)_BRANCH_AND_REMOTE)"
@echo " NEEDED_$(2)_BRANCH=$(NEEDED_$(2)_BRANCH)"
@echo " NEEDED_$(2)_REMOTE=$(NEEDED_$(2)_REMOTE)"
@echo " $(2)_BRANCH=$($(2)_BRANCH)"
@echo " $(2)_PATH=$($(2)_PATH) => $(abspath $($(2)_PATH))"
reset-$(1)::
@if test -d $($(2)_PATH); then \
if ! (cd $($(2)_PATH) && git show $(NEEDED_$(2)_VERSION) >/dev/null 2>&1 && git log -1 $(NEEDED_$(2)_REMOTE) >/dev/null 2>&1) ; then \
echo "*** git fetch `basename $$($(2)_PATH)`" && (cd $($(2)_PATH) && git fetch); \
fi; \
else \
echo "*** git clone $($(2)_MODULE) --recursive $($(2)_DIRECTORY) -b $(NEEDED_$(2)_BRANCH)"; \
mkdir -p `dirname $($(2)_PATH)`; \
(cd $(abspath $($(2)_PATH)/..) && git clone $($(2)_MODULE) --recursive $($(2)_DIRECTORY) -b $(NEEDED_$(2)_BRANCH)); \
fi
@if test x$$(IGNORE_$(2)_VERSION) = "x"; then \
echo "*** [$(1)] git checkout -f" $(NEEDED_$(2)_BRANCH) && (cd $($(2)_PATH) && git checkout -f $(NEEDED_$(2)_BRANCH) || git checkout -f -b $($(2)_BRANCH_AND_REMOTE)); \
echo "*** [$(1)] git reset --hard $(NEEDED_$(2)_VERSION)" && (cd $($(2)_PATH) && git reset --hard $(NEEDED_$(2)_VERSION)); \
fi
@echo "*** [$(1)] git submodule update --init --recursive" && (cd $($(2)_PATH) && git submodule update --init --recursive)
print-$(1)::
@printf "*** %-16s %-45s %s (%s)\n" "$(DIRECTORY_$(2))" "$(MODULE_$(2))" "$(NEEDED_$(2)_VERSION)" "$(NEEDED_$(2)_BRANCH)"
.PHONY: check-$(1) reset-$(1) print-$(1)
reset-versions:: reset-$(1)
check-versions:: check-$(1)
print-versions:: print-$(1)
DEPENDENCY_DIRECTORIES += $($(2)_PATH)
endef
builds/.stamp-cloned-maccore:
@# we need to touch the stamp first, otherwise we'll
@# go into an infinite loop when we re-launch make.
@touch $@
$(Q) $(MAKE) reset-maccore || rm -f $@
$(eval $(call CheckVersionTemplate,maccore,MACCORE))
-include $(MACCORE_PATH)/mk/versions.mk
$(MACCORE_PATH)/mk/versions.mk: | builds/.stamp-cloned-maccore
endif

5
tests/Makefile Normal file
Просмотреть файл

@ -0,0 +1,5 @@
TOP=..
include $(TOP)/Make.config
%:
$(MAKE) -C $(MACCORE_PATH)/tests $@