doc/manifest_preprocessor.txt
author Shawn Walker <shawn.walker@oracle.com>
Sat, 16 Jul 2011 08:45:13 -0700
changeset 2468 ce77b64883c4
parent 1506 9c8b3a3184be
permissions -rw-r--r--
18710 conditional dependencies can cause install and uninstall failure when dependency cannot be installed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1506
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     1
A ON manifest pre-processor needs the following attributes:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     2
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     3
1) Can selectively "comment out" parts of the
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     4
   manifest.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     5
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     6
2) Can perform string substitution in manifests.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     7
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     8
3) Can include other files to be part of this manifest
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
     9
   using either inline include statements or command
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    10
   line arguments.  In either case, a search path 
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    11
   for these files can be specified via one or more
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    12
   -I options ala cpp.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    13
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    14
4) Can transform actions matching certain
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    15
   criteria, using specifications delivered as part of the
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    16
   manifest (or one of the included files).
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    17
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    18
Importer currently does the first two via simple recursive
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    19
string substitution:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    20
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    21
Macros are of the form: $(MACRONAME) and can have
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    22
any string value, including another macro.  Macros
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    23
are found in each line, repeatedly substituted
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    24
until no more are found.  Expressions of macro
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    25
form w/o a value are passed through w/o modification.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    26
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    27
Eliding lines from a manifest is done by using a
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    28
macro at the begining of the line that has a '#'
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    29
value, which is the manifest comment character.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    30
As a practical matter, the macro names are assigned
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    31
in the importer Makefile to facilitate understanding;
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    32
eg
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    33
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    34
$(sparc_ONLY) has the value '#' unless the current
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    35
build is sparc; $(i386_ONLY) is similar.  On sparc,
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    36
$(ARCH64) is sparcv9, etc.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    37
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    38
The importer files then use these macros to allow
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    39
a single file to be used for both architectures.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    40
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    41
For including files, the easiest mechanism would be
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    42
some unique (distinct from either a comment, macro
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    43
or action line) syntax such as:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    44
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    45
<include "path">
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    46
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    47
The specified path is searched w/o substitution for 
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    48
if it starts w/ "/"; otherwise any parameters specifed
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    49
via -I are preprended and then searched for in order.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    50
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    51
Any files specified w/ -A would be searched for and appended
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    52
to the manifest as if they had be specified w/ <include "path">
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    53
at the end of the file.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    54
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    55
Once the manifest preprocessor had performed macro substitution
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    56
and file inclusion, the last step would be executing any transformative
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    57
steps specified in the files.  These transformative steps would 
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    58
contain a set of matching criteria and the desired effect on the action:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    59
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    60
<transform matching criteria -> operation>
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    61
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    62
matching criteria would be of the form
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    63
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    64
file|dir|signature|...     any action types
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    65
path=var/svc/manifest/.*xml
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    66
mode=0?1[0-7][0-7][0-7]
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    67
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    68
when python regexp rules would be used to find matching attributes.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    69
If multiple attributes are specified they all must be true for the
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    70
transform to take effect, with exception that specifying multiple 
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    71
action types will match any specified.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    72
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    73
operation specification looks like this:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    74
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    75
drop				# discard this action
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    76
edit attribute regexp [replace]	# apply regexp to value of attribute;
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    77
     	       	      		# if match occurs, substitute replace for
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    78
				# portion of attribute value that matched.
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    79
				# If replace is omitted, remove the 
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    80
				# the attribute values that match regexp
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    81
set attribute value		# set specified attribute to value
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    82
add attribute value		# add value to attribute
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    83
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    84
Examples:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    85
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    86
Add tags to smf manifest so they're properly imported:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    87
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    88
<transform file path=var/svc/manifest/.*\.xml -> add refresh_fmri svc:/system/manifest-import:default>
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    89
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    90
Add tags to gnome icon files to rebuild icon cache:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    91
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    92
<transform file path=usr/share/icons/.* -> add restart_fmri svc:/application/desktop-cache/icon-cache:default>
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    93
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    94
Change action location (including link targets) from usr/openwin to usr/X11:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    95
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    96
<transform path=usr/openwin -> edit path usr/openwin usr/X11>
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    97
<transform target=.*openwin.* -> edit target openwin X11>
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    98
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
    99
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   100
Command line
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   101
------------
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   102
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   103
pkgmog [-D macro=value] ... [-I includepath]... [-A filename] ... [inputfile [outputfile]]
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   104
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   105
Where:
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   106
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   107
inputfile is stdin if omitted
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   108
outputfile is stdout if omitted
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   109
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   110
-D defines the value of the specified macro; may be empty
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   111
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   112
-I adds the specified path to search for included files
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   113
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   114
-A appends the file to the end of the input as if the last line in the file
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   115
   included it
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   116
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   117
(pkgmog is short for package transmogrify)
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   118
9c8b3a3184be 12373 Need a programatic way of transforming manifests
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents:
diff changeset
   119