From 7cd59c5bc3ed2d4ade54e73fae18985b4b46ee42 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Sat, 15 Dec 2018 15:13:33 +1100
Subject: [PATCH] py/mpconfig: Move MICROPY_VERSION macros to static ones in
 mpconfig.h.

It's more robust to have the version defined statically in a header file,
rather than dynamically generating it via git using a git tag.  In case
git doesn't exist, or a different source control tool is used, it's
important to still have the uPy version number available.
---
 extmod/modwebrepl.c  |  1 -
 py/makeversionhdr.py | 24 ++++--------------------
 py/modsys.c          |  2 --
 py/mpconfig.h        | 17 +++++++++++++++++
 4 files changed, 21 insertions(+), 23 deletions(-)

diff --git a/extmod/modwebrepl.c b/extmod/modwebrepl.c
index 06da210d1..3c33ee150 100644
--- a/extmod/modwebrepl.c
+++ b/extmod/modwebrepl.c
@@ -35,7 +35,6 @@
 #include "py/mphal.h"
 #endif
 #include "extmod/modwebsocket.h"
-#include "genhdr/mpversion.h"
 
 #if MICROPY_PY_WEBREPL
 
diff --git a/py/makeversionhdr.py b/py/makeversionhdr.py
index aedc292e4..2ab99d89b 100644
--- a/py/makeversionhdr.py
+++ b/py/makeversionhdr.py
@@ -46,15 +46,7 @@ def get_version_info_from_git():
     except OSError:
         return None
 
-    # 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"]
-
-    return git_tag, git_hash, ver
+    return git_tag, git_hash
 
 def get_version_info_from_docs_conf():
     with open(os.path.join(os.path.dirname(sys.argv[0]), "..", "docs", "conf.py")) as f:
@@ -62,10 +54,7 @@ def get_version_info_from_docs_conf():
             if line.startswith("version = release = '"):
                 ver = line.strip().split(" = ")[2].strip("'")
                 git_tag = "v" + ver
-                ver = ver.split(".")
-                if len(ver) == 2:
-                    ver.append("0")
-                return git_tag, "<no hash>", ver
+                return git_tag, "<no hash>"
     return None
 
 def make_version_header(filename):
@@ -74,7 +63,7 @@ def make_version_header(filename):
     if info is None:
         info = get_version_info_from_docs_conf()
 
-    git_tag, git_hash, ver = info
+    git_tag, git_hash = info
 
     # Generate the file with the git and version info
     file_data = """\
@@ -82,12 +71,7 @@ def make_version_header(filename):
 #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])
+""" % (git_tag, git_hash, datetime.date.today().strftime("%Y-%m-%d"))
 
     # Check if the file contents changed from last time
     write_file = True
diff --git a/py/modsys.c b/py/modsys.c
index 98addfcfc..343451732 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -37,8 +37,6 @@
 
 #if MICROPY_PY_SYS
 
-#include "genhdr/mpversion.h"
-
 // defined per port; type of these is irrelevant, just need pointer
 extern struct _mp_dummy_t mp_sys_stdin_obj;
 extern struct _mp_dummy_t mp_sys_stdout_obj;
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 6edeb7a1c..7b0d78914 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -26,6 +26,23 @@
 #ifndef MICROPY_INCLUDED_PY_MPCONFIG_H
 #define MICROPY_INCLUDED_PY_MPCONFIG_H
 
+// Current version of MicroPython
+#define MICROPY_VERSION_MAJOR (1)
+#define MICROPY_VERSION_MINOR (9)
+#define MICROPY_VERSION_MICRO (4)
+
+// Combined version as a 32-bit number for convenience
+#define MICROPY_VERSION ( \
+    MICROPY_VERSION_MAJOR << 16 \
+    | MICROPY_VERSION_MINOR << 8 \
+    | MICROPY_VERSION_MICRO)
+
+// String version
+#define MICROPY_VERSION_STRING \
+    MP_STRINGIFY(MICROPY_VERSION_MAJOR) "." \
+    MP_STRINGIFY(MICROPY_VERSION_MINOR) "." \
+    MP_STRINGIFY(MICROPY_VERSION_MICRO)
+
 // This file contains default configuration settings for MicroPython.
 // You can override any of the options below using mpconfigport.h file
 // located in a directory of your port.
-- 
GitLab