1# 2# Writes build information to target filesystem on /etc/buildinfo 3# 4# Copyright (C) 2014 Intel Corporation 5# Author: Alejandro Enedino Hernandez Samaniego <alejandro.hernandez@intel.com> 6# 7# SPDX-License-Identifier: MIT 8# 9# Usage: add INHERIT += "image-buildinfo" to your conf file 10# 11 12# Desired variables to display 13IMAGE_BUILDINFO_VARS ?= "DISTRO DISTRO_VERSION" 14 15# Desired location of the output file in the image. 16IMAGE_BUILDINFO_FILE ??= "${sysconfdir}/buildinfo" 17SDK_BUILDINFO_FILE ??= "/buildinfo" 18 19# From buildhistory.bbclass 20def image_buildinfo_outputvars(vars, d): 21 vars = vars.split() 22 ret = "" 23 for var in vars: 24 value = d.getVar(var) or "" 25 if (d.getVarFlag(var, 'type') == "list"): 26 value = oe.utils.squashspaces(value) 27 ret += "%s = %s\n" % (var, value) 28 return ret.rstrip('\n') 29 30# Returns layer revisions along with their respective status 31def get_layer_revs(d): 32 revisions = oe.buildcfg.get_layer_revisions(d) 33 medadata_revs = ["%-17s = %s:%s%s" % (r[1], r[2], r[3], r[4]) for r in revisions] 34 return '\n'.join(medadata_revs) 35 36def buildinfo_target(d): 37 # Get context 38 if d.getVar('BB_WORKERCONTEXT') != '1': 39 return "" 40 # Single and list variables to be read 41 vars = (d.getVar("IMAGE_BUILDINFO_VARS") or "") 42 return image_buildinfo_outputvars(vars, d) 43 44python buildinfo() { 45 if not d.getVar('IMAGE_BUILDINFO_FILE'): 46 return 47 destfile = d.expand('${BUILDINFODEST}${IMAGE_BUILDINFO_FILE}') 48 bb.utils.mkdirhier(os.path.dirname(destfile)) 49 with open(destfile, 'w') as build: 50 build.writelines(( 51 '''----------------------- 52Build Configuration: | 53----------------------- 54''', 55 buildinfo_target(d), 56 ''' 57----------------------- 58Layer Revisions: | 59----------------------- 60''', 61 get_layer_revs(d), 62 ''' 63''' 64 )) 65} 66 67# Write build information to target filesystem 68python buildinfo_image () { 69 d.setVar("BUILDINFODEST", "${IMAGE_ROOTFS}") 70 bb.build.exec_func("buildinfo", d) 71} 72 73python buildinfo_sdk () { 74 d.setVar("BUILDINFODEST", "${SDK_OUTPUT}/${SDKPATH}") 75 d.setVar("IMAGE_BUILDINFO_FILE", d.getVar("SDK_BUILDINFO_FILE")) 76 bb.build.exec_func("buildinfo", d) 77} 78 79IMAGE_PREPROCESS_COMMAND += "buildinfo_image" 80POPULATE_SDK_PRE_TARGET_COMMAND += "buildinfo_sdk" 81 82