132 lines
5.1 KiB
Plaintext
132 lines
5.1 KiB
Plaintext
|
|
# This recipe append assumes that all YADRO branches follow the
|
||
|
|
# <type>/<product>/<description> convention, or are either
|
||
|
|
# "merge/upstream" or "master" e.g.:
|
||
|
|
#
|
||
|
|
# release/nicole/v1
|
||
|
|
# feature/vesnin/some-feature
|
||
|
|
# merge/upstream
|
||
|
|
# master
|
||
|
|
#
|
||
|
|
# Release branches (release/<machine>/vX) are expected to be forked off
|
||
|
|
# the master branch and may contain tags in the form
|
||
|
|
# <machine>-vX.Y[-rcZ|-dev*]. All release branches without machine tags,
|
||
|
|
# as well as any non-release branches produce 'Unofficial' builds.
|
||
|
|
# So do the release branches with -rc or -dev suffix in the latest tag.
|
||
|
|
|
||
|
|
python do_compile:prepend() {
|
||
|
|
print ("Preparing YADRO-specific version information")
|
||
|
|
version_id = d.getVar('VERSION_ID')
|
||
|
|
|
||
|
|
print ('Original VERSION_ID = %s' % version_id)
|
||
|
|
|
||
|
|
versionList = version_id.split('-')
|
||
|
|
|
||
|
|
branch_info = run_git(d, 'rev-parse --abbrev-ref HEAD').split('/')
|
||
|
|
branch_type = branch_info[0]
|
||
|
|
|
||
|
|
if len(branch_info) > 1:
|
||
|
|
branch_product = branch_info[1]
|
||
|
|
else:
|
||
|
|
branch_product = d.getVar('MACHINE', True).split('-')[0]
|
||
|
|
|
||
|
|
if len(branch_info) > 2:
|
||
|
|
# This is for <type>/<product>/<description> branches
|
||
|
|
# and <type>/<product>/<any>/<level>/<of>/<hierarchy> branches alike
|
||
|
|
branch_name = '-'.join(branch_info[2::])
|
||
|
|
else:
|
||
|
|
# This is for "merge/upstream", "master" and any arbitrary branches
|
||
|
|
branch_name = '-'.join(branch_info)
|
||
|
|
|
||
|
|
print ('Branch type = %s' % branch_type)
|
||
|
|
print ('Branch product = %s' % branch_product)
|
||
|
|
print ('Branch name = %s' % branch_name)
|
||
|
|
|
||
|
|
# For <product>-vX.Y tags, simply strip off the '<product>-' part,
|
||
|
|
# then pretend it is a normal version tag
|
||
|
|
product_tagged = False
|
||
|
|
if branch_product == versionList[0]:
|
||
|
|
product_tagged = True
|
||
|
|
versionList.pop(0)
|
||
|
|
|
||
|
|
rcdev = ""
|
||
|
|
version = versionList[0] if len(versionList) > 0 else ''
|
||
|
|
if versionList[1][:2] == 'rc' or versionList[1] == 'dev': # Remove the '-rcX' and '-dev' parts
|
||
|
|
rcdev = versionList[1]
|
||
|
|
versionList.pop(1)
|
||
|
|
patch_level = versionList[1] if len(versionList) > 1 else 0
|
||
|
|
git_hash = versionList[2] if len(versionList) > 2 else 'nongit'
|
||
|
|
dirty = ('dirty' == versionList[3]) if len(versionList) > 3 else 0
|
||
|
|
|
||
|
|
# For release branches:
|
||
|
|
if 'release' == branch_type:
|
||
|
|
flag = ''
|
||
|
|
if not product_tagged:
|
||
|
|
# If there is no tag, take branch name for the major version
|
||
|
|
# and assume the minor version to be 0, patch level will
|
||
|
|
# represent the number of commits since branch creation
|
||
|
|
# (assuming that it branched off the master branch)
|
||
|
|
patch_level = run_git(d, 'rev-list --count origin/master..%s'
|
||
|
|
% '/'.join(branch_info))
|
||
|
|
# Prevent zero patch level. Zero patch level is an official release.
|
||
|
|
patch_level = str(int(patch_level) + 1)
|
||
|
|
version = branch_name.split('-')[0]
|
||
|
|
version += '.0'
|
||
|
|
# Any build from a release/<product>/* branch without a <product>-* tag
|
||
|
|
# is not an official release
|
||
|
|
release = 'Unofficial ' + branch_name
|
||
|
|
flag = '-unofficial'
|
||
|
|
else:
|
||
|
|
# If there is a product tag, then it is used as the normal tag to
|
||
|
|
# designate the major and minor version, patch level is as usual
|
||
|
|
# the number of commits since the tag.
|
||
|
|
release = version
|
||
|
|
if (rcdev):
|
||
|
|
flag = '-' + rcdev
|
||
|
|
release += flag
|
||
|
|
# Official releases happen only exactly on tags, without extra
|
||
|
|
# commits. Release candidates and development releases are also
|
||
|
|
# not considered 'official'
|
||
|
|
if int(patch_level) or rcdev:
|
||
|
|
release = 'Unofficial ' + release
|
||
|
|
flag += '-unofficial'
|
||
|
|
|
||
|
|
version_id = version
|
||
|
|
version_id += 'r' + git_hash[1:7]
|
||
|
|
version_id += ('p' + patch_level) if int(patch_level) else ''
|
||
|
|
version_id += flag
|
||
|
|
version_id += '-dirty' if dirty else ''
|
||
|
|
name = 'YADRO %s BMC Firmware'
|
||
|
|
else:
|
||
|
|
version_id += ("-" + branch_name) if (branch_name) else ''
|
||
|
|
release = version_id
|
||
|
|
name = 'YADRO %s BMC Development Firmware'
|
||
|
|
|
||
|
|
u_product = branch_product.upper()
|
||
|
|
|
||
|
|
d.setVar('VERSION_ID', version_id)
|
||
|
|
d.setVar('VERSION', version)
|
||
|
|
d.setVar('RELEASE', release)
|
||
|
|
d.setVar('PATCH_LEVEL', patch_level)
|
||
|
|
d.setVar('NAME', '%s' % (name % u_product))
|
||
|
|
d.setVar('PRETTY_NAME', '%s %s' % (name % u_product, release))
|
||
|
|
|
||
|
|
print ('%s VERSION_ID = %s' % (u_product, version_id))
|
||
|
|
print ('%s RELEASE = %s' % (u_product, release))
|
||
|
|
print ('%s PATCH_LEVEL = %s' % (u_product, patch_level))
|
||
|
|
}
|
||
|
|
|
||
|
|
python do_compile:append () {
|
||
|
|
with open(d.expand('${B}/issue'), 'w') as f:
|
||
|
|
f.write('%s %s @ \\l\n' % (name % u_product, release))
|
||
|
|
}
|
||
|
|
|
||
|
|
do_install:append () {
|
||
|
|
install -m 0644 issue ${D}${sysconfdir}/issue
|
||
|
|
install -m 0644 issue ${D}${sysconfdir}/issue.net
|
||
|
|
}
|
||
|
|
|
||
|
|
CONFFILES:${PN} += " ${sysconfdir}/issue ${sysconfdir}/issue.net"
|
||
|
|
FILES:${PN} += " ${sysconfdir}/issue ${sysconfdir}/issue.net"
|
||
|
|
OS_RELEASE_FIELDS:append = " RELEASE PATCH_LEVEL"
|
||
|
|
BB_DONT_CACHE = "1"
|