blob: 754a041d8df725f4e7df005c664198655cfacb3e [file] [log] [blame]
David Jamese5867812012-10-19 12:02:20 -07001# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Don Garrett25f309a2014-03-19 14:02:12 -07005"""Calculate what overlays are needed for a particular board."""
David Jamese5867812012-10-19 12:02:20 -07006
Mike Frysinger58f9eb72014-08-26 10:10:47 -04007from __future__ import print_function
8
David Jamese5867812012-10-19 12:02:20 -07009import os
10
Alex Deymo075c2292014-09-04 18:31:50 -070011from chromite.cbuildbot import constants
Mike Frysinger58f9eb72014-08-26 10:10:47 -040012from chromite.lib import commandline
David Jamese5867812012-10-19 12:02:20 -070013from chromite.lib import cros_build_lib
Alex Deymo075c2292014-09-04 18:31:50 -070014from chromite.lib import portage_util
David Jamese5867812012-10-19 12:02:20 -070015
16
17def _ParseArguments(argv):
Mike Frysinger58f9eb72014-08-26 10:10:47 -040018 parser = commandline.ArgumentParser(description=__doc__)
David Jamese5867812012-10-19 12:02:20 -070019
Mike Frysinger58f9eb72014-08-26 10:10:47 -040020 parser.add_argument('--board', default=None, help='Board name')
21 parser.add_argument('--board_overlay', default=None,
22 help='Location of the board overlay. Used by '
23 './setup_board to allow developers to add custom '
24 'overlays.')
25 parser.add_argument('--primary_only', default=False, action='store_true',
26 help='Only return the path to the primary overlay. This '
27 'only makes sense when --board is specified.')
Mike Frysinger320b5012014-10-31 16:46:41 -040028 parser.add_argument('-a', '--all', default=False, action='store_true',
29 help='Show all overlays (even common ones).')
David Jamese5867812012-10-19 12:02:20 -070030
Mike Frysinger58f9eb72014-08-26 10:10:47 -040031 opts = parser.parse_args(argv)
32 opts.Freeze()
David Jamese5867812012-10-19 12:02:20 -070033
Mike Frysinger58f9eb72014-08-26 10:10:47 -040034 if opts.primary_only and opts.board is None:
David Jamese5867812012-10-19 12:02:20 -070035 parser.error('--board is required when --primary_only is supplied.')
36
Mike Frysinger58f9eb72014-08-26 10:10:47 -040037 return opts
David Jamese5867812012-10-19 12:02:20 -070038
39
40def main(argv):
Mike Frysinger58f9eb72014-08-26 10:10:47 -040041 opts = _ParseArguments(argv)
42 args = (constants.BOTH_OVERLAYS, opts.board)
David Jamese5867812012-10-19 12:02:20 -070043
44 # Verify that a primary overlay exists.
45 try:
Alex Deymo075c2292014-09-04 18:31:50 -070046 primary_overlay = portage_util.FindPrimaryOverlay(*args)
47 except portage_util.MissingOverlayException as ex:
David Jamese5867812012-10-19 12:02:20 -070048 cros_build_lib.Die(str(ex))
49
50 # Get the overlays to print.
Mike Frysinger58f9eb72014-08-26 10:10:47 -040051 if opts.primary_only:
David Jamese5867812012-10-19 12:02:20 -070052 overlays = [primary_overlay]
53 else:
Alex Deymo075c2292014-09-04 18:31:50 -070054 overlays = portage_util.FindOverlays(*args)
David Jamese5867812012-10-19 12:02:20 -070055
56 # Exclude any overlays in src/third_party, for backwards compatibility with
57 # scripts that expected these to not be listed.
Mike Frysinger320b5012014-10-31 16:46:41 -040058 if not opts.all:
59 ignore_prefix = os.path.join(constants.SOURCE_ROOT, 'src', 'third_party')
60 overlays = [o for o in overlays if not o.startswith(ignore_prefix)]
David Jamese5867812012-10-19 12:02:20 -070061
Mike Frysinger58f9eb72014-08-26 10:10:47 -040062 if opts.board_overlay and os.path.isdir(opts.board_overlay):
63 overlays.append(os.path.abspath(opts.board_overlay))
David Jamese5867812012-10-19 12:02:20 -070064
Mike Frysinger58f9eb72014-08-26 10:10:47 -040065 print('\n'.join(overlays))