Mercurial > hg > truffle
comparison mxtool/mx.py @ 18635:a8b46348b79f
mx: converted format strings to be python 2.6 compliant
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 05 Dec 2014 08:20:06 +0100 |
parents | 23de014b38ab |
children | dcf5cd3c6da9 |
comparison
equal
deleted
inserted
replaced
18634:b4071daf1892 | 18635:a8b46348b79f |
---|---|
107 if d not in deps: | 107 if d not in deps: |
108 deps.append(d) | 108 deps.append(d) |
109 try: | 109 try: |
110 excl = [dependency(d) for d in self.excludedDependencies] | 110 excl = [dependency(d) for d in self.excludedDependencies] |
111 except SystemExit as e: | 111 except SystemExit as e: |
112 abort('invalid excluded dependency for {} distribution: {}'.format(self.name, e)) | 112 abort('invalid excluded dependency for {0} distribution: {1}'.format(self.name, e)) |
113 return deps + [d for d in sorted_deps(self.deps, includeLibs=includeLibs) if d not in excl] | 113 return deps + [d for d in sorted_deps(self.deps, includeLibs=includeLibs) if d not in excl] |
114 | 114 |
115 def __str__(self): | 115 def __str__(self): |
116 return self.name | 116 return self.name |
117 | 117 |
696 self.sourceSha1 = sourceSha1 | 696 self.sourceSha1 = sourceSha1 |
697 self.deps = deps | 697 self.deps = deps |
698 abspath = _make_absolute(path, self.suite.dir) | 698 abspath = _make_absolute(path, self.suite.dir) |
699 if not optional and not exists(abspath): | 699 if not optional and not exists(abspath): |
700 if not len(urls): | 700 if not len(urls): |
701 abort('Non-optional library {} must either exist at {} or specify one or more URLs from which it can be retrieved'.format(name, abspath)) | 701 abort('Non-optional library {0} must either exist at {1} or specify one or more URLs from which it can be retrieved'.format(name, abspath)) |
702 | 702 |
703 def _checkSha1PropertyCondition(propName, cond, inputPath): | 703 def _checkSha1PropertyCondition(propName, cond, inputPath): |
704 if not cond: | 704 if not cond: |
705 absInputPath = _make_absolute(inputPath, self.suite.dir) | 705 absInputPath = _make_absolute(inputPath, self.suite.dir) |
706 if exists(absInputPath): | 706 if exists(absInputPath): |
707 abort('Missing "{}" property for library {}. Add the following line to projects file:\nlibrary@{}@{}={}'.format(propName, name, name, propName, sha1OfFile(absInputPath))) | 707 abort('Missing "{0}" property for library {1}. Add the following line to projects file:\nlibrary@{2}@{3}={4}'.format(propName, name, name, propName, sha1OfFile(absInputPath))) |
708 abort('Missing "{}" property for library {}'.format(propName, name)) | 708 abort('Missing "{0}" property for library {1}'.format(propName, name)) |
709 | 709 |
710 _checkSha1PropertyCondition('sha1', sha1, path) | 710 _checkSha1PropertyCondition('sha1', sha1, path) |
711 _checkSha1PropertyCondition('sourceSha1', not sourcePath or sourceSha1, sourcePath) | 711 _checkSha1PropertyCondition('sourceSha1', not sourcePath or sourceSha1, sourcePath) |
712 | 712 |
713 for url in urls: | 713 for url in urls: |
1179 except SystemExit: | 1179 except SystemExit: |
1180 path = None | 1180 path = None |
1181 finally: | 1181 finally: |
1182 d.optional = True | 1182 d.optional = True |
1183 if not path: | 1183 if not path: |
1184 logv('[omitting optional library {} as {} does not exist]'.format(d, d.path)) | 1184 logv('[omitting optional library {0} as {1} does not exist]'.format(d, d.path)) |
1185 del _libs[d.name] | 1185 del _libs[d.name] |
1186 self.libs.remove(d) | 1186 self.libs.remove(d) |
1187 elif d.isProject(): | 1187 elif d.isProject(): |
1188 if java(d.javaCompliance) is None: | 1188 if java(d.javaCompliance) is None: |
1189 logv('[omitting project {} as Java compliance {} cannot be satisfied by configured JDKs]'.format(d, d.javaCompliance)) | 1189 logv('[omitting project {0} as Java compliance {1} cannot be satisfied by configured JDKs]'.format(d, d.javaCompliance)) |
1190 del _projects[d.name] | 1190 del _projects[d.name] |
1191 self.projects.remove(d) | 1191 self.projects.remove(d) |
1192 else: | 1192 else: |
1193 for name in list(d.deps): | 1193 for name in list(d.deps): |
1194 jreLib = _jreLibs.get(name) | 1194 jreLib = _jreLibs.get(name) |
1195 if jreLib: | 1195 if jreLib: |
1196 if not jreLib.is_present_in_jdk(java(d.javaCompliance)): | 1196 if not jreLib.is_present_in_jdk(java(d.javaCompliance)): |
1197 if jreLib.optional: | 1197 if jreLib.optional: |
1198 logv('[omitting project {} as dependency {} is missing]'.format(d, name)) | 1198 logv('[omitting project {0} as dependency {1} is missing]'.format(d, name)) |
1199 del _projects[d.name] | 1199 del _projects[d.name] |
1200 self.projects.remove(d) | 1200 self.projects.remove(d) |
1201 else: | 1201 else: |
1202 abort('JRE library {} required by {} not found'.format(jreLib, d)) | 1202 abort('JRE library {0} required by {1} not found'.format(jreLib, d)) |
1203 elif not dependency(name, fatalIfMissing=False): | 1203 elif not dependency(name, fatalIfMissing=False): |
1204 logv('[omitting project {} as dependency {} is missing]'.format(d, name)) | 1204 logv('[omitting project {0} as dependency {1} is missing]'.format(d, name)) |
1205 del _projects[d.name] | 1205 del _projects[d.name] |
1206 self.projects.remove(d) | 1206 self.projects.remove(d) |
1207 for dist in _dists.itervalues(): | 1207 for dist in _dists.itervalues(): |
1208 for name in list(dist.deps): | 1208 for name in list(dist.deps): |
1209 if not dependency(name, fatalIfMissing=False): | 1209 if not dependency(name, fatalIfMissing=False): |
1210 logv('[omitting {} from distribution {}]'.format(name, dist)) | 1210 logv('[omitting {0} from distribution {1}]'.format(name, dist)) |
1211 dist.deps.remove(name) | 1211 dist.deps.remove(name) |
1212 | 1212 |
1213 if hasattr(self, 'mx_post_parse_cmd_line'): | 1213 if hasattr(self, 'mx_post_parse_cmd_line'): |
1214 self.mx_post_parse_cmd_line(opts) | 1214 self.mx_post_parse_cmd_line(opts) |
1215 | 1215 |
2225 p.terminate() | 2225 p.terminate() |
2226 else: | 2226 else: |
2227 _kill_process_group(p.pid, signal.SIGKILL) | 2227 _kill_process_group(p.pid, signal.SIGKILL) |
2228 except BaseException as e: | 2228 except BaseException as e: |
2229 if is_alive(p): | 2229 if is_alive(p): |
2230 log('error while killing subprocess {} "{}": {}'.format(p.pid, ' '.join(args), e)) | 2230 log('error while killing subprocess {0} "{1}": {2}'.format(p.pid, ' '.join(args), e)) |
2231 | 2231 |
2232 if _opts and _opts.verbose: | 2232 if _opts and _opts.verbose: |
2233 import traceback | 2233 import traceback |
2234 traceback.print_stack() | 2234 traceback.print_stack() |
2235 raise SystemExit(codeOrMessage) | 2235 raise SystemExit(codeOrMessage) |
2302 | 2302 |
2303 def __str__(self): | 2303 def __str__(self): |
2304 return self.proj.name | 2304 return self.proj.name |
2305 | 2305 |
2306 def logCompilation(self, compiler): | 2306 def logCompilation(self, compiler): |
2307 log('Compiling Java sources for {} with {}... [{}]'.format(self.proj.name, compiler, self.reason)) | 2307 log('Compiling Java sources for {0} with {1}... [{2}]'.format(self.proj.name, compiler, self.reason)) |
2308 | 2308 |
2309 def execute(self): | 2309 def execute(self): |
2310 argfileName = join(self.proj.dir, 'javafilelist.txt') | 2310 argfileName = join(self.proj.dir, 'javafilelist.txt') |
2311 argfile = open(argfileName, 'wb') | 2311 argfile = open(argfileName, 'wb') |
2312 argfile.write('\n'.join(map(_cygpathU2W, self.javafilelist))) | 2312 argfile.write('\n'.join(map(_cygpathU2W, self.javafilelist))) |
2686 worklist = sortWorklist(worklist) | 2686 worklist = sortWorklist(worklist) |
2687 | 2687 |
2688 failed += joinTasks(active) | 2688 failed += joinTasks(active) |
2689 if len(failed): | 2689 if len(failed): |
2690 for t in failed: | 2690 for t in failed: |
2691 log('Compiling {} failed'.format(t.proj.name)) | 2691 log('Compiling {0} failed'.format(t.proj.name)) |
2692 abort('{} Java compilation tasks failed'.format(len(failed))) | 2692 abort('{0} Java compilation tasks failed'.format(len(failed))) |
2693 | 2693 |
2694 if args.java: | 2694 if args.java: |
2695 for dist in sorted_dists(): | 2695 for dist in sorted_dists(): |
2696 if dist not in updatedAnnotationProcessorDists: | 2696 if dist not in updatedAnnotationProcessorDists: |
2697 archive(['@' + dist.name]) | 2697 archive(['@' + dist.name]) |
3037 # Remove non-canonical candidates | 3037 # Remove non-canonical candidates |
3038 for c in list(candidates): | 3038 for c in list(candidates): |
3039 candidates.difference_update(c.all_deps([], False, False)) | 3039 candidates.difference_update(c.all_deps([], False, False)) |
3040 candidates = [d.name for d in candidates] | 3040 candidates = [d.name for d in candidates] |
3041 | 3041 |
3042 abort('{} does not use any packages defined in these projects: {}\nComputed project dependencies: {}'.format( | 3042 abort('{0} does not use any packages defined in these projects: {1}\nComputed project dependencies: {2}'.format( |
3043 p, ', '.join(ignoredDeps), ','.join(candidates))) | 3043 p, ', '.join(ignoredDeps), ','.join(candidates))) |
3044 | 3044 |
3045 excess = frozenset(p.deps) - set(p.canonical_deps()) | 3045 excess = frozenset(p.deps) - set(p.canonical_deps()) |
3046 if len(excess) != 0: | 3046 if len(excess) != 0: |
3047 nonCanonical.append(p) | 3047 nonCanonical.append(p) |
3164 source = [None] | 3164 source = [None] |
3165 def start_element(name, attrs): | 3165 def start_element(name, attrs): |
3166 if name == 'file': | 3166 if name == 'file': |
3167 source[0] = attrs['name'] | 3167 source[0] = attrs['name'] |
3168 elif name == 'error': | 3168 elif name == 'error': |
3169 errors.append('{}:{}: {}'.format(source[0], attrs['line'], attrs['message'])) | 3169 errors.append('{0}:{1}: {2}'.format(source[0], attrs['line'], attrs['message'])) |
3170 | 3170 |
3171 xp = xml.parsers.expat.ParserCreate() | 3171 xp = xml.parsers.expat.ParserCreate() |
3172 xp.StartElementHandler = start_element | 3172 xp.StartElementHandler = start_element |
3173 with open(auditfileName) as fp: | 3173 with open(auditfileName) as fp: |
3174 xp.ParseFile(fp) | 3174 xp.ParseFile(fp) |
4780 dotErr = None | 4780 dotErr = None |
4781 try: | 4781 try: |
4782 if not 'version' in subprocess.check_output(['dot', '-V'], stderr=subprocess.STDOUT): | 4782 if not 'version' in subprocess.check_output(['dot', '-V'], stderr=subprocess.STDOUT): |
4783 dotErr = 'dot -V does not print a string containing "version"' | 4783 dotErr = 'dot -V does not print a string containing "version"' |
4784 except subprocess.CalledProcessError as e: | 4784 except subprocess.CalledProcessError as e: |
4785 dotErr = 'error calling "dot -V": {}'.format(e) | 4785 dotErr = 'error calling "dot -V": {0}'.format(e) |
4786 except OSError as e: | 4786 except OSError as e: |
4787 dotErr = 'error calling "dot -V": {}'.format(e) | 4787 dotErr = 'error calling "dot -V": {0}'.format(e) |
4788 | 4788 |
4789 if dotErr != None: | 4789 if dotErr != None: |
4790 abort('cannot generate dependency graph: ' + dotErr) | 4790 abort('cannot generate dependency graph: ' + dotErr) |
4791 | 4791 |
4792 dot = join(tmpbase, 'all', str(args.dot_output_base) + '.dot') | 4792 dot = join(tmpbase, 'all', str(args.dot_output_base) + '.dot') |
4822 with open(svg, 'w') as fp: | 4822 with open(svg, 'w') as fp: |
4823 fp.write(content) | 4823 fp.write(content) |
4824 | 4824 |
4825 # Create HTML that embeds the svg file in an <object> frame | 4825 # Create HTML that embeds the svg file in an <object> frame |
4826 with open(html, 'w') as fp: | 4826 with open(html, 'w') as fp: |
4827 print >> fp, '<html><body><object data="{}.svg" type="image/svg+xml"></object></body></html>'.format(args.dot_output_base) | 4827 print >> fp, '<html><body><object data="{0}.svg" type="image/svg+xml"></object></body></html>'.format(args.dot_output_base) |
4828 | 4828 |
4829 if exists(args.base): | 4829 if exists(args.base): |
4830 shutil.rmtree(args.base) | 4830 shutil.rmtree(args.base) |
4831 if args.tmp: | 4831 if args.tmp: |
4832 shutil.copytree(tmpbase, args.base) | 4832 shutil.copytree(tmpbase, args.base) |