diff --git a/cc3200/bootmgr/bootloader.mk b/cc3200/bootmgr/bootloader.mk index da02a02d07..ae24228922 100644 --- a/cc3200/bootmgr/bootloader.mk +++ b/cc3200/bootmgr/bootloader.mk @@ -128,6 +128,6 @@ $(BUILD)/bootloader.bin: $(BUILD)/bootmgr.bin $(HEADER_BUILD)/qstrdefs.generated.h: | $(HEADER_BUILD) touch $@ -# Create an empty "py-version.h" needed by py/mkrules.mk -$(HEADER_BUILD)/py-version.h: | $(HEADER_BUILD) +# Create an empty "mpversion.h" needed by py/mkrules.mk +$(HEADER_BUILD)/mpversion.h: | $(HEADER_BUILD) touch $@ diff --git a/cc3200/mods/modpyb.c b/cc3200/mods/modpyb.c index 7078889fa5..a261c8b0d8 100644 --- a/cc3200/mods/modpyb.c +++ b/cc3200/mods/modpyb.c @@ -65,7 +65,7 @@ #include "utils.h" #include "gccollect.h" #include "mperror.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" #ifdef DEBUG diff --git a/cc3200/mods/moduos.c b/cc3200/mods/moduos.c index 3261df746f..72f848cfef 100644 --- a/cc3200/mods/moduos.c +++ b/cc3200/mods/moduos.c @@ -33,7 +33,7 @@ #include "py/obj.h" #include "py/objtuple.h" #include "py/objstr.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" #include "ff.h" #include "diskio.h" #include "sflash_diskio.h" diff --git a/cc3200/telnet/telnet.c b/cc3200/telnet/telnet.c index 440bf9b2cb..a910437df4 100644 --- a/cc3200/telnet/telnet.c +++ b/cc3200/telnet/telnet.c @@ -35,7 +35,7 @@ #include "debug.h" #include "mpexception.h" #include "serverstask.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" /****************************************************************************** DEFINE PRIVATE CONSTANTS diff --git a/py/makeversionhdr.py b/py/makeversionhdr.py new file mode 100644 index 0000000000..e37496d40a --- /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 902b20fd52..fab29b2b22 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 aad0fb8d7f..73ee320e91 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 e86b41ac39..0000000000 --- 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 < $@.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 diff --git a/stmhal/moduos.c b/stmhal/moduos.c index 881afa1499..9d6856b3e1 100644 --- a/stmhal/moduos.c +++ b/stmhal/moduos.c @@ -31,7 +31,7 @@ #include "py/obj.h" #include "py/objtuple.h" #include "py/objstr.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" #include "lib/fatfs/ff.h" #include "lib/fatfs/diskio.h" #include "rng.h" diff --git a/stmhal/pyexec.c b/stmhal/pyexec.c index 44a9316229..eef2a1024b 100644 --- a/stmhal/pyexec.c +++ b/stmhal/pyexec.c @@ -38,7 +38,7 @@ #endif #include "readline.h" #include "pyexec.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" pyexec_mode_kind_t pyexec_mode_kind = PYEXEC_MODE_FRIENDLY_REPL; STATIC bool repl_display_debugging_info = 0; diff --git a/unix/main.c b/unix/main.c index 4729b63f64..4a71bfac6f 100644 --- a/unix/main.c +++ b/unix/main.c @@ -43,7 +43,7 @@ #include "py/repl.h" #include "py/gc.h" #include "py/stackctrl.h" -#include "genhdr/py-version.h" +#include "genhdr/mpversion.h" #include "input.h" // Command line options, with their defaults diff --git a/windows/msvc/genhdr.targets b/windows/msvc/genhdr.targets index 5d88394161..90054c0b60 100644 --- a/windows/msvc/genhdr.targets +++ b/windows/msvc/genhdr.targets @@ -3,21 +3,21 @@ - + + $(PyBuildDir)genhdr\ + $(PyBaseDir)py\ - - $(PyBaseDir)py\ $(DestDir)qstrdefs.preprocessed.h $(PyBaseDir)unix\qstrdefsport.h $(DestDir)qstrdefs.generated.h @@ -31,49 +31,12 @@ - - - - - - - - - - - - - - - - - - - $(GitHash)-dirty - + - $(DestDir)py-version.h + $(DestDir)mpversion.h $(DestFile).tmp - - $([System.Text.RegularExpressions.Regex]::Match($(GitTag), `^v[0-9\.]{5}`)) - v0.0.1 - $(Ver.Remove(0, 1)) - $(Ver.Split(`.`)[0]) - $(Ver.Split(`.`)[1]) - $(Ver.Split(`.`)[2]) - - - - - - - - - - - - +