diff -r 55d0c4c3878b -r e82fa02a4d16 tools/gen-components --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/gen-components Tue Nov 13 08:19:05 2012 -0800 @@ -0,0 +1,184 @@ +#!/usr/bin/python +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# Copyright (c) 2012, Oracle and/or it's affiliates. All rights reserved. +# +# +# gen_components.py +# A simple program to generate (on stdout) the component.html web page +# found at: http://userland.us.oracle.com/components.html +# + +import getopt +import os +import sys + +debug = False + +# Initial HTML for the generated web page. +preamble = """ + + + + + + + + + + + + +

Userland Components

+

+ + + + + + + + + + + + +""" + +# Final HTML for the generated web page. +postamble = """ + + +
ComponentVersionGate PathPackage(s)ARC Case(s)License(s)
+ + +""" + +# Return a sorted list of the directories containing one or more .p5m files. +def find_p5m_dirs(workspace): + p5m_dirs = [] + for dir, _, files in os.walk(workspace + "/components"): + for file in files: + if file.endswith(".p5m"): + p5m_dirs.append(dir) + + return sorted(list(set(p5m_dirs))) + +# Write out the initial HTML for the components.html web page. +def write_preamble(): + print preamble + +# Generate an HTML table entry for all the information for the component +# in the given directory. This generates a file called 'component-report' +# under the components build directory. +def gen_reports(workspace, component_dir): + if debug: + print >> sys.stderr, "Processing %s" % component_dir + + makefiles = "-f Makefile -f %s/make-rules/component-report" % workspace + targets = "clean component-hook" + cmd = "cd %s; gmake COMPONENT_HOOK='gmake %s component-report' %s" % \ + (component_dir, makefiles, targets) + + lines = os.popen(cmd).readlines() + +# Collect all the .../build/component-report files and write them to stdout. +def write_reports(p5m_dirs): + for p5m_dir in p5m_dirs: + report = "%s/build/component-report" % p5m_dir + if debug: + print >> sys.stderr, "Reading %s" % report + try: + fin = open(report, 'r') + lines = fin.readlines() + fin.close() + sys.stdout.writelines(lines) + except: + if debug: + print >> sys.stderr, "Unable to read: %s" % report + +# Write out the final HTML for the components.html web page. +def write_postamble(): + print postamble + +# Write out a usage message showing valid options to this script. +def usage(): + print >> sys.stderr, \ +""" +Usage: + update_man_pages.py [OPTION...] + +-d, --debug + Turn on debugging + +-w --workspace + Location of the Userland workspace +""" + + sys.exit(1) + + +if __name__ == "__main__": + workspace = os.getenv('WS_TOP') + + try: + opts, args = getopt.getopt(sys.argv[1:], "dw:", + [ "debug", "workspace=" ]) + except getopt.GetoptError, err: + print str(err) + usage() + + for opt, arg in opts: + if opt in [ "-w", "--workspace" ]: + workspace = arg + elif opt in [ "-d", "--debug" ]: + debug = True + else: + assert False, "unknown option" + + write_preamble() + p5m_dirs = find_p5m_dirs(workspace) + for p5m_dir in p5m_dirs: + gen_reports(workspace, p5m_dir) + write_reports(p5m_dirs) + write_postamble() + sys.exit(0)