summaryrefslogtreecommitdiffstats
path: root/comm/build/source_repos.py
diff options
context:
space:
mode:
Diffstat (limited to 'comm/build/source_repos.py')
-rw-r--r--comm/build/source_repos.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/comm/build/source_repos.py b/comm/build/source_repos.py
new file mode 100644
index 0000000000..fc2aa461d2
--- /dev/null
+++ b/comm/build/source_repos.py
@@ -0,0 +1,120 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import json
+import os
+import sys
+
+import buildconfig
+
+sourcestamp_tmpl = """{buildid}
+{comm_repo}/rev/{comm_rev}
+{gecko_repo}/rev/{gecko_rev}
+"""
+
+
+def mk_hg_url(repo, revision):
+ """
+ Return a URL to a specific revision in the given repo.
+ """
+ return "{}/rev/{}".format(repo, revision)
+
+
+def gen_treeherder_build_links(output):
+ """
+ Create a JSON file that is used by Treeherder to display "Built from" links.
+ """
+ gecko_repo = buildconfig.substs.get("MOZ_GECKO_SOURCE_REPO")
+ gecko_rev = buildconfig.substs.get("MOZ_GECKO_SOURCE_CHANGESET")
+ comm_repo = buildconfig.substs.get("MOZ_COMM_SOURCE_REPO")
+ comm_rev = buildconfig.substs.get("MOZ_COMM_SOURCE_CHANGESET")
+
+ def mk_built_from_line(repo, revision):
+ repo_name = repo.split("/")[-1] # Last component of base URL
+ title = "Built from {} revision {}".format(repo_name, revision)
+ url = mk_hg_url(repo, revision)
+ return dict(title=title, value=revision, url=url)
+
+ built_from = [
+ mk_built_from_line(gecko_repo, gecko_rev),
+ mk_built_from_line(comm_repo, comm_rev),
+ ]
+ json.dump(built_from, output)
+
+
+def gen_platformini(output, platform_ini):
+ gecko_repo = buildconfig.substs.get("MOZ_GECKO_SOURCE_REPO", "")
+ gecko_rev = buildconfig.substs.get("MOZ_GECKO_SOURCE_CHANGESET", "")
+
+ with open(platform_ini, "r") as fp:
+ data = fp.readlines()
+
+ for i in range(len(data)):
+ if data[i].startswith("SourceRepository="):
+ data[i] = "SourceRepository=%s\n" % gecko_repo
+ elif data[i].startswith("SourceStamp="):
+ data[i] = "SourceStamp=%s\n" % gecko_rev
+
+ with open(platform_ini, "w") as fp:
+ fp.writelines(data)
+
+ output.write("platform.ini updated.\n")
+
+
+def gen_sourcestamp(output):
+ data = dict(
+ buildid=os.environ.get("MOZ_BUILD_DATE", "unknown"),
+ gecko_repo=buildconfig.substs.get("MOZ_GECKO_SOURCE_REPO", None),
+ gecko_rev=buildconfig.substs.get("MOZ_GECKO_SOURCE_CHANGESET", None),
+ comm_repo=buildconfig.substs.get("MOZ_COMM_SOURCE_REPO", None),
+ comm_rev=buildconfig.substs.get("MOZ_COMM_SOURCE_CHANGESET", None),
+ )
+
+ output.write(sourcestamp_tmpl.format(**data))
+
+
+def source_repo_header(output):
+ """
+ Appends the Gecko source repository information to source-repo.h
+ This information should be set in buildconfig.substs by moz.configure
+ """
+ gecko_repo = buildconfig.substs.get("MOZ_GECKO_SOURCE_REPO", None)
+ gecko_rev = buildconfig.substs.get("MOZ_GECKO_SOURCE_CHANGESET", None)
+ comm_repo = buildconfig.substs.get("MOZ_COMM_SOURCE_REPO", None)
+ comm_rev = buildconfig.substs.get("MOZ_COMM_SOURCE_CHANGESET", None)
+
+ if None in [gecko_repo, gecko_rev, comm_repo, comm_rev]:
+ Exception(
+ "Source information not found in buildconfig."
+ "Try setting GECKO_HEAD_REPOSITORY and GECKO_HEAD_REV"
+ "as well as MOZ_SOURCE_REPO and MOZ_SOURCE_CHANGESET"
+ "environment variables and running mach configure again."
+ )
+
+ output.write("#define MOZ_GECKO_SOURCE_STAMP {}\n".format(gecko_rev))
+ output.write("#define MOZ_COMM_SOURCE_STAMP {}\n".format(comm_rev))
+ output.write("#define MOZ_SOURCE_STAMP {}\n".format(comm_rev))
+
+ if buildconfig.substs.get("MOZ_INCLUDE_SOURCE_INFO"):
+ gecko_source_url = mk_hg_url(gecko_repo, gecko_rev)
+ comm_source_url = mk_hg_url(comm_repo, comm_rev)
+ output.write("#define MOZ_GECKO_SOURCE_REPO {}\n".format(gecko_repo))
+ output.write("#define MOZ_GECKO_SOURCE_URL {}\n".format(gecko_source_url))
+ output.write("#define MOZ_COMM_SOURCE_REPO {}\n".format(comm_repo))
+ output.write("#define MOZ_COMM_SOURCE_URL {}\n".format(comm_source_url))
+ output.write("#define MOZ_SOURCE_REPO {}\n".format(comm_repo))
+ output.write("#define MOZ_SOURCE_URL {}\n".format(comm_source_url))
+
+
+def main(args):
+ if args:
+ func = globals().get(args[0])
+ if func:
+ return func(sys.stdout, *args[1:])
+
+ return 1
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv[1:]))