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-- |
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 |