diff options
| -rw-r--r-- | meta/lib/oeqa/selftest/devtool.py | 22 | ||||
| -rw-r--r-- | scripts/lib/devtool/build-image.py | 53 |
2 files changed, 38 insertions, 37 deletions
diff --git a/meta/lib/oeqa/selftest/devtool.py b/meta/lib/oeqa/selftest/devtool.py index 6e731d6777..3a8168c2d5 100644 --- a/meta/lib/oeqa/selftest/devtool.py +++ b/meta/lib/oeqa/selftest/devtool.py | |||
| @@ -919,7 +919,8 @@ class DevtoolTests(DevtoolBase): | |||
| 919 | self.add_command_to_tearDown('bitbake -c clean %s' % image) | 919 | self.add_command_to_tearDown('bitbake -c clean %s' % image) |
| 920 | bitbake('%s -c clean' % image) | 920 | bitbake('%s -c clean' % image) |
| 921 | # Add target and native recipes to workspace | 921 | # Add target and native recipes to workspace |
| 922 | for recipe in ('mdadm', 'parted-native'): | 922 | recipes = ['mdadm', 'parted-native'] |
| 923 | for recipe in recipes: | ||
| 923 | tempdir = tempfile.mkdtemp(prefix='devtoolqa') | 924 | tempdir = tempfile.mkdtemp(prefix='devtoolqa') |
| 924 | self.track_for_cleanup(tempdir) | 925 | self.track_for_cleanup(tempdir) |
| 925 | self.add_command_to_tearDown('bitbake -c clean %s' % recipe) | 926 | self.add_command_to_tearDown('bitbake -c clean %s' % recipe) |
| @@ -927,12 +928,19 @@ class DevtoolTests(DevtoolBase): | |||
| 927 | # Try to build image | 928 | # Try to build image |
| 928 | result = runCmd('devtool build-image %s' % image) | 929 | result = runCmd('devtool build-image %s' % image) |
| 929 | self.assertNotEqual(result, 0, 'devtool build-image failed') | 930 | self.assertNotEqual(result, 0, 'devtool build-image failed') |
| 930 | # Check if image.bbappend has required content | 931 | # Check if image contains expected packages |
| 931 | bbappend = os.path.join(workspacedir, 'appends', image+'.bbappend') | 932 | deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE') |
| 932 | self.assertTrue(os.path.isfile(bbappend), 'bbappend not created %s' % result.output) | 933 | image_link_name = get_bb_var('IMAGE_LINK_NAME', image) |
| 933 | # NOTE: native recipe parted-native should not be in IMAGE_INSTALL_append | 934 | reqpkgs = [item for item in recipes if not item.endswith('-native')] |
| 934 | self.assertTrue('IMAGE_INSTALL_append = " mdadm"\n' in open(bbappend).readlines(), | 935 | with open(os.path.join(deploy_dir_image, image_link_name + '.manifest'), 'r') as f: |
| 935 | 'IMAGE_INSTALL_append = " mdadm" not found in %s' % bbappend) | 936 | for line in f: |
| 937 | splitval = line.split() | ||
| 938 | if splitval: | ||
| 939 | pkg = splitval[0] | ||
| 940 | if pkg in reqpkgs: | ||
| 941 | reqpkgs.remove(pkg) | ||
| 942 | if reqpkgs: | ||
| 943 | self.fail('The following packages were not present in the image as expected: %s' % ', '.join(reqpkgs)) | ||
| 936 | 944 | ||
| 937 | def test_devtool_upgrade(self): | 945 | def test_devtool_upgrade(self): |
| 938 | # Check preconditions | 946 | # Check preconditions |
diff --git a/scripts/lib/devtool/build-image.py b/scripts/lib/devtool/build-image.py index a6c7d81586..05c1d75c67 100644 --- a/scripts/lib/devtool/build-image.py +++ b/scripts/lib/devtool/build-image.py | |||
| @@ -70,40 +70,33 @@ def build_image(args, config, basepath, workspace): | |||
| 70 | else: | 70 | else: |
| 71 | raise DevtoolError('Specified recipe %s is not an image recipe' % image) | 71 | raise DevtoolError('Specified recipe %s is not an image recipe' % image) |
| 72 | 72 | ||
| 73 | if workspace: | 73 | try: |
| 74 | packages = _get_packages(tinfoil, workspace, config) | 74 | if workspace: |
| 75 | if packages: | 75 | packages = _get_packages(tinfoil, workspace, config) |
| 76 | with open(appendfile, 'w') as afile: | 76 | if packages: |
| 77 | # include packages from workspace recipes into the image | 77 | with open(appendfile, 'w') as afile: |
| 78 | afile.write('IMAGE_INSTALL_append = " %s"\n' % ' '.join(packages)) | 78 | # include packages from workspace recipes into the image |
| 79 | 79 | afile.write('IMAGE_INSTALL_append = " %s"\n' % ' '.join(packages)) | |
| 80 | # Generate notification callback devtool_warn_image_extended | 80 | logger.info('Building image %s with the following ' |
| 81 | afile.write('do_rootfs[prefuncs] += "devtool_warn_image_extended"\n\n') | 81 | 'additional packages: %s', image, ' '.join(packages)) |
| 82 | afile.write("python devtool_warn_image_extended() {\n") | 82 | else: |
| 83 | afile.write(" bb.plain('NOTE: %%s: building with additional '\n" | 83 | logger.warning('No packages to add, building image %s unmodified', image) |
| 84 | " 'packages due to \"devtool build-image\"'" | ||
| 85 | " %% d.getVar('PN', True))\n" | ||
| 86 | " bb.plain('NOTE: delete %%s to clear this' %% \\\n" | ||
| 87 | " '%s')\n" % os.path.relpath(appendfile, basepath)) | ||
| 88 | afile.write("}\n") | ||
| 89 | |||
| 90 | logger.info('Building image %s with the following ' | ||
| 91 | 'additional packages: %s', image, ' '.join(packages)) | ||
| 92 | else: | 84 | else: |
| 93 | logger.warning('No packages to add, building image %s unmodified', image) | 85 | logger.warning('No recipes in workspace, building image %s unmodified', image) |
| 94 | else: | ||
| 95 | logger.warning('No recipes in workspace, building image %s unmodified', image) | ||
| 96 | 86 | ||
| 97 | deploy_dir_image = tinfoil.config_data.getVar('DEPLOY_DIR_IMAGE', True) | 87 | deploy_dir_image = tinfoil.config_data.getVar('DEPLOY_DIR_IMAGE', True) |
| 98 | 88 | ||
| 99 | tinfoil.shutdown() | 89 | tinfoil.shutdown() |
| 100 | 90 | ||
| 101 | # run bitbake to build image | 91 | # run bitbake to build image |
| 102 | try: | 92 | try: |
| 103 | exec_build_env_command(config.init_path, basepath, | 93 | exec_build_env_command(config.init_path, basepath, |
| 104 | 'bitbake %s' % image, watch=True) | 94 | 'bitbake %s' % image, watch=True) |
| 105 | except ExecutionError as err: | 95 | except ExecutionError as err: |
| 106 | return err.exitcode | 96 | return err.exitcode |
| 97 | finally: | ||
| 98 | if os.path.isfile(appendfile): | ||
| 99 | os.unlink(appendfile) | ||
| 107 | 100 | ||
| 108 | logger.info('Successfully built %s. You can find output files in %s' | 101 | logger.info('Successfully built %s. You can find output files in %s' |
| 109 | % (image, deploy_dir_image)) | 102 | % (image, deploy_dir_image)) |
