comparison mx/commands.py @ 5700:12a34d1bcaa2

added site command to generate a javadoc-based website
author Doug Simon <doug.simon@oracle.com>
date Wed, 27 Jun 2012 01:03:19 +0200
parents 9bb0ba9e8ba6
children 6f2ccb483d96
comparison
equal deleted inserted replaced
5699:e9f7d16194a8 5700:12a34d1bcaa2
999 out = args[0] 999 out = args[0]
1000 elif len(args) > 1: 1000 elif len(args) > 1:
1001 mx.abort('jacocoreport takes only one argument : an output directory') 1001 mx.abort('jacocoreport takes only one argument : an output directory')
1002 mx.run_java(['-jar', jacocoreport.get_path(True), '-in', 'jacoco.exec', '-g', join(_graal_home, 'graal'), out]) 1002 mx.run_java(['-jar', jacocoreport.get_path(True), '-in', 'jacoco.exec', '-g', join(_graal_home, 'graal'), out])
1003 1003
1004 def site(args):
1005 """creates a website containing javadoc and the project dependency graph"""
1006
1007 parser = ArgumentParser(prog='site')
1008 parser.add_argument('-d', '--base', action='store', help='directory for generated site', required=True, metavar='<dir>')
1009 parser.add_argument('-c', '--clean', action='store_true', help='remove existing site in <dir>')
1010
1011 args = parser.parse_args(args)
1012
1013 args.base = os.path.abspath(args.base)
1014
1015 if not exists(args.base):
1016 os.mkdir(args.base)
1017 elif args.clean:
1018 shutil.rmtree(args.base)
1019 os.mkdir(args.base)
1020
1021 mx.javadoc(['--base', args.base])
1022
1023 unified = join(args.base, 'all')
1024 if exists(unified):
1025 shutil.rmtree(unified)
1026 mx.javadoc(['--base', args.base, '--unified', '--arg', '@-overview', '--arg', '@' + join(_graal_home, 'graal', 'overview.html')])
1027 os.rename(join(args.base, 'javadoc'), unified)
1028
1029 _, tmp = tempfile.mkstemp()
1030 try:
1031 svg = join(args.base, 'all', 'modules.svg')
1032 with open(tmp, 'w') as fp:
1033 print >> fp, 'digraph projects {'
1034 print >> fp, 'rankdir=BT;'
1035 print >> fp, 'size = "13,13";'
1036 print >> fp, 'node [shape=rect, fontcolor="blue"];'
1037 print >> fp, 'edge [color="green"];'
1038 for p in mx.projects():
1039 print >> fp, '"' + p.name + '" [URL = "../' + p.name + '/javadoc/index.html", target = "_top"]'
1040 for dep in p.canonical_deps():
1041 if mx.project(dep, False):
1042 print >> fp, '"' + p.name + '" -> "' + dep + '"'
1043 depths = dict()
1044 for p in mx.projects():
1045 d = p.max_depth()
1046 depths.setdefault(d, list()).append(p.name)
1047 for d, names in depths.iteritems():
1048 print >> fp, '{ rank = same; "' + '"; "'.join(names) + '"; }'
1049 print >> fp, '}'
1050
1051 mx.run(['dot', '-Tsvg', '-o' + svg, tmp])
1052
1053 # Post-process generated SVG to remove unified title elements which most browsers
1054 # render as redundant (and annoying) tooltips.
1055 with open(svg, 'r') as fp:
1056 content = fp.read()
1057 content = re.sub('<title>.*</title>', '', content)
1058 content = re.sub('xlink:title="[^"]*"', '', content)
1059 with open(svg, 'w') as fp:
1060 fp.write(content)
1061
1062 print 'Created website - root is ' + join(unified, 'index.html')
1063 finally:
1064 os.remove(tmp)
1065
1004 def mx_init(): 1066 def mx_init():
1005 _vmbuild = 'product' 1067 _vmbuild = 'product'
1006 commands = { 1068 commands = {
1007 'build': [build, '[-options]'], 1069 'build': [build, '[-options]'],
1008 'buildvms': [buildvms, '[-options]'], 1070 'buildvms': [buildvms, '[-options]'],
1020 'gv' : [gv, ''], 1082 'gv' : [gv, ''],
1021 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'], 1083 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'],
1022 'unittest' : [unittest, '[filters...]'], 1084 'unittest' : [unittest, '[filters...]'],
1023 'jtt' : [jtt, '[filters...]'], 1085 'jtt' : [jtt, '[filters...]'],
1024 'jacocoreport' : [jacocoreport, '[output directory]'], 1086 'jacocoreport' : [jacocoreport, '[output directory]'],
1087 'site' : [site, '[-options]'],
1025 'vm': [vm, '[-options] class [args...]'], 1088 'vm': [vm, '[-options] class [args...]'],
1026 'vmg': [vmg, '[-options] class [args...]'], 1089 'vmg': [vmg, '[-options] class [args...]'],
1027 'vmfg': [vmfg, '[-options] class [args...]'] 1090 'vmfg': [vmfg, '[-options] class [args...]']
1028 } 1091 }
1029 1092