summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-core/os-release
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-core/os-release')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/os-release/os-release.bbappend36
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/os-release/version-vars.inc93
2 files changed, 129 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-core/os-release/os-release.bbappend b/meta-openbmc-mods/meta-common/recipes-core/os-release/os-release.bbappend
new file mode 100644
index 000000000..65739f638
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-core/os-release/os-release.bbappend
@@ -0,0 +1,36 @@
+# WARNING!
+#
+# These modifications to os-release disable the bitbake parse
+# cache (for the os-release recipe only). Before copying
+# and pasting into another recipe ensure it is understood
+# what that means!
+
+require version-vars.inc
+
+OS_RELEASE_FIELDS:append = " OPENBMC_VERSION IPMI_MAJOR IPMI_MINOR IPMI_AUX13 IPMI_AUX14 IPMI_AUX15 IPMI_AUX16"
+
+OS_RELEASE_FIELDS:remove = "BUILD_ID"
+
+python do_compile:append () {
+ import glob
+ with open(d.expand('${B}/os-release'), 'a') as f:
+ corebase = d.getVar('COREBASE', True)
+ f.write('\n# Build Configuration Details\n')
+ repo_status(d, f, corebase, '')
+ repo_status(d, f, os.path.join(corebase, 'meta-openbmc-mods'), '--tags')
+ appends_dir = os.path.join(d.getVar('TOPDIR', True), 'workspace', 'appends')
+
+ for fn in glob.glob(os.path.join(appends_dir, '*.bbappend')):
+ with open(fn, 'r') as bb_f:
+ for line in bb_f:
+ if line.startswith('# srctreebase: '):
+ srctreebase = line.split(':', 1)[1].strip()
+ repo_status(d, f, srctreebase, '--tags')
+}
+
+
+# Ensure the git commands run every time bitbake is invoked.
+BB_DONT_CACHE = "1"
+
+# Make os-release available to other recipes.
+SYSROOT_DIRS:append = " ${sysconfdir}"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/os-release/version-vars.inc b/meta-openbmc-mods/meta-common/recipes-core/os-release/version-vars.inc
new file mode 100644
index 000000000..df43dae89
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-core/os-release/version-vars.inc
@@ -0,0 +1,93 @@
+def irun_git(d, oeroot, git_cmd, **kwargs):
+ err = None
+ try:
+ cmd = 'git --work-tree {} --git-dir {}/.git {}'.format(oeroot, oeroot, git_cmd)
+ ret, err = bb.process.run(cmd, **kwargs)
+ if err is not None:
+ ret += err
+ except bb.process.ExecutionError as e:
+ ret = ''
+ if e.stdout is not None:
+ ret += e.stdout
+ if e.stderr is not None:
+ ret += e.stderr
+ except Exception as e:
+ ret = str(e)
+ return ret.strip('\n')
+
+def repo_status(d, f, repo, tagargs):
+ import subprocess
+
+ cmd_list = [['HEAD', 'rev-parse HEAD'],
+ ['TAG', 'describe {} --dirty --long'.format(tagargs)],
+ ['STATUS', 'status -sb']]
+
+ f.write(('\n# REPOSITORY: {} '.format(os.path.basename(repo))).ljust(80, '+') + '\n')
+ for item in cmd_list:
+ f.write('# {}: '.format(item[0]))
+ sb = irun_git(d, repo, item[1])
+ if sb:
+ sb_lines = sb.split('\n')
+ if len(sb_lines) == 1:
+ f.write(sb_lines[0])
+ else:
+ f.write('\n# ' + '\n# '.join(sb_lines))
+ f.write('\n')
+
+python() {
+ import re
+
+ gen = d.getVar('PRODUCT_GENERATION', True)
+ if gen is None:
+ gen = 'unknown'
+
+ corebase = d.getVar('COREBASE', True)
+ mibase = os.path.join(corebase, 'meta-openbmc-mods')
+ obmc_vers = irun_git(d, corebase, 'describe --dirty --long')
+ if obmc_vers is None:
+ raise bb.build.FuncFailed("Missing version tag for openbmc-openbmc")
+ d.setVar('OPENBMC_VERSION', obmc_vers)
+
+ obmc_hash = irun_git(d, corebase, 'rev-parse HEAD')
+ meta_vers = irun_git(d, mibase,
+ 'describe --long --abbrev=6 ' +
+ '--match \'{}-[0-9]*\.[0-9]*\''.format(gen))
+
+ # If no tag, provide default version
+ if meta_vers.startswith('fatal:'):
+ ver_list = obmc_vers.split('-')
+ obmc_tag_list = ver_list[1].split('.')
+ obmc_major_revision = 0
+ obmc_minor_revision = 0
+ obmc_minor_spare = 0
+ try:
+ obmc_major_revision = int(obmc_tag_list[0])
+ obmc_minor_revision = int(obmc_tag_list[1])
+ obmc_minor_spare = int(ver_list[2])
+ except ValueError:
+ bb.warn("Invalid obmc_vers: {}".format(obmc_vers))
+ meta_vers = '{}-{}.{}-{}-g{}'.format(gen,obmc_major_revision,
+ obmc_minor_revision,obmc_minor_spare,obmc_hash[0:6])
+
+ meta_hash = irun_git(d, mibase, 'rev-parse HEAD')
+ # If no hash, provide default
+ if meta_hash.startswith('fatal:'):
+ meta_hash = obmc_hash[0:7]
+ version_id = '{}-{}'.format(meta_vers, obmc_hash[0:7])
+ if version_id:
+ d.setVar('VERSION_ID', version_id)
+ versionList = version_id.split('-')
+ versionList = re.split('-|\.', version_id)
+ version = '{}.{}-{}'.format(versionList[0], versionList[1], versionList[2])
+ d.setVar('VERSION', version)
+ d.setVar('IPMI_MAJOR', versionList[1])
+ d.setVar('IPMI_MINOR', versionList[2])
+ d.setVar('IPMI_AUX13', hex(min(int(versionList[3]), 0xff)))
+ d.setVar('IPMI_AUX14', '0x{}'.format(meta_hash[0:2]))
+ d.setVar('IPMI_AUX15', '0x{}'.format(meta_hash[2:4]))
+ d.setVar('IPMI_AUX16', '0x{}'.format(meta_hash[4:6]))
+
+ build_id = irun_git(d, mibase, 'describe --abbrev=0')
+ if build_id:
+ d.setVar('BUILD_ID', build_id)
+}