# HG changeset patch # User Doug Simon # Date 1340793990 -7200 # Node ID d0a6e25de770c179240dd5d7fa6513900cf6e242 # Parent 12a34d1bcaa26da4abea174ce0ebd83852d601a1 integrated mxtool changes from Maxine project diff -r 12a34d1bcaa2 -r d0a6e25de770 mxtool/mx.py --- a/mxtool/mx.py Wed Jun 27 01:03:19 2012 +0200 +++ b/mxtool/mx.py Wed Jun 27 12:46:30 2012 +0200 @@ -50,10 +50,10 @@ commands.py Suite specific extensions to the commands available to mx. - This is only processed for the primary suite. includes - Other suites to be loaded. This is recursive. + Other suites to be loaded. This is recursive. Each + line in an includes file is a path to a suite directory. env A set of environment variable definitions. These override any @@ -294,8 +294,8 @@ self.primary = primary mxDir = join(dir, 'mx') self._load_env(mxDir) - if primary: - self._load_commands(mxDir) + self._load_commands(mxDir) + self._load_includes(mxDir) def _load_projects(self, mxDir): libsMap = dict() @@ -366,8 +366,9 @@ if exists(commands): # temporarily extend the Python path sys.path.insert(0, mxDir) - mod = __import__('commands') + + sys.modules[join(mxDir, 'commands')] = sys.modules.pop('commands') # revert the Python path del sys.path[0] @@ -385,7 +386,9 @@ if exists(includes): with open(includes) as f: for line in f: - self.includes.append(expandvars_in_property(line.strip())) + include = expandvars_in_property(line.strip()) + self.includes.append(include) + _loadSuite(include, False) def _load_env(self, mxDir): e = join(mxDir, 'env') @@ -399,9 +402,8 @@ def _post_init(self, opts): mxDir = join(self.dir, 'mx') - self._load_includes(mxDir) self._load_projects(mxDir) - if self.mx_post_parse_cmd_line is not None: + if hasattr(self, 'mx_post_parse_cmd_line'): self.mx_post_parse_cmd_line(opts) for p in self.projects: existing = _projects.get(p.name) @@ -1955,10 +1957,10 @@ eclipseinit(args, suite) netbeansinit(args, suite) -def javadoc(args): +def javadoc(args, parser=None, docDir='javadoc', includeDeps=True): """generate javadoc for some/all Java projects""" - parser = ArgumentParser(prog='mx javadoc') + parser = ArgumentParser(prog='mx javadoc') if parser is None else parser parser.add_argument('-d', '--base', action='store', help='base directory for output') parser.add_argument('--unified', action='store_true', help='put javadoc in a single directory instead of one per project') parser.add_argument('--force', action='store_true', help='(re)generate javadoc even if package-list file exists') @@ -1966,7 +1968,6 @@ parser.add_argument('--argfile', action='store', help='name of file containing extra javadoc options') parser.add_argument('--arg', action='append', dest='extra_args', help='extra Javadoc arguments (e.g. --arg @-use)', metavar='@', default=[]) parser.add_argument('-m', '--memory', action='store', help='-Xmx value to pass to underlying JVM') - parser.add_argument('--wiki', action='store_true', help='generate Confluence Wiki format for package-info.java files') parser.add_argument('--packages', action='store', help='comma separated packages to process (omit to process all packages)') args = parser.parse_args(args) @@ -1976,37 +1977,18 @@ if args.projects is not None: candidates = [project(name) for name in args.projects.split(',')] - # optionally restrict packages within a project (most useful for wiki) + # optionally restrict packages within a project packages = [] if args.packages is not None: packages = [name for name in args.packages.split(',')] - # the WikiDoclet cannot see the -classpath argument passed to javadoc so we pass the - # full list of projects as an explicit argument, thereby enabling it to map classes - # to projects, which is needed to generate Wiki links to the source code. - # There is no virtue in running the doclet on dependent projects as there are - # no generated links between Wiki pages - docletArgs = [] - if args.wiki: - docDir = 'wikidoc' - toolsDir = project('com.oracle.max.tools').output_dir() - baseDir = project('com.oracle.max.base').output_dir() - dp = os.pathsep.join([toolsDir, baseDir]) - project_list = ','.join(p.name for p in sorted_deps()) - docletArgs = ['-docletpath', dp, '-doclet', 'com.oracle.max.tools.javadoc.wiki.WikiDoclet', '-projects', project_list] - else: - docDir = 'javadoc' - def outDir(p): if args.base is None: return join(p.dir, docDir) return join(args.base, p.name, docDir) def check_package_list(p): - if args.wiki: - return True - else: - return not exists(join(outDir(p), 'package-list')) + return not exists(join(outDir(p), 'package-list')) def assess_candidate(p, projects): if p in projects: @@ -2019,7 +2001,7 @@ projects = [] for p in candidates: if not p.native: - if not args.wiki: + if includeDeps: deps = p.all_deps([], includeLibs=False, includeSelf=False) for d in deps: assess_candidate(d, projects) @@ -2057,7 +2039,7 @@ cp = classpath(p.name, includeSelf=True) sp = os.pathsep.join(p.source_dirs()) log('Generating {2} for {0} in {1}'.format(p.name, out, docDir)) - run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + docletArgs + links + extraArgs + list(pkgs)) + run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs)) log('Generated {2} for {0} in {1}'.format(p.name, out, docDir)) else: pkgs = set() @@ -2075,7 +2057,7 @@ cp = classpath() sp = os.pathsep.join(sp) log('Generating {2} for {0} in {1}'.format(', '.join(names), out, docDir)) - run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + docletArgs + links + extraArgs + list(pkgs)) + run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs)) log('Generated {2} for {0} in {1}'.format(', '.join(names), out, docDir)) def findclass(args):