diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-09-22 17:21:27 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-23 09:53:15 +0100 |
commit | 30c7e7ac41ba201d41613d1482abeebdbd05ae46 (patch) | |
tree | ddea262ec8e5d690008b427191a7b98b4a079cbc /scripts | |
parent | 99fc284545d3a493ce57e904c233e0130022dae7 (diff) | |
download | poky-30c7e7ac41ba201d41613d1482abeebdbd05ae46.tar.gz |
devtool: add: properly handle separate build directory
When we were adding a recipe for software that would typically be built
in the same directory as the source, we were always using a separate
build directory unless the user explicitly specified not to, leading to
errors for software that doesn't expect to be built that way (such as
Python modules using distutils). Split out the code that makes this
determination automatically from the "devtool modify" and "devtool
upgrade" code and re-use that here so the behaviour is consistent.
(From OE-Core rev: 320585b7ff6340df0b0dbc63f95ed3ca8fc3a993)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/lib/devtool/__init__.py | 18 | ||||
-rw-r--r-- | scripts/lib/devtool/standard.py | 30 | ||||
-rw-r--r-- | scripts/lib/devtool/upgrade.py | 20 |
3 files changed, 36 insertions, 32 deletions
diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py index 3ea38028d4..07a3636e9b 100644 --- a/scripts/lib/devtool/__init__.py +++ b/scripts/lib/devtool/__init__.py | |||
@@ -152,3 +152,21 @@ def check_workspace_recipe(workspace, pn, checksrc=True): | |||
152 | raise DevtoolError("Source tree %s for recipe %s does not exist" % (srctree, pn)) | 152 | raise DevtoolError("Source tree %s for recipe %s does not exist" % (srctree, pn)) |
153 | if not os.listdir(srctree): | 153 | if not os.listdir(srctree): |
154 | raise DevtoolError("Source tree %s for recipe %s is empty" % (srctree, pn)) | 154 | raise DevtoolError("Source tree %s for recipe %s is empty" % (srctree, pn)) |
155 | |||
156 | def use_external_build(same_dir, no_same_dir, d): | ||
157 | """ | ||
158 | Determine if we should use B!=S (separate build and source directories) or not | ||
159 | """ | ||
160 | b_is_s = True | ||
161 | if no_same_dir: | ||
162 | logger.info('Using separate build directory since --no-same-dir specified') | ||
163 | b_is_s = False | ||
164 | elif same_dir: | ||
165 | logger.info('Using source tree as build directory since --same-dir specified') | ||
166 | elif bb.data.inherits_class('autotools-brokensep', d): | ||
167 | logger.info('Using source tree as build directory since recipe inherits autotools-brokensep') | ||
168 | elif d.getVar('B', True) == os.path.abspath(d.getVar('S', True)): | ||
169 | logger.info('Using source tree as build directory since that would be the default for this recipe') | ||
170 | else: | ||
171 | b_is_s = False | ||
172 | return b_is_s | ||
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index ec21b3c139..700a56b4ed 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py | |||
@@ -25,7 +25,7 @@ import logging | |||
25 | import argparse | 25 | import argparse |
26 | import scriptutils | 26 | import scriptutils |
27 | import errno | 27 | import errno |
28 | from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError | 28 | from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, use_external_build, DevtoolError |
29 | from devtool import parse_recipe | 29 | from devtool import parse_recipe |
30 | 30 | ||
31 | logger = logging.getLogger('devtool') | 31 | logger = logging.getLogger('devtool') |
@@ -107,17 +107,26 @@ def add(args, config, basepath, workspace): | |||
107 | (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree) | 107 | (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srctree) |
108 | initial_rev = stdout.rstrip() | 108 | initial_rev = stdout.rstrip() |
109 | 109 | ||
110 | tinfoil = setup_tinfoil(config_only=True) | ||
111 | rd = oe.recipeutils.parse_recipe(recipefile, None, tinfoil.config_data) | ||
112 | if not rd: | ||
113 | return 1 | ||
114 | |||
110 | appendfile = os.path.join(appendpath, '%s.bbappend' % bp) | 115 | appendfile = os.path.join(appendpath, '%s.bbappend' % bp) |
111 | with open(appendfile, 'w') as f: | 116 | with open(appendfile, 'w') as f: |
112 | f.write('inherit externalsrc\n') | 117 | f.write('inherit externalsrc\n') |
113 | f.write('EXTERNALSRC = "%s"\n' % srctree) | 118 | f.write('EXTERNALSRC = "%s"\n' % srctree) |
114 | if args.same_dir: | 119 | |
120 | b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd) | ||
121 | if b_is_s: | ||
115 | f.write('EXTERNALSRC_BUILD = "%s"\n' % srctree) | 122 | f.write('EXTERNALSRC_BUILD = "%s"\n' % srctree) |
116 | if initial_rev: | 123 | if initial_rev: |
117 | f.write('\n# initial_rev: %s\n' % initial_rev) | 124 | f.write('\n# initial_rev: %s\n' % initial_rev) |
118 | 125 | ||
119 | _add_md5(config, args.recipename, appendfile) | 126 | _add_md5(config, args.recipename, appendfile) |
120 | 127 | ||
128 | tinfoil.shutdown() | ||
129 | |||
121 | return 0 | 130 | return 0 |
122 | 131 | ||
123 | 132 | ||
@@ -483,18 +492,7 @@ def modify(args, config, basepath, workspace): | |||
483 | f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n') | 492 | f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n') |
484 | f.write('EXTERNALSRC_pn-%s = "%s"\n' % (args.recipename, srctree)) | 493 | f.write('EXTERNALSRC_pn-%s = "%s"\n' % (args.recipename, srctree)) |
485 | 494 | ||
486 | b_is_s = True | 495 | b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd) |
487 | if args.no_same_dir: | ||
488 | logger.info('using separate build directory since --no-same-dir specified') | ||
489 | b_is_s = False | ||
490 | elif args.same_dir: | ||
491 | logger.info('using source tree as build directory since --same-dir specified') | ||
492 | elif bb.data.inherits_class('autotools-brokensep', rd): | ||
493 | logger.info('using source tree as build directory since original recipe inherits autotools-brokensep') | ||
494 | elif rd.getVar('B', True) == s: | ||
495 | logger.info('using source tree as build directory since that is the default for this recipe') | ||
496 | else: | ||
497 | b_is_s = False | ||
498 | if b_is_s: | 496 | if b_is_s: |
499 | f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (args.recipename, srctree)) | 497 | f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (args.recipename, srctree)) |
500 | 498 | ||
@@ -876,7 +874,9 @@ def register_commands(subparsers, context): | |||
876 | description='Adds a new recipe') | 874 | description='Adds a new recipe') |
877 | parser_add.add_argument('recipename', help='Name for new recipe to add') | 875 | parser_add.add_argument('recipename', help='Name for new recipe to add') |
878 | parser_add.add_argument('srctree', help='Path to external source tree') | 876 | parser_add.add_argument('srctree', help='Path to external source tree') |
879 | parser_add.add_argument('--same-dir', '-s', help='Build in same directory as source', action="store_true") | 877 | group = parser_add.add_mutually_exclusive_group() |
878 | group.add_argument('--same-dir', '-s', help='Build in same directory as source', action="store_true") | ||
879 | group.add_argument('--no-same-dir', help='Force build in a separate build directory', action="store_true") | ||
880 | parser_add.add_argument('--fetch', '-f', help='Fetch the specified URI and extract it to create the source tree', metavar='URI') | 880 | parser_add.add_argument('--fetch', '-f', help='Fetch the specified URI and extract it to create the source tree', metavar='URI') |
881 | parser_add.add_argument('--version', '-V', help='Version to use within recipe (PV)') | 881 | parser_add.add_argument('--version', '-V', help='Version to use within recipe (PV)') |
882 | parser_add.set_defaults(func=add) | 882 | parser_add.set_defaults(func=add) |
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index 86443b0735..6c1dfee3fe 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py | |||
@@ -29,7 +29,7 @@ import errno | |||
29 | import bb | 29 | import bb |
30 | import oe.recipeutils | 30 | import oe.recipeutils |
31 | from devtool import standard | 31 | from devtool import standard |
32 | from devtool import exec_build_env_command, setup_tinfoil, DevtoolError, parse_recipe | 32 | from devtool import exec_build_env_command, setup_tinfoil, DevtoolError, parse_recipe, use_external_build |
33 | 33 | ||
34 | logger = logging.getLogger('devtool') | 34 | logger = logging.getLogger('devtool') |
35 | 35 | ||
@@ -126,21 +126,6 @@ def _rename_recipe_files(bpn, oldpv, newpv, path): | |||
126 | _rename_recipe_dirs(oldpv, newpv, path) | 126 | _rename_recipe_dirs(oldpv, newpv, path) |
127 | return _rename_recipe_file(bpn, oldpv, newpv, path) | 127 | return _rename_recipe_file(bpn, oldpv, newpv, path) |
128 | 128 | ||
129 | def _use_external_build(same_dir, no_same_dir, d): | ||
130 | b_is_s = True | ||
131 | if no_same_dir: | ||
132 | logger.info('using separate build directory since --no-same-dir specified') | ||
133 | b_is_s = False | ||
134 | elif same_dir: | ||
135 | logger.info('using source tree as build directory since --same-dir specified') | ||
136 | elif bb.data.inherits_class('autotools-brokensep', d): | ||
137 | logger.info('using source tree as build directory since original recipe inherits autotools-brokensep') | ||
138 | elif d.getVar('B', True) == os.path.abspath(d.getVar('S', True)): | ||
139 | logger.info('using source tree as build directory since that is the default for this recipe') | ||
140 | else: | ||
141 | b_is_s = False | ||
142 | return b_is_s | ||
143 | |||
144 | def _write_append(rc, srctree, same_dir, no_same_dir, rev, workspace, d): | 129 | def _write_append(rc, srctree, same_dir, no_same_dir, rev, workspace, d): |
145 | """Writes an append file""" | 130 | """Writes an append file""" |
146 | if not os.path.exists(rc): | 131 | if not os.path.exists(rc): |
@@ -161,7 +146,8 @@ def _write_append(rc, srctree, same_dir, no_same_dir, rev, workspace, d): | |||
161 | f.write(('# NOTE: We use pn- overrides here to avoid affecting' | 146 | f.write(('# NOTE: We use pn- overrides here to avoid affecting' |
162 | 'multiple variants in the case where the recipe uses BBCLASSEXTEND\n')) | 147 | 'multiple variants in the case where the recipe uses BBCLASSEXTEND\n')) |
163 | f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree)) | 148 | f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree)) |
164 | if _use_external_build(same_dir, no_same_dir, d): | 149 | b_is_s = use_external_build(same_dir, no_same_dir, d) |
150 | if b_is_s: | ||
165 | f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree)) | 151 | f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree)) |
166 | if rev: | 152 | if rev: |
167 | f.write('\n# initial_rev: %s\n' % rev) | 153 | f.write('\n# initial_rev: %s\n' % rev) |