make/uwproj.xsd

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

mercurial