Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2016-06-07 17:46:33 +0300
committerZoltan Varga <vargaz@gmail.com>2016-06-07 17:46:33 +0300
commitd110f526706b7c4880ca916e2dfbab93138871cd (patch)
tree260fb467662aae06408fda88e2f82679983922d4 /scripts/submodules
parent07bb23a4d4a4f258c2b68e6553dd389945f8b779 (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.
Diffstat (limited to 'scripts/submodules')
-rw-r--r--scripts/submodules/versions.mk123
-rwxr-xr-xscripts/submodules/versions.py52
2 files changed, 175 insertions, 0 deletions
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/scripts/submodules/versions.py b/scripts/submodules/versions.py
new file mode 100755
index 00000000000..35ded0c0fcd
--- /dev/null
+++ b/scripts/submodules/versions.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+
+import sys
+import json
+
+def find_module(submodules, name):
+ for item in submodules:
+ if item["name"] == name:
+ return item
+
+ print("Not found")
+ sys.exit(1)
+
+
+if len(sys.argv) < 2:
+ print("Usage: versions.py <command>")
+ sys.exit(1)
+
+CONFIG_FILE = "SUBMODULES.json"
+command = sys.argv[1]
+
+submodules = json.load(open(CONFIG_FILE))
+
+if command == "get-rev":
+ mod = find_module(submodules, sys.argv[2])
+ print(mod["rev"])
+elif command == "get-url":
+ mod = find_module(submodules, sys.argv[2])
+ print(mod["url"])
+elif command == "get-dir":
+ mod = find_module(submodules, sys.argv[2])
+ print(mod["directory"])
+elif command == "get-remote-branch":
+ mod = find_module(submodules, sys.argv[2])
+ print(mod["remote-branch"])
+elif command == "set-rev":
+ mod = find_module(submodules, sys.argv[2])
+ mod["rev"] = sys.argv[3]
+ json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2)
+elif command == "set-branch":
+ mod = find_module(submodules, sys.argv[2])
+ mod["branch"] = sys.argv[3]
+ json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2)
+elif command == "set-remote-branch":
+ mod = find_module(submodules, sys.argv[2])
+ mod["remote-branch"] = sys.argv[3]
+ json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2)
+elif command == "cat":
+ print(json.dumps(submodules, indent = 2))
+else:
+ print("Unknown command "" + command + "".")
+ sys.exit(1)