make/uwproj.xsd

changeset 87
a53fa82bbdcf
parent 72
b533da8e7411
equal deleted inserted replaced
86:c41ab60fd27a 87:a53fa82bbdcf
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3 xmlns="http://unixwork.de/uwproj" 3 xmlns="http://unixwork.de/uwproj"
4 targetNamespace="http://unixwork.de/uwproj" 4 targetNamespace="http://unixwork.de/uwproj"
5 elementFormDefault="qualified" 5 elementFormDefault="qualified"
6 version="0.1" 6 version="0.3"
7 > 7 >
8 <xs:element name="project" type="ProjectType"/> 8 <xs:element name="project" type="ProjectType"/>
9 9
10 <xs:complexType name="ProjectType"> 10 <xs:complexType name="ProjectType">
11 <xs:annotation>
12 <xs:documentation>
13 The root element of an uwproj project.
14 Consists of an optional <code>config</code> element
15 and an arbitrary number of <code>dependency</code>
16 and <code>target</code> elements.
17 </xs:documentation>
18 </xs:annotation>
11 <xs:sequence> 19 <xs:sequence>
12 <xs:element name="config" type="ConfigType" minOccurs="0"/> 20 <xs:element name="config" type="ConfigType" minOccurs="0" maxOccurs="unbounded"/>
13 <xs:element name="dependency" type="DependencyType" minOccurs="0" maxOccurs="unbounded"/> 21 <xs:element name="dependency" type="DependencyType" minOccurs="0" maxOccurs="unbounded"/>
14 <xs:element name="target" type="TargetType" minOccurs="0" maxOccurs="unbounded"/> 22 <xs:element name="target" type="TargetType" minOccurs="0" maxOccurs="unbounded"/>
15 </xs:sequence> 23 </xs:sequence>
24 <xs:attribute name="version" type="xs:string" use="required" />
16 </xs:complexType> 25 </xs:complexType>
17 26
18 <xs:complexType name="ConfigType"> 27 <xs:complexType name="ConfigType">
28 <xs:annotation>
29 <xs:documentation>
30 <p>
31 The configuration section.
32 Consists of an arbitrary number of <code>var</code> elements.
33 </p>
34 <p>
35 The optional <code>platform</code> attribute may specify a <em>single</em> platform identifier and
36 the optional <code>not</code> attribute may specify a comma-separated list of platform identifiers.
37 The configure script shall skip this config declaration if the detected platform is not matching
38 the filter specification of these attributes.
39 </p>
40 </xs:documentation>
41 </xs:annotation>
19 <xs:sequence> 42 <xs:sequence>
20 <xs:element name="var" type="ConfigVarType" minOccurs="0" maxOccurs="unbounded"/> 43 <xs:element name="var" type="ConfigVarType" minOccurs="0" maxOccurs="unbounded"/>
21 </xs:sequence> 44 </xs:sequence>
45 <xs:attribute name="platform" type="xs:string"/>
46 <xs:attribute name="not" type="xs:string"/>
22 </xs:complexType> 47 </xs:complexType>
23 48
24 <xs:complexType name="ConfigVarType"> 49 <xs:complexType name="ConfigVarType">
50 <xs:annotation>
51 <xs:documentation>
52 The definition of a configuration variable.
53 <p>
54 Configuration variables are supposed to be used in the configure script and are also
55 written to the resulting config file (in contrast to make variables, which are only
56 written to the config file).
57 The <code>name</code> attribute is mandatory, the value is defined by the text body of the element.
58 The optional Boolean <code>exec</code> attribute (false by default) controls, whether the entire
59 definition is automatically executed under command substitution.
60 </p>
61 </xs:documentation>
62 </xs:annotation>
25 <xs:simpleContent> 63 <xs:simpleContent>
26 <xs:extension base="xs:string"> 64 <xs:extension base="xs:string">
27 <xs:attribute name="name" type="xs:string" use="required"/> 65 <xs:attribute name="name" type="xs:string" use="required"/>
28 <xs:attribute name="exec" type="xs:boolean" default="false"/> 66 <xs:attribute name="exec" type="xs:boolean" default="false"/>
29 </xs:extension> 67 </xs:extension>
30 </xs:simpleContent> 68 </xs:simpleContent>
31 </xs:complexType> 69 </xs:complexType>
32 70
33 <xs:complexType name="PkgConfigType"> 71 <xs:complexType name="PkgConfigType">
72 <xs:annotation>
73 <xs:documentation>
74 Instructs configure to invoke <code>pkg-config</code>, if present on the system, to determine
75 compiler and linker flags. The text body of this element defines the package name to search.
76 To constrain the allowed versions, use the attributes <code>atleast, exact, max</code>.
77 </xs:documentation>
78 </xs:annotation>
34 <xs:simpleContent> 79 <xs:simpleContent>
35 <xs:extension base="xs:string"> 80 <xs:extension base="xs:string">
36 <xs:attribute name="atleast" type="xs:string"/> 81 <xs:attribute name="atleast" type="xs:string"/>
37 <xs:attribute name="exact" type="xs:string"/> 82 <xs:attribute name="exact" type="xs:string"/>
38 <xs:attribute name="max" type="xs:string"/> 83 <xs:attribute name="max" type="xs:string"/>
39 </xs:extension> 84 </xs:extension>
40 </xs:simpleContent> 85 </xs:simpleContent>
41 </xs:complexType> 86 </xs:complexType>
42 87
43 <xs:simpleType name="LangType"> 88 <xs:simpleType name="LangType">
89 <xs:annotation>
90 <xs:documentation>
91 Requests a compiler for the specified language. Allowed values are
92 c, cpp.
93 </xs:documentation>
94 </xs:annotation>
44 <xs:restriction base="xs:string"> 95 <xs:restriction base="xs:string">
45 <xs:enumeration value="c"/> 96 <xs:enumeration value="c"/>
46 <xs:enumeration value="cpp"/> 97 <xs:enumeration value="cpp"/>
47 </xs:restriction> 98 </xs:restriction>
48 </xs:simpleType> 99 </xs:simpleType>
49 100
50 <xs:complexType name="DependencyType"> 101 <xs:complexType name="DependencyType">
102 <xs:annotation>
103 <xs:documentation>
104 Declares a dependency.
105 <p>
106 If the optional <code>name</code> attribute is omitted, the dependency is global
107 and must be satisfied, otherwise configuration shall fail.
108 A <em>named dependency</em> can be referenced by a target (or is implicitly referenced
109 by the default target, if no targets are specified).
110 Multiple declarations for the same named dependency may exist, in which case each declaration
111 is checked one after another, until one block is satisfied. The result of the first satisfied
112 dependency declaration is supposed to be applied to the config file.
113 </p>
114 <p>
115 The optional <code>platform</code> attribute may specify a <em>single</em> platform identifier and
116 the optional <code>toolchain</code> attribute may specify a <em>single</em> toolchain.
117 The optional <code>not</code> attribute may specify a comma-separated list of platform and/or
118 toolchain identifiers.
119 The configure script shall skip this dependency declaration if the detected platform and toolchain
120 is not matching the filter specification of these attributes.
121 </p>
122 </xs:documentation>
123 </xs:annotation>
51 <xs:choice minOccurs="0" maxOccurs="unbounded"> 124 <xs:choice minOccurs="0" maxOccurs="unbounded">
52 <xs:element name="lang" type="LangType"/> 125 <xs:element name="lang" type="LangType"/>
53 <xs:element name="cflags" type="FlagsType"/> 126 <xs:element name="cflags" type="FlagsType"/>
54 <xs:element name="cxxflags" type="FlagsType"/> 127 <xs:element name="cxxflags" type="FlagsType"/>
55 <xs:element name="ldflags" type="FlagsType"/> 128 <xs:element name="ldflags" type="FlagsType"/>
56 <xs:element name="pkgconfig" type="PkgConfigType"/> 129 <xs:element name="pkgconfig" type="PkgConfigType"/>
57 <xs:element name="test" type="xs:string"/> 130 <xs:element name="test" type="xs:string">
58 <xs:element name="make" type="xs:string"/> 131 <xs:annotation>
132 <xs:documentation>
133 Specifies a custom command that shall be executed to test whether this dependency is satisfied.
134 </xs:documentation>
135 </xs:annotation>
136 </xs:element>
137 <xs:element name="make" type="MakeVarType"/>
59 </xs:choice> 138 </xs:choice>
60 <xs:attribute name="name" type="xs:string"/> 139 <xs:attribute name="name" type="xs:string"/>
61 <xs:attribute name="platform" type="xs:string"/> 140 <xs:attribute name="platform" type="xs:string"/>
141 <xs:attribute name="toolchain" type="xs:string"/>
62 <xs:attribute name="not" type="xs:string"/> 142 <xs:attribute name="not" type="xs:string"/>
63 </xs:complexType> 143 </xs:complexType>
64 144
65 <xs:complexType name="FlagsType"> 145 <xs:complexType name="FlagsType">
146 <xs:annotation>
147 <xs:documentation>
148 Instructs configure to append the contents of the element's body to the respective flags variable.
149 If the optional <code>exec</code> flag is set to <code>true</code>, the contents are supposed to be
150 executed under command substitution <em>at configuration time</em> before they are applied.
151 </xs:documentation>
152 </xs:annotation>
66 <xs:simpleContent> 153 <xs:simpleContent>
67 <xs:extension base="xs:string"> 154 <xs:extension base="xs:string">
68 <xs:attribute name="exec" type="xs:boolean" default="false"/> 155 <xs:attribute name="exec" type="xs:boolean" default="false"/>
69 </xs:extension> 156 </xs:extension>
70 </xs:simpleContent> 157 </xs:simpleContent>
71 </xs:complexType> 158 </xs:complexType>
72 159
73 <xs:complexType name="TargetType"> 160 <xs:complexType name="TargetType">
161 <xs:annotation>
162 <xs:documentation>
163 Declares a build target that is supposed to be configured.
164 <p>
165 If no build target is declared explicitly, an implicit default
166 target is generated, which has the <code>alldependencies</code>
167 flag set.
168 </p>
169 <p>
170 The optional <code>name</code> attribute is also used to generate a prefix
171 for the compiler and linker flags variables.
172 Furthermore, a target may consist of an arbitrary number of <code>feature</code>,
173 <code>option</code>, and <code>define</code> elements.
174 Named dependencies can be listed (separated by comma) in the <code>dependencies</code>
175 element. If this target shall use <em>all</em> available named dependencies, the empty
176 element <code>alldependencies</code> can be used as a shortcut.
177 </p>
178 </xs:documentation>
179 </xs:annotation>
74 <xs:choice minOccurs="0" maxOccurs="unbounded"> 180 <xs:choice minOccurs="0" maxOccurs="unbounded">
75 <xs:element name="feature" type="FeatureType"/> 181 <xs:element name="feature" type="FeatureType"/>
76 <xs:element name="option" type="OptionType"/> 182 <xs:element name="option" type="OptionType"/>
77 <xs:element name="define" type="DefineType"/> 183 <xs:element name="define" type="DefineType"/>
78 <xs:element name="dependencies" type="DependenciesType"/> 184 <xs:element name="dependencies" type="DependenciesType"/>
82 </xs:choice> 188 </xs:choice>
83 <xs:attribute name="name" type="xs:string"/> 189 <xs:attribute name="name" type="xs:string"/>
84 </xs:complexType> 190 </xs:complexType>
85 191
86 <xs:complexType name="FeatureType"> 192 <xs:complexType name="FeatureType">
193 <xs:annotation>
194 <xs:documentation>
195 Declares an optional feature, that can be enabled during configuration, if all
196 <code>dependencies</code> are satisfied.
197 If a feature is enabled, all <code>define</code> and <code>make</code> definitions are
198 supposed to be applied to the config file.
199 If a feature is disabled, an optional <code>disabled</code> element may specify which
200 <code>define</code> and <code>make</code> definitions are supposed to be applied.
201 There might also be <code>dependencies</code> when the feature is disabled (e.g. specifying a fallback).
202 In case the optional <code>default</code> attribute is set to true, the feature is enabled by default
203 and is supposed to be automatically disabled (without error) when the dependencies are not satisfied.
204 The name that is supposed to be used for the --enable and --disable arguments can be optionally
205 specified with the <code>arg</code> attribute. Otherwise, the <code>name</code> is used by default.
206 Optionally, a description for the help text of the resulting configure script can be specified by
207 adding a <code>desc</code> element.
208 </xs:documentation>
209 </xs:annotation>
87 <xs:choice minOccurs="0" maxOccurs="unbounded"> 210 <xs:choice minOccurs="0" maxOccurs="unbounded">
88 <xs:group ref="TargetDataGroup"/> 211 <xs:group ref="TargetDataGroup"/>
212 <xs:element name="desc" type="xs:string"/>
213 <xs:element name="disabled">
214 <xs:complexType>
215 <xs:choice minOccurs="0" maxOccurs="unbounded">
216 <xs:group ref="TargetDataGroup"/>
217 </xs:choice>
218 </xs:complexType>
219 </xs:element>
89 </xs:choice> 220 </xs:choice>
90 <xs:attribute name="name" type="xs:string" use="required"/> 221 <xs:attribute name="name" type="xs:string" use="required"/>
91 <xs:attribute name="arg" type="xs:string"/> 222 <xs:attribute name="arg" type="xs:string"/>
92 <xs:attribute name="default" type="xs:boolean" default="false"/> 223 <xs:attribute name="default" type="xs:boolean" default="false"/>
93 </xs:complexType> 224 </xs:complexType>
94 225
95 <xs:complexType name="OptionType"> 226 <xs:complexType name="OptionType">
227 <xs:annotation>
228 <xs:documentation>
229 Declares a configuration option.
230 The option argument name is specified with the <code>arg</code> attribute.
231 Then, the children of this element specify possible <code>values</code> by defining the conditions
232 (in terms of dependencies) and effects (in terms of defines and make variables) of each value.
233 Finally, a set of <code>default</code>s is specified which supposed to automagically select the most
234 appropriate value for a specific platform under the available dependencies (in case the option is not
235 explicitly specified by using the command line argument).
236 </xs:documentation>
237 </xs:annotation>
96 <xs:sequence> 238 <xs:sequence>
97 <xs:element name="value" type="OptionValueType" minOccurs="0" maxOccurs="unbounded"/> 239 <xs:element name="value" type="OptionValueType" minOccurs="0" maxOccurs="unbounded"/>
98 <xs:element name="default" type="OptionDefaultType" minOccurs="0" maxOccurs="unbounded"/> 240 <xs:element name="default" type="OptionDefaultType" minOccurs="0" maxOccurs="unbounded"/>
99 </xs:sequence> 241 </xs:sequence>
100 <xs:attribute name="arg" type="xs:string"/> 242 <xs:attribute name="arg" type="xs:string" use="required"/>
101 </xs:complexType> 243 </xs:complexType>
102 244
103 <xs:complexType name="OptionValueType"> 245 <xs:complexType name="OptionValueType">
246 <xs:annotation>
247 <xs:documentation>
248 Declares a possible value for the option (in the <code>str</code> attribute) and
249 the conditions (<code>dependencies</code>) and effects, the value has.
250 </xs:documentation>
251 </xs:annotation>
104 <xs:choice minOccurs="0" maxOccurs="unbounded"> 252 <xs:choice minOccurs="0" maxOccurs="unbounded">
105 <xs:group ref="TargetDataGroup"/> 253 <xs:group ref="TargetDataGroup"/>
106 </xs:choice> 254 </xs:choice>
107 <xs:attribute name="str" type="xs:string" use="required"/> 255 <xs:attribute name="str" type="xs:string" use="required"/>
108 </xs:complexType> 256 </xs:complexType>
109 257
110 <xs:complexType name="OptionDefaultType"> 258 <xs:complexType name="OptionDefaultType">
259 <xs:annotation>
260 <xs:documentation>
261 Specifies a default value for this option. Multiple default values can be specified, in which case
262 they are checked one after another for availability. With the optional <code>platform</code> attribute,
263 the default value can be constrained to a <em>single</em> specific platform and is supposed to be
264 skipped by configure, when this platform is not detected.
265 </xs:documentation>
266 </xs:annotation>
111 <xs:attribute name="value" type="xs:string" use="required"/> 267 <xs:attribute name="value" type="xs:string" use="required"/>
112 <xs:attribute name="platform" type="xs:string"/> 268 <xs:attribute name="platform" type="xs:string"/>
113 </xs:complexType> 269 </xs:complexType>
114 270
115 <xs:group name="TargetDataGroup"> 271 <xs:group name="TargetDataGroup">
116 <xs:choice> 272 <xs:choice>
117 <xs:element name="define" type="DefineType" minOccurs="0" maxOccurs="unbounded"/> 273 <xs:element name="define" type="DefineType" minOccurs="0" maxOccurs="unbounded"/>
118 <xs:element name="dependencies" type="DependenciesType" minOccurs="0" maxOccurs="unbounded"/> 274 <xs:element name="dependencies" type="DependenciesType" minOccurs="0" maxOccurs="unbounded"/>
119 <xs:element name="make" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 275 <xs:element name="make" type="MakeVarType" minOccurs="0" maxOccurs="unbounded"/>
120 </xs:choice> 276 </xs:choice>
121 </xs:group> 277 </xs:group>
122 278
123 <xs:complexType name="DefineType"> 279 <xs:complexType name="DefineType">
280 <xs:annotation>
281 <xs:documentation>
282 Specifies C/C++ pre-processor definitions that are supposed to
283 be appended to the compiler flags, if supported.
284 (Note: for example, Fortran also supports C/C++ style pre-processor definitions under
285 certain circumstances)
286 </xs:documentation>
287 </xs:annotation>
124 <xs:attribute name="name" type="xs:string" use="required"/> 288 <xs:attribute name="name" type="xs:string" use="required"/>
125 <xs:attribute name="value" type="xs:string"/> 289 <xs:attribute name="value" type="xs:string"/>
126 </xs:complexType> 290 </xs:complexType>
127 291
128 <xs:simpleType name="DependenciesType"> 292 <xs:simpleType name="DependenciesType">
293 <xs:annotation>
294 <xs:documentation>A comma-separated list of named dependencies.</xs:documentation>
295 </xs:annotation>
296 <xs:restriction base="xs:string"/>
297 </xs:simpleType>
298
299 <xs:simpleType name="MakeVarType">
300 <xs:annotation>
301 <xs:documentation>
302 The text contents in the body of this element are supposed to be appended literally
303 to the config file without prior processing.
304 </xs:documentation>
305 </xs:annotation>
129 <xs:restriction base="xs:string"/> 306 <xs:restriction base="xs:string"/>
130 </xs:simpleType> 307 </xs:simpleType>
131 </xs:schema> 308 </xs:schema>

mercurial