userland-mangler revision 181
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# CDDL HEADER START
78fa3c578c14ee8a612f86cf73b6181c7f16463fTimo Sirainen# The contents of this file are subject to the terms of the
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# Common Development and Distribution License (the "License").
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# You may not use this file except in compliance with the License.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# See the License for the specific language governing permissions
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# and limitations under the License.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# When distributing Covered Code, include this CDDL HEADER in each
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# If applicable, add the following below this CDDL HEADER, with the
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# fields enclosed by brackets "[]" replaced with your own identifying
6ec925f52d04ec8700e47cb005bd7ddc65ac5614Timo Sirainen# information: Portions Copyright [yyyy] [name of copyright owner]
4d4d6d4745682790c20d759ba93dbea46b812c5dTimo Sirainen# CDDL HEADER END
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# userland-mangler - a file mangling utility
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# A simple program to mangle files to conform to Solaris WOS or Consoldation
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# requirements.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen.SH ATTRIBUTES
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo Sirainen.BR attributes (5)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenfor descriptions of the following attributes:
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo SirainenATTRIBUTE TYPE ATTRIBUTE VALUE """
78fa3c578c14ee8a612f86cf73b6181c7f16463fTimo SirainenAvailability %s"""
78fa3c578c14ee8a612f86cf73b6181c7f16463fTimo SirainenStability %s"""
230ef558135f16a66b86cbe3762524eaa9ae9d81Timo Sirainendef write_attributes_section(ofp, availability, stability):
230ef558135f16a66b86cbe3762524eaa9ae9d81Timo Sirainen # is there anything to do?
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen if availability is None and stability is None:
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen # append the ATTRIBUTES section
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen ofp.write(attribute_table_availability % availability)
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen ofp.write(attribute_table_stability % stability.capitalize())
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo SirainenFurther information about this software can be found on the open source community website at %s.
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo SirainenThis software was built from source available at http://opensolaris.org/. The original community source was downloaded from %s
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo Sirainendef write_notes_section(ofp, header_seen, community, source):
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo Sirainen # is there anything to do?
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo Sirainen # append the NOTES section
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainensection_re = re.compile('\.SH "?([^"]+).*$', re.IGNORECASE)
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainen# mangler.man.stability = (mangler.man.stability)
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainen# mangler.man.upstream_url = (pkg.upstream_url)
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainendef mangle_manpage(manifest, action, src, dest):
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainen # manpages must have a taxonomy defined
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainen stability = action.attrs.pop('mangler.man.stability', None)
efc5c69c572e83db7bf7eab5d4698c0ab0d3d886Timo Sirainen sys.stderr.write("ERROR: manpage action missing mangler.man.stability: %s" % action)
b955a1c1b6d466977d971c029a9305bee492f73cTimo Sirainen fmri = pkg.fmri.PkgFmri(manifest.attributes['pkg.fmri'])
b955a1c1b6d466977d971c029a9305bee492f73cTimo Sirainen if 'info.upstream_url' in manifest.attributes:
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen community = manifest.attributes['info.upstream_url']
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen source = manifest.attributes['info.source_url']
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen # create a directory to write to
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen # read the source document
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen # skip reference only pages
7487ff578435377bbeefffdbfb78ca09ed1292dfTimo Sirainen # open a destination
fb7ac3e31c92627efe076318319976ac1c27ae2aTimo Sirainen # tell man that we want tables (and eqn)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen # write the orginal data
e1f866daa1bd1a5cd7516f3b19c6f197bcf6cc8aTimo Sirainen write_attributes_section(ofp, availability, stability)
e1f866daa1bd1a5cd7516f3b19c6f197bcf6cc8aTimo Sirainen write_notes_section(ofp, notes_seen, community, source)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainendef mangle_script(manifest, action, src, dest):
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen elif 'mode' in action.attrs and int(action.attrs['mode'], 8) & 0111 != 0:
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# mangler.bypass = (true|false)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainendef mangle_paths(manifest, search_paths, destination):
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen for action in manifest.gen_actions_by_type("file"):
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen bypass = action.attrs.pop('mangler.bypass', 'false').lower()
43d7e7ce608f5451e4907b5f5c48c00beb265802Timo Sirainen print "Usage: %s [-m|--manifest (file)] [-d|--search-directory (dir)] [-D|--destination (dir)] " % (sys.argv[0].split('/')[-1])
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen # FLUSH STDOUT
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen opts, args = getopt.getopt(sys.argv[1:], "D:d:m:",
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ["destination=", "search-directory=", "manifest="])