From c5efb922cac979bd6d7ce257e7f337a9f8bc7552 Mon Sep 17 00:00:00 2001 From: Max Prokhorov Date: Tue, 23 Apr 2019 23:36:42 +0300 Subject: [PATCH] PlatformIO: generate core_version.h when using feature/stage (#5917) * platformio: generate core_version.h when using feature/stage * quote command line * Modify CPPFLAGS conditionally --- tools/makecorever.py | 66 ++++++++++++++++++++++++++------------- tools/platformio-build.py | 38 ++++++++++++++++++++++ 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/tools/makecorever.py b/tools/makecorever.py index fd5556630..95928bd1a 100755 --- a/tools/makecorever.py +++ b/tools/makecorever.py @@ -21,31 +21,53 @@ import argparse import os import subprocess -parser = argparse.ArgumentParser(description='Generate core_version.h') -parser.add_argument('-b', '--build_path', action='store', required=True, help='build.path variable') -parser.add_argument('-p', '--platform_path', action='store', required=True, help='platform.path variable') -parser.add_argument('-v', '--version', action='store', required=True, help='version variable') -args = parser.parse_args() +def generate(path, platform_path, git_ver="0xffffffff", git_desc="unspecified"): + def git(*args): + cmd = ["git", "-C", platform_path] + cmd.extend(args) + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) + return proc.stdout.readlines()[0].strip() -core = args.build_path + '/core' -try: - os.makedirs(core) -except: - pass + try: + git_ver = git("rev-parse", "--short=8", "HEAD") + git_desc = git("describe", "--tags") + except: + pass -out = open(core + '/core_version.h', "w") + with open(path, "w") as out: + out.write("#define ARDUINO_ESP8266_GIT_VER 0x{}\n".format(git_ver)) + out.write("#define ARDUINO_ESP8266_GIT_DESC {}\n".format(git_desc)) -try: - p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'rev-parse', '--short=8', 'HEAD'], stdout = subprocess.PIPE ) - git_ver = '0x' + p.stdout.readlines()[0].strip() - p = subprocess.Popen(['git', '--git-dir', args.platform_path + '/.git', 'describe', '--tags'], stdout = subprocess.PIPE ) - git_desc = p.stdout.readlines()[0].strip() -except: - git_ver = '0xffffffff' - git_desc = args.version -out.write('#define ARDUINO_ESP8266_GIT_VER ' + git_ver + '\n') -out.write('#define ARDUINO_ESP8266_GIT_DESC ' + git_desc + '\n') +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate core_version.h") -out.close() + parser.add_argument( + "-b", "--build_path", action="store", required=True, help="build.path variable" + ) + parser.add_argument( + "-p", + "--platform_path", + action="store", + required=True, + help="platform.path variable", + ) + parser.add_argument( + "-v", "--version", action="store", required=True, help="version variable" + ) + parser.add_argument("-i", "--include_dir", default="core") + + args = parser.parse_args() + + include_dir = os.path.join(args.build_path, args.include_dir) + try: + os.makedirs(include_dir) + except: + pass + + generate( + os.path.join(include_dir, "core_version.h"), + args.platform_path, + git_desc=args.version, + ) diff --git a/tools/platformio-build.py b/tools/platformio-build.py index deee8aac7..a784753b7 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -24,6 +24,9 @@ http://arduino.cc/en/Reference/HomePage # Extends: https://github.com/platformio/platform-espressif8266/blob/develop/builder/main.py +import os +import subprocess + from os.path import isdir, join from SCons import Builder, Util @@ -220,6 +223,41 @@ app_ld = env.Command( "Generating LD script $TARGET")) env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", app_ld) +# +# Dynamic core_version.h for staging builds +# + +def platform_txt_version(default): + with open(join(FRAMEWORK_DIR, "platform.txt"), "r") as platform_txt: + for line in platform_txt: + if not line: + continue + k, delim, v = line.partition("=") + if not delim: + continue + if k == "version": + return v.strip() + + return default + +if isdir(join(FRAMEWORK_DIR, ".git")): + cmd = '"$PYTHONEXE" "{script}" -b "$BUILD_DIR" -p "{framework_dir}" -v {version}' + fmt = { + "script": join(FRAMEWORK_DIR, "tools", "makecorever.py"), + "framework_dir": FRAMEWORK_DIR, + "version": platform_txt_version("unspecified") + } + + env.Prepend(CPPPATH=[ + join("$BUILD_DIR", "core") + ]) + core_version = env.Command( + join("$BUILD_DIR", "core", "core_version.h"), + join(FRAMEWORK_DIR, ".git"), + env.VerboseAction(cmd.format(**fmt), "Generating $TARGET") + ) + env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", core_version) + # # Target: Build Core Library