build: change the fallback version suffix to `+git.{sha}`
Seems to be more commonly used than the current `-commit-{sha}`.
Also cleanup/simplify the version handling code and fix the list
of dependencies in the CI scripts.
Change-Id: Ib119accf51899224eaed1963e7d7e6d71bc0c30b
diff --git a/wscript b/wscript
index 8230aad..9a77fba 100644
--- a/wscript
+++ b/wscript
@@ -161,43 +161,43 @@
Context.g_module.VERSION_SPLIT = VERSION_BASE.split('.')
# first, try to get a version string from git
- gotVersionFromGit = False
+ version_from_git = ''
try:
- cmd = ['git', 'describe', '--always', '--match', f'{GIT_TAG_PREFIX}*']
- out = subprocess.run(cmd, capture_output=True, check=True, text=True).stdout.strip()
- if out:
- gotVersionFromGit = True
- if out.startswith(GIT_TAG_PREFIX):
- Context.g_module.VERSION = out.lstrip(GIT_TAG_PREFIX)
+ cmd = ['git', 'describe', '--abbrev=8', '--always', '--match', f'{GIT_TAG_PREFIX}*']
+ version_from_git = subprocess.run(cmd, capture_output=True, check=True, text=True).stdout.strip()
+ if version_from_git:
+ if GIT_TAG_PREFIX and version_from_git.startswith(GIT_TAG_PREFIX):
+ Context.g_module.VERSION = version_from_git[len(GIT_TAG_PREFIX):]
+ elif not GIT_TAG_PREFIX and ('.' in version_from_git or '-' in version_from_git):
+ Context.g_module.VERSION = version_from_git
else:
- # no tags matched
- Context.g_module.VERSION = f'{VERSION_BASE}-commit-{out}'
+ # no tags matched (or we are in a shallow clone)
+ Context.g_module.VERSION = f'{VERSION_BASE}+git.{version_from_git}'
except (OSError, subprocess.SubprocessError):
pass
- versionFile = ctx.path.find_node('VERSION.info')
- if not gotVersionFromGit and versionFile is not None:
+ # fallback to the VERSION.info file, if it exists and is not empty
+ version_from_file = ''
+ version_file = ctx.path.find_node('VERSION.info')
+ if version_file is not None:
try:
- Context.g_module.VERSION = versionFile.read()
- return
- except EnvironmentError:
- pass
+ version_from_file = version_file.read().strip()
+ except OSError as e:
+ Logs.warn(f'{e.filename} exists but is not readable ({e.strerror})')
+ if version_from_file and not version_from_git:
+ Context.g_module.VERSION = version_from_file
+ return
- # version was obtained from git, update VERSION file if necessary
- if versionFile is not None:
- try:
- if versionFile.read() == Context.g_module.VERSION:
- # already up-to-date
- return
- except EnvironmentError as e:
- Logs.warn(f'{versionFile} exists but is not readable ({e.strerror})')
- else:
- versionFile = ctx.path.make_node('VERSION.info')
-
+ # update VERSION.info if necessary
+ if version_from_file == Context.g_module.VERSION:
+ # already up-to-date
+ return
+ if version_file is None:
+ version_file = ctx.path.make_node('VERSION.info')
try:
- versionFile.write(Context.g_module.VERSION)
- except EnvironmentError as e:
- Logs.warn(f'{versionFile} is not writable ({e.strerror})')
+ version_file.write(Context.g_module.VERSION)
+ except OSError as e:
+ Logs.warn(f'{e.filename} is not writable ({e.strerror})')
def dist(ctx):
ctx.algo = 'tar.xz'