diff options
author | Zoltan Varga <vargaz@gmail.com> | 2016-06-07 17:46:33 +0300 |
---|---|---|
committer | Zoltan Varga <vargaz@gmail.com> | 2016-06-07 17:46:33 +0300 |
commit | d110f526706b7c4880ca916e2dfbab93138871cd (patch) | |
tree | 260fb467662aae06408fda88e2f82679983922d4 | |
parent | 07bb23a4d4a4f258c2b68e6553dd389945f8b779 (diff) |
Llvm submodule (#3108)
* Move the versions.mk infrastructure to scripts/submodules so it can be used elsewhere too.
* Add a conditional submodule for llvm.
* Fix commit messages emitted by the bump- targets.
* Use a anonymous git url for llvm.
-rw-r--r-- | acceptance-tests/versions.mk | 118 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | llvm/Makefile.am | 27 | ||||
-rw-r--r-- | llvm/SUBMODULES.json | 10 | ||||
-rw-r--r-- | scripts/submodules/versions.mk | 123 | ||||
-rwxr-xr-x | scripts/submodules/versions.py (renamed from acceptance-tests/versions.py) | 0 |
6 files changed, 162 insertions, 117 deletions
diff --git a/acceptance-tests/versions.mk b/acceptance-tests/versions.mk index 9cf7d89bbea..491b67e11ce 100644 --- a/acceptance-tests/versions.mk +++ b/acceptance-tests/versions.mk @@ -1,127 +1,11 @@ .PHONY: validate-versions reset-versions -CONFIG=SUBMODULES.json - -# usage $(call ValidateVersionTemplate (name,MAKEFILE VAR,repo name)) -# usage $(call ValidateVersionTemplate (mono,MONO,mono)) - -define ValidateVersionTemplate -#$(eval REPOSITORY_$(2):=$(shell test -z $(3) && echo $(1) || echo "$(3)")) -#$(eval DIRECTORY_$(2):=$(shell python versions.py get-dir $(1))) -#$(eval DIRECTORY_$(2):=$(shell test -z $(DIRECTORY_$(2)) && echo $(1) || echo $(DIRECTORY_$(2)))) -#$(eval MODULE_$(2):=$(shell python versions.py get-url $(1))) -#$(eval NEEDED_$(2)_VERSION:=$(shell python versions.py get-rev $(1))) -#$(eval $(2)_BRANCH_AND_REMOTE:=$(shell python versions.py get-remote-branch $(1))) - -#$(eval $(2)_VERSION:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git rev-parse HEAD )) - -#$(eval NEEDED_$(2)_BRANCH:=$(word 2, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) -#$(eval NEEDED_$(2)_REMOTE:=$(word 1, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) -#$(eval $(2)_BRANCH:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git symbolic-ref --short HEAD 2>/dev/null)) - -validate-$(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 .validate-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 .validate-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 .validate-versions-failure; \ - fi; \ - fi; \ - fi; \ - fi - -test-$(1):: - @echo $(1) - @echo " REPOSITORY_$(2)=$(REPOSITORY_$(2))" - @echo " DIRECTORY_$(2)=$(DIRECTORY_$(2))" - @echo " MODULE_$(2)=$(MODULE_$(2))" - @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 $(MODULE_$(2)) --recursive $(DIRECTORY_$(2))" && (cd `dirname $($(2)_PATH)` && git clone $(MODULE_$(2)) --recursive $(DIRECTORY_$(2)) || exit 1 ); \ - 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: validate-$(1) reset-$(1) print-$(1) - -reset-versions:: reset-$(1) -validate-versions:: Validate-$(1) -print-versions:: print-$(1) - -endef +include $(top_srcdir)/scripts/submodules/versions.mk $(eval $(call ValidateVersionTemplate,roslyn,ROSLYN)) $(eval $(call ValidateVersionTemplate,coreclr,CORECLR)) $(eval $(call ValidateVersionTemplate,ms-test-suite,MSTESTSUITE)) -reset-versions:: - -validate-versions:: - @if test -e .validate-versions-failure; then \ - rm .validate-versions-failure; \ - echo One or more modules needs update; \ - exit 1; \ - else \ - echo All dependent modules up to date; \ - fi - -reset: - @$(MAKE) validate-versions RESET_VERSIONS=1 - -__bump-version-%: - @if [ "$(REV)" = "" ]; then echo "Usage: make bump-version-$* REV=<ref>"; exit 1; fi - python versions.py set-rev $* $(REV) - @if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to pick up $(REV)." | git commit -F - $(CONFIG); fi - -__bump-branch-%: - @if [ "$(BRANCH)" = "" ]; then echo "Usage: make bump-branch-$* BRANCH=<branch> REMOTE_BRANCH=<remote branch>"; exit 1; fi - @if [ "$(REMOTE_BRANCH)" == "" ]; then echo "Usage: make bump-branch-$* BRANCH=<branch> REMOTE_BRANCH=<remote branch>"; exit 1; fi - python versions.py set-branch $* $(BRANCH) - python versions.py set-remote-branch $* $(REMOTE_BRANCH) - @if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to switch to $(BRANCH) $(REMOTE BRANCH)." | git commit -F - $(CONFIG); fi - -__bump-current-version-%: - REV=$(shell cd $(ACCEPTANCE_TESTS_PATH)/$* && git log -1 --pretty=format:%H); \ - python versions.py set-rev $* $$REV; \ - if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to pick up $$REV:" | git commit -F - $(CONFIG); fi - # Bump the given submodule to the revision given by the REV make variable # If COMMIT is 1, commit the change bump-roslyn: __bump-version-roslyn diff --git a/configure.ac b/configure.ac index 00fdad109b9..96616f87fc2 100644 --- a/configure.ac +++ b/configure.ac @@ -3923,6 +3923,7 @@ AC_OUTPUT([ Makefile mono-uninstalled.pc acceptance-tests/Makefile +llvm/Makefile scripts/mono-find-provides scripts/mono-find-requires mono/Makefile diff --git a/llvm/Makefile.am b/llvm/Makefile.am new file mode 100644 index 00000000000..e380f2bebf7 --- /dev/null +++ b/llvm/Makefile.am @@ -0,0 +1,27 @@ +# +# Conditional submodule for llvm +# +# make reset-llvm will checkout a version of llvm which is suitable for this version of mono +# into $top_srcdir/llvm/llvm. +# + +LLVM_PATH=llvm + +include $(top_srcdir)/scripts/submodules/versions.mk + +$(eval $(call ValidateVersionTemplate,llvm,LLVM)) + +# Bump the given submodule to the revision given by the REV make variable +# If COMMIT is 1, commit the change +bump-llvm: __bump-version-llvm + +# Bump the given submodule to the branch given by the BRANCH/REMOTE_BRANCH make variables +# If COMMIT is 1, commit the change +bump-branch-llvm: __bump-branch-llvm + +# Bump the given submodule to its current GIT version +# If COMMIT is 1, commit the change +bump-current-llvm: __bump-current-version-llvm + +clean-local: + $(RM) -r $(LLVM_PATH) diff --git a/llvm/SUBMODULES.json b/llvm/SUBMODULES.json new file mode 100644 index 00000000000..e4fbbb02e87 --- /dev/null +++ b/llvm/SUBMODULES.json @@ -0,0 +1,10 @@ +[ + { + "name": "llvm", + "url": "git://github.com/mono/llvm.git", + "rev": "9f79399f87282524fee099b328bd8cbf07929daf", + "remote-branch": "origin/master", + "branch": "master", + "directory": "llvm" + } +] diff --git a/scripts/submodules/versions.mk b/scripts/submodules/versions.mk new file mode 100644 index 00000000000..440476df140 --- /dev/null +++ b/scripts/submodules/versions.mk @@ -0,0 +1,123 @@ +# +# This is a python script and a set of make targets to implement support for conditional submodules +# There should be a SUBMODULES.json file which contains information about the submodules. +# + +CONFIG=SUBMODULES.json +SCRIPT=$(top_srcdir)/scripts/submodules/versions.py + +# usage $(call ValidateVersionTemplate (name,MAKEFILE VAR,repo name)) +# usage $(call ValidateVersionTemplate (mono,MONO,mono)) + +define ValidateVersionTemplate +#$(eval REPOSITORY_$(2):=$(shell test -z $(3) && echo $(1) || echo "$(3)")) +#$(eval DIRECTORY_$(2):=$(shell python $(SCRIPT) get-dir $(1))) +#$(eval DIRECTORY_$(2):=$(shell test -z $(DIRECTORY_$(2)) && echo $(1) || echo $(DIRECTORY_$(2)))) +#$(eval MODULE_$(2):=$(shell python $(SCRIPT) get-url $(1))) +#$(eval NEEDED_$(2)_VERSION:=$(shell python $(SCRIPT) get-rev $(1))) +#$(eval $(2)_BRANCH_AND_REMOTE:=$(shell python $(SCRIPT) get-remote-branch $(1))) + +#$(eval $(2)_VERSION:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git rev-parse HEAD )) + +#$(eval NEEDED_$(2)_BRANCH:=$(word 2, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) +#$(eval NEEDED_$(2)_REMOTE:=$(word 1, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) +#$(eval $(2)_BRANCH:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git symbolic-ref --short HEAD 2>/dev/null)) + +validate-$(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 .validate-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 .validate-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 .validate-versions-failure; \ + fi; \ + fi; \ + fi; \ + fi + +test-$(1):: + @echo $(1) + @echo " REPOSITORY_$(2)=$(REPOSITORY_$(2))" + @echo " DIRECTORY_$(2)=$(DIRECTORY_$(2))" + @echo " MODULE_$(2)=$(MODULE_$(2))" + @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 $(MODULE_$(2)) --recursive $(DIRECTORY_$(2))" && (cd `dirname $($(2)_PATH)` && git clone $(MODULE_$(2)) --recursive $(DIRECTORY_$(2)) || exit 1 ); \ + 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: validate-$(1) reset-$(1) print-$(1) + +reset-versions:: reset-$(1) +validate-versions:: validate-$(1) +print-versions:: print-$(1) + +endef + +reset-versions:: + +validate-versions:: + @if test -e .validate-versions-failure; then \ + rm .validate-versions-failure; \ + echo One or more modules needs update; \ + exit 1; \ + else \ + echo All dependent modules up to date; \ + fi + +reset: + @$(MAKE) validate-versions RESET_VERSIONS=1 + +__bump-version-%: + @if [ "$(REV)" = "" ]; then echo "Usage: make bump-version-$* REV=<ref>"; exit 1; fi + python $(SCRIPT) set-rev $* $(REV) + @if [ "$(COMMIT)" = "1" ]; then echo "[submodules] Bump $* to pick up $(REV)." | git commit -F - $(CONFIG); fi + +__bump-branch-%: + @if [ "$(BRANCH)" = "" ]; then echo "Usage: make bump-branch-$* BRANCH=<branch> REMOTE_BRANCH=<remote branch>"; exit 1; fi + @if [ "$(REMOTE_BRANCH)" == "" ]; then echo "Usage: make bump-branch-$* BRANCH=<branch> REMOTE_BRANCH=<remote branch>"; exit 1; fi + python $(SCRIPT) set-branch $* $(BRANCH) + python $(SCRIPT) set-remote-branch $* $(REMOTE_BRANCH) + @if [ "$(COMMIT)" = "1" ]; then echo "[submodules] Bump $* to switch to $(BRANCH) $(REMOTE BRANCH)." | git commit -F - $(CONFIG); fi + +__bump-current-version-%: + REV=$(shell cd $(ACCEPTANCE_TESTS_PATH)/$* && git log -1 --pretty=format:%H); \ + python $(SCRIPT) set-rev $* $$REV; \ + if [ "$(COMMIT)" = "1" ]; then echo "[submodules] Bump $* to pick up $$REV:" | git commit -F - $(CONFIG); fi diff --git a/acceptance-tests/versions.py b/scripts/submodules/versions.py index 35ded0c0fcd..35ded0c0fcd 100755 --- a/acceptance-tests/versions.py +++ b/scripts/submodules/versions.py |