distro-manifest-generator: add support for JSON output format
[AGL/meta-agl.git] / meta-agl-profile-core / recipes-core / distro-build-manifest / distro-build-manifest.bb
index 0ef48b2..a3b3412 100644 (file)
@@ -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