aboutsummaryrefslogtreecommitdiff
path: root/py/makeversionhdr.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-04-22 17:38:05 +0100
committerDamien George <damien.p.george@gmail.com>2015-04-28 23:52:36 +0100
commit95f53461c2c42490d12acd41463b86f0056e6f40 (patch)
treea8066e0333a21ba1d47b89434061468a364e8689 /py/makeversionhdr.py
parentd11317bcab8bfa9c702d0c708aa95381aad4fd84 (diff)
py: Replace py-version.sh with makeversionhdr.py, written in Python.
Also rename py-version.h to mpversion.h for consistency with mpconfig.h.
Diffstat (limited to 'py/makeversionhdr.py')
-rw-r--r--py/makeversionhdr.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/py/makeversionhdr.py b/py/makeversionhdr.py
new file mode 100644
index 000000000..e37496d40
--- /dev/null
+++ b/py/makeversionhdr.py
@@ -0,0 +1,64 @@
+# This script works with Python 2 and 3
+
+from __future__ import print_function
+
+import sys
+import os
+import datetime
+import subprocess
+
+def make_version_header(filename):
+ # Note: git describe doesn't work if no tag is available
+ try:
+ git_tag = subprocess.check_output(["git", "describe", "--dirty", "--always"], universal_newlines=True).strip()
+ except subprocess.CalledProcessError:
+ git_tag = ""
+ try:
+ git_hash = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"], stderr=subprocess.STDOUT, universal_newlines=True).strip()
+ except subprocess.CalledProcessError:
+ git_hash = "unknown"
+
+ try:
+ # Check if there are any modified files.
+ subprocess.check_call(["git", "diff", "--no-ext-diff", "--quiet", "--exit-code"], stderr=subprocess.STDOUT)
+ # Check if there are any staged files.
+ subprocess.check_call(["git", "diff-index", "--cached", "--quiet", "HEAD", "--"], stderr=subprocess.STDOUT)
+ except subprocess.CalledProcessError:
+ git_hash += "-dirty"
+
+ # Try to extract MicroPython version from git tag
+ if git_tag.startswith("v"):
+ ver = git_tag[1:].split("-")[0].split(".")
+ if len(ver) == 2:
+ ver.append("0")
+ else:
+ ver = ["0", "0", "1"]
+
+ # Generate the file with the git and version info
+ file_data = """\
+// This file was generated by py/makeversionhdr.py
+#define MICROPY_GIT_TAG "%s"
+#define MICROPY_GIT_HASH "%s"
+#define MICROPY_BUILD_DATE "%s"
+#define MICROPY_VERSION_MAJOR (%s)
+#define MICROPY_VERSION_MINOR (%s)
+#define MICROPY_VERSION_MICRO (%s)
+#define MICROPY_VERSION_STRING "%s.%s.%s"
+""" % (git_tag, git_hash, datetime.date.today().strftime("%Y-%m-%d"),
+ ver[0], ver[1], ver[2], ver[0], ver[1], ver[2])
+
+ # Check if the file contents changed from last time
+ write_file = True
+ if os.path.isfile(filename):
+ with open(filename, 'r') as f:
+ existing_data = f.read()
+ if existing_data == file_data:
+ write_file = False
+
+ # Only write the file if we need to
+ if write_file:
+ print("Generating %s" % filename)
+ with open(filename, 'w') as f:
+ f.write(file_data)
+
+make_version_header(sys.argv[1])