aboutsummaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/makeversionhdr.py64
-rw-r--r--py/mkrules.mk2
-rw-r--r--py/modsys.c2
-rwxr-xr-xpy/py-version.sh39
-rw-r--r--py/py.mk5
5 files changed, 68 insertions, 44 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])
diff --git a/py/mkrules.mk b/py/mkrules.mk
index 902b20fd5..fab29b2b2 100644
--- a/py/mkrules.mk
+++ b/py/mkrules.mk
@@ -58,7 +58,7 @@ $(BUILD)/%.pp: %.c
# the right .o's to get recompiled if the generated.h file changes. Adding
# an order-only dependendency to all of the .o's will cause the generated .h
# to get built before we try to compile any of them.
-$(OBJ): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/py-version.h
+$(OBJ): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/mpversion.h
# $(sort $(var)) removes duplicates
#
diff --git a/py/modsys.c b/py/modsys.c
index aad0fb8d7..73ee320e9 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -35,7 +35,7 @@
#if MICROPY_PY_SYS
-#include "genhdr/py-version.h"
+#include "genhdr/mpversion.h"
/// \module sys - system specific functions
diff --git a/py/py-version.sh b/py/py-version.sh
deleted file mode 100755
index e86b41ac3..000000000
--- a/py/py-version.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-# Note: git describe doesn't work if no tag is available
-git_tag="$(git describe --dirty --always)"
-git_hash="$(git rev-parse --short HEAD 2> /dev/null || echo unknown)"
-git_files_are_clean=1
-# Check if there are any modified files.
-git diff --no-ext-diff --quiet --exit-code 2> /dev/null || git_files_are_clean=0
-# Check if there are any staged files.
-git diff-index --cached --quiet HEAD -- 2> /dev/null || git_files_are_clean=0
-if [ "${git_files_are_clean}" != "1" ]; then
- git_hash="${git_hash}-dirty"
-fi
-
-# Try to extract MicroPython version
-if echo ${git_tag} | grep -q '^v[0-9]'; then
- ver=$(echo ${git_tag} | cut -b 2- | cut -d - -f 1)
- ver_major=$(echo ${ver} | cut -d . -f 1)
- ver_minor=$(echo ${ver} | cut -d . -f 2)
- ver_micro=$(echo ${ver} | cut -d . -f 3)
- if [ -z ${ver_micro} ]; then
- ver_micro="0"
- fi
-else
- ver_major="0"
- ver_minor="0"
- ver_micro="1"
-fi
-
-cat <<EOF
-// This file was generated by py/py-version.sh
-#define MICROPY_GIT_TAG "${git_tag}"
-#define MICROPY_GIT_HASH "${git_hash}"
-#define MICROPY_BUILD_DATE "$(date '+%Y-%m-%d')"
-#define MICROPY_VERSION_MAJOR (${ver_major})
-#define MICROPY_VERSION_MINOR (${ver_minor})
-#define MICROPY_VERSION_MICRO (${ver_micro})
-#define MICROPY_VERSION_STRING "${ver_major}.${ver_minor}.${ver_micro}"
-EOF
diff --git a/py/py.mk b/py/py.mk
index 8960fa4b4..e984b585a 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -126,9 +126,8 @@ PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
FORCE:
.PHONY: FORCE
-$(HEADER_BUILD)/py-version.h: FORCE | $(HEADER_BUILD)
- $(Q)$(PY_SRC)/py-version.sh > $@.tmp
- $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi
+$(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
+ $(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@
# qstr data