comparison mxtool/mx.py @ 5171:99ad84da5f99

added javadoc command (from Maxine version of mx)
author Doug Simon <doug.simon@oracle.com>
date Thu, 29 Mar 2012 10:52:12 +0200
parents 7f9010a55761
children 6fbf12b8e572
comparison
equal deleted inserted replaced
5170:597eade2394e 5171:99ad84da5f99
758 self.jdk = opts.java_home 758 self.jdk = opts.java_home
759 self.debug_port = opts.java_dbg_port 759 self.debug_port = opts.java_dbg_port
760 self.java = exe_suffix(join(self.jdk, 'bin', 'java')) 760 self.java = exe_suffix(join(self.jdk, 'bin', 'java'))
761 self.javac = exe_suffix(join(self.jdk, 'bin', 'javac')) 761 self.javac = exe_suffix(join(self.jdk, 'bin', 'javac'))
762 self.javap = exe_suffix(join(self.jdk, 'bin', 'javap')) 762 self.javap = exe_suffix(join(self.jdk, 'bin', 'javap'))
763 self.javadoc = exe_suffix(join(self.jdk, 'bin', 'javadoc'))
763 764
764 if not exists(self.java): 765 if not exists(self.java):
765 abort('Java launcher derived from JAVA_HOME does not exist: ' + self.java) 766 abort('Java launcher derived from JAVA_HOME does not exist: ' + self.java)
766 767
767 def delAtAndSplit(s): 768 def delAtAndSplit(s):
1743 def ideinit(args, suite=None): 1744 def ideinit(args, suite=None):
1744 """(re)generate Eclipse and NetBeans project configurations""" 1745 """(re)generate Eclipse and NetBeans project configurations"""
1745 eclipseinit(args, suite) 1746 eclipseinit(args, suite)
1746 netbeansinit(args, suite) 1747 netbeansinit(args, suite)
1747 1748
1749 def javadoc(args):
1750 """generate javadoc for some/all Java projects"""
1751
1752 parser = ArgumentParser(prog='mx javadoc')
1753 parser.add_argument('--unified', action='store_true', help='put javadoc in a single directory instead of one per project')
1754 parser.add_argument('--force', action='store_true', help='(re)generate javadoc even if package-list file exists')
1755 parser.add_argument('--projects', action='store', help='comma separated projects to process (omit to process all projects)')
1756 parser.add_argument('--argfile', action='store', help='name of file containing extra javadoc options')
1757 parser.add_argument('-m', '--memory', action='store', help='-Xmx value to pass to underlying JVM')
1758
1759 args = parser.parse_args(args)
1760
1761 # build list of projects to be processed
1762 candidates = sorted_deps()
1763 if args.projects is not None:
1764 candidates = [project(name) for name in args.projects.split(',')]
1765
1766 def assess_candidate(p, projects):
1767 if p in projects:
1768 return False
1769 if args.force or args.unified or not exists(join(p.dir, 'javadoc', 'package-list')):
1770 projects.append(p)
1771 return True
1772 return False
1773
1774 projects = []
1775 for p in candidates:
1776 if not p.native:
1777 deps = p.all_deps([], includeLibs=False, includeSelf=False)
1778 for d in deps:
1779 assess_candidate(d, projects)
1780 if not assess_candidate(p, projects):
1781 log('[package-list file exists - skipping {0}]'.format(p.name))
1782
1783
1784 def find_packages(sourceDirs, pkgs=set()):
1785 for sourceDir in sourceDirs:
1786 for root, _, files in os.walk(sourceDir):
1787 if len([name for name in files if name.endswith('.java')]) != 0:
1788 pkgs.add(root[len(sourceDir) + 1:].replace('/','.'))
1789 return pkgs
1790
1791 extraArgs = []
1792 if args.argfile is not None:
1793 extraArgs += ['@' + args.argfile]
1794 if args.memory is not None:
1795 extraArgs.append('-J-Xmx' + args.memory)
1796
1797 if not args.unified:
1798 for p in projects:
1799 pkgs = find_packages(p.source_dirs(), set())
1800 deps = p.all_deps([], includeLibs=False, includeSelf=False)
1801 links = ['-link', 'http://docs.oracle.com/javase/6/docs/api/']
1802 out = join(p.dir, 'javadoc')
1803 for d in deps:
1804 depOut = join(d.dir, 'javadoc')
1805 links.append('-link')
1806 links.append(os.path.relpath(depOut, out))
1807 cp = classpath(p.name, includeSelf=True)
1808 sp = os.pathsep.join(p.source_dirs())
1809 log('Generating javadoc for {0} in {1}'.format(p.name, out))
1810 run([java().javadoc, '-J-Xmx2g', '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs))
1811 log('Generated javadoc for {0} in {1}'.format(p.name, out))
1812 else:
1813 pkgs = set()
1814 sp = []
1815 names = []
1816 for p in projects:
1817 find_packages(p.source_dirs(), pkgs)
1818 sp += p.source_dirs()
1819 names.append(p.name)
1820
1821 links = ['-link', 'http://docs.oracle.com/javase/6/docs/api/']
1822 out = join(_mainSuite.dir, 'javadoc')
1823 cp = classpath()
1824 sp = os.pathsep.join(sp)
1825 log('Generating javadoc for {0} in {1}'.format(', '.join(names), out))
1826 run([java().javadoc, '-classpath', cp, '-quiet', '-d', out, '-sourcepath', sp] + links + extraArgs + list(pkgs))
1827 log('Generated javadoc for {0} in {1}'.format(', '.join(names), out))
1828
1748 def javap(args): 1829 def javap(args):
1749 """launch javap with a -classpath option denoting all available classes 1830 """launch javap with a -classpath option denoting all available classes
1750 1831
1751 Run the JDK javap class file disassembler with the following prepended options: 1832 Run the JDK javap class file disassembler with the following prepended options:
1752 1833
1789 'help': [help_, '[command]'], 1870 'help': [help_, '[command]'],
1790 'ideclean': [ideclean, ''], 1871 'ideclean': [ideclean, ''],
1791 'ideinit': [ideinit, ''], 1872 'ideinit': [ideinit, ''],
1792 'projectgraph': [projectgraph, ''], 1873 'projectgraph': [projectgraph, ''],
1793 'javap': [javap, ''], 1874 'javap': [javap, ''],
1875 'javadoc': [javadoc, '[options]'],
1794 'netbeansinit': [netbeansinit, ''], 1876 'netbeansinit': [netbeansinit, ''],
1795 'projects': [show_projects, ''], 1877 'projects': [show_projects, ''],
1796 } 1878 }
1797 1879
1798 _argParser = ArgParser() 1880 _argParser = ArgParser()