comparison mxtool/mx.py @ 5376:bfc9aeb1264c

synchronized mxtool with Maxine
author Doug Simon <doug.simon@oracle.com>
date Fri, 11 May 2012 11:27:53 +0200
parents 1a9a048386d6
children 271e83dcfcef
comparison
equal deleted inserted replaced
5375:3035b6b881d9 5376:bfc9aeb1264c
1682 def netbeansinit(args, suite=None): 1682 def netbeansinit(args, suite=None):
1683 """(re)generate NetBeans project configurations""" 1683 """(re)generate NetBeans project configurations"""
1684 1684
1685 if suite is None: 1685 if suite is None:
1686 suite = _mainSuite 1686 suite = _mainSuite
1687
1688 def println(out, obj):
1689 out.write(str(obj) + '\n')
1687 1690
1688 updated = False 1691 updated = False
1689 for p in projects(): 1692 for p in projects():
1690 if p.native: 1693 if p.native:
1691 continue 1694 continue
1896 parser.add_argument('--unified', action='store_true', help='put javadoc in a single directory instead of one per project') 1899 parser.add_argument('--unified', action='store_true', help='put javadoc in a single directory instead of one per project')
1897 parser.add_argument('--force', action='store_true', help='(re)generate javadoc even if package-list file exists') 1900 parser.add_argument('--force', action='store_true', help='(re)generate javadoc even if package-list file exists')
1898 parser.add_argument('--projects', action='store', help='comma separated projects to process (omit to process all projects)') 1901 parser.add_argument('--projects', action='store', help='comma separated projects to process (omit to process all projects)')
1899 parser.add_argument('--argfile', action='store', help='name of file containing extra javadoc options') 1902 parser.add_argument('--argfile', action='store', help='name of file containing extra javadoc options')
1900 parser.add_argument('-m', '--memory', action='store', help='-Xmx value to pass to underlying JVM') 1903 parser.add_argument('-m', '--memory', action='store', help='-Xmx value to pass to underlying JVM')
1901 1904 parser.add_argument('--wiki', action='store_true', help='generate Confluence Wiki format for package-info.java files')
1905 parser.add_argument('--packages', action='store', help='comma separated packages to process (omit to process all packages)')
1906
1902 args = parser.parse_args(args) 1907 args = parser.parse_args(args)
1903 1908
1904 # build list of projects to be processed 1909 # build list of projects to be processed
1905 candidates = sorted_deps() 1910 candidates = sorted_deps()
1906 if args.projects is not None: 1911 if args.projects is not None:
1907 candidates = [project(name) for name in args.projects.split(',')] 1912 candidates = [project(name) for name in args.projects.split(',')]
1908 1913
1914 # optionally restrict packages within a project (most useful for wiki)
1915 packages = []
1916 if args.packages is not None:
1917 packages = [name for name in args.packages.split(',')]
1918
1919 # the WikiDoclet cannot see the -classpath argument passed to javadoc so we pass the
1920 # full list of projects as an explicit argument, thereby enabling it to map classes
1921 # to projects, which is needed to generate Wiki links to the source code.
1922 # There is no virtue in running the doclet on dependent projects as there are
1923 # no generated links between Wiki pages
1924 docletArgs = []
1925 if args.wiki:
1926 docDir = 'wikidoc'
1927 toolsDir = project('com.oracle.max.tools').output_dir()
1928 baseDir = project('com.oracle.max.base').output_dir()
1929 dp = os.pathsep.join([toolsDir, baseDir])
1930 project_list = ','.join(p.name for p in sorted_deps())
1931 docletArgs = ['-docletpath', dp, '-doclet', 'com.oracle.max.tools.javadoc.wiki.WikiDoclet', '-projects', project_list]
1932 else:
1933 docDir = 'javadoc'
1934
1935 def check_package_list(p):
1936 if args.wiki:
1937 return True
1938 else:
1939 return not exists(join(p.dir, docDir, 'package-list'))
1940
1909 def assess_candidate(p, projects): 1941 def assess_candidate(p, projects):
1910 if p in projects: 1942 if p in projects:
1911 return False 1943 return False
1912 if args.force or args.unified or not exists(join(p.dir, 'javadoc', 'package-list')): 1944 if args.force or args.unified or check_package_list(p):
1913 projects.append(p) 1945 projects.append(p)
1914 return True 1946 return True
1915 return False 1947 return False
1916 1948
1917 projects = [] 1949 projects = []
1918 for p in candidates: 1950 for p in candidates:
1919 if not p.native: 1951 if not p.native:
1920 deps = p.all_deps([], includeLibs=False, includeSelf=False) 1952 if not args.wiki:
1921 for d in deps: 1953 deps = p.all_deps([], includeLibs=False, includeSelf=False)
1922 assess_candidate(d, projects) 1954 for d in deps:
1955 assess_candidate(d, projects)
1923 if not assess_candidate(p, projects): 1956 if not assess_candidate(p, projects):
1924 log('[package-list file exists - skipping {0}]'.format(p.name)) 1957 log('[package-list file exists - skipping {0}]'.format(p.name))
1925 1958
1926 1959
1927 def find_packages(sourceDirs, pkgs=set()): 1960 def find_packages(sourceDirs, pkgs=set()):
1928 for sourceDir in sourceDirs: 1961 for sourceDir in sourceDirs:
1929 for root, _, files in os.walk(sourceDir): 1962 for root, _, files in os.walk(sourceDir):
1930 if len([name for name in files if name.endswith('.java')]) != 0: 1963 if len([name for name in files if name.endswith('.java')]) != 0:
1931 pkgs.add(root[len(sourceDir) + 1:].replace('/','.')) 1964 pkg = root[len(sourceDir) + 1:].replace('/','.')
1965 if (len(packages) == 0) | (pkg in packages):
1966 pkgs.add(pkg)
1932 return pkgs 1967 return pkgs
1933 1968
1934 extraArgs = [] 1969 extraArgs = []
1935 if args.argfile is not None: 1970 if args.argfile is not None:
1936 extraArgs += ['@' + args.argfile] 1971 extraArgs += ['@' + args.argfile]
1972 memory = '2g'
1937 if args.memory is not None: 1973 if args.memory is not None:
1938 extraArgs.append('-J-Xmx' + args.memory) 1974 memory = args.memory
1975 memory = '-J-Xmx' + memory
1939 1976
1940 if not args.unified: 1977 if not args.unified:
1941 for p in projects: 1978 for p in projects:
1942 pkgs = find_packages(p.source_dirs(), set()) 1979 pkgs = find_packages(p.source_dirs(), set())
1943 deps = p.all_deps([], includeLibs=False, includeSelf=False) 1980 deps = p.all_deps([], includeLibs=False, includeSelf=False)
1944 links = ['-link', 'http://docs.oracle.com/javase/6/docs/api/'] 1981 links = ['-link', 'http://docs.oracle.com/javase/' + str(p.javaCompliance.value) + '/docs/api/']
1945 out = join(p.dir, 'javadoc') 1982 out = join(p.dir, docDir)
1946 for d in deps: 1983 for d in deps:
1947 depOut = join(d.dir, 'javadoc') 1984 depOut = join(d.dir, docDir)
1948 links.append('-link') 1985 links.append('-link')
1949 links.append(os.path.relpath(depOut, out)) 1986 links.append(os.path.relpath(depOut, out))
1950 cp = classpath(p.name, includeSelf=True) 1987 cp = classpath(p.name, includeSelf=True)
1951 sp = os.pathsep.join(p.source_dirs()) 1988 sp = os.pathsep.join(p.source_dirs())
1952 log('Generating javadoc for {0} in {1}'.format(p.name, out)) 1989 log('Generating {2} for {0} in {1}'.format(p.name, out, docDir))
1953 run([java().javadoc, '-J-Xmx2g', '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs)) 1990 run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + docletArgs + links + extraArgs + list(pkgs))
1954 log('Generated javadoc for {0} in {1}'.format(p.name, out)) 1991 log('Generated {2} for {0} in {1}'.format(p.name, out, docDir))
1955 else: 1992 else:
1956 pkgs = set() 1993 pkgs = set()
1957 sp = [] 1994 sp = []
1958 names = [] 1995 names = []
1959 for p in projects: 1996 for p in projects:
1960 find_packages(p.source_dirs(), pkgs) 1997 find_packages(p.source_dirs(), pkgs)
1961 sp += p.source_dirs() 1998 sp += p.source_dirs()
1962 names.append(p.name) 1999 names.append(p.name)
1963 2000
1964 links = ['-link', 'http://docs.oracle.com/javase/6/docs/api/'] 2001 links = ['-link', 'http://docs.oracle.com/javase/' + str(_java.javaCompliance.value) + '/docs/api/']
1965 out = join(_mainSuite.dir, 'javadoc') 2002 out = join(_mainSuite.dir, docDir)
1966 cp = classpath() 2003 cp = classpath()
1967 sp = os.pathsep.join(sp) 2004 sp = os.pathsep.join(sp)
1968 log('Generating javadoc for {0} in {1}'.format(', '.join(names), out)) 2005 log('Generating {2} for {0} in {1}'.format(', '.join(names), out, docDir))
1969 run([java().javadoc, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs)) 2006 run([java().javadoc, memory, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + docletArgs + links + extraArgs + list(pkgs))
1970 log('Generated javadoc for {0} in {1}'.format(', '.join(names), out)) 2007 log('Generated {2} for {0} in {1}'.format(', '.join(names), out, docDir))
1971 2008
1972 def javap(args): 2009 def javap(args):
1973 """launch javap with a -classpath option denoting all available classes 2010 """launch javap with a -classpath option denoting all available classes
1974 2011
1975 Run the JDK javap class file disassembler with the following prepended options: 2012 Run the JDK javap class file disassembler with the following prepended options: