From 7d027fc6280a9ffe234736a38c8aed32243a4dd6 Mon Sep 17 00:00:00 2001 From: Stephane Desneux Date: Wed, 21 Nov 2018 22:04:28 +0000 Subject: distro-manifest-generator: add support for JSON output format Distro build manifest is easier to parse if output is made in a structured format. Adding JSON output format will allow bindings to read information more easily. The files created are now: On target: * /etc/platform-info/build (shell format) * /etc/platform-info/build.json (JSON format) In image deploy dir (.../tmp/deploy/images/$MACHINE/): * build-info (shell format) * build-info.json (JSON format) In sdk deploy dir (.../tmp/deploy/sdk/): * poky-agl-.build-info (shell format) * poky-agl-.build-info.json (JSON format) Bug-AGL: SPEC-720, SPEC-1917 Change-Id: If45d2c5dd96b15ce790aa7f7f97c24f119ad117b Signed-off-by: Stephane Desneux --- .../distro-build-manifest/distro-build-manifest.bb | 107 +++++++++++++-------- 1 file changed, 66 insertions(+), 41 deletions(-) (limited to 'meta-agl-profile-core/recipes-core') diff --git a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb index 0ef48b272..a3b341230 100644 --- a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb +++ b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb @@ -1,30 +1,69 @@ SUMMARY = "Distribution build manifest" -DESCRIPTION = "The /etc/platform-build-info file contains build manifest (SPEC-720)." +DESCRIPTION = "The folder /etc/platform-info contains build manifest (SPEC-720)." LICENSE = "MIT" # information distributed by the package is machine specific PACKAGE_ARCH = "${MACHINE_ARCH}" # dependencies of ${DISTRO_MANIFEST_GENERATOR} -DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native" +DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native jq-native" # force a rebuild everytime a build is started do_compile[nostamp] = "1" -do_compilestep1 () { +# borrowed to os-release.bb (output format is very close) +python do_compilestep1 () { + import shutil + with open(d.expand('${B}/bbinfo-deploy'),'w') as f: + allkeys=[] + for field in d.getVar('BUILD_MANIFEST_FIELDS_DEPLOY').split(): + key='DIST_BB_{0}'.format(field) + allkeys.append(key) + value=d.getVar(field) + if value: + f.write('{0}="{1}"\n'.format(key,value)) + f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[deploy]="%s"' % ' '.join(allkeys)) + + with open(d.expand('${B}/bbinfo-target'),'w') as f: + allkeys=[] + for field in d.getVar('BUILD_MANIFEST_FIELDS_TARGET').split(): + key='DIST_BB_{0}'.format(field) + allkeys.append(key) + value=d.getVar(field) + if value: + f.write('{0}="{1}"\n'.format(key,value)) + f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[target]="%s"' % ' '.join(allkeys)) + + with open(d.expand('${B}/bbinfo-sdk'),'w') as f: + allkeys=[] + for field in d.getVar('BUILD_MANIFEST_FIELDS_SDK').split(): + key='DIST_BB_{0}'.format(field) + allkeys.append(key) + value=d.getVar(field) + if value: + f.write('{0}="{1}"\n'.format(key,value)) + f.write('declare -A BITBAKE_VARS\nBITBAKE_VARS[sdk]="%s"' % ' '.join(allkeys)) +} + +do_compilestep2 () { rc=99 - outfile=${B}/platform-build-info + outfile=${B}/build-info if [ -x "${DISTRO_MANIFEST_GENERATOR}" -a -f "${DISTRO_SETUP_MANIFEST}" ]; then - ${DISTRO_MANIFEST_GENERATOR} ${DISTRO_SETUP_MANIFEST} deploy >${outfile}-deploy - rc1=$? - ${DISTRO_MANIFEST_GENERATOR} ${DISTRO_SETUP_MANIFEST} target >${outfile}-target - rc2=$? - ${DISTRO_MANIFEST_GENERATOR} ${DISTRO_SETUP_MANIFEST} sdk >${outfile}-sdk - rc=$? - - if [ "$rc1" -ne 0 -o "$rc2" -ne 0 -o "$rc3" -ne 0 ]; then - rc=98 - fi + rc=0 + for format in bash json; do + if [ "$format" = "json" ]; then + ext=".json" + else + ext="" + fi + for mode in deploy target sdk; do + ${DISTRO_MANIFEST_GENERATOR} -m $mode -f $format -s ${B}/bbinfo-${mode} ${DISTRO_SETUP_MANIFEST} >${outfile}-${mode}${ext} + rc=$? + if [ $rc -ne 0 ]; then + break + fi + done + done else if [ -z "${DISTRO_MANIFEST_GENERATOR}" ]; then echo "The name of the generation script is not defined." @@ -48,30 +87,9 @@ do_compilestep1 () { return $rc } -# borrowed to os-release.bb (output format is very close) -python do_compilestep2 () { - import shutil - with open(d.expand('${B}/platform-build-info-deploy'),'a') as f: - for field in d.getVar('BUILD_MANIFEST_FIELDS_DEPLOY').split(): - value=d.getVar(field) - if value: - f.write('DIST_BB_{0}="{1}"\n'.format(field,value)) - - with open(d.expand('${B}/platform-build-info-target'),'a') as f: - for field in d.getVar('BUILD_MANIFEST_FIELDS_TARGET').split(): - value=d.getVar(field) - if value: - f.write('DIST_BB_{0}="{1}"\n'.format(field,value)) - - with open(d.expand('${B}/platform-build-info-sdk'),'a') as f: - for field in d.getVar('BUILD_MANIFEST_FIELDS_SDK').split(): - value=d.getVar(field) - if value: - f.write('DIST_BB_{0}="{1}"\n'.format(field,value)) -} -do_compilestep2[vardeps] += " ${BUILD_MANIFEST_FIELDS_DEPLOY}" -do_compilestep2[vardeps] += " ${BUILD_MANIFEST_FIELDS_TARGET}" -do_compilestep2[vardeps] += " ${BUILD_MANIFEST_FIELDS_SDK}" +do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_DEPLOY}" +do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_TARGET}" +do_compilestep1[vardeps] += " ${BUILD_MANIFEST_FIELDS_SDK}" # combine the two steps python do_compile() { @@ -81,12 +99,19 @@ python do_compile() { do_install () { # install in target dir - install -d ${D}${sysconfdir} - install -m 0644 platform-build-info-target ${D}${sysconfdir}/platform-build-info + install -d ${D}${sysconfdir}/platform-info + install -m 0644 build-info-target ${D}${sysconfdir}/platform-info/build + install -m 0644 build-info-target.json ${D}${sysconfdir}/platform-info/build.json # also copy in deploy dir install -d ${DEPLOY_DIR_IMAGE} - install -m 0644 platform-build-info-deploy ${DEPLOY_DIR_IMAGE}/platform-build-info + install -m 0644 build-info-deploy ${DEPLOY_DIR_IMAGE}/build-info + install -m 0644 build-info-deploy.json ${DEPLOY_DIR_IMAGE}/build-info.json + + # copy into sdk deploy dir + install -d ${DEPLOY_DIR}/sdk + install -m 0644 build-info-sdk ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info + install -m 0644 build-info-sdk.json ${DEPLOY_DIR}/sdk/${SDK_NAME}.build-info.json # and copy to nativesdk package # TODO -- cgit 1.2.3-korg