py: Replace py-version.sh with makeversionhdr.py, written in Python.
Also rename py-version.h to mpversion.h for consistency with mpconfig.h.
This commit is contained in:
parent
d11317bcab
commit
95f53461c2
|
@ -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 $@
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
#include "utils.h"
|
||||
#include "gccollect.h"
|
||||
#include "mperror.h"
|
||||
#include "genhdr/py-version.h"
|
||||
#include "genhdr/mpversion.h"
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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])
|
|
@ -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
|
||||
#
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
#if MICROPY_PY_SYS
|
||||
|
||||
#include "genhdr/py-version.h"
|
||||
#include "genhdr/mpversion.h"
|
||||
|
||||
/// \module sys - system specific functions
|
||||
|
||||
|
|
|
@ -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
|
5
py/py.mk
5
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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
|
||||
<Import Project="env.props" Condition="$(PyEnvIncluded)!=True"/>
|
||||
|
||||
<Target Name="GenerateHeaders" DependsOnTargets="MakeQstrData;MakeVersionHeader">
|
||||
<!--Generate qstrdefs.h and mpversion.h similar to what is done in py/py.mk-->
|
||||
<Target Name="GenerateHeaders" DependsOnTargets="MakeQstrData;MakeVersionHdr">
|
||||
</Target>
|
||||
|
||||
<PropertyGroup>
|
||||
<DestDir>$(PyBuildDir)genhdr\</DestDir>
|
||||
<PySrcDir>$(PyBaseDir)py\</PySrcDir>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="MakeDestDir">
|
||||
<MakeDir Directories="$(DestDir)"/>
|
||||
</Target>
|
||||
|
||||
<!--see py/py.mk under #qstr data-->
|
||||
<Target Name="MakeQstrData" DependsOnTargets="MakeDestDir">
|
||||
<PropertyGroup>
|
||||
<PySrcDir>$(PyBaseDir)py\</PySrcDir>
|
||||
<PreProc>$(DestDir)qstrdefs.preprocessed.h</PreProc>
|
||||
<QstrDefs>$(PyBaseDir)unix\qstrdefsport.h</QstrDefs>
|
||||
<DestFile>$(DestDir)qstrdefs.generated.h</DestFile>
|
||||
|
@ -31,49 +31,12 @@
|
|||
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(DestFile)"/>
|
||||
</Target>
|
||||
|
||||
<!--see py/py-version.sh-->
|
||||
<Target Name="GetGitState">
|
||||
<Exec Command="git describe --dirty --always" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="GitTag" />
|
||||
</Exec>
|
||||
<Exec Command="git rev-parse --short HEAD 2>NUL || echo unknown" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="GitHash" />
|
||||
</Exec>
|
||||
<Exec Command="git diff --no-ext-diff --quiet --exit-code 2>NUL || echo 0" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="GitFilesAreClean" />
|
||||
</Exec>
|
||||
<Exec Command="git diff-index --cached --quiet HEAD -- 2>NUL || echo 0" ConsoleToMSBuild="true" IgnoreExitCode="true" Condition="'$(GitFilesAreClean)'==''">
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="GitFilesAreClean" />
|
||||
</Exec>
|
||||
</Target>
|
||||
|
||||
<Target Name="MakeVersionHeader" DependsOnTargets="MakeDestDir;GetGitState">
|
||||
<PropertyGroup Condition="'$(GitFilesAreClean)'=='0'">
|
||||
<GitHash>$(GitHash)-dirty</GitHash>
|
||||
</PropertyGroup>
|
||||
<Target Name="MakeVersionHdr" DependsOnTargets="MakeDestDir">
|
||||
<PropertyGroup>
|
||||
<DestFile>$(DestDir)py-version.h</DestFile>
|
||||
<DestFile>$(DestDir)mpversion.h</DestFile>
|
||||
<TmpFile>$(DestFile).tmp</TmpFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<Ver>$([System.Text.RegularExpressions.Regex]::Match($(GitTag), `^v[0-9\.]{5}`))</Ver>
|
||||
<Ver Condition="'$(Ver)'==''">v0.0.1</Ver>
|
||||
<Ver>$(Ver.Remove(0, 1))</Ver>
|
||||
<VerMajor>$(Ver.Split(`.`)[0])</VerMajor>
|
||||
<VerMinor>$(Ver.Split(`.`)[1])</VerMinor>
|
||||
<VerMicro>$(Ver.Split(`.`)[2])</VerMicro>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Lines Include="// This file was generated by $([System.IO.Path]::GetFileName(`$(MsBuildThisFile)`))"/>
|
||||
<Lines Include="#define MICROPY_GIT_TAG "$(GitTag)""/>
|
||||
<Lines Include="#define MICROPY_GIT_HASH "$(GitHash)""/>
|
||||
<Lines Include="#define MICROPY_BUILD_DATE "$([System.DateTime]::Now.ToString(`yyyy-MM-dd`))""/>
|
||||
<Lines Include="#define MICROPY_VERSION_MAJOR ($(VerMajor))"/>
|
||||
<Lines Include="#define MICROPY_VERSION_MINOR ($(VerMinor))"/>
|
||||
<Lines Include="#define MICROPY_VERSION_MICRO ($(VerMicro))"/>
|
||||
<Lines Include="#define MICROPY_VERSION_STRING "$(Ver)""/>
|
||||
</ItemGroup>
|
||||
<WriteLinesToFile Lines="@(Lines)" File="$(TmpFile)" Overwrite="true"/>
|
||||
<Exec Command="python $(PySrcDir)makeversionhdr.py $(TmpFile)"/>
|
||||
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(DestFile)"/>
|
||||
</Target>
|
||||
|
||||
|
|
Loading…
Reference in New Issue