summaryrefslogtreecommitdiffstats
path: root/meta/classes/buildhistory.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/buildhistory.bbclass')
-rw-r--r--meta/classes/buildhistory.bbclass130
1 files changed, 90 insertions, 40 deletions
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 07b3c1edaf..b559ebf8ac 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -3,14 +3,15 @@
3# 3#
4# Based in part on testlab.bbclass and packagehistory.bbclass 4# Based in part on testlab.bbclass and packagehistory.bbclass
5# 5#
6# Copyright (C) 2011 Intel Corporation 6# Copyright (C) 2013 Intel Corporation
7# Copyright (C) 2007-2011 Koen Kooi <koen@openembedded.org> 7# Copyright (C) 2007-2011 Koen Kooi <koen@openembedded.org>
8# 8#
9 9
10BUILDHISTORY_FEATURES ?= "image package" 10BUILDHISTORY_FEATURES ?= "image package sdk"
11BUILDHISTORY_DIR ?= "${TMPDIR}/buildhistory" 11BUILDHISTORY_DIR ?= "${TMPDIR}/buildhistory"
12BUILDHISTORY_DIR_IMAGE = "${BUILDHISTORY_DIR}/images/${MACHINE_ARCH}/${TCLIBC}/${IMAGE_BASENAME}" 12BUILDHISTORY_DIR_IMAGE = "${BUILDHISTORY_DIR}/images/${MACHINE_ARCH}/${TCLIBC}/${IMAGE_BASENAME}"
13BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}/${PN}" 13BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}/${PN}"
14BUILDHISTORY_DIR_SDK = "${BUILDHISTORY_DIR}/sdk/${SDK_NAME}"
14BUILDHISTORY_COMMIT ?= "0" 15BUILDHISTORY_COMMIT ?= "0"
15BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>" 16BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>"
16BUILDHISTORY_PUSH_REPO ?= "" 17BUILDHISTORY_PUSH_REPO ?= ""
@@ -315,69 +316,91 @@ def write_pkghistory(pkginfo, d):
315 os.unlink(filevarpath) 316 os.unlink(filevarpath)
316 317
317 318
318buildhistory_get_image_installed() { 319buildhistory_get_installed() {
319 # Anything requiring the use of the packaging system should be done in here 320 mkdir -p $1
320 # in case the packaging files are going to be removed for this image
321
322 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'image', '1', '0', d)}" = "0" ] ; then
323 return
324 fi
325
326 mkdir -p ${BUILDHISTORY_DIR_IMAGE}
327 321
328 # Get list of installed packages 322 # Get list of installed packages
329 pkgcache="${BUILDHISTORY_DIR_IMAGE}/installed-packages.tmp" 323 pkgcache="$1/installed-packages.tmp"
330 list_installed_packages file | sort > $pkgcache 324 list_installed_packages file | sort > $pkgcache
331 325
332 cat $pkgcache | awk '{ print $1 }' > ${BUILDHISTORY_DIR_IMAGE}/installed-package-names.txt 326 cat $pkgcache | awk '{ print $1 }' > $1/installed-package-names.txt
333 cat $pkgcache | awk '{ print $2 }' | xargs -n1 basename > ${BUILDHISTORY_DIR_IMAGE}/installed-packages.txt 327 cat $pkgcache | awk '{ print $2 }' | xargs -n1 basename > $1/installed-packages.txt
334 328
335 # Produce dependency graph 329 # Produce dependency graph
336 # First, filter out characters that cause issues for dot 330 # First, filter out characters that cause issues for dot
337 rootfs_list_installed_depends | sed -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' > ${BUILDHISTORY_DIR_IMAGE}/depends.tmp 331 rootfs_list_installed_depends | sed -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' > $1/depends.tmp
338 # Change delimiter from pipe to -> and set style for recommend lines 332 # Change delimiter from pipe to -> and set style for recommend lines
339 sed -i -e 's:|: -> :' -e 's:\[REC\]:[style=dotted]:' -e 's:$:;:' ${BUILDHISTORY_DIR_IMAGE}/depends.tmp 333 sed -i -e 's:|: -> :' -e 's:\[REC\]:[style=dotted]:' -e 's:$:;:' $1/depends.tmp
340 # Add header, sorted and de-duped contents and footer and then delete the temp file 334 # Add header, sorted and de-duped contents and footer and then delete the temp file
341 printf "digraph depends {\n node [shape=plaintext]\n" > ${BUILDHISTORY_DIR_IMAGE}/depends.dot 335 printf "digraph depends {\n node [shape=plaintext]\n" > $1/depends.dot
342 cat ${BUILDHISTORY_DIR_IMAGE}/depends.tmp | sort | uniq >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot 336 cat $1/depends.tmp | sort | uniq >> $1/depends.dot
343 echo "}" >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot 337 echo "}" >> $1/depends.dot
344 rm ${BUILDHISTORY_DIR_IMAGE}/depends.tmp 338 rm $1/depends.tmp
345 339
346 # Produce installed package sizes list 340 # Produce installed package sizes list
347 printf "" > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp 341 printf "" > $1/installed-package-sizes.tmp
348 cat $pkgcache | while read pkg pkgfile 342 cat $pkgcache | while read pkg pkgfile
349 do 343 do
350 if [ -f $pkgfile ] ; then 344 if [ -f $pkgfile ] ; then
351 pkgsize=`du -k $pkgfile | head -n1 | awk '{ print $1 }'` 345 pkgsize=`du -k $pkgfile | head -n1 | awk '{ print $1 }'`
352 echo $pkgsize $pkg >> ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp 346 echo $pkgsize $pkg >> $1/installed-package-sizes.tmp
353 fi 347 fi
354 done 348 done
355 cat ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.txt 349 cat $1/installed-package-sizes.tmp | sort -n -r | awk '{print $1 "\tKiB " $2}' > $1/installed-package-sizes.txt
356 rm ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp 350 rm $1/installed-package-sizes.tmp
357 351
358 # We're now done with the cache, delete it 352 # We're now done with the cache, delete it
359 rm $pkgcache 353 rm $pkgcache
360 354
361 # Produce some cut-down graphs (for readability) 355 if [ "$2" != "sdk" ] ; then
362 grep -v kernel_image ${BUILDHISTORY_DIR_IMAGE}/depends.dot | grep -v kernel_2 | grep -v kernel_3 > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot 356 # Produce some cut-down graphs (for readability)
363 grep -v libc6 ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot | grep -v libgcc > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot 357 grep -v kernel_image $1/depends.dot | grep -v kernel_2 | grep -v kernel_3 > $1/depends-nokernel.dot
364 grep -v update_ ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot 358 grep -v libc6 $1/depends-nokernel.dot | grep -v libgcc > $1/depends-nokernel-nolibc.dot
365 grep -v kernel_module ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate-nomodules.dot 359 grep -v update_ $1/depends-nokernel-nolibc.dot > $1/depends-nokernel-nolibc-noupdate.dot
360 grep -v kernel_module $1/depends-nokernel-nolibc-noupdate.dot > $1/depends-nokernel-nolibc-noupdate-nomodules.dot
361 fi
366 362
367 # add complementary package information 363 # add complementary package information
368 if [ -e ${WORKDIR}/complementary_pkgs.txt ]; then 364 if [ -e ${WORKDIR}/complementary_pkgs.txt ]; then
369 cp ${WORKDIR}/complementary_pkgs.txt ${BUILDHISTORY_DIR_IMAGE} 365 cp ${WORKDIR}/complementary_pkgs.txt $1
370 fi 366 fi
371} 367}
372 368
373buildhistory_get_imageinfo() { 369buildhistory_get_image_installed() {
370 # Anything requiring the use of the packaging system should be done in here
371 # in case the packaging files are going to be removed for this image
372
374 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'image', '1', '0', d)}" = "0" ] ; then 373 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'image', '1', '0', d)}" = "0" ] ; then
375 return 374 return
376 fi 375 fi
377 376
378 # List the files in the image, but exclude date/time etc. 377 buildhistory_get_installed ${BUILDHISTORY_DIR_IMAGE}
378}
379
380buildhistory_get_sdk_installed() {
381 # Anything requiring the use of the packaging system should be done in here
382 # in case the packaging files are going to be removed for this SDK
383
384 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'sdk', '1', '0', d)}" = "0" ] ; then
385 return
386 fi
387
388 buildhistory_get_installed ${BUILDHISTORY_DIR_SDK}/$1 sdk
389}
390
391buildhistory_list_files() {
392 # List the files in the specified directory, but exclude date/time etc.
379 # This awk script is somewhat messy, but handles where the size is not printed for device files under pseudo 393 # This awk script is somewhat messy, but handles where the size is not printed for device files under pseudo
380 ( cd ${IMAGE_ROOTFS} && find . -ls | awk '{ if ( $7 ~ /[0-9]/ ) printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, $7, $11, $12, $13 ; else printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, 0, $10, $11, $12 }' | sort -k5 > ${BUILDHISTORY_DIR_IMAGE}/files-in-image.txt ) 394 ( cd $1 && find . -ls | awk '{ if ( $7 ~ /[0-9]/ ) printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, $7, $11, $12, $13 ; else printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, 0, $10, $11, $12 }' | sort -k5 > $2 )
395}
396
397
398buildhistory_get_imageinfo() {
399 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'image', '1', '0', d)}" = "0" ] ; then
400 return
401 fi
402
403 buildhistory_list_files ${IMAGE_ROOTFS} ${BUILDHISTORY_DIR_IMAGE}/files-in-image.txt
381 404
382 # Record some machine-readable meta-information about the image 405 # Record some machine-readable meta-information about the image
383 printf "" > ${BUILDHISTORY_DIR_IMAGE}/image-info.txt 406 printf "" > ${BUILDHISTORY_DIR_IMAGE}/image-info.txt
@@ -395,11 +418,32 @@ ${@buildhistory_get_layers(d)}
395END 418END
396} 419}
397 420
421buildhistory_get_sdkinfo() {
422 if [ "${@base_contains('BUILDHISTORY_FEATURES', 'sdk', '1', '0', d)}" = "0" ] ; then
423 return
424 fi
425
426 buildhistory_list_files ${SDK_OUTPUT} ${BUILDHISTORY_DIR_SDK}/files-in-sdk.txt
427
428 # Record some machine-readable meta-information about the SDK
429 printf "" > ${BUILDHISTORY_DIR_SDK}/sdk-info.txt
430 cat >> ${BUILDHISTORY_DIR_SDK}/sdk-info.txt <<END
431${@buildhistory_get_sdkvars(d)}
432END
433 sdksize=`du -ks ${SDK_OUTPUT} | awk '{ print $1 }'`
434 echo "SDKSIZE = $sdksize" >> ${BUILDHISTORY_DIR_SDK}/sdk-info.txt
435}
436
398# By prepending we get in before the removal of packaging files 437# By prepending we get in before the removal of packaging files
399ROOTFS_POSTPROCESS_COMMAND =+ "buildhistory_get_image_installed ; " 438ROOTFS_POSTPROCESS_COMMAND =+ "buildhistory_get_image_installed ; "
400 439
401IMAGE_POSTPROCESS_COMMAND += " buildhistory_get_imageinfo ; " 440IMAGE_POSTPROCESS_COMMAND += " buildhistory_get_imageinfo ; "
402 441
442POPULATE_SDK_POST_TARGET_COMMAND += "buildhistory_get_sdk_installed target ; "
443POPULATE_SDK_POST_HOST_COMMAND += "buildhistory_get_sdk_installed host ; "
444
445SDK_POSTPROCESS_COMMAND += "buildhistory_get_sdkinfo ; "
446
403def buildhistory_get_layers(d): 447def buildhistory_get_layers(d):
404 layertext = "Configured metadata layers:\n%s\n" % '\n'.join(get_layers_branch_rev(d)) 448 layertext = "Configured metadata layers:\n%s\n" % '\n'.join(get_layers_branch_rev(d))
405 return layertext 449 return layertext
@@ -418,15 +462,11 @@ def squashspaces(string):
418 import re 462 import re
419 return re.sub("\s+", " ", string).strip() 463 return re.sub("\s+", " ", string).strip()
420 464
421 465def outputvars(vars, listvars, d):
422def buildhistory_get_imagevars(d): 466 vars = vars.split()
423 imagevars = "DISTRO DISTRO_VERSION USER_CLASSES IMAGE_CLASSES IMAGE_FEATURES IMAGE_LINGUAS IMAGE_INSTALL BAD_RECOMMENDATIONS ROOTFS_POSTPROCESS_COMMAND IMAGE_POSTPROCESS_COMMAND"
424 listvars = "USER_CLASSES IMAGE_CLASSES IMAGE_FEATURES IMAGE_LINGUAS IMAGE_INSTALL BAD_RECOMMENDATIONS"
425
426 imagevars = imagevars.split()
427 listvars = listvars.split() 467 listvars = listvars.split()
428 ret = "" 468 ret = ""
429 for var in imagevars: 469 for var in vars:
430 value = d.getVar(var, True) or "" 470 value = d.getVar(var, True) or ""
431 if var in listvars: 471 if var in listvars:
432 # Squash out spaces 472 # Squash out spaces
@@ -434,6 +474,16 @@ def buildhistory_get_imagevars(d):
434 ret += "%s = %s\n" % (var, value) 474 ret += "%s = %s\n" % (var, value)
435 return ret.rstrip('\n') 475 return ret.rstrip('\n')
436 476
477def buildhistory_get_imagevars(d):
478 imagevars = "DISTRO DISTRO_VERSION USER_CLASSES IMAGE_CLASSES IMAGE_FEATURES IMAGE_LINGUAS IMAGE_INSTALL BAD_RECOMMENDATIONS ROOTFS_POSTPROCESS_COMMAND IMAGE_POSTPROCESS_COMMAND"
479 listvars = "USER_CLASSES IMAGE_CLASSES IMAGE_FEATURES IMAGE_LINGUAS IMAGE_INSTALL BAD_RECOMMENDATIONS"
480 return outputvars(imagevars, listvars, d)
481
482def buildhistory_get_sdkvars(d):
483 sdkvars = "DISTRO DISTRO_VERSION SDK_NAME SDK_VERSION SDKMACHINE SDKIMAGE_FEATURES BAD_RECOMMENDATIONS"
484 listvars = "SDKIMAGE_FEATURES BAD_RECOMMENDATIONS"
485 return outputvars(sdkvars, listvars, d)
486
437 487
438buildhistory_commit() { 488buildhistory_commit() {
439 if [ ! -d ${BUILDHISTORY_DIR} ] ; then 489 if [ ! -d ${BUILDHISTORY_DIR} ] ; then