"""
Call package() in the cscript and return what it returns, except that
anything not in a list will be put into one.
+ options: from command line
"""
if len(inspect.getfullargspec(tree.cscript['package']).args) == 3:
- packages = tree.call('package', tree.version, options)
+ packages = tree.call('package', tree.version, tree.add_defaults(options))
else:
log_normal("Deprecated cscript package() method with no options parameter")
packages = tree.call('package', tree.version)
copyfile(p, os.path.join(output_dir, os.path.basename(devel_to_git(tree.commit, p))))
def package(self, project, checkout, output_dir, options, notarize):
+ """
+ options: from command line
+ """
tree = self.build(project, checkout, options, for_package=True)
- tree.add_defaults(options)
p = self._cscript_package(tree, options)
self._copy_packages(tree, p, output_dir)
"""test is the test case to run, or None"""
tree = globals.trees.get(project, checkout, target)
- tree.add_defaults(options)
with TreeDirectory(tree):
if len(inspect.getfullargspec(tree.cscript['test']).args) == 3:
- return tree.call('test', options, test)
+ return tree.call('test', tree.add_defaults(options), test)
else:
log_normal('Deprecated cscript test() method with no options parameter')
return tree.call('test', test)
def __init__(self, bits, directory, environment_version):
super(WindowsDockerTarget, self).__init__('windows', directory)
self.bits = bits
+ # This was used to differentiate "normal" Windows from XP, and is no longer important,
+ # but old cscripts still look for it
+ self.version = None
self.tool_path = '%s/usr/bin' % config.get('mxe_prefix')
if self.bits == 32:
def package(self, project, checkout, output_dir, options, notarize):
tree = self.build(project, checkout, options, for_package=True)
- tree.add_defaults(options)
-
super().package(project, checkout, output_dir, options, notarize)
return self.cscript[function](self.target, *args)
def add_defaults(self, options):
- """Add the defaults from self into a dict options"""
+ """Add the defaults from self into a dict options and returns a new dict"""
+ new_options = copy.copy(options)
if 'option_defaults' in self.cscript:
from_cscript = self.cscript['option_defaults']
if isinstance(from_cscript, dict):
log_normal("Deprecated cscript option_defaults method; replace with a dict")
defaults_dict = from_cscript()
for k, v in defaults_dict.items():
- if not k in options:
- options[k] = v
+ if not k in new_options:
+ new_options[k] = v
+ return new_options
def dependencies(self, options):
"""
yield details of the dependencies of this tree. Each dependency is returned
- as a tuple of (tree, options, parent_tree). The 'options' parameter are the options that
- we want to force for 'self'.
+ as a tuple of (tree, options).
+ options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
"""
if not 'dependencies' in self.cscript:
return
if len(inspect.getfullargspec(self.cscript['dependencies']).args) == 2:
- self_options = copy.copy(options)
- self.add_defaults(self_options)
- deps = self.call('dependencies', self_options)
+ deps = self.call('dependencies', self.add_defaults(options))
else:
log_normal("Deprecated cscript dependencies() method with no options parameter")
deps = self.call('dependencies')
dep_options = d[2] if len(d) > 2 else {}
for i in dep.dependencies(dep_options):
yield i
- yield (dep, dep_options, self)
+ yield (dep, dep_options)
def checkout_dependencies(self, options={}):
for i in self.dependencies(options):
def build_dependencies(self, options):
"""
Called on the 'main' project tree (-p on the command line) to build all dependencies.
- 'options' will be the ones from the command line.
+ options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
"""
- for i in self.dependencies(options):
- i[0].build(i[1])
+ for dependency, dependency_options in self.dependencies(options):
+ dependency.build(dependency_options)
def build(self, options, for_package=False):
+ """
+ options: either from command line (for top-level tree) or from parent's dependencies() (for other trees)
+ """
if self.built:
return
- log_verbose("Building %s %s %s with %s" % (self.name, self.commit_ish, self.version, options))
+ log_verbose("Building %s %s %s with %s" % (self.name, self.commit_ish, self.version, self.add_defaults(options)))
variables = copy.copy(self.target.variables)
- options = copy.copy(options)
- self.add_defaults(options)
-
if not globals.dry_run:
num_args = len(inspect.getfullargspec(self.cscript['build']).args)
if num_args == 3:
- self.call('build', options, for_package)
+ self.call('build', self.add_defaults(options), for_package)
elif num_args == 2:
- self.call('build', options)
+ self.call('build', self.add_defaults(options))
else:
self.call('build')
shutil.copytree('.', args.output)
target.cleanup()
- elif args.command == 'dependencies':
- if args.target is None:
- raise Error('you must specify -t or --target')
- if args.checkout is None:
- raise Error('you must specify -c or --checkout')
-
- target = target_factory(args)
- tree = globals.trees.get(args.project, args.checkout, target)
- print("strict digraph {")
- for d in list(tree.dependencies({})):
- print("%s -> %s;" % (d[2].name.replace("-", "-"), d[0].name.replace("-", "_")))
- print("}")
-
elif args.command == 'notarize':
if args.dmgs is None:
raise Error('you must specify ---dmgs')