Imported Upstream version 1.0.0~rc2
Robert S. Edmonds
9 years ago
51 | 51 | * Optionally allow running the test suite under valgrind with ./configure |
52 | 52 | --enable-valgrind-tests. (Based on valgrind-tests.m4 from gnulib.) |
53 | 53 | |
54 | [Kevin Lyda] | |
54 | [ Kevin Lyda ] | |
55 | 55 | * Autoconf portability fixes. |
56 | 56 | |
57 | 57 | * Add doxygen detection and make targets to the build system. |
58 | 58 | |
59 | [Nick Galbreath] | |
59 | * Doxygen documentation for the libprotobuf-c public API (Issue #132). | |
60 | ||
61 | [ Nick Galbreath ] | |
60 | 62 | * Prevent possible overflow on 64-bit systems (Issue #106). |
61 | 63 | |
62 | 64 | [ Robert Edmonds ] |
107 | 109 | compiled against a protobuf-c header file from the exact same protobuf-c |
108 | 110 | release. |
109 | 111 | |
112 | * Add a --enable-code-coverage option to configure, which enables a | |
113 | "make check-code-coverage" build target. This generates a code coverage | |
114 | report and requires the lcov tool to be installed. | |
115 | ||
116 | * Remove the old DocBook documentation in doc/c-code-generator.{html,xml}. | |
117 | Relevant material has been updated and incorporated into the Doxygen | |
118 | documentation in the protobuf-c header file. | |
119 | ||
120 | * Remove the protobuf_c_default_allocator and protobuf_c_system_allocator | |
121 | global variables from the exported library interface. All exported library | |
122 | functions that need to perform dynamic memory allocation receive a | |
123 | user-provided ProtobufCAllocator* parameter. If this parameter is NULL, | |
124 | the system's default memory allocator will be used. | |
125 | ||
126 | Client code that previously passed "&protobuf_c_system_allocator" to | |
127 | protobuf-c library functions taking a ProtobufCAllocator* argument should | |
128 | be updated to pass "NULL" instead. | |
129 | ||
130 | Client code that previously overrode protobuf_c_default_allocator with | |
131 | custom allocation functions and passed NULL as the ProtobufCAllocator* | |
132 | argument to protobuf-c library functions should be updated to instead | |
133 | enclose the custom allocation functions in a ProtobufCAllocator struct and | |
134 | pass this object to protobuf-c library functions taking a | |
135 | ProtobufCAllocator* parameter. | |
136 | ||
110 | 137 | * Update copyright and license statements throughout. The original |
111 | 138 | protobuf code released by Google was relicensed from Apache-2.0 to |
112 | 139 | BSD-3-Clause. Dave Benson also converted his license from BSD-3-Clause |
113 | 140 | to BSD-2-Clause. |
114 | 141 | |
115 | [Tomasz Wasilczyk] | |
142 | [ Tomasz Wasilczyk ] | |
116 | 143 | * Don't export protobuf_c_message_init_generic() as an external symbol. |
117 | 144 | |
118 | 145 | * Don't use C++ style comments in C code. |
0 | # Doxyfile 1.8.7 | |
1 | ||
2 | # This file describes the settings to be used by the documentation system | |
3 | # doxygen (www.doxygen.org) for a project. | |
4 | # | |
5 | # All text after a double hash (##) is considered a comment and is placed in | |
6 | # front of the TAG it is preceding. | |
7 | # | |
8 | # All text after a single hash (#) is considered a comment and will be ignored. | |
9 | # The format is: | |
10 | # TAG = value [value, ...] | |
11 | # For lists, items can also be appended using: | |
12 | # TAG += value [value, ...] | |
13 | # Values that contain spaces should be placed between quotes (\" \"). | |
14 | ||
15 | #--------------------------------------------------------------------------- | |
16 | # Project related configuration options | |
17 | #--------------------------------------------------------------------------- | |
18 | ||
19 | # This tag specifies the encoding used for all characters in the config file | |
20 | # that follow. The default is UTF-8 which is also the encoding used for all text | |
21 | # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv | |
22 | # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv | |
23 | # for the list of possible encodings. | |
24 | # The default value is: UTF-8. | |
25 | ||
26 | DOXYFILE_ENCODING = UTF-8 | |
27 | ||
28 | # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by | |
29 | # double-quotes, unless you are using Doxywizard) that should identify the | |
30 | # project for which the documentation is generated. This name is used in the | |
31 | # title of most generated pages and in a few other places. | |
32 | # The default value is: My Project. | |
33 | ||
34 | PROJECT_NAME = "@PACKAGE@" | |
35 | ||
36 | # The PROJECT_NUMBER tag can be used to enter a project or revision number. This | |
37 | # could be handy for archiving the generated documentation or if some version | |
38 | # control system is used. | |
39 | ||
40 | PROJECT_NUMBER = @PACKAGE_VERSION@ | |
41 | ||
42 | # Using the PROJECT_BRIEF tag one can provide an optional one line description | |
43 | # for a project that appears at the top of each page and should give viewer a | |
44 | # quick idea about the purpose of the project. Keep the description short. | |
45 | ||
46 | PROJECT_BRIEF = "@PACKAGE_DESCRIPTION@" | |
47 | ||
48 | # With the PROJECT_LOGO tag one can specify an logo or icon that is included in | |
49 | # the documentation. The maximum height of the logo should not exceed 55 pixels | |
50 | # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo | |
51 | # to the output directory. | |
52 | ||
53 | PROJECT_LOGO = | |
54 | ||
55 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path | |
56 | # into which the generated documentation will be written. If a relative path is | |
57 | # entered, it will be relative to the location where doxygen was started. If | |
58 | # left blank the current directory will be used. | |
59 | ||
60 | OUTPUT_DIRECTORY = | |
61 | ||
62 | # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- | |
63 | # directories (in 2 levels) under the output directory of each output format and | |
64 | # will distribute the generated files over these directories. Enabling this | |
65 | # option can be useful when feeding doxygen a huge amount of source files, where | |
66 | # putting all generated files in the same directory would otherwise causes | |
67 | # performance problems for the file system. | |
68 | # The default value is: NO. | |
69 | ||
70 | CREATE_SUBDIRS = NO | |
71 | ||
72 | # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII | |
73 | # characters to appear in the names of generated files. If set to NO, non-ASCII | |
74 | # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode | |
75 | # U+3044. | |
76 | # The default value is: NO. | |
77 | ||
78 | ALLOW_UNICODE_NAMES = NO | |
79 | ||
80 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all | |
81 | # documentation generated by doxygen is written. Doxygen will use this | |
82 | # information to generate all constant output in the proper language. | |
83 | # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, | |
84 | # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), | |
85 | # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, | |
86 | # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), | |
87 | # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, | |
88 | # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, | |
89 | # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, | |
90 | # Ukrainian and Vietnamese. | |
91 | # The default value is: English. | |
92 | ||
93 | OUTPUT_LANGUAGE = English | |
94 | ||
95 | # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member | |
96 | # descriptions after the members that are listed in the file and class | |
97 | # documentation (similar to Javadoc). Set to NO to disable this. | |
98 | # The default value is: YES. | |
99 | ||
100 | BRIEF_MEMBER_DESC = YES | |
101 | ||
102 | # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief | |
103 | # description of a member or function before the detailed description | |
104 | # | |
105 | # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the | |
106 | # brief descriptions will be completely suppressed. | |
107 | # The default value is: YES. | |
108 | ||
109 | REPEAT_BRIEF = YES | |
110 | ||
111 | # This tag implements a quasi-intelligent brief description abbreviator that is | |
112 | # used to form the text in various listings. Each string in this list, if found | |
113 | # as the leading text of the brief description, will be stripped from the text | |
114 | # and the result, after processing the whole list, is used as the annotated | |
115 | # text. Otherwise, the brief description is used as-is. If left blank, the | |
116 | # following values are used ($name is automatically replaced with the name of | |
117 | # the entity):The $name class, The $name widget, The $name file, is, provides, | |
118 | # specifies, contains, represents, a, an and the. | |
119 | ||
120 | ABBREVIATE_BRIEF = | |
121 | ||
122 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then | |
123 | # doxygen will generate a detailed section even if there is only a brief | |
124 | # description. | |
125 | # The default value is: NO. | |
126 | ||
127 | ALWAYS_DETAILED_SEC = YES | |
128 | ||
129 | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all | |
130 | # inherited members of a class in the documentation of that class as if those | |
131 | # members were ordinary class members. Constructors, destructors and assignment | |
132 | # operators of the base classes will not be shown. | |
133 | # The default value is: NO. | |
134 | ||
135 | INLINE_INHERITED_MEMB = NO | |
136 | ||
137 | # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path | |
138 | # before files name in the file list and in the header files. If set to NO the | |
139 | # shortest path that makes the file name unique will be used | |
140 | # The default value is: YES. | |
141 | ||
142 | FULL_PATH_NAMES = NO | |
143 | ||
144 | # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. | |
145 | # Stripping is only done if one of the specified strings matches the left-hand | |
146 | # part of the path. The tag can be used to show relative paths in the file list. | |
147 | # If left blank the directory from which doxygen is run is used as the path to | |
148 | # strip. | |
149 | # | |
150 | # Note that you can specify absolute paths here, but also relative paths, which | |
151 | # will be relative from the directory where doxygen is started. | |
152 | # This tag requires that the tag FULL_PATH_NAMES is set to YES. | |
153 | ||
154 | STRIP_FROM_PATH = @top_srcdir@ | |
155 | ||
156 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the | |
157 | # path mentioned in the documentation of a class, which tells the reader which | |
158 | # header file to include in order to use a class. If left blank only the name of | |
159 | # the header file containing the class definition is used. Otherwise one should | |
160 | # specify the list of include paths that are normally passed to the compiler | |
161 | # using the -I flag. | |
162 | ||
163 | STRIP_FROM_INC_PATH = | |
164 | ||
165 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but | |
166 | # less readable) file names. This can be useful is your file systems doesn't | |
167 | # support long names like on DOS, Mac, or CD-ROM. | |
168 | # The default value is: NO. | |
169 | ||
170 | SHORT_NAMES = NO | |
171 | ||
172 | # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the | |
173 | # first line (until the first dot) of a Javadoc-style comment as the brief | |
174 | # description. If set to NO, the Javadoc-style will behave just like regular Qt- | |
175 | # style comments (thus requiring an explicit @brief command for a brief | |
176 | # description.) | |
177 | # The default value is: NO. | |
178 | ||
179 | JAVADOC_AUTOBRIEF = YES | |
180 | ||
181 | # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first | |
182 | # line (until the first dot) of a Qt-style comment as the brief description. If | |
183 | # set to NO, the Qt-style will behave just like regular Qt-style comments (thus | |
184 | # requiring an explicit \brief command for a brief description.) | |
185 | # The default value is: NO. | |
186 | ||
187 | QT_AUTOBRIEF = NO | |
188 | ||
189 | # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a | |
190 | # multi-line C++ special comment block (i.e. a block of //! or /// comments) as | |
191 | # a brief description. This used to be the default behavior. The new default is | |
192 | # to treat a multi-line C++ comment block as a detailed description. Set this | |
193 | # tag to YES if you prefer the old behavior instead. | |
194 | # | |
195 | # Note that setting this tag to YES also means that rational rose comments are | |
196 | # not recognized any more. | |
197 | # The default value is: NO. | |
198 | ||
199 | MULTILINE_CPP_IS_BRIEF = NO | |
200 | ||
201 | # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the | |
202 | # documentation from any documented member that it re-implements. | |
203 | # The default value is: YES. | |
204 | ||
205 | INHERIT_DOCS = YES | |
206 | ||
207 | # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a | |
208 | # new page for each member. If set to NO, the documentation of a member will be | |
209 | # part of the file/class/namespace that contains it. | |
210 | # The default value is: NO. | |
211 | ||
212 | SEPARATE_MEMBER_PAGES = NO | |
213 | ||
214 | # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen | |
215 | # uses this value to replace tabs by spaces in code fragments. | |
216 | # Minimum value: 1, maximum value: 16, default value: 4. | |
217 | ||
218 | TAB_SIZE = 8 | |
219 | ||
220 | # This tag can be used to specify a number of aliases that act as commands in | |
221 | # the documentation. An alias has the form: | |
222 | # name=value | |
223 | # For example adding | |
224 | # "sideeffect=@par Side Effects:\n" | |
225 | # will allow you to put the command \sideeffect (or @sideeffect) in the | |
226 | # documentation, which will result in a user-defined paragraph with heading | |
227 | # "Side Effects:". You can put \n's in the value part of an alias to insert | |
228 | # newlines. | |
229 | ||
230 | ALIASES = | |
231 | ||
232 | # This tag can be used to specify a number of word-keyword mappings (TCL only). | |
233 | # A mapping has the form "name=value". For example adding "class=itcl::class" | |
234 | # will allow you to use the command class in the itcl::class meaning. | |
235 | ||
236 | TCL_SUBST = | |
237 | ||
238 | # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources | |
239 | # only. Doxygen will then generate output that is more tailored for C. For | |
240 | # instance, some of the names that are used will be different. The list of all | |
241 | # members will be omitted, etc. | |
242 | # The default value is: NO. | |
243 | ||
244 | OPTIMIZE_OUTPUT_FOR_C = YES | |
245 | ||
246 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or | |
247 | # Python sources only. Doxygen will then generate output that is more tailored | |
248 | # for that language. For instance, namespaces will be presented as packages, | |
249 | # qualified scopes will look different, etc. | |
250 | # The default value is: NO. | |
251 | ||
252 | OPTIMIZE_OUTPUT_JAVA = NO | |
253 | ||
254 | # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran | |
255 | # sources. Doxygen will then generate output that is tailored for Fortran. | |
256 | # The default value is: NO. | |
257 | ||
258 | OPTIMIZE_FOR_FORTRAN = NO | |
259 | ||
260 | # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL | |
261 | # sources. Doxygen will then generate output that is tailored for VHDL. | |
262 | # The default value is: NO. | |
263 | ||
264 | OPTIMIZE_OUTPUT_VHDL = NO | |
265 | ||
266 | # Doxygen selects the parser to use depending on the extension of the files it | |
267 | # parses. With this tag you can assign which parser to use for a given | |
268 | # extension. Doxygen has a built-in mapping, but you can override or extend it | |
269 | # using this tag. The format is ext=language, where ext is a file extension, and | |
270 | # language is one of the parsers supported by doxygen: IDL, Java, Javascript, | |
271 | # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: | |
272 | # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: | |
273 | # Fortran. In the later case the parser tries to guess whether the code is fixed | |
274 | # or free formatted code, this is the default for Fortran type files), VHDL. For | |
275 | # instance to make doxygen treat .inc files as Fortran files (default is PHP), | |
276 | # and .f files as C (default is Fortran), use: inc=Fortran f=C. | |
277 | # | |
278 | # Note For files without extension you can use no_extension as a placeholder. | |
279 | # | |
280 | # Note that for custom extensions you also need to set FILE_PATTERNS otherwise | |
281 | # the files are not read by doxygen. | |
282 | ||
283 | EXTENSION_MAPPING = | |
284 | ||
285 | # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments | |
286 | # according to the Markdown format, which allows for more readable | |
287 | # documentation. See http://daringfireball.net/projects/markdown/ for details. | |
288 | # The output of markdown processing is further processed by doxygen, so you can | |
289 | # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in | |
290 | # case of backward compatibilities issues. | |
291 | # The default value is: YES. | |
292 | ||
293 | MARKDOWN_SUPPORT = YES | |
294 | ||
295 | # When enabled doxygen tries to link words that correspond to documented | |
296 | # classes, or namespaces to their corresponding documentation. Such a link can | |
297 | # be prevented in individual cases by by putting a % sign in front of the word | |
298 | # or globally by setting AUTOLINK_SUPPORT to NO. | |
299 | # The default value is: YES. | |
300 | ||
301 | AUTOLINK_SUPPORT = YES | |
302 | ||
303 | # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want | |
304 | # to include (a tag file for) the STL sources as input, then you should set this | |
305 | # tag to YES in order to let doxygen match functions declarations and | |
306 | # definitions whose arguments contain STL classes (e.g. func(std::string); | |
307 | # versus func(std::string) {}). This also make the inheritance and collaboration | |
308 | # diagrams that involve STL classes more complete and accurate. | |
309 | # The default value is: NO. | |
310 | ||
311 | BUILTIN_STL_SUPPORT = NO | |
312 | ||
313 | # If you use Microsoft's C++/CLI language, you should set this option to YES to | |
314 | # enable parsing support. | |
315 | # The default value is: NO. | |
316 | ||
317 | CPP_CLI_SUPPORT = NO | |
318 | ||
319 | # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: | |
320 | # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen | |
321 | # will parse them like normal C++ but will assume all classes use public instead | |
322 | # of private inheritance when no explicit protection keyword is present. | |
323 | # The default value is: NO. | |
324 | ||
325 | SIP_SUPPORT = NO | |
326 | ||
327 | # For Microsoft's IDL there are propget and propput attributes to indicate | |
328 | # getter and setter methods for a property. Setting this option to YES will make | |
329 | # doxygen to replace the get and set methods by a property in the documentation. | |
330 | # This will only work if the methods are indeed getting or setting a simple | |
331 | # type. If this is not the case, or you want to show the methods anyway, you | |
332 | # should set this option to NO. | |
333 | # The default value is: YES. | |
334 | ||
335 | IDL_PROPERTY_SUPPORT = YES | |
336 | ||
337 | # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC | |
338 | # tag is set to YES, then doxygen will reuse the documentation of the first | |
339 | # member in the group (if any) for the other members of the group. By default | |
340 | # all members of a group must be documented explicitly. | |
341 | # The default value is: NO. | |
342 | ||
343 | DISTRIBUTE_GROUP_DOC = NO | |
344 | ||
345 | # Set the SUBGROUPING tag to YES to allow class member groups of the same type | |
346 | # (for instance a group of public functions) to be put as a subgroup of that | |
347 | # type (e.g. under the Public Functions section). Set it to NO to prevent | |
348 | # subgrouping. Alternatively, this can be done per class using the | |
349 | # \nosubgrouping command. | |
350 | # The default value is: YES. | |
351 | ||
352 | SUBGROUPING = YES | |
353 | ||
354 | # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions | |
355 | # are shown inside the group in which they are included (e.g. using \ingroup) | |
356 | # instead of on a separate page (for HTML and Man pages) or section (for LaTeX | |
357 | # and RTF). | |
358 | # | |
359 | # Note that this feature does not work in combination with | |
360 | # SEPARATE_MEMBER_PAGES. | |
361 | # The default value is: NO. | |
362 | ||
363 | INLINE_GROUPED_CLASSES = NO | |
364 | ||
365 | # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions | |
366 | # with only public data fields or simple typedef fields will be shown inline in | |
367 | # the documentation of the scope in which they are defined (i.e. file, | |
368 | # namespace, or group documentation), provided this scope is documented. If set | |
369 | # to NO, structs, classes, and unions are shown on a separate page (for HTML and | |
370 | # Man pages) or section (for LaTeX and RTF). | |
371 | # The default value is: NO. | |
372 | ||
373 | INLINE_SIMPLE_STRUCTS = NO | |
374 | ||
375 | # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or | |
376 | # enum is documented as struct, union, or enum with the name of the typedef. So | |
377 | # typedef struct TypeS {} TypeT, will appear in the documentation as a struct | |
378 | # with name TypeT. When disabled the typedef will appear as a member of a file, | |
379 | # namespace, or class. And the struct will be named TypeS. This can typically be | |
380 | # useful for C code in case the coding convention dictates that all compound | |
381 | # types are typedef'ed and only the typedef is referenced, never the tag name. | |
382 | # The default value is: NO. | |
383 | ||
384 | TYPEDEF_HIDES_STRUCT = YES | |
385 | ||
386 | # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This | |
387 | # cache is used to resolve symbols given their name and scope. Since this can be | |
388 | # an expensive process and often the same symbol appears multiple times in the | |
389 | # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small | |
390 | # doxygen will become slower. If the cache is too large, memory is wasted. The | |
391 | # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range | |
392 | # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 | |
393 | # symbols. At the end of a run doxygen will report the cache usage and suggest | |
394 | # the optimal cache size from a speed point of view. | |
395 | # Minimum value: 0, maximum value: 9, default value: 0. | |
396 | ||
397 | LOOKUP_CACHE_SIZE = 0 | |
398 | ||
399 | #--------------------------------------------------------------------------- | |
400 | # Build related configuration options | |
401 | #--------------------------------------------------------------------------- | |
402 | ||
403 | # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in | |
404 | # documentation are documented, even if no documentation was available. Private | |
405 | # class members and static file members will be hidden unless the | |
406 | # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. | |
407 | # Note: This will also disable the warnings about undocumented members that are | |
408 | # normally produced when WARNINGS is set to YES. | |
409 | # The default value is: NO. | |
410 | ||
411 | EXTRACT_ALL = NO | |
412 | ||
413 | # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will | |
414 | # be included in the documentation. | |
415 | # The default value is: NO. | |
416 | ||
417 | EXTRACT_PRIVATE = NO | |
418 | ||
419 | # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal | |
420 | # scope will be included in the documentation. | |
421 | # The default value is: NO. | |
422 | ||
423 | EXTRACT_PACKAGE = NO | |
424 | ||
425 | # If the EXTRACT_STATIC tag is set to YES all static members of a file will be | |
426 | # included in the documentation. | |
427 | # The default value is: NO. | |
428 | ||
429 | EXTRACT_STATIC = NO | |
430 | ||
431 | # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined | |
432 | # locally in source files will be included in the documentation. If set to NO | |
433 | # only classes defined in header files are included. Does not have any effect | |
434 | # for Java sources. | |
435 | # The default value is: YES. | |
436 | ||
437 | EXTRACT_LOCAL_CLASSES = YES | |
438 | ||
439 | # This flag is only useful for Objective-C code. When set to YES local methods, | |
440 | # which are defined in the implementation section but not in the interface are | |
441 | # included in the documentation. If set to NO only methods in the interface are | |
442 | # included. | |
443 | # The default value is: NO. | |
444 | ||
445 | EXTRACT_LOCAL_METHODS = NO | |
446 | ||
447 | # If this flag is set to YES, the members of anonymous namespaces will be | |
448 | # extracted and appear in the documentation as a namespace called | |
449 | # 'anonymous_namespace{file}', where file will be replaced with the base name of | |
450 | # the file that contains the anonymous namespace. By default anonymous namespace | |
451 | # are hidden. | |
452 | # The default value is: NO. | |
453 | ||
454 | EXTRACT_ANON_NSPACES = NO | |
455 | ||
456 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all | |
457 | # undocumented members inside documented classes or files. If set to NO these | |
458 | # members will be included in the various overviews, but no documentation | |
459 | # section is generated. This option has no effect if EXTRACT_ALL is enabled. | |
460 | # The default value is: NO. | |
461 | ||
462 | HIDE_UNDOC_MEMBERS = NO | |
463 | ||
464 | # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all | |
465 | # undocumented classes that are normally visible in the class hierarchy. If set | |
466 | # to NO these classes will be included in the various overviews. This option has | |
467 | # no effect if EXTRACT_ALL is enabled. | |
468 | # The default value is: NO. | |
469 | ||
470 | HIDE_UNDOC_CLASSES = NO | |
471 | ||
472 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend | |
473 | # (class|struct|union) declarations. If set to NO these declarations will be | |
474 | # included in the documentation. | |
475 | # The default value is: NO. | |
476 | ||
477 | HIDE_FRIEND_COMPOUNDS = NO | |
478 | ||
479 | # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any | |
480 | # documentation blocks found inside the body of a function. If set to NO these | |
481 | # blocks will be appended to the function's detailed documentation block. | |
482 | # The default value is: NO. | |
483 | ||
484 | HIDE_IN_BODY_DOCS = NO | |
485 | ||
486 | # The INTERNAL_DOCS tag determines if documentation that is typed after a | |
487 | # \internal command is included. If the tag is set to NO then the documentation | |
488 | # will be excluded. Set it to YES to include the internal documentation. | |
489 | # The default value is: NO. | |
490 | ||
491 | INTERNAL_DOCS = NO | |
492 | ||
493 | # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file | |
494 | # names in lower-case letters. If set to YES upper-case letters are also | |
495 | # allowed. This is useful if you have classes or files whose names only differ | |
496 | # in case and if your file system supports case sensitive file names. Windows | |
497 | # and Mac users are advised to set this option to NO. | |
498 | # The default value is: system dependent. | |
499 | ||
500 | CASE_SENSE_NAMES = YES | |
501 | ||
502 | # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with | |
503 | # their full class and namespace scopes in the documentation. If set to YES the | |
504 | # scope will be hidden. | |
505 | # The default value is: NO. | |
506 | ||
507 | HIDE_SCOPE_NAMES = NO | |
508 | ||
509 | # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of | |
510 | # the files that are included by a file in the documentation of that file. | |
511 | # The default value is: YES. | |
512 | ||
513 | SHOW_INCLUDE_FILES = NO | |
514 | ||
515 | # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each | |
516 | # grouped member an include statement to the documentation, telling the reader | |
517 | # which file to include in order to use the member. | |
518 | # The default value is: NO. | |
519 | ||
520 | SHOW_GROUPED_MEMB_INC = NO | |
521 | ||
522 | # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include | |
523 | # files with double quotes in the documentation rather than with sharp brackets. | |
524 | # The default value is: NO. | |
525 | ||
526 | FORCE_LOCAL_INCLUDES = NO | |
527 | ||
528 | # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the | |
529 | # documentation for inline members. | |
530 | # The default value is: YES. | |
531 | ||
532 | INLINE_INFO = YES | |
533 | ||
534 | # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the | |
535 | # (detailed) documentation of file and class members alphabetically by member | |
536 | # name. If set to NO the members will appear in declaration order. | |
537 | # The default value is: YES. | |
538 | ||
539 | SORT_MEMBER_DOCS = NO | |
540 | ||
541 | # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief | |
542 | # descriptions of file, namespace and class members alphabetically by member | |
543 | # name. If set to NO the members will appear in declaration order. Note that | |
544 | # this will also influence the order of the classes in the class list. | |
545 | # The default value is: NO. | |
546 | ||
547 | SORT_BRIEF_DOCS = NO | |
548 | ||
549 | # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the | |
550 | # (brief and detailed) documentation of class members so that constructors and | |
551 | # destructors are listed first. If set to NO the constructors will appear in the | |
552 | # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. | |
553 | # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief | |
554 | # member documentation. | |
555 | # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting | |
556 | # detailed member documentation. | |
557 | # The default value is: NO. | |
558 | ||
559 | SORT_MEMBERS_CTORS_1ST = NO | |
560 | ||
561 | # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy | |
562 | # of group names into alphabetical order. If set to NO the group names will | |
563 | # appear in their defined order. | |
564 | # The default value is: NO. | |
565 | ||
566 | SORT_GROUP_NAMES = NO | |
567 | ||
568 | # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by | |
569 | # fully-qualified names, including namespaces. If set to NO, the class list will | |
570 | # be sorted only by class name, not including the namespace part. | |
571 | # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. | |
572 | # Note: This option applies only to the class list, not to the alphabetical | |
573 | # list. | |
574 | # The default value is: NO. | |
575 | ||
576 | SORT_BY_SCOPE_NAME = NO | |
577 | ||
578 | # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper | |
579 | # type resolution of all parameters of a function it will reject a match between | |
580 | # the prototype and the implementation of a member function even if there is | |
581 | # only one candidate or it is obvious which candidate to choose by doing a | |
582 | # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still | |
583 | # accept a match between prototype and implementation in such cases. | |
584 | # The default value is: NO. | |
585 | ||
586 | STRICT_PROTO_MATCHING = NO | |
587 | ||
588 | # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the | |
589 | # todo list. This list is created by putting \todo commands in the | |
590 | # documentation. | |
591 | # The default value is: YES. | |
592 | ||
593 | GENERATE_TODOLIST = NO | |
594 | ||
595 | # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the | |
596 | # test list. This list is created by putting \test commands in the | |
597 | # documentation. | |
598 | # The default value is: YES. | |
599 | ||
600 | GENERATE_TESTLIST = NO | |
601 | ||
602 | # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug | |
603 | # list. This list is created by putting \bug commands in the documentation. | |
604 | # The default value is: YES. | |
605 | ||
606 | GENERATE_BUGLIST = NO | |
607 | ||
608 | # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) | |
609 | # the deprecated list. This list is created by putting \deprecated commands in | |
610 | # the documentation. | |
611 | # The default value is: YES. | |
612 | ||
613 | GENERATE_DEPRECATEDLIST= YES | |
614 | ||
615 | # The ENABLED_SECTIONS tag can be used to enable conditional documentation | |
616 | # sections, marked by \if <section_label> ... \endif and \cond <section_label> | |
617 | # ... \endcond blocks. | |
618 | ||
619 | ENABLED_SECTIONS = | |
620 | ||
621 | # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the | |
622 | # initial value of a variable or macro / define can have for it to appear in the | |
623 | # documentation. If the initializer consists of more lines than specified here | |
624 | # it will be hidden. Use a value of 0 to hide initializers completely. The | |
625 | # appearance of the value of individual variables and macros / defines can be | |
626 | # controlled using \showinitializer or \hideinitializer command in the | |
627 | # documentation regardless of this setting. | |
628 | # Minimum value: 0, maximum value: 10000, default value: 30. | |
629 | ||
630 | MAX_INITIALIZER_LINES = 30 | |
631 | ||
632 | # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at | |
633 | # the bottom of the documentation of classes and structs. If set to YES the list | |
634 | # will mention the files that were used to generate the documentation. | |
635 | # The default value is: YES. | |
636 | ||
637 | SHOW_USED_FILES = NO | |
638 | ||
639 | # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This | |
640 | # will remove the Files entry from the Quick Index and from the Folder Tree View | |
641 | # (if specified). | |
642 | # The default value is: YES. | |
643 | ||
644 | SHOW_FILES = NO | |
645 | ||
646 | # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces | |
647 | # page. This will remove the Namespaces entry from the Quick Index and from the | |
648 | # Folder Tree View (if specified). | |
649 | # The default value is: YES. | |
650 | ||
651 | SHOW_NAMESPACES = NO | |
652 | ||
653 | # The FILE_VERSION_FILTER tag can be used to specify a program or script that | |
654 | # doxygen should invoke to get the current version for each file (typically from | |
655 | # the version control system). Doxygen will invoke the program by executing (via | |
656 | # popen()) the command command input-file, where command is the value of the | |
657 | # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided | |
658 | # by doxygen. Whatever the program writes to standard output is used as the file | |
659 | # version. For an example see the documentation. | |
660 | ||
661 | FILE_VERSION_FILTER = | |
662 | ||
663 | # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed | |
664 | # by doxygen. The layout file controls the global structure of the generated | |
665 | # output files in an output format independent way. To create the layout file | |
666 | # that represents doxygen's defaults, run doxygen with the -l option. You can | |
667 | # optionally specify a file name after the option, if omitted DoxygenLayout.xml | |
668 | # will be used as the name of the layout file. | |
669 | # | |
670 | # Note that if you run doxygen from a directory containing a file called | |
671 | # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE | |
672 | # tag is left empty. | |
673 | ||
674 | LAYOUT_FILE = @top_srcdir@/DoxygenLayout.xml | |
675 | ||
676 | # The CITE_BIB_FILES tag can be used to specify one or more bib files containing | |
677 | # the reference definitions. This must be a list of .bib files. The .bib | |
678 | # extension is automatically appended if omitted. This requires the bibtex tool | |
679 | # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. | |
680 | # For LaTeX the style of the bibliography can be controlled using | |
681 | # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the | |
682 | # search path. Do not use file names with spaces, bibtex cannot handle them. See | |
683 | # also \cite for info how to create references. | |
684 | ||
685 | CITE_BIB_FILES = | |
686 | ||
687 | #--------------------------------------------------------------------------- | |
688 | # Configuration options related to warning and progress messages | |
689 | #--------------------------------------------------------------------------- | |
690 | ||
691 | # The QUIET tag can be used to turn on/off the messages that are generated to | |
692 | # standard output by doxygen. If QUIET is set to YES this implies that the | |
693 | # messages are off. | |
694 | # The default value is: NO. | |
695 | ||
696 | QUIET = YES | |
697 | ||
698 | # The WARNINGS tag can be used to turn on/off the warning messages that are | |
699 | # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES | |
700 | # this implies that the warnings are on. | |
701 | # | |
702 | # Tip: Turn warnings on while writing the documentation. | |
703 | # The default value is: YES. | |
704 | ||
705 | WARNINGS = YES | |
706 | ||
707 | # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate | |
708 | # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag | |
709 | # will automatically be disabled. | |
710 | # The default value is: YES. | |
711 | ||
712 | WARN_IF_UNDOCUMENTED = YES | |
713 | ||
714 | # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for | |
715 | # potential errors in the documentation, such as not documenting some parameters | |
716 | # in a documented function, or documenting parameters that don't exist or using | |
717 | # markup commands wrongly. | |
718 | # The default value is: YES. | |
719 | ||
720 | WARN_IF_DOC_ERROR = YES | |
721 | ||
722 | # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that | |
723 | # are documented, but have no documentation for their parameters or return | |
724 | # value. If set to NO doxygen will only warn about wrong or incomplete parameter | |
725 | # documentation, but not about the absence of documentation. | |
726 | # The default value is: NO. | |
727 | ||
728 | WARN_NO_PARAMDOC = YES | |
729 | ||
730 | # The WARN_FORMAT tag determines the format of the warning messages that doxygen | |
731 | # can produce. The string should contain the $file, $line, and $text tags, which | |
732 | # will be replaced by the file and line number from which the warning originated | |
733 | # and the warning text. Optionally the format may contain $version, which will | |
734 | # be replaced by the version of the file (if it could be obtained via | |
735 | # FILE_VERSION_FILTER) | |
736 | # The default value is: $file:$line: $text. | |
737 | ||
738 | WARN_FORMAT = "$file:$line: $text" | |
739 | ||
740 | # The WARN_LOGFILE tag can be used to specify a file to which warning and error | |
741 | # messages should be written. If left blank the output is written to standard | |
742 | # error (stderr). | |
743 | ||
744 | WARN_LOGFILE = | |
745 | ||
746 | #--------------------------------------------------------------------------- | |
747 | # Configuration options related to the input files | |
748 | #--------------------------------------------------------------------------- | |
749 | ||
750 | # The INPUT tag is used to specify the files and/or directories that contain | |
751 | # documented source files. You may enter file names like myfile.cpp or | |
752 | # directories like /usr/src/myproject. Separate the files or directories with | |
753 | # spaces. | |
754 | # Note: If this tag is empty the current directory is searched. | |
755 | ||
756 | INPUT = @DOXYGEN_INPUT@ | |
757 | ||
758 | # This tag can be used to specify the character encoding of the source files | |
759 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses | |
760 | # libiconv (or the iconv built into libc) for the transcoding. See the libiconv | |
761 | # documentation (see: http://www.gnu.org/software/libiconv) for the list of | |
762 | # possible encodings. | |
763 | # The default value is: UTF-8. | |
764 | ||
765 | INPUT_ENCODING = UTF-8 | |
766 | ||
767 | # If the value of the INPUT tag contains directories, you can use the | |
768 | # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and | |
769 | # *.h) to filter out the source-files in the directories. If left blank the | |
770 | # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, | |
771 | # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, | |
772 | # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, | |
773 | # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, | |
774 | # *.qsf, *.as and *.js. | |
775 | ||
776 | FILE_PATTERNS = *.h | |
777 | ||
778 | # The RECURSIVE tag can be used to specify whether or not subdirectories should | |
779 | # be searched for input files as well. | |
780 | # The default value is: NO. | |
781 | ||
782 | RECURSIVE = YES | |
783 | ||
784 | # The EXCLUDE tag can be used to specify files and/or directories that should be | |
785 | # excluded from the INPUT source files. This way you can easily exclude a | |
786 | # subdirectory from a directory tree whose root is specified with the INPUT tag. | |
787 | # | |
788 | # Note that relative paths are relative to the directory from which doxygen is | |
789 | # run. | |
790 | ||
791 | EXCLUDE = | |
792 | ||
793 | # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or | |
794 | # directories that are symbolic links (a Unix file system feature) are excluded | |
795 | # from the input. | |
796 | # The default value is: NO. | |
797 | ||
798 | EXCLUDE_SYMLINKS = NO | |
799 | ||
800 | # If the value of the INPUT tag contains directories, you can use the | |
801 | # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude | |
802 | # certain files from those directories. | |
803 | # | |
804 | # Note that the wildcards are matched against the file with absolute path, so to | |
805 | # exclude all test directories for example use the pattern */test/* | |
806 | ||
807 | EXCLUDE_PATTERNS = *private* | |
808 | ||
809 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names | |
810 | # (namespaces, classes, functions, etc.) that should be excluded from the | |
811 | # output. The symbol name can be a fully qualified name, a word, or if the | |
812 | # wildcard * is used, a substring. Examples: ANamespace, AClass, | |
813 | # AClass::ANamespace, ANamespace::*Test | |
814 | # | |
815 | # Note that the wildcards are matched against the file with absolute path, so to | |
816 | # exclude all test directories use the pattern */test/* | |
817 | ||
818 | EXCLUDE_SYMBOLS = | |
819 | ||
820 | # The EXAMPLE_PATH tag can be used to specify one or more files or directories | |
821 | # that contain example code fragments that are included (see the \include | |
822 | # command). | |
823 | ||
824 | EXAMPLE_PATH = | |
825 | ||
826 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the | |
827 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and | |
828 | # *.h) to filter out the source-files in the directories. If left blank all | |
829 | # files are included. | |
830 | ||
831 | EXAMPLE_PATTERNS = | |
832 | ||
833 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be | |
834 | # searched for input files to be used with the \include or \dontinclude commands | |
835 | # irrespective of the value of the RECURSIVE tag. | |
836 | # The default value is: NO. | |
837 | ||
838 | EXAMPLE_RECURSIVE = NO | |
839 | ||
840 | # The IMAGE_PATH tag can be used to specify one or more files or directories | |
841 | # that contain images that are to be included in the documentation (see the | |
842 | # \image command). | |
843 | ||
844 | IMAGE_PATH = | |
845 | ||
846 | # The INPUT_FILTER tag can be used to specify a program that doxygen should | |
847 | # invoke to filter for each input file. Doxygen will invoke the filter program | |
848 | # by executing (via popen()) the command: | |
849 | # | |
850 | # <filter> <input-file> | |
851 | # | |
852 | # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the | |
853 | # name of an input file. Doxygen will then use the output that the filter | |
854 | # program writes to standard output. If FILTER_PATTERNS is specified, this tag | |
855 | # will be ignored. | |
856 | # | |
857 | # Note that the filter must not add or remove lines; it is applied before the | |
858 | # code is scanned, but not when the output code is generated. If lines are added | |
859 | # or removed, the anchors will not be placed correctly. | |
860 | ||
861 | INPUT_FILTER = | |
862 | ||
863 | # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern | |
864 | # basis. Doxygen will compare the file name with each pattern and apply the | |
865 | # filter if there is a match. The filters are a list of the form: pattern=filter | |
866 | # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how | |
867 | # filters are used. If the FILTER_PATTERNS tag is empty or if none of the | |
868 | # patterns match the file name, INPUT_FILTER is applied. | |
869 | ||
870 | FILTER_PATTERNS = | |
871 | ||
872 | # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using | |
873 | # INPUT_FILTER ) will also be used to filter the input files that are used for | |
874 | # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). | |
875 | # The default value is: NO. | |
876 | ||
877 | FILTER_SOURCE_FILES = NO | |
878 | ||
879 | # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file | |
880 | # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and | |
881 | # it is also possible to disable source filtering for a specific pattern using | |
882 | # *.ext= (so without naming a filter). | |
883 | # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. | |
884 | ||
885 | FILTER_SOURCE_PATTERNS = | |
886 | ||
887 | # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that | |
888 | # is part of the input, its contents will be placed on the main page | |
889 | # (index.html). This can be useful if you have a project on for instance GitHub | |
890 | # and want to reuse the introduction page also for the doxygen output. | |
891 | ||
892 | USE_MDFILE_AS_MAINPAGE = | |
893 | ||
894 | #--------------------------------------------------------------------------- | |
895 | # Configuration options related to source browsing | |
896 | #--------------------------------------------------------------------------- | |
897 | ||
898 | # If the SOURCE_BROWSER tag is set to YES then a list of source files will be | |
899 | # generated. Documented entities will be cross-referenced with these sources. | |
900 | # | |
901 | # Note: To get rid of all source code in the generated output, make sure that | |
902 | # also VERBATIM_HEADERS is set to NO. | |
903 | # The default value is: NO. | |
904 | ||
905 | SOURCE_BROWSER = NO | |
906 | ||
907 | # Setting the INLINE_SOURCES tag to YES will include the body of functions, | |
908 | # classes and enums directly into the documentation. | |
909 | # The default value is: NO. | |
910 | ||
911 | INLINE_SOURCES = NO | |
912 | ||
913 | # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any | |
914 | # special comment blocks from generated source code fragments. Normal C, C++ and | |
915 | # Fortran comments will always remain visible. | |
916 | # The default value is: YES. | |
917 | ||
918 | STRIP_CODE_COMMENTS = YES | |
919 | ||
920 | # If the REFERENCED_BY_RELATION tag is set to YES then for each documented | |
921 | # function all documented functions referencing it will be listed. | |
922 | # The default value is: NO. | |
923 | ||
924 | REFERENCED_BY_RELATION = NO | |
925 | ||
926 | # If the REFERENCES_RELATION tag is set to YES then for each documented function | |
927 | # all documented entities called/used by that function will be listed. | |
928 | # The default value is: NO. | |
929 | ||
930 | REFERENCES_RELATION = NO | |
931 | ||
932 | # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set | |
933 | # to YES, then the hyperlinks from functions in REFERENCES_RELATION and | |
934 | # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will | |
935 | # link to the documentation. | |
936 | # The default value is: YES. | |
937 | ||
938 | REFERENCES_LINK_SOURCE = YES | |
939 | ||
940 | # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the | |
941 | # source code will show a tooltip with additional information such as prototype, | |
942 | # brief description and links to the definition and documentation. Since this | |
943 | # will make the HTML file larger and loading of large files a bit slower, you | |
944 | # can opt to disable this feature. | |
945 | # The default value is: YES. | |
946 | # This tag requires that the tag SOURCE_BROWSER is set to YES. | |
947 | ||
948 | SOURCE_TOOLTIPS = NO | |
949 | ||
950 | # If the USE_HTAGS tag is set to YES then the references to source code will | |
951 | # point to the HTML generated by the htags(1) tool instead of doxygen built-in | |
952 | # source browser. The htags tool is part of GNU's global source tagging system | |
953 | # (see http://www.gnu.org/software/global/global.html). You will need version | |
954 | # 4.8.6 or higher. | |
955 | # | |
956 | # To use it do the following: | |
957 | # - Install the latest version of global | |
958 | # - Enable SOURCE_BROWSER and USE_HTAGS in the config file | |
959 | # - Make sure the INPUT points to the root of the source tree | |
960 | # - Run doxygen as normal | |
961 | # | |
962 | # Doxygen will invoke htags (and that will in turn invoke gtags), so these | |
963 | # tools must be available from the command line (i.e. in the search path). | |
964 | # | |
965 | # The result: instead of the source browser generated by doxygen, the links to | |
966 | # source code will now point to the output of htags. | |
967 | # The default value is: NO. | |
968 | # This tag requires that the tag SOURCE_BROWSER is set to YES. | |
969 | ||
970 | USE_HTAGS = NO | |
971 | ||
972 | # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a | |
973 | # verbatim copy of the header file for each class for which an include is | |
974 | # specified. Set to NO to disable this. | |
975 | # See also: Section \class. | |
976 | # The default value is: YES. | |
977 | ||
978 | VERBATIM_HEADERS = NO | |
979 | ||
980 | #--------------------------------------------------------------------------- | |
981 | # Configuration options related to the alphabetical class index | |
982 | #--------------------------------------------------------------------------- | |
983 | ||
984 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all | |
985 | # compounds will be generated. Enable this if the project contains a lot of | |
986 | # classes, structs, unions or interfaces. | |
987 | # The default value is: YES. | |
988 | ||
989 | ALPHABETICAL_INDEX = NO | |
990 | ||
991 | # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in | |
992 | # which the alphabetical index list will be split. | |
993 | # Minimum value: 1, maximum value: 20, default value: 5. | |
994 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. | |
995 | ||
996 | COLS_IN_ALPHA_INDEX = 5 | |
997 | ||
998 | # In case all classes in a project start with a common prefix, all classes will | |
999 | # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag | |
1000 | # can be used to specify a prefix (or a list of prefixes) that should be ignored | |
1001 | # while generating the index headers. | |
1002 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. | |
1003 | ||
1004 | IGNORE_PREFIX = | |
1005 | ||
1006 | #--------------------------------------------------------------------------- | |
1007 | # Configuration options related to the HTML output | |
1008 | #--------------------------------------------------------------------------- | |
1009 | ||
1010 | # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output | |
1011 | # The default value is: YES. | |
1012 | ||
1013 | GENERATE_HTML = YES | |
1014 | ||
1015 | # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a | |
1016 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | |
1017 | # it. | |
1018 | # The default directory is: html. | |
1019 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1020 | ||
1021 | HTML_OUTPUT = html | |
1022 | ||
1023 | # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each | |
1024 | # generated HTML page (for example: .htm, .php, .asp). | |
1025 | # The default value is: .html. | |
1026 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1027 | ||
1028 | HTML_FILE_EXTENSION = .html | |
1029 | ||
1030 | # The HTML_HEADER tag can be used to specify a user-defined HTML header file for | |
1031 | # each generated HTML page. If the tag is left blank doxygen will generate a | |
1032 | # standard header. | |
1033 | # | |
1034 | # To get valid HTML the header file that includes any scripts and style sheets | |
1035 | # that doxygen needs, which is dependent on the configuration options used (e.g. | |
1036 | # the setting GENERATE_TREEVIEW). It is highly recommended to start with a | |
1037 | # default header using | |
1038 | # doxygen -w html new_header.html new_footer.html new_stylesheet.css | |
1039 | # YourConfigFile | |
1040 | # and then modify the file new_header.html. See also section "Doxygen usage" | |
1041 | # for information on how to generate the default header that doxygen normally | |
1042 | # uses. | |
1043 | # Note: The header is subject to change so you typically have to regenerate the | |
1044 | # default header when upgrading to a newer version of doxygen. For a description | |
1045 | # of the possible markers and block names see the documentation. | |
1046 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1047 | ||
1048 | HTML_HEADER = | |
1049 | ||
1050 | # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each | |
1051 | # generated HTML page. If the tag is left blank doxygen will generate a standard | |
1052 | # footer. See HTML_HEADER for more information on how to generate a default | |
1053 | # footer and what special commands can be used inside the footer. See also | |
1054 | # section "Doxygen usage" for information on how to generate the default footer | |
1055 | # that doxygen normally uses. | |
1056 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1057 | ||
1058 | HTML_FOOTER = | |
1059 | ||
1060 | # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style | |
1061 | # sheet that is used by each HTML page. It can be used to fine-tune the look of | |
1062 | # the HTML output. If left blank doxygen will generate a default style sheet. | |
1063 | # See also section "Doxygen usage" for information on how to generate the style | |
1064 | # sheet that doxygen normally uses. | |
1065 | # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as | |
1066 | # it is more robust and this tag (HTML_STYLESHEET) will in the future become | |
1067 | # obsolete. | |
1068 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1069 | ||
1070 | HTML_STYLESHEET = | |
1071 | ||
1072 | # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- | |
1073 | # defined cascading style sheet that is included after the standard style sheets | |
1074 | # created by doxygen. Using this option one can overrule certain style aspects. | |
1075 | # This is preferred over using HTML_STYLESHEET since it does not replace the | |
1076 | # standard style sheet and is therefor more robust against future updates. | |
1077 | # Doxygen will copy the style sheet file to the output directory. For an example | |
1078 | # see the documentation. | |
1079 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1080 | ||
1081 | HTML_EXTRA_STYLESHEET = | |
1082 | ||
1083 | # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or | |
1084 | # other source files which should be copied to the HTML output directory. Note | |
1085 | # that these files will be copied to the base HTML output directory. Use the | |
1086 | # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these | |
1087 | # files. In the HTML_STYLESHEET file, use the file name only. Also note that the | |
1088 | # files will be copied as-is; there are no commands or markers available. | |
1089 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1090 | ||
1091 | HTML_EXTRA_FILES = | |
1092 | ||
1093 | # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen | |
1094 | # will adjust the colors in the stylesheet and background images according to | |
1095 | # this color. Hue is specified as an angle on a colorwheel, see | |
1096 | # http://en.wikipedia.org/wiki/Hue for more information. For instance the value | |
1097 | # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 | |
1098 | # purple, and 360 is red again. | |
1099 | # Minimum value: 0, maximum value: 359, default value: 220. | |
1100 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1101 | ||
1102 | HTML_COLORSTYLE_HUE = 220 | |
1103 | ||
1104 | # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors | |
1105 | # in the HTML output. For a value of 0 the output will use grayscales only. A | |
1106 | # value of 255 will produce the most vivid colors. | |
1107 | # Minimum value: 0, maximum value: 255, default value: 100. | |
1108 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1109 | ||
1110 | HTML_COLORSTYLE_SAT = 100 | |
1111 | ||
1112 | # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the | |
1113 | # luminance component of the colors in the HTML output. Values below 100 | |
1114 | # gradually make the output lighter, whereas values above 100 make the output | |
1115 | # darker. The value divided by 100 is the actual gamma applied, so 80 represents | |
1116 | # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not | |
1117 | # change the gamma. | |
1118 | # Minimum value: 40, maximum value: 240, default value: 80. | |
1119 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1120 | ||
1121 | HTML_COLORSTYLE_GAMMA = 80 | |
1122 | ||
1123 | # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML | |
1124 | # page will contain the date and time when the page was generated. Setting this | |
1125 | # to NO can help when comparing the output of multiple runs. | |
1126 | # The default value is: YES. | |
1127 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1128 | ||
1129 | HTML_TIMESTAMP = NO | |
1130 | ||
1131 | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML | |
1132 | # documentation will contain sections that can be hidden and shown after the | |
1133 | # page has loaded. | |
1134 | # The default value is: NO. | |
1135 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1136 | ||
1137 | HTML_DYNAMIC_SECTIONS = NO | |
1138 | ||
1139 | # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries | |
1140 | # shown in the various tree structured indices initially; the user can expand | |
1141 | # and collapse entries dynamically later on. Doxygen will expand the tree to | |
1142 | # such a level that at most the specified number of entries are visible (unless | |
1143 | # a fully collapsed tree already exceeds this amount). So setting the number of | |
1144 | # entries 1 will produce a full collapsed tree by default. 0 is a special value | |
1145 | # representing an infinite number of entries and will result in a full expanded | |
1146 | # tree by default. | |
1147 | # Minimum value: 0, maximum value: 9999, default value: 100. | |
1148 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1149 | ||
1150 | HTML_INDEX_NUM_ENTRIES = 100 | |
1151 | ||
1152 | # If the GENERATE_DOCSET tag is set to YES, additional index files will be | |
1153 | # generated that can be used as input for Apple's Xcode 3 integrated development | |
1154 | # environment (see: http://developer.apple.com/tools/xcode/), introduced with | |
1155 | # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a | |
1156 | # Makefile in the HTML output directory. Running make will produce the docset in | |
1157 | # that directory and running make install will install the docset in | |
1158 | # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at | |
1159 | # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html | |
1160 | # for more information. | |
1161 | # The default value is: NO. | |
1162 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1163 | ||
1164 | GENERATE_DOCSET = NO | |
1165 | ||
1166 | # This tag determines the name of the docset feed. A documentation feed provides | |
1167 | # an umbrella under which multiple documentation sets from a single provider | |
1168 | # (such as a company or product suite) can be grouped. | |
1169 | # The default value is: Doxygen generated docs. | |
1170 | # This tag requires that the tag GENERATE_DOCSET is set to YES. | |
1171 | ||
1172 | DOCSET_FEEDNAME = "Doxygen generated docs" | |
1173 | ||
1174 | # This tag specifies a string that should uniquely identify the documentation | |
1175 | # set bundle. This should be a reverse domain-name style string, e.g. | |
1176 | # com.mycompany.MyDocSet. Doxygen will append .docset to the name. | |
1177 | # The default value is: org.doxygen.Project. | |
1178 | # This tag requires that the tag GENERATE_DOCSET is set to YES. | |
1179 | ||
1180 | DOCSET_BUNDLE_ID = org.doxygen.Project | |
1181 | ||
1182 | # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify | |
1183 | # the documentation publisher. This should be a reverse domain-name style | |
1184 | # string, e.g. com.mycompany.MyDocSet.documentation. | |
1185 | # The default value is: org.doxygen.Publisher. | |
1186 | # This tag requires that the tag GENERATE_DOCSET is set to YES. | |
1187 | ||
1188 | DOCSET_PUBLISHER_ID = org.doxygen.Publisher | |
1189 | ||
1190 | # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. | |
1191 | # The default value is: Publisher. | |
1192 | # This tag requires that the tag GENERATE_DOCSET is set to YES. | |
1193 | ||
1194 | DOCSET_PUBLISHER_NAME = Publisher | |
1195 | ||
1196 | # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three | |
1197 | # additional HTML index files: index.hhp, index.hhc, and index.hhk. The | |
1198 | # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop | |
1199 | # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on | |
1200 | # Windows. | |
1201 | # | |
1202 | # The HTML Help Workshop contains a compiler that can convert all HTML output | |
1203 | # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML | |
1204 | # files are now used as the Windows 98 help format, and will replace the old | |
1205 | # Windows help format (.hlp) on all Windows platforms in the future. Compressed | |
1206 | # HTML files also contain an index, a table of contents, and you can search for | |
1207 | # words in the documentation. The HTML workshop also contains a viewer for | |
1208 | # compressed HTML files. | |
1209 | # The default value is: NO. | |
1210 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1211 | ||
1212 | GENERATE_HTMLHELP = NO | |
1213 | ||
1214 | # The CHM_FILE tag can be used to specify the file name of the resulting .chm | |
1215 | # file. You can add a path in front of the file if the result should not be | |
1216 | # written to the html output directory. | |
1217 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1218 | ||
1219 | CHM_FILE = | |
1220 | ||
1221 | # The HHC_LOCATION tag can be used to specify the location (absolute path | |
1222 | # including file name) of the HTML help compiler ( hhc.exe). If non-empty | |
1223 | # doxygen will try to run the HTML help compiler on the generated index.hhp. | |
1224 | # The file has to be specified with full path. | |
1225 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1226 | ||
1227 | HHC_LOCATION = | |
1228 | ||
1229 | # The GENERATE_CHI flag controls if a separate .chi index file is generated ( | |
1230 | # YES) or that it should be included in the master .chm file ( NO). | |
1231 | # The default value is: NO. | |
1232 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1233 | ||
1234 | GENERATE_CHI = NO | |
1235 | ||
1236 | # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) | |
1237 | # and project file content. | |
1238 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1239 | ||
1240 | CHM_INDEX_ENCODING = | |
1241 | ||
1242 | # The BINARY_TOC flag controls whether a binary table of contents is generated ( | |
1243 | # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it | |
1244 | # enables the Previous and Next buttons. | |
1245 | # The default value is: NO. | |
1246 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1247 | ||
1248 | BINARY_TOC = NO | |
1249 | ||
1250 | # The TOC_EXPAND flag can be set to YES to add extra items for group members to | |
1251 | # the table of contents of the HTML help documentation and to the tree view. | |
1252 | # The default value is: NO. | |
1253 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | |
1254 | ||
1255 | TOC_EXPAND = NO | |
1256 | ||
1257 | # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and | |
1258 | # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that | |
1259 | # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help | |
1260 | # (.qch) of the generated HTML documentation. | |
1261 | # The default value is: NO. | |
1262 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1263 | ||
1264 | GENERATE_QHP = NO | |
1265 | ||
1266 | # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify | |
1267 | # the file name of the resulting .qch file. The path specified is relative to | |
1268 | # the HTML output folder. | |
1269 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1270 | ||
1271 | QCH_FILE = | |
1272 | ||
1273 | # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help | |
1274 | # Project output. For more information please see Qt Help Project / Namespace | |
1275 | # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). | |
1276 | # The default value is: org.doxygen.Project. | |
1277 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1278 | ||
1279 | QHP_NAMESPACE = org.doxygen.Project | |
1280 | ||
1281 | # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt | |
1282 | # Help Project output. For more information please see Qt Help Project / Virtual | |
1283 | # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- | |
1284 | # folders). | |
1285 | # The default value is: doc. | |
1286 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1287 | ||
1288 | QHP_VIRTUAL_FOLDER = doc | |
1289 | ||
1290 | # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom | |
1291 | # filter to add. For more information please see Qt Help Project / Custom | |
1292 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- | |
1293 | # filters). | |
1294 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1295 | ||
1296 | QHP_CUST_FILTER_NAME = | |
1297 | ||
1298 | # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the | |
1299 | # custom filter to add. For more information please see Qt Help Project / Custom | |
1300 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- | |
1301 | # filters). | |
1302 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1303 | ||
1304 | QHP_CUST_FILTER_ATTRS = | |
1305 | ||
1306 | # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this | |
1307 | # project's filter section matches. Qt Help Project / Filter Attributes (see: | |
1308 | # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). | |
1309 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1310 | ||
1311 | QHP_SECT_FILTER_ATTRS = | |
1312 | ||
1313 | # The QHG_LOCATION tag can be used to specify the location of Qt's | |
1314 | # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the | |
1315 | # generated .qhp file. | |
1316 | # This tag requires that the tag GENERATE_QHP is set to YES. | |
1317 | ||
1318 | QHG_LOCATION = | |
1319 | ||
1320 | # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be | |
1321 | # generated, together with the HTML files, they form an Eclipse help plugin. To | |
1322 | # install this plugin and make it available under the help contents menu in | |
1323 | # Eclipse, the contents of the directory containing the HTML and XML files needs | |
1324 | # to be copied into the plugins directory of eclipse. The name of the directory | |
1325 | # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. | |
1326 | # After copying Eclipse needs to be restarted before the help appears. | |
1327 | # The default value is: NO. | |
1328 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1329 | ||
1330 | GENERATE_ECLIPSEHELP = NO | |
1331 | ||
1332 | # A unique identifier for the Eclipse help plugin. When installing the plugin | |
1333 | # the directory name containing the HTML and XML files should also have this | |
1334 | # name. Each documentation set should have its own identifier. | |
1335 | # The default value is: org.doxygen.Project. | |
1336 | # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. | |
1337 | ||
1338 | ECLIPSE_DOC_ID = org.doxygen.Project | |
1339 | ||
1340 | # If you want full control over the layout of the generated HTML pages it might | |
1341 | # be necessary to disable the index and replace it with your own. The | |
1342 | # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top | |
1343 | # of each HTML page. A value of NO enables the index and the value YES disables | |
1344 | # it. Since the tabs in the index contain the same information as the navigation | |
1345 | # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. | |
1346 | # The default value is: NO. | |
1347 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1348 | ||
1349 | DISABLE_INDEX = YES | |
1350 | ||
1351 | # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index | |
1352 | # structure should be generated to display hierarchical information. If the tag | |
1353 | # value is set to YES, a side panel will be generated containing a tree-like | |
1354 | # index structure (just like the one that is generated for HTML Help). For this | |
1355 | # to work a browser that supports JavaScript, DHTML, CSS and frames is required | |
1356 | # (i.e. any modern browser). Windows users are probably better off using the | |
1357 | # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can | |
1358 | # further fine-tune the look of the index. As an example, the default style | |
1359 | # sheet generated by doxygen has an example that shows how to put an image at | |
1360 | # the root of the tree instead of the PROJECT_NAME. Since the tree basically has | |
1361 | # the same information as the tab index, you could consider setting | |
1362 | # DISABLE_INDEX to YES when enabling this option. | |
1363 | # The default value is: NO. | |
1364 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1365 | ||
1366 | GENERATE_TREEVIEW = YES | |
1367 | ||
1368 | # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that | |
1369 | # doxygen will group on one line in the generated HTML documentation. | |
1370 | # | |
1371 | # Note that a value of 0 will completely suppress the enum values from appearing | |
1372 | # in the overview section. | |
1373 | # Minimum value: 0, maximum value: 20, default value: 4. | |
1374 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1375 | ||
1376 | ENUM_VALUES_PER_LINE = 0 | |
1377 | ||
1378 | # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used | |
1379 | # to set the initial width (in pixels) of the frame in which the tree is shown. | |
1380 | # Minimum value: 0, maximum value: 1500, default value: 250. | |
1381 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1382 | ||
1383 | TREEVIEW_WIDTH = 250 | |
1384 | ||
1385 | # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to | |
1386 | # external symbols imported via tag files in a separate window. | |
1387 | # The default value is: NO. | |
1388 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1389 | ||
1390 | EXT_LINKS_IN_WINDOW = NO | |
1391 | ||
1392 | # Use this tag to change the font size of LaTeX formulas included as images in | |
1393 | # the HTML documentation. When you change the font size after a successful | |
1394 | # doxygen run you need to manually remove any form_*.png images from the HTML | |
1395 | # output directory to force them to be regenerated. | |
1396 | # Minimum value: 8, maximum value: 50, default value: 10. | |
1397 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1398 | ||
1399 | FORMULA_FONTSIZE = 10 | |
1400 | ||
1401 | # Use the FORMULA_TRANPARENT tag to determine whether or not the images | |
1402 | # generated for formulas are transparent PNGs. Transparent PNGs are not | |
1403 | # supported properly for IE 6.0, but are supported on all modern browsers. | |
1404 | # | |
1405 | # Note that when changing this option you need to delete any form_*.png files in | |
1406 | # the HTML output directory before the changes have effect. | |
1407 | # The default value is: YES. | |
1408 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1409 | ||
1410 | FORMULA_TRANSPARENT = YES | |
1411 | ||
1412 | # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see | |
1413 | # http://www.mathjax.org) which uses client side Javascript for the rendering | |
1414 | # instead of using prerendered bitmaps. Use this if you do not have LaTeX | |
1415 | # installed or if you want to formulas look prettier in the HTML output. When | |
1416 | # enabled you may also need to install MathJax separately and configure the path | |
1417 | # to it using the MATHJAX_RELPATH option. | |
1418 | # The default value is: NO. | |
1419 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1420 | ||
1421 | USE_MATHJAX = NO | |
1422 | ||
1423 | # When MathJax is enabled you can set the default output format to be used for | |
1424 | # the MathJax output. See the MathJax site (see: | |
1425 | # http://docs.mathjax.org/en/latest/output.html) for more details. | |
1426 | # Possible values are: HTML-CSS (which is slower, but has the best | |
1427 | # compatibility), NativeMML (i.e. MathML) and SVG. | |
1428 | # The default value is: HTML-CSS. | |
1429 | # This tag requires that the tag USE_MATHJAX is set to YES. | |
1430 | ||
1431 | MATHJAX_FORMAT = HTML-CSS | |
1432 | ||
1433 | # When MathJax is enabled you need to specify the location relative to the HTML | |
1434 | # output directory using the MATHJAX_RELPATH option. The destination directory | |
1435 | # should contain the MathJax.js script. For instance, if the mathjax directory | |
1436 | # is located at the same level as the HTML output directory, then | |
1437 | # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax | |
1438 | # Content Delivery Network so you can quickly see the result without installing | |
1439 | # MathJax. However, it is strongly recommended to install a local copy of | |
1440 | # MathJax from http://www.mathjax.org before deployment. | |
1441 | # The default value is: http://cdn.mathjax.org/mathjax/latest. | |
1442 | # This tag requires that the tag USE_MATHJAX is set to YES. | |
1443 | ||
1444 | MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest | |
1445 | ||
1446 | # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax | |
1447 | # extension names that should be enabled during MathJax rendering. For example | |
1448 | # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols | |
1449 | # This tag requires that the tag USE_MATHJAX is set to YES. | |
1450 | ||
1451 | MATHJAX_EXTENSIONS = | |
1452 | ||
1453 | # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces | |
1454 | # of code that will be used on startup of the MathJax code. See the MathJax site | |
1455 | # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an | |
1456 | # example see the documentation. | |
1457 | # This tag requires that the tag USE_MATHJAX is set to YES. | |
1458 | ||
1459 | MATHJAX_CODEFILE = | |
1460 | ||
1461 | # When the SEARCHENGINE tag is enabled doxygen will generate a search box for | |
1462 | # the HTML output. The underlying search engine uses javascript and DHTML and | |
1463 | # should work on any modern browser. Note that when using HTML help | |
1464 | # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) | |
1465 | # there is already a search function so this one should typically be disabled. | |
1466 | # For large projects the javascript based search engine can be slow, then | |
1467 | # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to | |
1468 | # search using the keyboard; to jump to the search box use <access key> + S | |
1469 | # (what the <access key> is depends on the OS and browser, but it is typically | |
1470 | # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down | |
1471 | # key> to jump into the search results window, the results can be navigated | |
1472 | # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel | |
1473 | # the search. The filter options can be selected when the cursor is inside the | |
1474 | # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> | |
1475 | # to select a filter and <Enter> or <escape> to activate or cancel the filter | |
1476 | # option. | |
1477 | # The default value is: YES. | |
1478 | # This tag requires that the tag GENERATE_HTML is set to YES. | |
1479 | ||
1480 | SEARCHENGINE = NO | |
1481 | ||
1482 | # When the SERVER_BASED_SEARCH tag is enabled the search engine will be | |
1483 | # implemented using a web server instead of a web client using Javascript. There | |
1484 | # are two flavors of web server based searching depending on the EXTERNAL_SEARCH | |
1485 | # setting. When disabled, doxygen will generate a PHP script for searching and | |
1486 | # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing | |
1487 | # and searching needs to be provided by external tools. See the section | |
1488 | # "External Indexing and Searching" for details. | |
1489 | # The default value is: NO. | |
1490 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1491 | ||
1492 | SERVER_BASED_SEARCH = NO | |
1493 | ||
1494 | # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP | |
1495 | # script for searching. Instead the search results are written to an XML file | |
1496 | # which needs to be processed by an external indexer. Doxygen will invoke an | |
1497 | # external search engine pointed to by the SEARCHENGINE_URL option to obtain the | |
1498 | # search results. | |
1499 | # | |
1500 | # Doxygen ships with an example indexer ( doxyindexer) and search engine | |
1501 | # (doxysearch.cgi) which are based on the open source search engine library | |
1502 | # Xapian (see: http://xapian.org/). | |
1503 | # | |
1504 | # See the section "External Indexing and Searching" for details. | |
1505 | # The default value is: NO. | |
1506 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1507 | ||
1508 | EXTERNAL_SEARCH = NO | |
1509 | ||
1510 | # The SEARCHENGINE_URL should point to a search engine hosted by a web server | |
1511 | # which will return the search results when EXTERNAL_SEARCH is enabled. | |
1512 | # | |
1513 | # Doxygen ships with an example indexer ( doxyindexer) and search engine | |
1514 | # (doxysearch.cgi) which are based on the open source search engine library | |
1515 | # Xapian (see: http://xapian.org/). See the section "External Indexing and | |
1516 | # Searching" for details. | |
1517 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1518 | ||
1519 | SEARCHENGINE_URL = | |
1520 | ||
1521 | # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed | |
1522 | # search data is written to a file for indexing by an external tool. With the | |
1523 | # SEARCHDATA_FILE tag the name of this file can be specified. | |
1524 | # The default file is: searchdata.xml. | |
1525 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1526 | ||
1527 | SEARCHDATA_FILE = searchdata.xml | |
1528 | ||
1529 | # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the | |
1530 | # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is | |
1531 | # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple | |
1532 | # projects and redirect the results back to the right project. | |
1533 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1534 | ||
1535 | EXTERNAL_SEARCH_ID = | |
1536 | ||
1537 | # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen | |
1538 | # projects other than the one defined by this configuration file, but that are | |
1539 | # all added to the same external search index. Each project needs to have a | |
1540 | # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of | |
1541 | # to a relative location where the documentation can be found. The format is: | |
1542 | # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... | |
1543 | # This tag requires that the tag SEARCHENGINE is set to YES. | |
1544 | ||
1545 | EXTRA_SEARCH_MAPPINGS = | |
1546 | ||
1547 | #--------------------------------------------------------------------------- | |
1548 | # Configuration options related to the LaTeX output | |
1549 | #--------------------------------------------------------------------------- | |
1550 | ||
1551 | # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. | |
1552 | # The default value is: YES. | |
1553 | ||
1554 | GENERATE_LATEX = NO | |
1555 | ||
1556 | # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a | |
1557 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | |
1558 | # it. | |
1559 | # The default directory is: latex. | |
1560 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1561 | ||
1562 | LATEX_OUTPUT = latex | |
1563 | ||
1564 | # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be | |
1565 | # invoked. | |
1566 | # | |
1567 | # Note that when enabling USE_PDFLATEX this option is only used for generating | |
1568 | # bitmaps for formulas in the HTML output, but not in the Makefile that is | |
1569 | # written to the output directory. | |
1570 | # The default file is: latex. | |
1571 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1572 | ||
1573 | LATEX_CMD_NAME = latex | |
1574 | ||
1575 | # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate | |
1576 | # index for LaTeX. | |
1577 | # The default file is: makeindex. | |
1578 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1579 | ||
1580 | MAKEINDEX_CMD_NAME = makeindex | |
1581 | ||
1582 | # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX | |
1583 | # documents. This may be useful for small projects and may help to save some | |
1584 | # trees in general. | |
1585 | # The default value is: NO. | |
1586 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1587 | ||
1588 | COMPACT_LATEX = NO | |
1589 | ||
1590 | # The PAPER_TYPE tag can be used to set the paper type that is used by the | |
1591 | # printer. | |
1592 | # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x | |
1593 | # 14 inches) and executive (7.25 x 10.5 inches). | |
1594 | # The default value is: a4. | |
1595 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1596 | ||
1597 | PAPER_TYPE = a4 | |
1598 | ||
1599 | # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names | |
1600 | # that should be included in the LaTeX output. To get the times font for | |
1601 | # instance you can specify | |
1602 | # EXTRA_PACKAGES=times | |
1603 | # If left blank no extra packages will be included. | |
1604 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1605 | ||
1606 | EXTRA_PACKAGES = | |
1607 | ||
1608 | # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the | |
1609 | # generated LaTeX document. The header should contain everything until the first | |
1610 | # chapter. If it is left blank doxygen will generate a standard header. See | |
1611 | # section "Doxygen usage" for information on how to let doxygen write the | |
1612 | # default header to a separate file. | |
1613 | # | |
1614 | # Note: Only use a user-defined header if you know what you are doing! The | |
1615 | # following commands have a special meaning inside the header: $title, | |
1616 | # $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will | |
1617 | # replace them by respectively the title of the page, the current date and time, | |
1618 | # only the current date, the version number of doxygen, the project name (see | |
1619 | # PROJECT_NAME), or the project number (see PROJECT_NUMBER). | |
1620 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1621 | ||
1622 | LATEX_HEADER = | |
1623 | ||
1624 | # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the | |
1625 | # generated LaTeX document. The footer should contain everything after the last | |
1626 | # chapter. If it is left blank doxygen will generate a standard footer. | |
1627 | # | |
1628 | # Note: Only use a user-defined footer if you know what you are doing! | |
1629 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1630 | ||
1631 | LATEX_FOOTER = | |
1632 | ||
1633 | # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or | |
1634 | # other source files which should be copied to the LATEX_OUTPUT output | |
1635 | # directory. Note that the files will be copied as-is; there are no commands or | |
1636 | # markers available. | |
1637 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1638 | ||
1639 | LATEX_EXTRA_FILES = | |
1640 | ||
1641 | # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is | |
1642 | # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will | |
1643 | # contain links (just like the HTML output) instead of page references. This | |
1644 | # makes the output suitable for online browsing using a PDF viewer. | |
1645 | # The default value is: YES. | |
1646 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1647 | ||
1648 | PDF_HYPERLINKS = YES | |
1649 | ||
1650 | # If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate | |
1651 | # the PDF file directly from the LaTeX files. Set this option to YES to get a | |
1652 | # higher quality PDF documentation. | |
1653 | # The default value is: YES. | |
1654 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1655 | ||
1656 | USE_PDFLATEX = YES | |
1657 | ||
1658 | # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode | |
1659 | # command to the generated LaTeX files. This will instruct LaTeX to keep running | |
1660 | # if errors occur, instead of asking the user for help. This option is also used | |
1661 | # when generating formulas in HTML. | |
1662 | # The default value is: NO. | |
1663 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1664 | ||
1665 | LATEX_BATCHMODE = NO | |
1666 | ||
1667 | # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the | |
1668 | # index chapters (such as File Index, Compound Index, etc.) in the output. | |
1669 | # The default value is: NO. | |
1670 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1671 | ||
1672 | LATEX_HIDE_INDICES = NO | |
1673 | ||
1674 | # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source | |
1675 | # code with syntax highlighting in the LaTeX output. | |
1676 | # | |
1677 | # Note that which sources are shown also depends on other settings such as | |
1678 | # SOURCE_BROWSER. | |
1679 | # The default value is: NO. | |
1680 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1681 | ||
1682 | LATEX_SOURCE_CODE = NO | |
1683 | ||
1684 | # The LATEX_BIB_STYLE tag can be used to specify the style to use for the | |
1685 | # bibliography, e.g. plainnat, or ieeetr. See | |
1686 | # http://en.wikipedia.org/wiki/BibTeX and \cite for more info. | |
1687 | # The default value is: plain. | |
1688 | # This tag requires that the tag GENERATE_LATEX is set to YES. | |
1689 | ||
1690 | LATEX_BIB_STYLE = plain | |
1691 | ||
1692 | #--------------------------------------------------------------------------- | |
1693 | # Configuration options related to the RTF output | |
1694 | #--------------------------------------------------------------------------- | |
1695 | ||
1696 | # If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The | |
1697 | # RTF output is optimized for Word 97 and may not look too pretty with other RTF | |
1698 | # readers/editors. | |
1699 | # The default value is: NO. | |
1700 | ||
1701 | GENERATE_RTF = NO | |
1702 | ||
1703 | # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a | |
1704 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | |
1705 | # it. | |
1706 | # The default directory is: rtf. | |
1707 | # This tag requires that the tag GENERATE_RTF is set to YES. | |
1708 | ||
1709 | RTF_OUTPUT = rtf | |
1710 | ||
1711 | # If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF | |
1712 | # documents. This may be useful for small projects and may help to save some | |
1713 | # trees in general. | |
1714 | # The default value is: NO. | |
1715 | # This tag requires that the tag GENERATE_RTF is set to YES. | |
1716 | ||
1717 | COMPACT_RTF = NO | |
1718 | ||
1719 | # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will | |
1720 | # contain hyperlink fields. The RTF file will contain links (just like the HTML | |
1721 | # output) instead of page references. This makes the output suitable for online | |
1722 | # browsing using Word or some other Word compatible readers that support those | |
1723 | # fields. | |
1724 | # | |
1725 | # Note: WordPad (write) and others do not support links. | |
1726 | # The default value is: NO. | |
1727 | # This tag requires that the tag GENERATE_RTF is set to YES. | |
1728 | ||
1729 | RTF_HYPERLINKS = NO | |
1730 | ||
1731 | # Load stylesheet definitions from file. Syntax is similar to doxygen's config | |
1732 | # file, i.e. a series of assignments. You only have to provide replacements, | |
1733 | # missing definitions are set to their default value. | |
1734 | # | |
1735 | # See also section "Doxygen usage" for information on how to generate the | |
1736 | # default style sheet that doxygen normally uses. | |
1737 | # This tag requires that the tag GENERATE_RTF is set to YES. | |
1738 | ||
1739 | RTF_STYLESHEET_FILE = | |
1740 | ||
1741 | # Set optional variables used in the generation of an RTF document. Syntax is | |
1742 | # similar to doxygen's config file. A template extensions file can be generated | |
1743 | # using doxygen -e rtf extensionFile. | |
1744 | # This tag requires that the tag GENERATE_RTF is set to YES. | |
1745 | ||
1746 | RTF_EXTENSIONS_FILE = | |
1747 | ||
1748 | #--------------------------------------------------------------------------- | |
1749 | # Configuration options related to the man page output | |
1750 | #--------------------------------------------------------------------------- | |
1751 | ||
1752 | # If the GENERATE_MAN tag is set to YES doxygen will generate man pages for | |
1753 | # classes and files. | |
1754 | # The default value is: NO. | |
1755 | ||
1756 | GENERATE_MAN = NO | |
1757 | ||
1758 | # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a | |
1759 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | |
1760 | # it. A directory man3 will be created inside the directory specified by | |
1761 | # MAN_OUTPUT. | |
1762 | # The default directory is: man. | |
1763 | # This tag requires that the tag GENERATE_MAN is set to YES. | |
1764 | ||
1765 | MAN_OUTPUT = man | |
1766 | ||
1767 | # The MAN_EXTENSION tag determines the extension that is added to the generated | |
1768 | # man pages. In case the manual section does not start with a number, the number | |
1769 | # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is | |
1770 | # optional. | |
1771 | # The default value is: .3. | |
1772 | # This tag requires that the tag GENERATE_MAN is set to YES. | |
1773 | ||
1774 | MAN_EXTENSION = .3 | |
1775 | ||
1776 | # The MAN_SUBDIR tag determines the name of the directory created within | |
1777 | # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by | |
1778 | # MAN_EXTENSION with the initial . removed. | |
1779 | # This tag requires that the tag GENERATE_MAN is set to YES. | |
1780 | ||
1781 | MAN_SUBDIR = | |
1782 | ||
1783 | # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it | |
1784 | # will generate one additional man file for each entity documented in the real | |
1785 | # man page(s). These additional files only source the real man page, but without | |
1786 | # them the man command would be unable to find the correct page. | |
1787 | # The default value is: NO. | |
1788 | # This tag requires that the tag GENERATE_MAN is set to YES. | |
1789 | ||
1790 | MAN_LINKS = NO | |
1791 | ||
1792 | #--------------------------------------------------------------------------- | |
1793 | # Configuration options related to the XML output | |
1794 | #--------------------------------------------------------------------------- | |
1795 | ||
1796 | # If the GENERATE_XML tag is set to YES doxygen will generate an XML file that | |
1797 | # captures the structure of the code including all documentation. | |
1798 | # The default value is: NO. | |
1799 | ||
1800 | GENERATE_XML = NO | |
1801 | ||
1802 | # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a | |
1803 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | |
1804 | # it. | |
1805 | # The default directory is: xml. | |
1806 | # This tag requires that the tag GENERATE_XML is set to YES. | |
1807 | ||
1808 | XML_OUTPUT = xml | |
1809 | ||
1810 | # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program | |
1811 | # listings (including syntax highlighting and cross-referencing information) to | |
1812 | # the XML output. Note that enabling this will significantly increase the size | |
1813 | # of the XML output. | |
1814 | # The default value is: YES. | |
1815 | # This tag requires that the tag GENERATE_XML is set to YES. | |
1816 | ||
1817 | XML_PROGRAMLISTING = YES | |
1818 | ||
1819 | #--------------------------------------------------------------------------- | |
1820 | # Configuration options related to the DOCBOOK output | |
1821 | #--------------------------------------------------------------------------- | |
1822 | ||
1823 | # If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files | |
1824 | # that can be used to generate PDF. | |
1825 | # The default value is: NO. | |
1826 | ||
1827 | GENERATE_DOCBOOK = NO | |
1828 | ||
1829 | # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. | |
1830 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in | |
1831 | # front of it. | |
1832 | # The default directory is: docbook. | |
1833 | # This tag requires that the tag GENERATE_DOCBOOK is set to YES. | |
1834 | ||
1835 | DOCBOOK_OUTPUT = docbook | |
1836 | ||
1837 | #--------------------------------------------------------------------------- | |
1838 | # Configuration options for the AutoGen Definitions output | |
1839 | #--------------------------------------------------------------------------- | |
1840 | ||
1841 | # If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen | |
1842 | # Definitions (see http://autogen.sf.net) file that captures the structure of | |
1843 | # the code including all documentation. Note that this feature is still | |
1844 | # experimental and incomplete at the moment. | |
1845 | # The default value is: NO. | |
1846 | ||
1847 | GENERATE_AUTOGEN_DEF = NO | |
1848 | ||
1849 | #--------------------------------------------------------------------------- | |
1850 | # Configuration options related to the Perl module output | |
1851 | #--------------------------------------------------------------------------- | |
1852 | ||
1853 | # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module | |
1854 | # file that captures the structure of the code including all documentation. | |
1855 | # | |
1856 | # Note that this feature is still experimental and incomplete at the moment. | |
1857 | # The default value is: NO. | |
1858 | ||
1859 | GENERATE_PERLMOD = NO | |
1860 | ||
1861 | # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary | |
1862 | # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI | |
1863 | # output from the Perl module output. | |
1864 | # The default value is: NO. | |
1865 | # This tag requires that the tag GENERATE_PERLMOD is set to YES. | |
1866 | ||
1867 | PERLMOD_LATEX = NO | |
1868 | ||
1869 | # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely | |
1870 | # formatted so it can be parsed by a human reader. This is useful if you want to | |
1871 | # understand what is going on. On the other hand, if this tag is set to NO the | |
1872 | # size of the Perl module output will be much smaller and Perl will parse it | |
1873 | # just the same. | |
1874 | # The default value is: YES. | |
1875 | # This tag requires that the tag GENERATE_PERLMOD is set to YES. | |
1876 | ||
1877 | PERLMOD_PRETTY = YES | |
1878 | ||
1879 | # The names of the make variables in the generated doxyrules.make file are | |
1880 | # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful | |
1881 | # so different doxyrules.make files included by the same Makefile don't | |
1882 | # overwrite each other's variables. | |
1883 | # This tag requires that the tag GENERATE_PERLMOD is set to YES. | |
1884 | ||
1885 | PERLMOD_MAKEVAR_PREFIX = | |
1886 | ||
1887 | #--------------------------------------------------------------------------- | |
1888 | # Configuration options related to the preprocessor | |
1889 | #--------------------------------------------------------------------------- | |
1890 | ||
1891 | # If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all | |
1892 | # C-preprocessor directives found in the sources and include files. | |
1893 | # The default value is: YES. | |
1894 | ||
1895 | ENABLE_PREPROCESSING = YES | |
1896 | ||
1897 | # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names | |
1898 | # in the source code. If set to NO only conditional compilation will be | |
1899 | # performed. Macro expansion can be done in a controlled way by setting | |
1900 | # EXPAND_ONLY_PREDEF to YES. | |
1901 | # The default value is: NO. | |
1902 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1903 | ||
1904 | MACRO_EXPANSION = YES | |
1905 | ||
1906 | # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then | |
1907 | # the macro expansion is limited to the macros specified with the PREDEFINED and | |
1908 | # EXPAND_AS_DEFINED tags. | |
1909 | # The default value is: NO. | |
1910 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1911 | ||
1912 | EXPAND_ONLY_PREDEF = NO | |
1913 | ||
1914 | # If the SEARCH_INCLUDES tag is set to YES the includes files in the | |
1915 | # INCLUDE_PATH will be searched if a #include is found. | |
1916 | # The default value is: YES. | |
1917 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1918 | ||
1919 | SEARCH_INCLUDES = YES | |
1920 | ||
1921 | # The INCLUDE_PATH tag can be used to specify one or more directories that | |
1922 | # contain include files that are not input files but should be processed by the | |
1923 | # preprocessor. | |
1924 | # This tag requires that the tag SEARCH_INCLUDES is set to YES. | |
1925 | ||
1926 | INCLUDE_PATH = | |
1927 | ||
1928 | # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard | |
1929 | # patterns (like *.h and *.hpp) to filter out the header-files in the | |
1930 | # directories. If left blank, the patterns specified with FILE_PATTERNS will be | |
1931 | # used. | |
1932 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1933 | ||
1934 | INCLUDE_FILE_PATTERNS = | |
1935 | ||
1936 | # The PREDEFINED tag can be used to specify one or more macro names that are | |
1937 | # defined before the preprocessor is started (similar to the -D option of e.g. | |
1938 | # gcc). The argument of the tag is a list of macros of the form: name or | |
1939 | # name=definition (no spaces). If the definition and the "=" are omitted, "=1" | |
1940 | # is assumed. To prevent a macro definition from being undefined via #undef or | |
1941 | # recursively expanded use the := operator instead of the = operator. | |
1942 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1943 | ||
1944 | PREDEFINED = | |
1945 | ||
1946 | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this | |
1947 | # tag can be used to specify a list of macro names that should be expanded. The | |
1948 | # macro definition that is found in the sources will be used. Use the PREDEFINED | |
1949 | # tag if you want to use a different macro definition that overrules the | |
1950 | # definition found in the source code. | |
1951 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1952 | ||
1953 | EXPAND_AS_DEFINED = | |
1954 | ||
1955 | # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will | |
1956 | # remove all references to function-like macros that are alone on a line, have | |
1957 | # an all uppercase name, and do not end with a semicolon. Such function macros | |
1958 | # are typically used for boiler-plate code, and will confuse the parser if not | |
1959 | # removed. | |
1960 | # The default value is: YES. | |
1961 | # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | |
1962 | ||
1963 | SKIP_FUNCTION_MACROS = YES | |
1964 | ||
1965 | #--------------------------------------------------------------------------- | |
1966 | # Configuration options related to external references | |
1967 | #--------------------------------------------------------------------------- | |
1968 | ||
1969 | # The TAGFILES tag can be used to specify one or more tag files. For each tag | |
1970 | # file the location of the external documentation should be added. The format of | |
1971 | # a tag file without this location is as follows: | |
1972 | # TAGFILES = file1 file2 ... | |
1973 | # Adding location for the tag files is done as follows: | |
1974 | # TAGFILES = file1=loc1 "file2 = loc2" ... | |
1975 | # where loc1 and loc2 can be relative or absolute paths or URLs. See the | |
1976 | # section "Linking to external documentation" for more information about the use | |
1977 | # of tag files. | |
1978 | # Note: Each tag file must have a unique name (where the name does NOT include | |
1979 | # the path). If a tag file is not located in the directory in which doxygen is | |
1980 | # run, you must also specify the path to the tagfile here. | |
1981 | ||
1982 | TAGFILES = | |
1983 | ||
1984 | # When a file name is specified after GENERATE_TAGFILE, doxygen will create a | |
1985 | # tag file that is based on the input files it reads. See section "Linking to | |
1986 | # external documentation" for more information about the usage of tag files. | |
1987 | ||
1988 | GENERATE_TAGFILE = | |
1989 | ||
1990 | # If the ALLEXTERNALS tag is set to YES all external class will be listed in the | |
1991 | # class index. If set to NO only the inherited external classes will be listed. | |
1992 | # The default value is: NO. | |
1993 | ||
1994 | ALLEXTERNALS = NO | |
1995 | ||
1996 | # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in | |
1997 | # the modules index. If set to NO, only the current project's groups will be | |
1998 | # listed. | |
1999 | # The default value is: YES. | |
2000 | ||
2001 | EXTERNAL_GROUPS = YES | |
2002 | ||
2003 | # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in | |
2004 | # the related pages index. If set to NO, only the current project's pages will | |
2005 | # be listed. | |
2006 | # The default value is: YES. | |
2007 | ||
2008 | EXTERNAL_PAGES = YES | |
2009 | ||
2010 | # The PERL_PATH should be the absolute path and name of the perl script | |
2011 | # interpreter (i.e. the result of 'which perl'). | |
2012 | # The default file (with absolute path) is: /usr/bin/perl. | |
2013 | ||
2014 | PERL_PATH = /usr/bin/perl | |
2015 | ||
2016 | #--------------------------------------------------------------------------- | |
2017 | # Configuration options related to the dot tool | |
2018 | #--------------------------------------------------------------------------- | |
2019 | ||
2020 | # If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram | |
2021 | # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to | |
2022 | # NO turns the diagrams off. Note that this option also works with HAVE_DOT | |
2023 | # disabled, but it is recommended to install and use dot, since it yields more | |
2024 | # powerful graphs. | |
2025 | # The default value is: YES. | |
2026 | ||
2027 | CLASS_DIAGRAMS = NO | |
2028 | ||
2029 | # You can define message sequence charts within doxygen comments using the \msc | |
2030 | # command. Doxygen will then run the mscgen tool (see: | |
2031 | # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the | |
2032 | # documentation. The MSCGEN_PATH tag allows you to specify the directory where | |
2033 | # the mscgen tool resides. If left empty the tool is assumed to be found in the | |
2034 | # default search path. | |
2035 | ||
2036 | MSCGEN_PATH = | |
2037 | ||
2038 | # You can include diagrams made with dia in doxygen documentation. Doxygen will | |
2039 | # then run dia to produce the diagram and insert it in the documentation. The | |
2040 | # DIA_PATH tag allows you to specify the directory where the dia binary resides. | |
2041 | # If left empty dia is assumed to be found in the default search path. | |
2042 | ||
2043 | DIA_PATH = | |
2044 | ||
2045 | # If set to YES, the inheritance and collaboration graphs will hide inheritance | |
2046 | # and usage relations if the target is undocumented or is not a class. | |
2047 | # The default value is: YES. | |
2048 | ||
2049 | HIDE_UNDOC_RELATIONS = YES | |
2050 | ||
2051 | # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is | |
2052 | # available from the path. This tool is part of Graphviz (see: | |
2053 | # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent | |
2054 | # Bell Labs. The other options in this section have no effect if this option is | |
2055 | # set to NO | |
2056 | # The default value is: YES. | |
2057 | ||
2058 | HAVE_DOT = NO | |
2059 | ||
2060 | # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed | |
2061 | # to run in parallel. When set to 0 doxygen will base this on the number of | |
2062 | # processors available in the system. You can set it explicitly to a value | |
2063 | # larger than 0 to get control over the balance between CPU load and processing | |
2064 | # speed. | |
2065 | # Minimum value: 0, maximum value: 32, default value: 0. | |
2066 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2067 | ||
2068 | DOT_NUM_THREADS = 0 | |
2069 | ||
2070 | # When you want a differently looking font n the dot files that doxygen | |
2071 | # generates you can specify the font name using DOT_FONTNAME. You need to make | |
2072 | # sure dot is able to find the font, which can be done by putting it in a | |
2073 | # standard location or by setting the DOTFONTPATH environment variable or by | |
2074 | # setting DOT_FONTPATH to the directory containing the font. | |
2075 | # The default value is: Helvetica. | |
2076 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2077 | ||
2078 | DOT_FONTNAME = Helvetica | |
2079 | ||
2080 | # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of | |
2081 | # dot graphs. | |
2082 | # Minimum value: 4, maximum value: 24, default value: 10. | |
2083 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2084 | ||
2085 | DOT_FONTSIZE = 10 | |
2086 | ||
2087 | # By default doxygen will tell dot to use the default font as specified with | |
2088 | # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set | |
2089 | # the path where dot can find it using this tag. | |
2090 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2091 | ||
2092 | DOT_FONTPATH = | |
2093 | ||
2094 | # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for | |
2095 | # each documented class showing the direct and indirect inheritance relations. | |
2096 | # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. | |
2097 | # The default value is: YES. | |
2098 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2099 | ||
2100 | CLASS_GRAPH = YES | |
2101 | ||
2102 | # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a | |
2103 | # graph for each documented class showing the direct and indirect implementation | |
2104 | # dependencies (inheritance, containment, and class references variables) of the | |
2105 | # class with other documented classes. | |
2106 | # The default value is: YES. | |
2107 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2108 | ||
2109 | COLLABORATION_GRAPH = YES | |
2110 | ||
2111 | # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for | |
2112 | # groups, showing the direct groups dependencies. | |
2113 | # The default value is: YES. | |
2114 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2115 | ||
2116 | GROUP_GRAPHS = YES | |
2117 | ||
2118 | # If the UML_LOOK tag is set to YES doxygen will generate inheritance and | |
2119 | # collaboration diagrams in a style similar to the OMG's Unified Modeling | |
2120 | # Language. | |
2121 | # The default value is: NO. | |
2122 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2123 | ||
2124 | UML_LOOK = NO | |
2125 | ||
2126 | # If the UML_LOOK tag is enabled, the fields and methods are shown inside the | |
2127 | # class node. If there are many fields or methods and many nodes the graph may | |
2128 | # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the | |
2129 | # number of items for each type to make the size more manageable. Set this to 0 | |
2130 | # for no limit. Note that the threshold may be exceeded by 50% before the limit | |
2131 | # is enforced. So when you set the threshold to 10, up to 15 fields may appear, | |
2132 | # but if the number exceeds 15, the total amount of fields shown is limited to | |
2133 | # 10. | |
2134 | # Minimum value: 0, maximum value: 100, default value: 10. | |
2135 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2136 | ||
2137 | UML_LIMIT_NUM_FIELDS = 10 | |
2138 | ||
2139 | # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and | |
2140 | # collaboration graphs will show the relations between templates and their | |
2141 | # instances. | |
2142 | # The default value is: NO. | |
2143 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2144 | ||
2145 | TEMPLATE_RELATIONS = NO | |
2146 | ||
2147 | # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to | |
2148 | # YES then doxygen will generate a graph for each documented file showing the | |
2149 | # direct and indirect include dependencies of the file with other documented | |
2150 | # files. | |
2151 | # The default value is: YES. | |
2152 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2153 | ||
2154 | INCLUDE_GRAPH = YES | |
2155 | ||
2156 | # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are | |
2157 | # set to YES then doxygen will generate a graph for each documented file showing | |
2158 | # the direct and indirect include dependencies of the file with other documented | |
2159 | # files. | |
2160 | # The default value is: YES. | |
2161 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2162 | ||
2163 | INCLUDED_BY_GRAPH = YES | |
2164 | ||
2165 | # If the CALL_GRAPH tag is set to YES then doxygen will generate a call | |
2166 | # dependency graph for every global function or class method. | |
2167 | # | |
2168 | # Note that enabling this option will significantly increase the time of a run. | |
2169 | # So in most cases it will be better to enable call graphs for selected | |
2170 | # functions only using the \callgraph command. | |
2171 | # The default value is: NO. | |
2172 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2173 | ||
2174 | CALL_GRAPH = NO | |
2175 | ||
2176 | # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller | |
2177 | # dependency graph for every global function or class method. | |
2178 | # | |
2179 | # Note that enabling this option will significantly increase the time of a run. | |
2180 | # So in most cases it will be better to enable caller graphs for selected | |
2181 | # functions only using the \callergraph command. | |
2182 | # The default value is: NO. | |
2183 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2184 | ||
2185 | CALLER_GRAPH = NO | |
2186 | ||
2187 | # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical | |
2188 | # hierarchy of all classes instead of a textual one. | |
2189 | # The default value is: YES. | |
2190 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2191 | ||
2192 | GRAPHICAL_HIERARCHY = YES | |
2193 | ||
2194 | # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the | |
2195 | # dependencies a directory has on other directories in a graphical way. The | |
2196 | # dependency relations are determined by the #include relations between the | |
2197 | # files in the directories. | |
2198 | # The default value is: YES. | |
2199 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2200 | ||
2201 | DIRECTORY_GRAPH = YES | |
2202 | ||
2203 | # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images | |
2204 | # generated by dot. | |
2205 | # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order | |
2206 | # to make the SVG files visible in IE 9+ (other browsers do not have this | |
2207 | # requirement). | |
2208 | # Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, | |
2209 | # png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, | |
2210 | # gif:cairo:gd, gif:gd, gif:gd:gd and svg. | |
2211 | # The default value is: png. | |
2212 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2213 | ||
2214 | DOT_IMAGE_FORMAT = png | |
2215 | ||
2216 | # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to | |
2217 | # enable generation of interactive SVG images that allow zooming and panning. | |
2218 | # | |
2219 | # Note that this requires a modern browser other than Internet Explorer. Tested | |
2220 | # and working are Firefox, Chrome, Safari, and Opera. | |
2221 | # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make | |
2222 | # the SVG files visible. Older versions of IE do not have SVG support. | |
2223 | # The default value is: NO. | |
2224 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2225 | ||
2226 | INTERACTIVE_SVG = NO | |
2227 | ||
2228 | # The DOT_PATH tag can be used to specify the path where the dot tool can be | |
2229 | # found. If left blank, it is assumed the dot tool can be found in the path. | |
2230 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2231 | ||
2232 | DOT_PATH = | |
2233 | ||
2234 | # The DOTFILE_DIRS tag can be used to specify one or more directories that | |
2235 | # contain dot files that are included in the documentation (see the \dotfile | |
2236 | # command). | |
2237 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2238 | ||
2239 | DOTFILE_DIRS = | |
2240 | ||
2241 | # The MSCFILE_DIRS tag can be used to specify one or more directories that | |
2242 | # contain msc files that are included in the documentation (see the \mscfile | |
2243 | # command). | |
2244 | ||
2245 | MSCFILE_DIRS = | |
2246 | ||
2247 | # The DIAFILE_DIRS tag can be used to specify one or more directories that | |
2248 | # contain dia files that are included in the documentation (see the \diafile | |
2249 | # command). | |
2250 | ||
2251 | DIAFILE_DIRS = | |
2252 | ||
2253 | # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes | |
2254 | # that will be shown in the graph. If the number of nodes in a graph becomes | |
2255 | # larger than this value, doxygen will truncate the graph, which is visualized | |
2256 | # by representing a node as a red box. Note that doxygen if the number of direct | |
2257 | # children of the root node in a graph is already larger than | |
2258 | # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that | |
2259 | # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. | |
2260 | # Minimum value: 0, maximum value: 10000, default value: 50. | |
2261 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2262 | ||
2263 | DOT_GRAPH_MAX_NODES = 50 | |
2264 | ||
2265 | # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs | |
2266 | # generated by dot. A depth value of 3 means that only nodes reachable from the | |
2267 | # root by following a path via at most 3 edges will be shown. Nodes that lay | |
2268 | # further from the root node will be omitted. Note that setting this option to 1 | |
2269 | # or 2 may greatly reduce the computation time needed for large code bases. Also | |
2270 | # note that the size of a graph can be further restricted by | |
2271 | # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. | |
2272 | # Minimum value: 0, maximum value: 1000, default value: 0. | |
2273 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2274 | ||
2275 | MAX_DOT_GRAPH_DEPTH = 0 | |
2276 | ||
2277 | # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent | |
2278 | # background. This is disabled by default, because dot on Windows does not seem | |
2279 | # to support this out of the box. | |
2280 | # | |
2281 | # Warning: Depending on the platform used, enabling this option may lead to | |
2282 | # badly anti-aliased labels on the edges of a graph (i.e. they become hard to | |
2283 | # read). | |
2284 | # The default value is: NO. | |
2285 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2286 | ||
2287 | DOT_TRANSPARENT = NO | |
2288 | ||
2289 | # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output | |
2290 | # files in one run (i.e. multiple -o and -T options on the command line). This | |
2291 | # makes dot run faster, but since only newer versions of dot (>1.8.10) support | |
2292 | # this, this feature is disabled by default. | |
2293 | # The default value is: NO. | |
2294 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2295 | ||
2296 | DOT_MULTI_TARGETS = NO | |
2297 | ||
2298 | # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page | |
2299 | # explaining the meaning of the various boxes and arrows in the dot generated | |
2300 | # graphs. | |
2301 | # The default value is: YES. | |
2302 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2303 | ||
2304 | GENERATE_LEGEND = YES | |
2305 | ||
2306 | # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot | |
2307 | # files that are used to generate the various graphs. | |
2308 | # The default value is: YES. | |
2309 | # This tag requires that the tag HAVE_DOT is set to YES. | |
2310 | ||
2311 | DOT_CLEANUP = YES |
0 | <doxygenlayout version="1.0"> | |
1 | <!-- Generated by doxygen 1.8.7 --> | |
2 | <!-- Navigation index tabs for HTML output --> | |
3 | <navindex> | |
4 | <tab type="mainpage" visible="yes" title=""/> | |
5 | <tab type="pages" visible="yes" title="" intro=""/> | |
6 | <tab type="modules" visible="yes" title="" intro=""/> | |
7 | <tab type="namespaces" visible="yes" title=""> | |
8 | <tab type="namespacelist" visible="yes" title="" intro=""/> | |
9 | <tab type="namespacemembers" visible="yes" title="" intro=""/> | |
10 | </tab> | |
11 | <tab type="classes" visible="yes" title=""> | |
12 | <tab type="classlist" visible="yes" title="" intro=""/> | |
13 | <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> | |
14 | <tab type="hierarchy" visible="yes" title="" intro=""/> | |
15 | <tab type="classmembers" visible="yes" title="" intro=""/> | |
16 | </tab> | |
17 | <tab type="files" visible="yes" title=""> | |
18 | <tab type="filelist" visible="yes" title="" intro=""/> | |
19 | <tab type="globals" visible="yes" title="" intro=""/> | |
20 | </tab> | |
21 | <tab type="examples" visible="yes" title="" intro=""/> | |
22 | </navindex> | |
23 | ||
24 | <!-- Layout definition for a class page --> | |
25 | <class> | |
26 | <briefdescription visible="yes"/> | |
27 | <includes visible="$SHOW_INCLUDE_FILES"/> | |
28 | <inheritancegraph visible="$CLASS_GRAPH"/> | |
29 | <collaborationgraph visible="$COLLABORATION_GRAPH"/> | |
30 | <memberdecl> | |
31 | <nestedclasses visible="yes" title=""/> | |
32 | <publictypes title=""/> | |
33 | <services title=""/> | |
34 | <interfaces title=""/> | |
35 | <publicslots title=""/> | |
36 | <signals title=""/> | |
37 | <publicmethods title=""/> | |
38 | <publicstaticmethods title=""/> | |
39 | <publicattributes title=""/> | |
40 | <publicstaticattributes title=""/> | |
41 | <protectedtypes title=""/> | |
42 | <protectedslots title=""/> | |
43 | <protectedmethods title=""/> | |
44 | <protectedstaticmethods title=""/> | |
45 | <protectedattributes title=""/> | |
46 | <protectedstaticattributes title=""/> | |
47 | <packagetypes title=""/> | |
48 | <packagemethods title=""/> | |
49 | <packagestaticmethods title=""/> | |
50 | <packageattributes title=""/> | |
51 | <packagestaticattributes title=""/> | |
52 | <properties title=""/> | |
53 | <events title=""/> | |
54 | <privatetypes title=""/> | |
55 | <privateslots title=""/> | |
56 | <privatemethods title=""/> | |
57 | <privatestaticmethods title=""/> | |
58 | <privateattributes title=""/> | |
59 | <privatestaticattributes title=""/> | |
60 | <friends title=""/> | |
61 | <related title="" subtitle=""/> | |
62 | <membergroups visible="yes"/> | |
63 | </memberdecl> | |
64 | <detaileddescription title=""/> | |
65 | <memberdef> | |
66 | <inlineclasses title=""/> | |
67 | <typedefs title=""/> | |
68 | <enums title=""/> | |
69 | <services title=""/> | |
70 | <interfaces title=""/> | |
71 | <constructors title=""/> | |
72 | <functions title=""/> | |
73 | <related title=""/> | |
74 | <variables title=""/> | |
75 | <properties title=""/> | |
76 | <events title=""/> | |
77 | </memberdef> | |
78 | <allmemberslink visible="yes"/> | |
79 | <usedfiles visible="$SHOW_USED_FILES"/> | |
80 | <authorsection visible="yes"/> | |
81 | </class> | |
82 | ||
83 | <!-- Layout definition for a namespace page --> | |
84 | <namespace> | |
85 | <briefdescription visible="yes"/> | |
86 | <memberdecl> | |
87 | <nestednamespaces visible="yes" title=""/> | |
88 | <constantgroups visible="yes" title=""/> | |
89 | <classes visible="yes" title=""/> | |
90 | <typedefs title=""/> | |
91 | <enums title=""/> | |
92 | <functions title=""/> | |
93 | <variables title=""/> | |
94 | <membergroups visible="yes"/> | |
95 | </memberdecl> | |
96 | <detaileddescription title=""/> | |
97 | <memberdef> | |
98 | <inlineclasses title=""/> | |
99 | <typedefs title=""/> | |
100 | <enums title=""/> | |
101 | <functions title=""/> | |
102 | <variables title=""/> | |
103 | </memberdef> | |
104 | <authorsection visible="yes"/> | |
105 | </namespace> | |
106 | ||
107 | <!-- Layout definition for a file page --> | |
108 | <file> | |
109 | <briefdescription visible="yes"/> | |
110 | <includes visible="$SHOW_INCLUDE_FILES"/> | |
111 | <includegraph visible="$INCLUDE_GRAPH"/> | |
112 | <includedbygraph visible="$INCLUDED_BY_GRAPH"/> | |
113 | <sourcelink visible="yes"/> | |
114 | <memberdecl> | |
115 | <classes visible="yes" title=""/> | |
116 | <namespaces visible="yes" title=""/> | |
117 | <constantgroups visible="yes" title=""/> | |
118 | <defines title=""/> | |
119 | <typedefs title=""/> | |
120 | <enums title=""/> | |
121 | <functions title=""/> | |
122 | <variables title=""/> | |
123 | <membergroups visible="yes"/> | |
124 | </memberdecl> | |
125 | <detaileddescription title=""/> | |
126 | <memberdef> | |
127 | <inlineclasses title=""/> | |
128 | <defines title=""/> | |
129 | <typedefs title=""/> | |
130 | <enums title=""/> | |
131 | <functions title=""/> | |
132 | <variables title=""/> | |
133 | </memberdef> | |
134 | <authorsection/> | |
135 | </file> | |
136 | ||
137 | <!-- Layout definition for a group page --> | |
138 | <group> | |
139 | <detaileddescription title=""/> | |
140 | <groupgraph visible="$GROUP_GRAPHS"/> | |
141 | <memberdecl> | |
142 | <nestedgroups visible="yes" title=""/> | |
143 | <dirs visible="yes" title=""/> | |
144 | <files visible="yes" title=""/> | |
145 | <namespaces visible="yes" title=""/> | |
146 | <classes visible="yes" title=""/> | |
147 | <defines title=""/> | |
148 | <typedefs title=""/> | |
149 | <enums title=""/> | |
150 | <enumvalues title=""/> | |
151 | <functions title=""/> | |
152 | <variables title=""/> | |
153 | <signals title=""/> | |
154 | <publicslots title=""/> | |
155 | <protectedslots title=""/> | |
156 | <privateslots title=""/> | |
157 | <events title=""/> | |
158 | <properties title=""/> | |
159 | <friends title=""/> | |
160 | <membergroups visible="yes"/> | |
161 | </memberdecl> | |
162 | <memberdef> | |
163 | <pagedocs/> | |
164 | <inlineclasses title=""/> | |
165 | <defines title=""/> | |
166 | <typedefs title=""/> | |
167 | <enums title=""/> | |
168 | <enumvalues title=""/> | |
169 | <functions title=""/> | |
170 | <variables title=""/> | |
171 | <signals title=""/> | |
172 | <publicslots title=""/> | |
173 | <protectedslots title=""/> | |
174 | <privateslots title=""/> | |
175 | <events title=""/> | |
176 | <properties title=""/> | |
177 | <friends title=""/> | |
178 | </memberdef> | |
179 | <authorsection visible="yes"/> | |
180 | </group> | |
181 | ||
182 | <!-- Layout definition for a directory page --> | |
183 | <directory> | |
184 | <briefdescription visible="yes"/> | |
185 | <directorygraph visible="yes"/> | |
186 | <memberdecl> | |
187 | <dirs visible="yes"/> | |
188 | <files visible="yes"/> | |
189 | </memberdecl> | |
190 | <detaileddescription title=""/> | |
191 | </directory> | |
192 | </doxygenlayout> |
20 | 20 | -I${top_srcdir} |
21 | 21 | AM_CFLAGS = ${my_CFLAGS} |
22 | 22 | AM_LDFLAGS = |
23 | ||
24 | # code coverage | |
25 | ||
26 | AM_CFLAGS += ${CODE_COVERAGE_CFLAGS} | |
27 | AM_LDFLAGS += ${CODE_COVERAGE_LDFLAGS} | |
28 | CODE_COVERAGE_LCOV_OPTIONS = --no-external | |
29 | CODE_COVERAGE_IGNORE_PATTERN = "$(abs_top_builddir)/t/*" | |
30 | @CODE_COVERAGE_RULES@ | |
23 | 31 | |
24 | 32 | # |
25 | 33 | # libprotobuf-c |
183 | 191 | cd $(DESTDIR)$(includedir)/google/protobuf-c && rm -vf protobuf-c.h |
184 | 192 | cd $(DESTDIR)$(includedir)/google/protobuf-c && $(LN_S) ../../protobuf-c/protobuf-c.h protobuf-c.h |
185 | 193 | |
186 | if DOXYGEN_TARGET | |
187 | ||
188 | include aminclude_doxygen.am | |
189 | ||
190 | MOSTLYCLEANFILES = $(DX_CLEANFILES) | |
191 | ||
192 | endif # DOXYGEN_TARGET | |
194 | # | |
195 | # documentation | |
196 | # | |
197 | ||
198 | if HAVE_DOXYGEN | |
199 | stamp-html: $(DOXYGEN_INPUT_FILES) $(top_builddir)/Doxyfile $(top_srcdir)/DoxygenLayout.xml $(include_HEADERS) $(nobase_include_HEADERS) | |
200 | $(AM_V_GEN) $(DOXYGEN) | |
201 | @touch $@ | |
202 | html-local: stamp-html | |
203 | ||
204 | clean-local: | |
205 | rm -rf $(top_builddir)/html $(top_builddir)/stamp-html | |
206 | endif | |
207 | ||
208 | EXTRA_DIST += Doxyfile.in | |
209 | EXTRA_DIST += DoxygenLayout.xml |
114 | 114 | @BUILD_COMPILER_TRUE@ t/test-full.pb.cc t/test-full.pb.h \ |
115 | 115 | @BUILD_COMPILER_TRUE@ t/generated-code2/test-full-cxx-output.inc |
116 | 116 | |
117 | DIST_COMMON = $(srcdir)/aminclude_doxygen.am $(srcdir)/Makefile.in \ | |
118 | $(srcdir)/Makefile.am $(top_srcdir)/configure \ | |
119 | $(am__configure_deps) $(srcdir)/config.h.in \ | |
117 | subdir = . | |
118 | DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ | |
119 | $(top_srcdir)/configure $(am__configure_deps) \ | |
120 | $(srcdir)/config.h.in \ | |
120 | 121 | $(top_srcdir)/protobuf-c/libprotobuf-c.pc.in \ |
121 | $(top_srcdir)/build-aux/depcomp $(nobase_include_HEADERS) \ | |
122 | $(top_srcdir)/build-aux/test-driver ChangeLog TODO \ | |
123 | build-aux/compile build-aux/config.guess build-aux/config.sub \ | |
124 | build-aux/depcomp build-aux/install-sh build-aux/missing \ | |
125 | build-aux/ltmain.sh $(top_srcdir)/build-aux/compile \ | |
122 | $(srcdir)/Doxyfile.in $(top_srcdir)/build-aux/depcomp \ | |
123 | $(nobase_include_HEADERS) $(top_srcdir)/build-aux/test-driver \ | |
124 | ChangeLog TODO build-aux/compile build-aux/config.guess \ | |
125 | build-aux/config.sub build-aux/depcomp build-aux/install-sh \ | |
126 | build-aux/missing build-aux/ltmain.sh \ | |
127 | $(top_srcdir)/build-aux/compile \ | |
126 | 128 | $(top_srcdir)/build-aux/config.guess \ |
127 | 129 | $(top_srcdir)/build-aux/config.sub \ |
128 | 130 | $(top_srcdir)/build-aux/install-sh \ |
129 | 131 | $(top_srcdir)/build-aux/ltmain.sh \ |
130 | 132 | $(top_srcdir)/build-aux/missing |
131 | subdir = . | |
132 | 133 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
133 | am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_doxygen.m4 \ | |
134 | am__aclocal_m4_deps = $(top_srcdir)/m4/code_coverage.m4 \ | |
134 | 135 | $(top_srcdir)/m4/ld-version-script.m4 \ |
135 | 136 | $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ |
136 | 137 | $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ |
142 | 143 | configure.lineno config.status.lineno |
143 | 144 | mkinstalldirs = $(install_sh) -d |
144 | 145 | CONFIG_HEADER = config.h |
145 | CONFIG_CLEAN_FILES = protobuf-c/libprotobuf-c.pc | |
146 | CONFIG_CLEAN_FILES = protobuf-c/libprotobuf-c.pc Doxyfile | |
146 | 147 | CONFIG_CLEAN_VPATH_FILES = |
147 | 148 | am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; |
148 | 149 | am__vpath_adj = case $$p in \ |
561 | 562 | CC = @CC@ |
562 | 563 | CCDEPMODE = @CCDEPMODE@ |
563 | 564 | CFLAGS = @CFLAGS@ |
565 | CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ | |
566 | CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ | |
567 | CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@ | |
564 | 568 | CPP = @CPP@ |
565 | 569 | CPPFLAGS = @CPPFLAGS@ |
566 | 570 | CXX = @CXX@ |
571 | 575 | DEFS = @DEFS@ |
572 | 576 | DEPDIR = @DEPDIR@ |
573 | 577 | DLLTOOL = @DLLTOOL@ |
574 | DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ | |
578 | DOXYGEN = @DOXYGEN@ | |
579 | DOXYGEN_INPUT = @DOXYGEN_INPUT@ | |
575 | 580 | DSYMUTIL = @DSYMUTIL@ |
576 | 581 | DUMPBIN = @DUMPBIN@ |
577 | DX_CONFIG = @DX_CONFIG@ | |
578 | DX_DOCDIR = @DX_DOCDIR@ | |
579 | DX_DOT = @DX_DOT@ | |
580 | DX_DOXYGEN = @DX_DOXYGEN@ | |
581 | DX_DVIPS = @DX_DVIPS@ | |
582 | DX_EGREP = @DX_EGREP@ | |
583 | DX_ENV = @DX_ENV@ | |
584 | DX_FLAG_chi = @DX_FLAG_chi@ | |
585 | DX_FLAG_chm = @DX_FLAG_chm@ | |
586 | DX_FLAG_doc = @DX_FLAG_doc@ | |
587 | DX_FLAG_dot = @DX_FLAG_dot@ | |
588 | DX_FLAG_html = @DX_FLAG_html@ | |
589 | DX_FLAG_man = @DX_FLAG_man@ | |
590 | DX_FLAG_pdf = @DX_FLAG_pdf@ | |
591 | DX_FLAG_ps = @DX_FLAG_ps@ | |
592 | DX_FLAG_rtf = @DX_FLAG_rtf@ | |
593 | DX_FLAG_xml = @DX_FLAG_xml@ | |
594 | DX_HHC = @DX_HHC@ | |
595 | DX_LATEX = @DX_LATEX@ | |
596 | DX_MAKEINDEX = @DX_MAKEINDEX@ | |
597 | DX_PDFLATEX = @DX_PDFLATEX@ | |
598 | DX_PERL = @DX_PERL@ | |
599 | DX_PROJECT = @DX_PROJECT@ | |
600 | 582 | ECHO_C = @ECHO_C@ |
601 | 583 | ECHO_N = @ECHO_N@ |
602 | 584 | ECHO_T = @ECHO_T@ |
603 | 585 | EGREP = @EGREP@ |
604 | 586 | EXEEXT = @EXEEXT@ |
605 | 587 | FGREP = @FGREP@ |
588 | GENHTML = @GENHTML@ | |
606 | 589 | GREP = @GREP@ |
607 | 590 | INSTALL = @INSTALL@ |
608 | 591 | INSTALL_DATA = @INSTALL_DATA@ |
609 | 592 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
610 | 593 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
611 | 594 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
595 | LCOV = @LCOV@ | |
612 | 596 | LD = @LD@ |
613 | 597 | LDFLAGS = @LDFLAGS@ |
614 | 598 | LIBOBJS = @LIBOBJS@ |
628 | 612 | OTOOL64 = @OTOOL64@ |
629 | 613 | PACKAGE = @PACKAGE@ |
630 | 614 | PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ |
615 | PACKAGE_DESCRIPTION = @PACKAGE_DESCRIPTION@ | |
631 | 616 | PACKAGE_NAME = @PACKAGE_NAME@ |
632 | 617 | PACKAGE_STRING = @PACKAGE_STRING@ |
633 | 618 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ |
713 | 698 | DISTCLEANFILES = |
714 | 699 | EXTRA_DIST = LICENSE README.md protobuf-c/libprotobuf-c.sym \ |
715 | 700 | protobuf-c/libprotobuf-c.pc.in t/test.proto t/test-full.proto \ |
716 | t/generated-code2/common-test-arrays.h | |
701 | t/generated-code2/common-test-arrays.h Doxyfile.in \ | |
702 | DoxygenLayout.xml | |
717 | 703 | ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} |
718 | 704 | AM_CPPFLAGS = \ |
719 | 705 | -include $(top_builddir)/config.h \ |
721 | 707 | -I${top_builddir} \ |
722 | 708 | -I${top_srcdir} |
723 | 709 | |
724 | AM_CFLAGS = ${my_CFLAGS} | |
725 | AM_LDFLAGS = | |
710 | ||
711 | # code coverage | |
712 | AM_CFLAGS = ${my_CFLAGS} ${CODE_COVERAGE_CFLAGS} | |
713 | AM_LDFLAGS = ${CODE_COVERAGE_LDFLAGS} | |
714 | CODE_COVERAGE_LCOV_OPTIONS = --no-external | |
715 | CODE_COVERAGE_IGNORE_PATTERN = "$(abs_top_builddir)/t/*" | |
726 | 716 | |
727 | 717 | # |
728 | 718 | # libprotobuf-c |
810 | 800 | @BUILD_COMPILER_TRUE@t_version_version_LDADD = \ |
811 | 801 | @BUILD_COMPILER_TRUE@ protobuf-c/libprotobuf-c.la |
812 | 802 | |
813 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html | |
814 | @DOXYGEN_TARGET_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm | |
815 | @DOXYGEN_TARGET_TRUE@@DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi | |
816 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man | |
817 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf | |
818 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml | |
819 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps | |
820 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps | |
821 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf | |
822 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf | |
823 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex | |
824 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@DX_CLEANFILES = \ | |
825 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \ | |
826 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ -r \ | |
827 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \ | |
828 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \ | |
829 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \ | |
830 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \ | |
831 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \ | |
832 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \ | |
833 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \ | |
834 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \ | |
835 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX) | |
836 | ||
837 | @DOXYGEN_TARGET_TRUE@MOSTLYCLEANFILES = $(DX_CLEANFILES) | |
838 | 803 | all: $(BUILT_SOURCES) config.h |
839 | 804 | $(MAKE) $(AM_MAKEFLAGS) all-am |
840 | 805 | |
842 | 807 | .SUFFIXES: .c .cc .lo .log .o .obj .test .test$(EXEEXT) .trs |
843 | 808 | am--refresh: Makefile |
844 | 809 | @: |
845 | $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/aminclude_doxygen.am $(am__configure_deps) | |
810 | $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |
846 | 811 | @for dep in $?; do \ |
847 | 812 | case '$(am__configure_deps)' in \ |
848 | 813 | *$$dep*) \ |
865 | 830 | echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ |
866 | 831 | cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ |
867 | 832 | esac; |
868 | $(srcdir)/aminclude_doxygen.am: | |
869 | 833 | |
870 | 834 | $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) |
871 | 835 | $(SHELL) ./config.status --recheck |
892 | 856 | -rm -f config.h stamp-h1 |
893 | 857 | protobuf-c/libprotobuf-c.pc: $(top_builddir)/config.status $(top_srcdir)/protobuf-c/libprotobuf-c.pc.in |
894 | 858 | cd $(top_builddir) && $(SHELL) ./config.status $@ |
859 | @HAVE_DOXYGEN_TRUE@Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in | |
860 | @HAVE_DOXYGEN_TRUE@ cd $(top_builddir) && $(SHELL) ./config.status $@ | |
895 | 861 | |
896 | 862 | install-libLTLIBRARIES: $(lib_LTLIBRARIES) |
897 | 863 | @$(NORMAL_INSTALL) |
1903 | 1869 | "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ |
1904 | 1870 | fi |
1905 | 1871 | mostlyclean-generic: |
1906 | -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) | |
1907 | 1872 | -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) |
1908 | 1873 | -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) |
1909 | 1874 | -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) |
1932 | 1897 | @echo "This command is intended for maintainers to use" |
1933 | 1898 | @echo "it deletes files that may require special tools to rebuild." |
1934 | 1899 | -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) |
1900 | @HAVE_DOXYGEN_FALSE@html-local: | |
1901 | @HAVE_DOXYGEN_FALSE@clean-local: | |
1935 | 1902 | clean: clean-am |
1936 | 1903 | |
1937 | 1904 | clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ |
1938 | clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ | |
1939 | mostlyclean-am | |
1905 | clean-libLTLIBRARIES clean-libtool clean-local \ | |
1906 | clean-noinstPROGRAMS mostlyclean-am | |
1940 | 1907 | |
1941 | 1908 | distclean: distclean-am |
1942 | 1909 | -rm -f $(am__CONFIG_DISTCLEAN_FILES) |
1951 | 1918 | |
1952 | 1919 | html: html-am |
1953 | 1920 | |
1954 | html-am: | |
1921 | html-am: html-local | |
1955 | 1922 | |
1956 | 1923 | info: info-am |
1957 | 1924 | |
2015 | 1982 | .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \ |
2016 | 1983 | check-am clean clean-binPROGRAMS clean-checkPROGRAMS \ |
2017 | 1984 | clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ |
2018 | clean-noinstPROGRAMS cscope cscopelist-am ctags ctags-am dist \ | |
2019 | dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ | |
2020 | dist-tarZ dist-xz dist-zip distcheck distclean \ | |
2021 | distclean-compile distclean-generic distclean-hdr \ | |
1985 | clean-local clean-noinstPROGRAMS cscope cscopelist-am ctags \ | |
1986 | ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ | |
1987 | dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ | |
1988 | distclean distclean-compile distclean-generic distclean-hdr \ | |
2022 | 1989 | distclean-libtool distclean-tags distcleancheck distdir \ |
2023 | distuninstallcheck dvi dvi-am html html-am info info-am \ | |
2024 | install install-am install-binPROGRAMS install-data \ | |
1990 | distuninstallcheck dvi dvi-am html html-am html-local info \ | |
1991 | info-am install install-am install-binPROGRAMS install-data \ | |
2025 | 1992 | install-data-am install-data-hook install-dvi install-dvi-am \ |
2026 | 1993 | install-exec install-exec-am install-html install-html-am \ |
2027 | 1994 | install-info install-info-am install-libLTLIBRARIES \ |
2034 | 2001 | uninstall-am uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ |
2035 | 2002 | uninstall-nobase_includeHEADERS uninstall-pkgconfigDATA |
2036 | 2003 | |
2004 | @CODE_COVERAGE_RULES@ | |
2037 | 2005 | @BUILD_COMPILER_TRUE@t/generated-code2/cxx-generate-packed-data.$(OBJEXT): t/test-full.pb.h |
2038 | 2006 | |
2039 | 2007 | @BUILD_COMPILER_TRUE@t/test.pb-c.c t/test.pb-c.h: $(top_builddir)/protoc-c/protoc-c$(EXEEXT) $(top_srcdir)/t/test.proto |
2056 | 2024 | cd $(DESTDIR)$(includedir)/google/protobuf-c && rm -vf protobuf-c.h |
2057 | 2025 | cd $(DESTDIR)$(includedir)/google/protobuf-c && $(LN_S) ../../protobuf-c/protobuf-c.h protobuf-c.h |
2058 | 2026 | |
2059 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps | |
2060 | ||
2061 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag | |
2062 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \ | |
2063 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
2064 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ | |
2065 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \ | |
2066 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ | |
2067 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \ | |
2068 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
2069 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \ | |
2070 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \ | |
2071 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \ | |
2072 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \ | |
2073 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \ | |
2074 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi | |
2075 | ||
2076 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf | |
2077 | ||
2078 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag | |
2079 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \ | |
2080 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
2081 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ | |
2082 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \ | |
2083 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ | |
2084 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \ | |
2085 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
2086 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \ | |
2087 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \ | |
2088 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \ | |
2089 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \ | |
2090 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \ | |
2091 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf | |
2092 | ||
2093 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
2094 | ||
2095 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
2096 | ||
2097 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag | |
2098 | ||
2099 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
2100 | ||
2101 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) | |
2102 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ rm -rf @DX_DOCDIR@ | |
2103 | @DOXYGEN_TARGET_TRUE@@DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) | |
2027 | # | |
2028 | # documentation | |
2029 | # | |
2030 | ||
2031 | @HAVE_DOXYGEN_TRUE@stamp-html: $(DOXYGEN_INPUT_FILES) $(top_builddir)/Doxyfile $(top_srcdir)/DoxygenLayout.xml $(include_HEADERS) $(nobase_include_HEADERS) | |
2032 | @HAVE_DOXYGEN_TRUE@ $(AM_V_GEN) $(DOXYGEN) | |
2033 | @HAVE_DOXYGEN_TRUE@ @touch $@ | |
2034 | @HAVE_DOXYGEN_TRUE@html-local: stamp-html | |
2035 | ||
2036 | @HAVE_DOXYGEN_TRUE@clean-local: | |
2037 | @HAVE_DOXYGEN_TRUE@ rm -rf $(top_builddir)/html $(top_builddir)/stamp-html | |
2104 | 2038 | |
2105 | 2039 | # Tell versions [3.59,3.63) of GNU make to not export all variables. |
2106 | 2040 | # Otherwise a system limit (for SysV at least) may be exceeded. |
0 | [![Build Status](https://travis-ci.org/protobuf-c/protobuf-c.png?branch=master)](https://travis-ci.org/protobuf-c/protobuf-c) | |
0 | [![Build Status](https://travis-ci.org/protobuf-c/protobuf-c.png?branch=master)](https://travis-ci.org/protobuf-c/protobuf-c) [![Coverage Status](https://coveralls.io/repos/protobuf-c/protobuf-c/badge.png)](https://coveralls.io/r/protobuf-c/protobuf-c) | |
1 | 1 | |
2 | 2 | ## Overview |
3 | 3 | |
4 | This is `protobuf-c`, a C implementation of [Google Protocol Buffers](https://developers.google.com/protocol-buffers/). It includes `libprotobuf-c`, a pure C library that implements protobuf encoding and decoding, and `protoc-c`, a code generator that converts Protocol Buffer `.proto` files to C descriptor code, based on the original `protoc`. `protobuf-c` formerly included an RPC implementation; that code has been split out into the [protobuf-c-rpc](https://github.com/protobuf-c/protobuf-c-rpc) project. | |
4 | This is `protobuf-c`, a C implementation of the [Google Protocol Buffers](https://developers.google.com/protocol-buffers/) data serialization format. It includes `libprotobuf-c`, a pure C library that implements protobuf encoding and decoding, and `protoc-c`, a code generator that converts Protocol Buffer `.proto` files to C descriptor code, based on the original `protoc`. `protobuf-c` formerly included an RPC implementation; that code has been split out into the [protobuf-c-rpc](https://github.com/protobuf-c/protobuf-c-rpc) project. | |
5 | 5 | |
6 | `protobuf-c` was originally maintained by Dave Benson through version 0.15 but is now being maintained by a new team. Thanks, Dave! | |
6 | `protobuf-c` was originally written by Dave Benson and maintained by him through version 0.15 but is now being maintained by a new team. Thanks, Dave! | |
7 | ||
8 | ## Mailing list | |
9 | ||
10 | `protobuf-c`'s mailing list is hosted on a [Google Groups forum](https://groups.google.com/forum/#!forum/protobuf-c). Subscribe by sending an email to [protobuf-c+subscribe@googlegroups.com](mailto:protobuf-c+subscribe@googlegroups.com). | |
7 | 11 | |
8 | 12 | ## Building |
9 | 13 | |
10 | `protobuf-c` requires a C compiler, a C++ compiler, [Google Protocol Buffers](https://developers.google.com/protocol-buffers/), and `pkg-config` to be installed. | |
14 | `protobuf-c` requires a C compiler, a C++ compiler, [protobuf](https://code.google.com/p/protobuf/), and `pkg-config` to be installed. | |
11 | 15 | |
12 | 16 | ./configure && make && make install |
13 | 17 | |
17 | 21 | |
18 | 22 | ## Synopsis |
19 | 23 | |
20 | Include the `protobuf-c` header file: | |
24 | Use the `protoc-c` command to generate `.pb-c.c` and `.pb-c.h` output files from your `.proto` input file. | |
21 | 25 | |
22 | #include <protobuf-c/protobuf-c.h> | |
26 | protoc-c --c_out=. example.proto | |
23 | 27 | |
24 | Link against the `protobuf-c` library. | |
28 | Include the `.pb-c.h` file from your C source code. | |
25 | 29 | |
26 | -lprotobuf-c | |
30 | #include "example.pb-c.h" | |
27 | 31 | |
28 | `libprotobuf-c` includes a `pkg-config` file. It is recommended to use the `pkg-config` system in order to determine the complete set of compiler and linker flags for building applications that utilize `libprotobuf-c`. If using `pkg-config` with `autoconf`, the `PKG_CHECK_MODULES` macro can be used to detect the presence of `libprotobuf-c`: | |
32 | Compile your C source code together with the `.pb-c.c` file. Add the output of the following command to your compile flags. | |
29 | 33 | |
30 | PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c]) | |
34 | pkg-config --cflags 'libprotobuf-c >= 1.0.0' | |
31 | 35 | |
32 | This will place compiler flags in the `PROTOBUF_C_CFLAGS` variable and linker flags in the `PROTOBUF_C_LDFLAGS` variable. | |
36 | Link against the `libprotobuf-c` support library. Add the output of the following command to your link flags. | |
33 | 37 | |
34 | Note that the `protobuf-c` header file was installed as `google/protobuf-c/protobuf-c.h` in previous versions. A compatibility symlink has been left in place to avoid breaking existing code. | |
38 | pkg-config --libs 'libprotobuf-c >= 1.0.0' | |
39 | ||
40 | If using autotools, the `PKG_CHECK_MODULES` macro can be used to detect the presence of `libprotobuf-c`. Add the following line to your `configure.ac` file: | |
41 | ||
42 | PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c >= 1.0.0]) | |
43 | ||
44 | This will place compiler flags in the `PROTOBUF_C_CFLAGS` variable and linker flags in the `PROTOBUF_C_LDFLAGS` variable. Read [more information here](https://www.flameeyes.eu/autotools-mythbuster/pkgconfig/pkg_check_modules.html) about the `PKG_CHECK_MODULES` macro. | |
35 | 45 | |
36 | 46 | ## Versioning |
37 | 47 |
18 | 18 | - message unpack alloc failures when allocating unknown field buffers |
19 | 19 | - packed message corruption. |
20 | 20 | - meta-todo: get a list of all the unpack errors together to check off |
21 | - run gcov | |
22 | 21 | |
23 | 22 | --------------------- |
24 | 23 | --- DOCUMENTATION --- |
106 | 106 | AC_PREREQ([2.50])dnl |
107 | 107 | # expand $ac_aux_dir to an absolute path |
108 | 108 | am_aux_dir=`cd $ac_aux_dir && pwd` |
109 | ]) | |
110 | ||
111 | # AM_COND_IF -*- Autoconf -*- | |
112 | ||
113 | # Copyright (C) 2008-2013 Free Software Foundation, Inc. | |
114 | # | |
115 | # This file is free software; the Free Software Foundation | |
116 | # gives unlimited permission to copy and/or distribute it, | |
117 | # with or without modifications, as long as this notice is preserved. | |
118 | ||
119 | # _AM_COND_IF | |
120 | # _AM_COND_ELSE | |
121 | # _AM_COND_ENDIF | |
122 | # -------------- | |
123 | # These macros are only used for tracing. | |
124 | m4_define([_AM_COND_IF]) | |
125 | m4_define([_AM_COND_ELSE]) | |
126 | m4_define([_AM_COND_ENDIF]) | |
127 | ||
128 | # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) | |
129 | # --------------------------------------- | |
130 | # If the shell condition COND is true, execute IF-TRUE, otherwise execute | |
131 | # IF-FALSE. Allow automake to learn about conditional instantiating macros | |
132 | # (the AC_CONFIG_FOOS). | |
133 | AC_DEFUN([AM_COND_IF], | |
134 | [m4_ifndef([_AM_COND_VALUE_$1], | |
135 | [m4_fatal([$0: no such condition "$1"])])dnl | |
136 | _AM_COND_IF([$1])dnl | |
137 | if test -z "$$1_TRUE"; then : | |
138 | m4_n([$2])[]dnl | |
139 | m4_ifval([$3], | |
140 | [_AM_COND_ELSE([$1])dnl | |
141 | else | |
142 | $3 | |
143 | ])dnl | |
144 | _AM_COND_ENDIF([$1])dnl | |
145 | fi[]dnl | |
109 | 146 | ]) |
110 | 147 | |
111 | 148 | # AM_CONDITIONAL -*- Autoconf -*- |
1147 | 1184 | AC_SUBST([am__untar]) |
1148 | 1185 | ]) # _AM_PROG_TAR |
1149 | 1186 | |
1150 | m4_include([m4/ax_prog_doxygen.m4]) | |
1187 | m4_include([m4/code_coverage.m4]) | |
1151 | 1188 | m4_include([m4/ld-version-script.m4]) |
1152 | 1189 | m4_include([m4/libtool.m4]) |
1153 | 1190 | m4_include([m4/ltoptions.m4]) |
0 | ## --------------------------------- ## | |
1 | ## Format-independent Doxygen rules. ## | |
2 | ## --------------------------------- ## | |
3 | ||
4 | if DX_COND_doc | |
5 | ||
6 | ## ------------------------------- ## | |
7 | ## Rules specific for HTML output. ## | |
8 | ## ------------------------------- ## | |
9 | ||
10 | if DX_COND_html | |
11 | ||
12 | DX_CLEAN_HTML = @DX_DOCDIR@/html | |
13 | ||
14 | endif DX_COND_html | |
15 | ||
16 | ## ------------------------------ ## | |
17 | ## Rules specific for CHM output. ## | |
18 | ## ------------------------------ ## | |
19 | ||
20 | if DX_COND_chm | |
21 | ||
22 | DX_CLEAN_CHM = @DX_DOCDIR@/chm | |
23 | ||
24 | if DX_COND_chi | |
25 | ||
26 | DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi | |
27 | ||
28 | endif DX_COND_chi | |
29 | ||
30 | endif DX_COND_chm | |
31 | ||
32 | ## ------------------------------ ## | |
33 | ## Rules specific for MAN output. ## | |
34 | ## ------------------------------ ## | |
35 | ||
36 | if DX_COND_man | |
37 | ||
38 | DX_CLEAN_MAN = @DX_DOCDIR@/man | |
39 | ||
40 | endif DX_COND_man | |
41 | ||
42 | ## ------------------------------ ## | |
43 | ## Rules specific for RTF output. ## | |
44 | ## ------------------------------ ## | |
45 | ||
46 | if DX_COND_rtf | |
47 | ||
48 | DX_CLEAN_RTF = @DX_DOCDIR@/rtf | |
49 | ||
50 | endif DX_COND_rtf | |
51 | ||
52 | ## ------------------------------ ## | |
53 | ## Rules specific for XML output. ## | |
54 | ## ------------------------------ ## | |
55 | ||
56 | if DX_COND_xml | |
57 | ||
58 | DX_CLEAN_XML = @DX_DOCDIR@/xml | |
59 | ||
60 | endif DX_COND_xml | |
61 | ||
62 | ## ----------------------------- ## | |
63 | ## Rules specific for PS output. ## | |
64 | ## ----------------------------- ## | |
65 | ||
66 | if DX_COND_ps | |
67 | ||
68 | DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps | |
69 | ||
70 | DX_PS_GOAL = doxygen-ps | |
71 | ||
72 | doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps | |
73 | ||
74 | @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag | |
75 | cd @DX_DOCDIR@/latex; \ | |
76 | rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
77 | $(DX_LATEX) refman.tex; \ | |
78 | $(MAKEINDEX_PATH) refman.idx; \ | |
79 | $(DX_LATEX) refman.tex; \ | |
80 | countdown=5; \ | |
81 | while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
82 | refman.log > /dev/null 2>&1 \ | |
83 | && test $$countdown -gt 0; do \ | |
84 | $(DX_LATEX) refman.tex; \ | |
85 | countdown=`expr $$countdown - 1`; \ | |
86 | done; \ | |
87 | $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi | |
88 | ||
89 | endif DX_COND_ps | |
90 | ||
91 | ## ------------------------------ ## | |
92 | ## Rules specific for PDF output. ## | |
93 | ## ------------------------------ ## | |
94 | ||
95 | if DX_COND_pdf | |
96 | ||
97 | DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf | |
98 | ||
99 | DX_PDF_GOAL = doxygen-pdf | |
100 | ||
101 | doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf | |
102 | ||
103 | @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag | |
104 | cd @DX_DOCDIR@/latex; \ | |
105 | rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
106 | $(DX_PDFLATEX) refman.tex; \ | |
107 | $(DX_MAKEINDEX) refman.idx; \ | |
108 | $(DX_PDFLATEX) refman.tex; \ | |
109 | countdown=5; \ | |
110 | while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
111 | refman.log > /dev/null 2>&1 \ | |
112 | && test $$countdown -gt 0; do \ | |
113 | $(DX_PDFLATEX) refman.tex; \ | |
114 | countdown=`expr $$countdown - 1`; \ | |
115 | done; \ | |
116 | mv refman.pdf ../@PACKAGE@.pdf | |
117 | ||
118 | endif DX_COND_pdf | |
119 | ||
120 | ## ------------------------------------------------- ## | |
121 | ## Rules specific for LaTeX (shared for PS and PDF). ## | |
122 | ## ------------------------------------------------- ## | |
123 | ||
124 | if DX_COND_latex | |
125 | ||
126 | DX_CLEAN_LATEX = @DX_DOCDIR@/latex | |
127 | ||
128 | endif DX_COND_latex | |
129 | ||
130 | .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
131 | ||
132 | .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
133 | ||
134 | doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag | |
135 | ||
136 | doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
137 | ||
138 | @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) | |
139 | rm -rf @DX_DOCDIR@ | |
140 | $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) | |
141 | ||
142 | DX_CLEANFILES = \ | |
143 | @DX_DOCDIR@/@PACKAGE@.tag \ | |
144 | -r \ | |
145 | $(DX_CLEAN_HTML) \ | |
146 | $(DX_CLEAN_CHM) \ | |
147 | $(DX_CLEAN_CHI) \ | |
148 | $(DX_CLEAN_MAN) \ | |
149 | $(DX_CLEAN_RTF) \ | |
150 | $(DX_CLEAN_XML) \ | |
151 | $(DX_CLEAN_PS) \ | |
152 | $(DX_CLEAN_PDF) \ | |
153 | $(DX_CLEAN_LATEX) | |
154 | ||
155 | endif DX_COND_doc |
0 | 0 | #! /bin/sh |
1 | 1 | # Attempt to guess a canonical system name. |
2 | # Copyright 1992-2013 Free Software Foundation, Inc. | |
3 | ||
4 | timestamp='2013-06-10' | |
2 | # Copyright 1992-2014 Free Software Foundation, Inc. | |
3 | ||
4 | timestamp='2014-03-23' | |
5 | 5 | |
6 | 6 | # This file is free software; you can redistribute it and/or modify it |
7 | 7 | # under the terms of the GNU General Public License as published by |
49 | 49 | GNU config.guess ($timestamp) |
50 | 50 | |
51 | 51 | Originally written by Per Bothner. |
52 | Copyright 1992-2013 Free Software Foundation, Inc. | |
52 | Copyright 1992-2014 Free Software Foundation, Inc. | |
53 | 53 | |
54 | 54 | This is free software; see the source for copying conditions. There is NO |
55 | 55 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." |
148 | 148 | LIBC=gnu |
149 | 149 | #endif |
150 | 150 | EOF |
151 | eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` | |
151 | eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` | |
152 | 152 | ;; |
153 | 153 | esac |
154 | 154 | |
825 | 825 | *:MINGW*:*) |
826 | 826 | echo ${UNAME_MACHINE}-pc-mingw32 |
827 | 827 | exit ;; |
828 | i*:MSYS*:*) | |
828 | *:MSYS*:*) | |
829 | 829 | echo ${UNAME_MACHINE}-pc-msys |
830 | 830 | exit ;; |
831 | 831 | i*:windows32*:*) |
968 | 968 | eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` |
969 | 969 | test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } |
970 | 970 | ;; |
971 | or1k:Linux:*:*) | |
972 | echo ${UNAME_MACHINE}-unknown-linux-${LIBC} | |
973 | exit ;; | |
974 | or32:Linux:*:*) | |
971 | openrisc*:Linux:*:*) | |
972 | echo or1k-unknown-linux-${LIBC} | |
973 | exit ;; | |
974 | or32:Linux:*:* | or1k*:Linux:*:*) | |
975 | 975 | echo ${UNAME_MACHINE}-unknown-linux-${LIBC} |
976 | 976 | exit ;; |
977 | 977 | padre:Linux:*:*) |
1259 | 1259 | if test "$UNAME_PROCESSOR" = unknown ; then |
1260 | 1260 | UNAME_PROCESSOR=powerpc |
1261 | 1261 | fi |
1262 | if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then | |
1263 | if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ | |
1264 | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ | |
1265 | grep IS_64BIT_ARCH >/dev/null | |
1266 | then | |
1267 | case $UNAME_PROCESSOR in | |
1268 | i386) UNAME_PROCESSOR=x86_64 ;; | |
1269 | powerpc) UNAME_PROCESSOR=powerpc64 ;; | |
1270 | esac | |
1262 | if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then | |
1263 | if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then | |
1264 | if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ | |
1265 | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ | |
1266 | grep IS_64BIT_ARCH >/dev/null | |
1267 | then | |
1268 | case $UNAME_PROCESSOR in | |
1269 | i386) UNAME_PROCESSOR=x86_64 ;; | |
1270 | powerpc) UNAME_PROCESSOR=powerpc64 ;; | |
1271 | esac | |
1272 | fi | |
1271 | 1273 | fi |
1274 | elif test "$UNAME_PROCESSOR" = i386 ; then | |
1275 | # Avoid executing cc on OS X 10.9, as it ships with a stub | |
1276 | # that puts up a graphical alert prompting to install | |
1277 | # developer tools. Any system running Mac OS X 10.7 or | |
1278 | # later (Darwin 11 and later) is required to have a 64-bit | |
1279 | # processor. This is not true of the ARM version of Darwin | |
1280 | # that Apple uses in portable devices. | |
1281 | UNAME_PROCESSOR=x86_64 | |
1272 | 1282 | fi |
1273 | 1283 | echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} |
1274 | 1284 | exit ;; |
1360 | 1370 | exit ;; |
1361 | 1371 | esac |
1362 | 1372 | |
1363 | eval $set_cc_for_build | |
1364 | cat >$dummy.c <<EOF | |
1365 | #ifdef _SEQUENT_ | |
1366 | # include <sys/types.h> | |
1367 | # include <sys/utsname.h> | |
1368 | #endif | |
1369 | main () | |
1370 | { | |
1371 | #if defined (sony) | |
1372 | #if defined (MIPSEB) | |
1373 | /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, | |
1374 | I don't know.... */ | |
1375 | printf ("mips-sony-bsd\n"); exit (0); | |
1376 | #else | |
1377 | #include <sys/param.h> | |
1378 | printf ("m68k-sony-newsos%s\n", | |
1379 | #ifdef NEWSOS4 | |
1380 | "4" | |
1381 | #else | |
1382 | "" | |
1383 | #endif | |
1384 | ); exit (0); | |
1385 | #endif | |
1386 | #endif | |
1387 | ||
1388 | #if defined (__arm) && defined (__acorn) && defined (__unix) | |
1389 | printf ("arm-acorn-riscix\n"); exit (0); | |
1390 | #endif | |
1391 | ||
1392 | #if defined (hp300) && !defined (hpux) | |
1393 | printf ("m68k-hp-bsd\n"); exit (0); | |
1394 | #endif | |
1395 | ||
1396 | #if defined (NeXT) | |
1397 | #if !defined (__ARCHITECTURE__) | |
1398 | #define __ARCHITECTURE__ "m68k" | |
1399 | #endif | |
1400 | int version; | |
1401 | version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; | |
1402 | if (version < 4) | |
1403 | printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); | |
1404 | else | |
1405 | printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); | |
1406 | exit (0); | |
1407 | #endif | |
1408 | ||
1409 | #if defined (MULTIMAX) || defined (n16) | |
1410 | #if defined (UMAXV) | |
1411 | printf ("ns32k-encore-sysv\n"); exit (0); | |
1412 | #else | |
1413 | #if defined (CMU) | |
1414 | printf ("ns32k-encore-mach\n"); exit (0); | |
1415 | #else | |
1416 | printf ("ns32k-encore-bsd\n"); exit (0); | |
1417 | #endif | |
1418 | #endif | |
1419 | #endif | |
1420 | ||
1421 | #if defined (__386BSD__) | |
1422 | printf ("i386-pc-bsd\n"); exit (0); | |
1423 | #endif | |
1424 | ||
1425 | #if defined (sequent) | |
1426 | #if defined (i386) | |
1427 | printf ("i386-sequent-dynix\n"); exit (0); | |
1428 | #endif | |
1429 | #if defined (ns32000) | |
1430 | printf ("ns32k-sequent-dynix\n"); exit (0); | |
1431 | #endif | |
1432 | #endif | |
1433 | ||
1434 | #if defined (_SEQUENT_) | |
1435 | struct utsname un; | |
1436 | ||
1437 | uname(&un); | |
1438 | ||
1439 | if (strncmp(un.version, "V2", 2) == 0) { | |
1440 | printf ("i386-sequent-ptx2\n"); exit (0); | |
1441 | } | |
1442 | if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ | |
1443 | printf ("i386-sequent-ptx1\n"); exit (0); | |
1444 | } | |
1445 | printf ("i386-sequent-ptx\n"); exit (0); | |
1446 | ||
1447 | #endif | |
1448 | ||
1449 | #if defined (vax) | |
1450 | # if !defined (ultrix) | |
1451 | # include <sys/param.h> | |
1452 | # if defined (BSD) | |
1453 | # if BSD == 43 | |
1454 | printf ("vax-dec-bsd4.3\n"); exit (0); | |
1455 | # else | |
1456 | # if BSD == 199006 | |
1457 | printf ("vax-dec-bsd4.3reno\n"); exit (0); | |
1458 | # else | |
1459 | printf ("vax-dec-bsd\n"); exit (0); | |
1460 | # endif | |
1461 | # endif | |
1462 | # else | |
1463 | printf ("vax-dec-bsd\n"); exit (0); | |
1464 | # endif | |
1465 | # else | |
1466 | printf ("vax-dec-ultrix\n"); exit (0); | |
1467 | # endif | |
1468 | #endif | |
1469 | ||
1470 | #if defined (alliant) && defined (i860) | |
1471 | printf ("i860-alliant-bsd\n"); exit (0); | |
1472 | #endif | |
1473 | ||
1474 | exit (1); | |
1475 | } | |
1476 | EOF | |
1477 | ||
1478 | $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && | |
1479 | { echo "$SYSTEM_NAME"; exit; } | |
1480 | ||
1481 | # Apollos put the system type in the environment. | |
1482 | ||
1483 | test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } | |
1484 | ||
1485 | # Convex versions that predate uname can use getsysinfo(1) | |
1486 | ||
1487 | if [ -x /usr/convex/getsysinfo ] | |
1488 | then | |
1489 | case `getsysinfo -f cpu_type` in | |
1490 | c1*) | |
1491 | echo c1-convex-bsd | |
1492 | exit ;; | |
1493 | c2*) | |
1494 | if getsysinfo -f scalar_acc | |
1495 | then echo c32-convex-bsd | |
1496 | else echo c2-convex-bsd | |
1497 | fi | |
1498 | exit ;; | |
1499 | c34*) | |
1500 | echo c34-convex-bsd | |
1501 | exit ;; | |
1502 | c38*) | |
1503 | echo c38-convex-bsd | |
1504 | exit ;; | |
1505 | c4*) | |
1506 | echo c4-convex-bsd | |
1507 | exit ;; | |
1508 | esac | |
1509 | fi | |
1510 | ||
1511 | 1373 | cat >&2 <<EOF |
1512 | 1374 | $0: unable to guess system type |
1513 | 1375 |
0 | 0 | #! /bin/sh |
1 | 1 | # Configuration validation subroutine script. |
2 | # Copyright 1992-2013 Free Software Foundation, Inc. | |
3 | ||
4 | timestamp='2013-08-10' | |
2 | # Copyright 1992-2014 Free Software Foundation, Inc. | |
3 | ||
4 | timestamp='2014-05-01' | |
5 | 5 | |
6 | 6 | # This file is free software; you can redistribute it and/or modify it |
7 | 7 | # under the terms of the GNU General Public License as published by |
67 | 67 | version="\ |
68 | 68 | GNU config.sub ($timestamp) |
69 | 69 | |
70 | Copyright 1992-2013 Free Software Foundation, Inc. | |
70 | Copyright 1992-2014 Free Software Foundation, Inc. | |
71 | 71 | |
72 | 72 | This is free software; see the source for copying conditions. There is NO |
73 | 73 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." |
264 | 264 | | hexagon \ |
265 | 265 | | i370 | i860 | i960 | ia64 \ |
266 | 266 | | ip2k | iq2000 \ |
267 | | k1om \ | |
267 | 268 | | le32 | le64 \ |
268 | 269 | | lm32 \ |
269 | 270 | | m32c | m32r | m32rle | m68000 | m68k | m88k \ |
281 | 282 | | mips64vr5900 | mips64vr5900el \ |
282 | 283 | | mipsisa32 | mipsisa32el \ |
283 | 284 | | mipsisa32r2 | mipsisa32r2el \ |
285 | | mipsisa32r6 | mipsisa32r6el \ | |
284 | 286 | | mipsisa64 | mipsisa64el \ |
285 | 287 | | mipsisa64r2 | mipsisa64r2el \ |
288 | | mipsisa64r6 | mipsisa64r6el \ | |
286 | 289 | | mipsisa64sb1 | mipsisa64sb1el \ |
287 | 290 | | mipsisa64sr71k | mipsisa64sr71kel \ |
288 | 291 | | mipsr5900 | mipsr5900el \ |
294 | 297 | | nds32 | nds32le | nds32be \ |
295 | 298 | | nios | nios2 | nios2eb | nios2el \ |
296 | 299 | | ns16k | ns32k \ |
297 | | open8 \ | |
298 | | or1k | or32 \ | |
300 | | open8 | or1k | or1knd | or32 \ | |
299 | 301 | | pdp10 | pdp11 | pj | pjl \ |
300 | 302 | | powerpc | powerpc64 | powerpc64le | powerpcle \ |
301 | 303 | | pyramid \ |
323 | 325 | c6x) |
324 | 326 | basic_machine=tic6x-unknown |
325 | 327 | ;; |
326 | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) | |
328 | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) | |
327 | 329 | basic_machine=$basic_machine-unknown |
328 | 330 | os=-none |
329 | 331 | ;; |
380 | 382 | | hexagon-* \ |
381 | 383 | | i*86-* | i860-* | i960-* | ia64-* \ |
382 | 384 | | ip2k-* | iq2000-* \ |
385 | | k1om-* \ | |
383 | 386 | | le32-* | le64-* \ |
384 | 387 | | lm32-* \ |
385 | 388 | | m32c-* | m32r-* | m32rle-* \ |
399 | 402 | | mips64vr5900-* | mips64vr5900el-* \ |
400 | 403 | | mipsisa32-* | mipsisa32el-* \ |
401 | 404 | | mipsisa32r2-* | mipsisa32r2el-* \ |
405 | | mipsisa32r6-* | mipsisa32r6el-* \ | |
402 | 406 | | mipsisa64-* | mipsisa64el-* \ |
403 | 407 | | mipsisa64r2-* | mipsisa64r2el-* \ |
408 | | mipsisa64r6-* | mipsisa64r6el-* \ | |
404 | 409 | | mipsisa64sb1-* | mipsisa64sb1el-* \ |
405 | 410 | | mipsisa64sr71k-* | mipsisa64sr71kel-* \ |
406 | 411 | | mipsr5900-* | mipsr5900el-* \ |
412 | 417 | | nios-* | nios2-* | nios2eb-* | nios2el-* \ |
413 | 418 | | none-* | np1-* | ns16k-* | ns32k-* \ |
414 | 419 | | open8-* \ |
420 | | or1k*-* \ | |
415 | 421 | | orion-* \ |
416 | 422 | | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ |
417 | 423 | | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ |
1373 | 1379 | | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ |
1374 | 1380 | | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ |
1375 | 1381 | | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ |
1376 | | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) | |
1382 | | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) | |
1377 | 1383 | # Remember, each alternative MUST END IN *, to match a version number. |
1378 | 1384 | ;; |
1379 | 1385 | -qnx*) |
1591 | 1597 | mips*-*) |
1592 | 1598 | os=-elf |
1593 | 1599 | ;; |
1594 | or1k-*) | |
1595 | os=-elf | |
1596 | ;; | |
1597 | 1600 | or32-*) |
1598 | 1601 | os=-coff |
1599 | 1602 | ;; |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.69 for protobuf-c 1.0.0-rc1. | |
2 | # Generated by GNU Autoconf 2.69 for protobuf-c 1.0.0-rc2. | |
3 | # | |
4 | # Report bugs to <https://github.com/protobuf-c/protobuf-c/issues>. | |
3 | 5 | # |
4 | 6 | # |
5 | 7 | # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. |
271 | 273 | $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" |
272 | 274 | $as_echo "$0: be upgraded to zsh 4.3.4 or later." |
273 | 275 | else |
274 | $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, | |
275 | $0: including any error possibly output before this | |
276 | $0: message. Then install a modern shell, or manually run | |
277 | $0: the script under such a shell if you do have one." | |
276 | $as_echo "$0: Please tell bug-autoconf@gnu.org and | |
277 | $0: https://github.com/protobuf-c/protobuf-c/issues about | |
278 | $0: your system, including any error possibly output before | |
279 | $0: this message. Then install a modern shell, or manually | |
280 | $0: run the script under such a shell if you do have one." | |
278 | 281 | fi |
279 | 282 | exit 1 |
280 | 283 | fi |
586 | 589 | # Identity of this package. |
587 | 590 | PACKAGE_NAME='protobuf-c' |
588 | 591 | PACKAGE_TARNAME='protobuf-c' |
589 | PACKAGE_VERSION='1.0.0-rc1' | |
590 | PACKAGE_STRING='protobuf-c 1.0.0-rc1' | |
591 | PACKAGE_BUGREPORT='' | |
592 | PACKAGE_URL='' | |
592 | PACKAGE_VERSION='1.0.0-rc2' | |
593 | PACKAGE_STRING='protobuf-c 1.0.0-rc2' | |
594 | PACKAGE_BUGREPORT='https://github.com/protobuf-c/protobuf-c/issues' | |
595 | PACKAGE_URL='https://github.com/protobuf-c/protobuf-c' | |
593 | 596 | |
594 | 597 | ac_unique_file="protobuf-c/protobuf-c.c" |
595 | 598 | # Factoring default headers for most tests. |
632 | 635 | am__EXEEXT_TRUE |
633 | 636 | LTLIBOBJS |
634 | 637 | LIBOBJS |
638 | CODE_COVERAGE_RULES | |
639 | CODE_COVERAGE_LDFLAGS | |
640 | CODE_COVERAGE_CFLAGS | |
641 | GENHTML | |
642 | LCOV | |
643 | CODE_COVERAGE_ENABLED | |
644 | CODE_COVERAGE_ENABLED_FALSE | |
645 | CODE_COVERAGE_ENABLED_TRUE | |
635 | 646 | VALGRIND |
636 | 647 | HAVE_LD_VERSION_SCRIPT_FALSE |
637 | 648 | HAVE_LD_VERSION_SCRIPT_TRUE |
640 | 651 | PROTOC |
641 | 652 | protobuf_LIBS |
642 | 653 | protobuf_CFLAGS |
643 | DOXYGEN_TARGET_FALSE | |
644 | DOXYGEN_TARGET_TRUE | |
645 | DOXYGEN_PAPER_SIZE | |
646 | DX_COND_latex_FALSE | |
647 | DX_COND_latex_TRUE | |
648 | DX_COND_pdf_FALSE | |
649 | DX_COND_pdf_TRUE | |
650 | DX_PDFLATEX | |
651 | DX_FLAG_pdf | |
652 | DX_COND_ps_FALSE | |
653 | DX_COND_ps_TRUE | |
654 | DX_EGREP | |
655 | DX_DVIPS | |
656 | DX_MAKEINDEX | |
657 | DX_LATEX | |
658 | DX_FLAG_ps | |
659 | DX_COND_html_FALSE | |
660 | DX_COND_html_TRUE | |
661 | DX_FLAG_html | |
662 | DX_COND_chi_FALSE | |
663 | DX_COND_chi_TRUE | |
664 | DX_FLAG_chi | |
665 | DX_COND_chm_FALSE | |
666 | DX_COND_chm_TRUE | |
667 | DX_HHC | |
668 | DX_FLAG_chm | |
669 | DX_COND_xml_FALSE | |
670 | DX_COND_xml_TRUE | |
671 | DX_FLAG_xml | |
672 | DX_COND_rtf_FALSE | |
673 | DX_COND_rtf_TRUE | |
674 | DX_FLAG_rtf | |
675 | DX_COND_man_FALSE | |
676 | DX_COND_man_TRUE | |
677 | DX_FLAG_man | |
678 | DX_COND_dot_FALSE | |
679 | DX_COND_dot_TRUE | |
680 | DX_DOT | |
681 | DX_FLAG_dot | |
682 | DX_COND_doc_FALSE | |
683 | DX_COND_doc_TRUE | |
684 | DX_PERL | |
685 | DX_DOXYGEN | |
686 | DX_FLAG_doc | |
687 | DX_ENV | |
688 | DX_DOCDIR | |
689 | DX_CONFIG | |
690 | DX_PROJECT | |
691 | 654 | pkgconfigdir |
692 | 655 | PKG_CONFIG_LIBDIR |
693 | 656 | PKG_CONFIG_PATH |
694 | 657 | PKG_CONFIG |
658 | DOXYGEN_INPUT | |
659 | HAVE_DOXYGEN_FALSE | |
660 | HAVE_DOXYGEN_TRUE | |
661 | DOXYGEN | |
695 | 662 | CXXCPP |
696 | 663 | OTOOL64 |
697 | 664 | OTOOL |
773 | 740 | INSTALL_DATA |
774 | 741 | INSTALL_SCRIPT |
775 | 742 | INSTALL_PROGRAM |
743 | PACKAGE_DESCRIPTION | |
776 | 744 | target_alias |
777 | 745 | host_alias |
778 | 746 | build_alias |
825 | 793 | with_sysroot |
826 | 794 | enable_libtool_lock |
827 | 795 | with_pkgconfigdir |
828 | enable_doxygen_doc | |
829 | enable_doxygen_dot | |
830 | enable_doxygen_man | |
831 | enable_doxygen_rtf | |
832 | enable_doxygen_xml | |
833 | enable_doxygen_chm | |
834 | enable_doxygen_chi | |
835 | enable_doxygen_html | |
836 | enable_doxygen_ps | |
837 | enable_doxygen_pdf | |
838 | 796 | enable_protoc |
839 | 797 | enable_ld_version_script |
840 | 798 | enable_valgrind_tests |
799 | enable_code_coverage | |
841 | 800 | ' |
842 | 801 | ac_precious_vars='build_alias |
843 | 802 | host_alias |
855 | 814 | PKG_CONFIG |
856 | 815 | PKG_CONFIG_PATH |
857 | 816 | PKG_CONFIG_LIBDIR |
858 | DOXYGEN_PAPER_SIZE | |
859 | 817 | protobuf_CFLAGS |
860 | 818 | protobuf_LIBS |
861 | 819 | PROTOC' |
1399 | 1357 | # Omit some internal or obsolete options to make the list less imposing. |
1400 | 1358 | # This message is too long to be a string in the A/UX 3.1 sh. |
1401 | 1359 | cat <<_ACEOF |
1402 | \`configure' configures protobuf-c 1.0.0-rc1 to adapt to many kinds of systems. | |
1360 | \`configure' configures protobuf-c 1.0.0-rc2 to adapt to many kinds of systems. | |
1403 | 1361 | |
1404 | 1362 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1405 | 1363 | |
1469 | 1427 | |
1470 | 1428 | if test -n "$ac_init_help"; then |
1471 | 1429 | case $ac_init_help in |
1472 | short | recursive ) echo "Configuration of protobuf-c 1.0.0-rc1:";; | |
1430 | short | recursive ) echo "Configuration of protobuf-c 1.0.0-rc2:";; | |
1473 | 1431 | esac |
1474 | 1432 | cat <<\_ACEOF |
1475 | 1433 | |
1489 | 1447 | --enable-fast-install[=PKGS] |
1490 | 1448 | optimize for fast installation [default=yes] |
1491 | 1449 | --disable-libtool-lock avoid locking (might break parallel builds) |
1492 | --enable-doxygen-doc generate any doxygen documentation | |
1493 | --enable-doxygen-dot generate graphics for doxygen documentation | |
1494 | --disable-doxygen-man don't generate doxygen manual pages | |
1495 | --enable-doxygen-rtf generate doxygen RTF documentation | |
1496 | --enable-doxygen-xml generate doxygen XML documentation | |
1497 | --enable-doxygen-chm generate doxygen compressed HTML help documentation | |
1498 | --enable-doxygen-chi generate doxygen seperate compressed HTML help index | |
1499 | file | |
1500 | --disable-doxygen-html don't generate doxygen plain HTML documentation | |
1501 | --enable-doxygen-ps generate doxygen PostScript documentation | |
1502 | --enable-doxygen-pdf generate doxygen PDF documentation | |
1503 | 1450 | --disable-protoc Disable building protoc_c (also disables tests) |
1504 | 1451 | --enable-ld-version-script |
1505 | 1452 | enable linker version script (default is enabled |
1506 | 1453 | when possible) |
1507 | 1454 | --enable-valgrind-tests run self tests under valgrind |
1455 | --enable-code-coverage Whether to enable code coverage support | |
1508 | 1456 | |
1509 | 1457 | Optional Packages: |
1510 | 1458 | --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] |
1534 | 1482 | directories to add to pkg-config's search path |
1535 | 1483 | PKG_CONFIG_LIBDIR |
1536 | 1484 | path overriding pkg-config's built-in search path |
1537 | DOXYGEN_PAPER_SIZE | |
1538 | a4wide (default), a4, letter, legal or executive | |
1539 | 1485 | protobuf_CFLAGS |
1540 | 1486 | C compiler flags for protobuf, overriding pkg-config |
1541 | 1487 | protobuf_LIBS |
1545 | 1491 | Use these variables to override the choices made by `configure' or to help |
1546 | 1492 | it to find libraries and programs with nonstandard names/locations. |
1547 | 1493 | |
1548 | Report bugs to the package provider. | |
1494 | Report bugs to <https://github.com/protobuf-c/protobuf-c/issues>. | |
1495 | protobuf-c home page: <https://github.com/protobuf-c/protobuf-c>. | |
1549 | 1496 | _ACEOF |
1550 | 1497 | ac_status=$? |
1551 | 1498 | fi |
1608 | 1555 | test -n "$ac_init_help" && exit $ac_status |
1609 | 1556 | if $ac_init_version; then |
1610 | 1557 | cat <<\_ACEOF |
1611 | protobuf-c configure 1.0.0-rc1 | |
1558 | protobuf-c configure 1.0.0-rc2 | |
1612 | 1559 | generated by GNU Autoconf 2.69 |
1613 | 1560 | |
1614 | 1561 | Copyright (C) 2012 Free Software Foundation, Inc. |
1805 | 1752 | $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} |
1806 | 1753 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 |
1807 | 1754 | $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} |
1755 | ( $as_echo "## -------------------------------------------------------------- ## | |
1756 | ## Report this to https://github.com/protobuf-c/protobuf-c/issues ## | |
1757 | ## -------------------------------------------------------------- ##" | |
1758 | ) | sed "s/^/$as_me: WARNING: /" >&2 | |
1808 | 1759 | ;; |
1809 | 1760 | esac |
1810 | 1761 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 |
2161 | 2112 | $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} |
2162 | 2113 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 |
2163 | 2114 | $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} |
2115 | ( $as_echo "## -------------------------------------------------------------- ## | |
2116 | ## Report this to https://github.com/protobuf-c/protobuf-c/issues ## | |
2117 | ## -------------------------------------------------------------- ##" | |
2118 | ) | sed "s/^/$as_me: WARNING: /" >&2 | |
2164 | 2119 | ;; |
2165 | 2120 | esac |
2166 | 2121 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 |
2223 | 2178 | This file contains any messages produced by compilers while |
2224 | 2179 | running configure, to aid debugging if configure makes a mistake. |
2225 | 2180 | |
2226 | It was created by protobuf-c $as_me 1.0.0-rc1, which was | |
2181 | It was created by protobuf-c $as_me 1.0.0-rc2, which was | |
2227 | 2182 | generated by GNU Autoconf 2.69. Invocation command line was |
2228 | 2183 | |
2229 | 2184 | $ $0 $@ |
2571 | 2526 | ac_compiler_gnu=$ac_cv_c_compiler_gnu |
2572 | 2527 | |
2573 | 2528 | |
2529 | PACKAGE_DESCRIPTION="Protocol Buffers implementation in C" | |
2530 | ||
2531 | ||
2574 | 2532 | |
2575 | 2533 | ac_aux_dir= |
2576 | 2534 | for ac_dir in build-aux "$srcdir"/build-aux; do |
3087 | 3045 | |
3088 | 3046 | # Define the identity of the package. |
3089 | 3047 | PACKAGE='protobuf-c' |
3090 | VERSION='1.0.0-rc1' | |
3048 | VERSION='1.0.0-rc2' | |
3091 | 3049 | |
3092 | 3050 | |
3093 | 3051 | cat >>confdefs.h <<_ACEOF |
16001 | 15959 | ac_config_files="$ac_config_files Makefile protobuf-c/libprotobuf-c.pc" |
16002 | 15960 | |
16003 | 15961 | |
15962 | for ac_prog in doxygen | |
15963 | do | |
15964 | # Extract the first word of "$ac_prog", so it can be a program name with args. | |
15965 | set dummy $ac_prog; ac_word=$2 | |
15966 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
15967 | $as_echo_n "checking for $ac_word... " >&6; } | |
15968 | if ${ac_cv_prog_DOXYGEN+:} false; then : | |
15969 | $as_echo_n "(cached) " >&6 | |
15970 | else | |
15971 | if test -n "$DOXYGEN"; then | |
15972 | ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. | |
15973 | else | |
15974 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
15975 | for as_dir in $PATH | |
15976 | do | |
15977 | IFS=$as_save_IFS | |
15978 | test -z "$as_dir" && as_dir=. | |
15979 | for ac_exec_ext in '' $ac_executable_extensions; do | |
15980 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
15981 | ac_cv_prog_DOXYGEN="$ac_prog" | |
15982 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
15983 | break 2 | |
15984 | fi | |
15985 | done | |
15986 | done | |
15987 | IFS=$as_save_IFS | |
15988 | ||
15989 | fi | |
15990 | fi | |
15991 | DOXYGEN=$ac_cv_prog_DOXYGEN | |
15992 | if test -n "$DOXYGEN"; then | |
15993 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 | |
15994 | $as_echo "$DOXYGEN" >&6; } | |
15995 | else | |
15996 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
15997 | $as_echo "no" >&6; } | |
15998 | fi | |
15999 | ||
16000 | ||
16001 | test -n "$DOXYGEN" && break | |
16002 | done | |
16003 | ||
16004 | if test -n "$DOXYGEN"; then | |
16005 | HAVE_DOXYGEN_TRUE= | |
16006 | HAVE_DOXYGEN_FALSE='#' | |
16007 | else | |
16008 | HAVE_DOXYGEN_TRUE='#' | |
16009 | HAVE_DOXYGEN_FALSE= | |
16010 | fi | |
16011 | ||
16012 | if test -z "$HAVE_DOXYGEN_TRUE"; then : | |
16013 | ac_config_files="$ac_config_files Doxyfile" | |
16014 | ||
16015 | DOXYGEN_INPUT="${srcdir}/protobuf-c" | |
16016 | ||
16017 | ||
16018 | fi | |
16019 | ||
16004 | 16020 | |
16005 | 16021 | |
16006 | 16022 | |
16157 | 16173 | |
16158 | 16174 | fi |
16159 | 16175 | fi |
16160 | ||
16161 | ||
16162 | ||
16163 | ||
16164 | ||
16165 | ||
16166 | ||
16167 | # Files: | |
16168 | DX_PROJECT=protobuf-c | |
16169 | ||
16170 | DX_CONFIG=Doxyfile | |
16171 | ||
16172 | DX_DOCDIR=doxygen-doc | |
16173 | ||
16174 | ||
16175 | # Environment variables used inside doxygen.cfg: | |
16176 | DX_ENV="$DX_ENV SRCDIR='$srcdir'" | |
16177 | ||
16178 | DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" | |
16179 | ||
16180 | DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'" | |
16181 | ||
16182 | DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" | |
16183 | ||
16184 | ||
16185 | # Doxygen itself: | |
16186 | ||
16187 | ||
16188 | ||
16189 | # Check whether --enable-doxygen-doc was given. | |
16190 | if test "${enable_doxygen_doc+set}" = set; then : | |
16191 | enableval=$enable_doxygen_doc; | |
16192 | case "$enableval" in | |
16193 | #( | |
16194 | y|Y|yes|Yes|YES) | |
16195 | DX_FLAG_doc=1 | |
16196 | ||
16197 | ||
16198 | ;; #( | |
16199 | n|N|no|No|NO) | |
16200 | DX_FLAG_doc=0 | |
16201 | ||
16202 | ;; #( | |
16203 | *) | |
16204 | as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 | |
16205 | ;; | |
16206 | esac | |
16207 | ||
16208 | else | |
16209 | ||
16210 | DX_FLAG_doc=0 | |
16211 | ||
16212 | ||
16213 | ||
16214 | fi | |
16215 | ||
16216 | if test "$DX_FLAG_doc" = 1; then | |
16217 | ||
16218 | if test -n "$ac_tool_prefix"; then | |
16219 | # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. | |
16220 | set dummy ${ac_tool_prefix}doxygen; ac_word=$2 | |
16221 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16222 | $as_echo_n "checking for $ac_word... " >&6; } | |
16223 | if ${ac_cv_path_DX_DOXYGEN+:} false; then : | |
16224 | $as_echo_n "(cached) " >&6 | |
16225 | else | |
16226 | case $DX_DOXYGEN in | |
16227 | [\\/]* | ?:[\\/]*) | |
16228 | ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. | |
16229 | ;; | |
16230 | *) | |
16231 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16232 | for as_dir in $PATH | |
16233 | do | |
16234 | IFS=$as_save_IFS | |
16235 | test -z "$as_dir" && as_dir=. | |
16236 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16237 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16238 | ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" | |
16239 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16240 | break 2 | |
16241 | fi | |
16242 | done | |
16243 | done | |
16244 | IFS=$as_save_IFS | |
16245 | ||
16246 | ;; | |
16247 | esac | |
16248 | fi | |
16249 | DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN | |
16250 | if test -n "$DX_DOXYGEN"; then | |
16251 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 | |
16252 | $as_echo "$DX_DOXYGEN" >&6; } | |
16253 | else | |
16254 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16255 | $as_echo "no" >&6; } | |
16256 | fi | |
16257 | ||
16258 | ||
16259 | fi | |
16260 | if test -z "$ac_cv_path_DX_DOXYGEN"; then | |
16261 | ac_pt_DX_DOXYGEN=$DX_DOXYGEN | |
16262 | # Extract the first word of "doxygen", so it can be a program name with args. | |
16263 | set dummy doxygen; ac_word=$2 | |
16264 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16265 | $as_echo_n "checking for $ac_word... " >&6; } | |
16266 | if ${ac_cv_path_ac_pt_DX_DOXYGEN+:} false; then : | |
16267 | $as_echo_n "(cached) " >&6 | |
16268 | else | |
16269 | case $ac_pt_DX_DOXYGEN in | |
16270 | [\\/]* | ?:[\\/]*) | |
16271 | ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. | |
16272 | ;; | |
16273 | *) | |
16274 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16275 | for as_dir in $PATH | |
16276 | do | |
16277 | IFS=$as_save_IFS | |
16278 | test -z "$as_dir" && as_dir=. | |
16279 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16280 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16281 | ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" | |
16282 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16283 | break 2 | |
16284 | fi | |
16285 | done | |
16286 | done | |
16287 | IFS=$as_save_IFS | |
16288 | ||
16289 | ;; | |
16290 | esac | |
16291 | fi | |
16292 | ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN | |
16293 | if test -n "$ac_pt_DX_DOXYGEN"; then | |
16294 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 | |
16295 | $as_echo "$ac_pt_DX_DOXYGEN" >&6; } | |
16296 | else | |
16297 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16298 | $as_echo "no" >&6; } | |
16299 | fi | |
16300 | ||
16301 | if test "x$ac_pt_DX_DOXYGEN" = x; then | |
16302 | DX_DOXYGEN="" | |
16303 | else | |
16304 | case $cross_compiling:$ac_tool_warned in | |
16305 | yes:) | |
16306 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
16307 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
16308 | ac_tool_warned=yes ;; | |
16309 | esac | |
16310 | DX_DOXYGEN=$ac_pt_DX_DOXYGEN | |
16311 | fi | |
16312 | else | |
16313 | DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" | |
16314 | fi | |
16315 | ||
16316 | if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then | |
16317 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 | |
16318 | $as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} | |
16319 | DX_FLAG_doc=0 | |
16320 | ||
16321 | fi | |
16322 | ||
16323 | ||
16324 | if test -n "$ac_tool_prefix"; then | |
16325 | # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. | |
16326 | set dummy ${ac_tool_prefix}perl; ac_word=$2 | |
16327 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16328 | $as_echo_n "checking for $ac_word... " >&6; } | |
16329 | if ${ac_cv_path_DX_PERL+:} false; then : | |
16330 | $as_echo_n "(cached) " >&6 | |
16331 | else | |
16332 | case $DX_PERL in | |
16333 | [\\/]* | ?:[\\/]*) | |
16334 | ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. | |
16335 | ;; | |
16336 | *) | |
16337 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16338 | for as_dir in $PATH | |
16339 | do | |
16340 | IFS=$as_save_IFS | |
16341 | test -z "$as_dir" && as_dir=. | |
16342 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16343 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16344 | ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" | |
16345 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16346 | break 2 | |
16347 | fi | |
16348 | done | |
16349 | done | |
16350 | IFS=$as_save_IFS | |
16351 | ||
16352 | ;; | |
16353 | esac | |
16354 | fi | |
16355 | DX_PERL=$ac_cv_path_DX_PERL | |
16356 | if test -n "$DX_PERL"; then | |
16357 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 | |
16358 | $as_echo "$DX_PERL" >&6; } | |
16359 | else | |
16360 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16361 | $as_echo "no" >&6; } | |
16362 | fi | |
16363 | ||
16364 | ||
16365 | fi | |
16366 | if test -z "$ac_cv_path_DX_PERL"; then | |
16367 | ac_pt_DX_PERL=$DX_PERL | |
16368 | # Extract the first word of "perl", so it can be a program name with args. | |
16369 | set dummy perl; ac_word=$2 | |
16370 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16371 | $as_echo_n "checking for $ac_word... " >&6; } | |
16372 | if ${ac_cv_path_ac_pt_DX_PERL+:} false; then : | |
16373 | $as_echo_n "(cached) " >&6 | |
16374 | else | |
16375 | case $ac_pt_DX_PERL in | |
16376 | [\\/]* | ?:[\\/]*) | |
16377 | ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. | |
16378 | ;; | |
16379 | *) | |
16380 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16381 | for as_dir in $PATH | |
16382 | do | |
16383 | IFS=$as_save_IFS | |
16384 | test -z "$as_dir" && as_dir=. | |
16385 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16386 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16387 | ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" | |
16388 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16389 | break 2 | |
16390 | fi | |
16391 | done | |
16392 | done | |
16393 | IFS=$as_save_IFS | |
16394 | ||
16395 | ;; | |
16396 | esac | |
16397 | fi | |
16398 | ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL | |
16399 | if test -n "$ac_pt_DX_PERL"; then | |
16400 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 | |
16401 | $as_echo "$ac_pt_DX_PERL" >&6; } | |
16402 | else | |
16403 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16404 | $as_echo "no" >&6; } | |
16405 | fi | |
16406 | ||
16407 | if test "x$ac_pt_DX_PERL" = x; then | |
16408 | DX_PERL="" | |
16409 | else | |
16410 | case $cross_compiling:$ac_tool_warned in | |
16411 | yes:) | |
16412 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
16413 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
16414 | ac_tool_warned=yes ;; | |
16415 | esac | |
16416 | DX_PERL=$ac_pt_DX_PERL | |
16417 | fi | |
16418 | else | |
16419 | DX_PERL="$ac_cv_path_DX_PERL" | |
16420 | fi | |
16421 | ||
16422 | if test "$DX_FLAG_doc$DX_PERL" = 1; then | |
16423 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 | |
16424 | $as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} | |
16425 | DX_FLAG_doc=0 | |
16426 | ||
16427 | fi | |
16428 | ||
16429 | : | |
16430 | fi | |
16431 | if test "$DX_FLAG_doc" = 1; then | |
16432 | DX_COND_doc_TRUE= | |
16433 | DX_COND_doc_FALSE='#' | |
16434 | else | |
16435 | DX_COND_doc_TRUE='#' | |
16436 | DX_COND_doc_FALSE= | |
16437 | fi | |
16438 | ||
16439 | if test "$DX_FLAG_doc" = 1; then | |
16440 | DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" | |
16441 | ||
16442 | : | |
16443 | else | |
16444 | ||
16445 | : | |
16446 | fi | |
16447 | ||
16448 | ||
16449 | # Dot for graphics: | |
16450 | ||
16451 | ||
16452 | ||
16453 | # Check whether --enable-doxygen-dot was given. | |
16454 | if test "${enable_doxygen_dot+set}" = set; then : | |
16455 | enableval=$enable_doxygen_dot; | |
16456 | case "$enableval" in | |
16457 | #( | |
16458 | y|Y|yes|Yes|YES) | |
16459 | DX_FLAG_dot=1 | |
16460 | ||
16461 | ||
16462 | test "$DX_FLAG_doc" = "1" \ | |
16463 | || as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 | |
16464 | ||
16465 | ;; #( | |
16466 | n|N|no|No|NO) | |
16467 | DX_FLAG_dot=0 | |
16468 | ||
16469 | ;; #( | |
16470 | *) | |
16471 | as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 | |
16472 | ;; | |
16473 | esac | |
16474 | ||
16475 | else | |
16476 | ||
16477 | DX_FLAG_dot=0 | |
16478 | ||
16479 | ||
16480 | test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 | |
16481 | ||
16482 | ||
16483 | ||
16484 | fi | |
16485 | ||
16486 | if test "$DX_FLAG_dot" = 1; then | |
16487 | ||
16488 | if test -n "$ac_tool_prefix"; then | |
16489 | # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. | |
16490 | set dummy ${ac_tool_prefix}dot; ac_word=$2 | |
16491 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16492 | $as_echo_n "checking for $ac_word... " >&6; } | |
16493 | if ${ac_cv_path_DX_DOT+:} false; then : | |
16494 | $as_echo_n "(cached) " >&6 | |
16495 | else | |
16496 | case $DX_DOT in | |
16497 | [\\/]* | ?:[\\/]*) | |
16498 | ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. | |
16499 | ;; | |
16500 | *) | |
16501 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16502 | for as_dir in $PATH | |
16503 | do | |
16504 | IFS=$as_save_IFS | |
16505 | test -z "$as_dir" && as_dir=. | |
16506 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16507 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16508 | ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" | |
16509 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16510 | break 2 | |
16511 | fi | |
16512 | done | |
16513 | done | |
16514 | IFS=$as_save_IFS | |
16515 | ||
16516 | ;; | |
16517 | esac | |
16518 | fi | |
16519 | DX_DOT=$ac_cv_path_DX_DOT | |
16520 | if test -n "$DX_DOT"; then | |
16521 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 | |
16522 | $as_echo "$DX_DOT" >&6; } | |
16523 | else | |
16524 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16525 | $as_echo "no" >&6; } | |
16526 | fi | |
16527 | ||
16528 | ||
16529 | fi | |
16530 | if test -z "$ac_cv_path_DX_DOT"; then | |
16531 | ac_pt_DX_DOT=$DX_DOT | |
16532 | # Extract the first word of "dot", so it can be a program name with args. | |
16533 | set dummy dot; ac_word=$2 | |
16534 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16535 | $as_echo_n "checking for $ac_word... " >&6; } | |
16536 | if ${ac_cv_path_ac_pt_DX_DOT+:} false; then : | |
16537 | $as_echo_n "(cached) " >&6 | |
16538 | else | |
16539 | case $ac_pt_DX_DOT in | |
16540 | [\\/]* | ?:[\\/]*) | |
16541 | ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. | |
16542 | ;; | |
16543 | *) | |
16544 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16545 | for as_dir in $PATH | |
16546 | do | |
16547 | IFS=$as_save_IFS | |
16548 | test -z "$as_dir" && as_dir=. | |
16549 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16550 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16551 | ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" | |
16552 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16553 | break 2 | |
16554 | fi | |
16555 | done | |
16556 | done | |
16557 | IFS=$as_save_IFS | |
16558 | ||
16559 | ;; | |
16560 | esac | |
16561 | fi | |
16562 | ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT | |
16563 | if test -n "$ac_pt_DX_DOT"; then | |
16564 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 | |
16565 | $as_echo "$ac_pt_DX_DOT" >&6; } | |
16566 | else | |
16567 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16568 | $as_echo "no" >&6; } | |
16569 | fi | |
16570 | ||
16571 | if test "x$ac_pt_DX_DOT" = x; then | |
16572 | DX_DOT="" | |
16573 | else | |
16574 | case $cross_compiling:$ac_tool_warned in | |
16575 | yes:) | |
16576 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
16577 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
16578 | ac_tool_warned=yes ;; | |
16579 | esac | |
16580 | DX_DOT=$ac_pt_DX_DOT | |
16581 | fi | |
16582 | else | |
16583 | DX_DOT="$ac_cv_path_DX_DOT" | |
16584 | fi | |
16585 | ||
16586 | if test "$DX_FLAG_dot$DX_DOT" = 1; then | |
16587 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 | |
16588 | $as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} | |
16589 | DX_FLAG_dot=0 | |
16590 | ||
16591 | fi | |
16592 | ||
16593 | : | |
16594 | fi | |
16595 | if test "$DX_FLAG_dot" = 1; then | |
16596 | DX_COND_dot_TRUE= | |
16597 | DX_COND_dot_FALSE='#' | |
16598 | else | |
16599 | DX_COND_dot_TRUE='#' | |
16600 | DX_COND_dot_FALSE= | |
16601 | fi | |
16602 | ||
16603 | if test "$DX_FLAG_dot" = 1; then | |
16604 | DX_ENV="$DX_ENV HAVE_DOT='YES'" | |
16605 | ||
16606 | DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" | |
16607 | ||
16608 | : | |
16609 | else | |
16610 | DX_ENV="$DX_ENV HAVE_DOT='NO'" | |
16611 | ||
16612 | : | |
16613 | fi | |
16614 | ||
16615 | ||
16616 | # Man pages generation: | |
16617 | ||
16618 | ||
16619 | ||
16620 | # Check whether --enable-doxygen-man was given. | |
16621 | if test "${enable_doxygen_man+set}" = set; then : | |
16622 | enableval=$enable_doxygen_man; | |
16623 | case "$enableval" in | |
16624 | #( | |
16625 | y|Y|yes|Yes|YES) | |
16626 | DX_FLAG_man=1 | |
16627 | ||
16628 | ||
16629 | test "$DX_FLAG_doc" = "1" \ | |
16630 | || as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 | |
16631 | ||
16632 | ;; #( | |
16633 | n|N|no|No|NO) | |
16634 | DX_FLAG_man=0 | |
16635 | ||
16636 | ;; #( | |
16637 | *) | |
16638 | as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 | |
16639 | ;; | |
16640 | esac | |
16641 | ||
16642 | else | |
16643 | ||
16644 | DX_FLAG_man=1 | |
16645 | ||
16646 | ||
16647 | test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 | |
16648 | ||
16649 | ||
16650 | ||
16651 | fi | |
16652 | ||
16653 | if test "$DX_FLAG_man" = 1; then | |
16654 | ||
16655 | : | |
16656 | fi | |
16657 | if test "$DX_FLAG_man" = 1; then | |
16658 | DX_COND_man_TRUE= | |
16659 | DX_COND_man_FALSE='#' | |
16660 | else | |
16661 | DX_COND_man_TRUE='#' | |
16662 | DX_COND_man_FALSE= | |
16663 | fi | |
16664 | ||
16665 | if test "$DX_FLAG_man" = 1; then | |
16666 | DX_ENV="$DX_ENV GENERATE_MAN='YES'" | |
16667 | ||
16668 | : | |
16669 | else | |
16670 | DX_ENV="$DX_ENV GENERATE_MAN='NO'" | |
16671 | ||
16672 | : | |
16673 | fi | |
16674 | ||
16675 | ||
16676 | # RTF file generation: | |
16677 | ||
16678 | ||
16679 | ||
16680 | # Check whether --enable-doxygen-rtf was given. | |
16681 | if test "${enable_doxygen_rtf+set}" = set; then : | |
16682 | enableval=$enable_doxygen_rtf; | |
16683 | case "$enableval" in | |
16684 | #( | |
16685 | y|Y|yes|Yes|YES) | |
16686 | DX_FLAG_rtf=1 | |
16687 | ||
16688 | ||
16689 | test "$DX_FLAG_doc" = "1" \ | |
16690 | || as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 | |
16691 | ||
16692 | ;; #( | |
16693 | n|N|no|No|NO) | |
16694 | DX_FLAG_rtf=0 | |
16695 | ||
16696 | ;; #( | |
16697 | *) | |
16698 | as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 | |
16699 | ;; | |
16700 | esac | |
16701 | ||
16702 | else | |
16703 | ||
16704 | DX_FLAG_rtf=0 | |
16705 | ||
16706 | ||
16707 | test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 | |
16708 | ||
16709 | ||
16710 | ||
16711 | fi | |
16712 | ||
16713 | if test "$DX_FLAG_rtf" = 1; then | |
16714 | ||
16715 | : | |
16716 | fi | |
16717 | if test "$DX_FLAG_rtf" = 1; then | |
16718 | DX_COND_rtf_TRUE= | |
16719 | DX_COND_rtf_FALSE='#' | |
16720 | else | |
16721 | DX_COND_rtf_TRUE='#' | |
16722 | DX_COND_rtf_FALSE= | |
16723 | fi | |
16724 | ||
16725 | if test "$DX_FLAG_rtf" = 1; then | |
16726 | DX_ENV="$DX_ENV GENERATE_RTF='YES'" | |
16727 | ||
16728 | : | |
16729 | else | |
16730 | DX_ENV="$DX_ENV GENERATE_RTF='NO'" | |
16731 | ||
16732 | : | |
16733 | fi | |
16734 | ||
16735 | ||
16736 | # XML file generation: | |
16737 | ||
16738 | ||
16739 | ||
16740 | # Check whether --enable-doxygen-xml was given. | |
16741 | if test "${enable_doxygen_xml+set}" = set; then : | |
16742 | enableval=$enable_doxygen_xml; | |
16743 | case "$enableval" in | |
16744 | #( | |
16745 | y|Y|yes|Yes|YES) | |
16746 | DX_FLAG_xml=1 | |
16747 | ||
16748 | ||
16749 | test "$DX_FLAG_doc" = "1" \ | |
16750 | || as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 | |
16751 | ||
16752 | ;; #( | |
16753 | n|N|no|No|NO) | |
16754 | DX_FLAG_xml=0 | |
16755 | ||
16756 | ;; #( | |
16757 | *) | |
16758 | as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 | |
16759 | ;; | |
16760 | esac | |
16761 | ||
16762 | else | |
16763 | ||
16764 | DX_FLAG_xml=0 | |
16765 | ||
16766 | ||
16767 | test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 | |
16768 | ||
16769 | ||
16770 | ||
16771 | fi | |
16772 | ||
16773 | if test "$DX_FLAG_xml" = 1; then | |
16774 | ||
16775 | : | |
16776 | fi | |
16777 | if test "$DX_FLAG_xml" = 1; then | |
16778 | DX_COND_xml_TRUE= | |
16779 | DX_COND_xml_FALSE='#' | |
16780 | else | |
16781 | DX_COND_xml_TRUE='#' | |
16782 | DX_COND_xml_FALSE= | |
16783 | fi | |
16784 | ||
16785 | if test "$DX_FLAG_xml" = 1; then | |
16786 | DX_ENV="$DX_ENV GENERATE_XML='YES'" | |
16787 | ||
16788 | : | |
16789 | else | |
16790 | DX_ENV="$DX_ENV GENERATE_XML='NO'" | |
16791 | ||
16792 | : | |
16793 | fi | |
16794 | ||
16795 | ||
16796 | # (Compressed) HTML help generation: | |
16797 | ||
16798 | ||
16799 | ||
16800 | # Check whether --enable-doxygen-chm was given. | |
16801 | if test "${enable_doxygen_chm+set}" = set; then : | |
16802 | enableval=$enable_doxygen_chm; | |
16803 | case "$enableval" in | |
16804 | #( | |
16805 | y|Y|yes|Yes|YES) | |
16806 | DX_FLAG_chm=1 | |
16807 | ||
16808 | ||
16809 | test "$DX_FLAG_doc" = "1" \ | |
16810 | || as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 | |
16811 | ||
16812 | ;; #( | |
16813 | n|N|no|No|NO) | |
16814 | DX_FLAG_chm=0 | |
16815 | ||
16816 | ;; #( | |
16817 | *) | |
16818 | as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 | |
16819 | ;; | |
16820 | esac | |
16821 | ||
16822 | else | |
16823 | ||
16824 | DX_FLAG_chm=0 | |
16825 | ||
16826 | ||
16827 | test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 | |
16828 | ||
16829 | ||
16830 | ||
16831 | fi | |
16832 | ||
16833 | if test "$DX_FLAG_chm" = 1; then | |
16834 | ||
16835 | if test -n "$ac_tool_prefix"; then | |
16836 | # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. | |
16837 | set dummy ${ac_tool_prefix}hhc; ac_word=$2 | |
16838 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16839 | $as_echo_n "checking for $ac_word... " >&6; } | |
16840 | if ${ac_cv_path_DX_HHC+:} false; then : | |
16841 | $as_echo_n "(cached) " >&6 | |
16842 | else | |
16843 | case $DX_HHC in | |
16844 | [\\/]* | ?:[\\/]*) | |
16845 | ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. | |
16846 | ;; | |
16847 | *) | |
16848 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16849 | for as_dir in $PATH | |
16850 | do | |
16851 | IFS=$as_save_IFS | |
16852 | test -z "$as_dir" && as_dir=. | |
16853 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16854 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16855 | ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" | |
16856 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16857 | break 2 | |
16858 | fi | |
16859 | done | |
16860 | done | |
16861 | IFS=$as_save_IFS | |
16862 | ||
16863 | ;; | |
16864 | esac | |
16865 | fi | |
16866 | DX_HHC=$ac_cv_path_DX_HHC | |
16867 | if test -n "$DX_HHC"; then | |
16868 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 | |
16869 | $as_echo "$DX_HHC" >&6; } | |
16870 | else | |
16871 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16872 | $as_echo "no" >&6; } | |
16873 | fi | |
16874 | ||
16875 | ||
16876 | fi | |
16877 | if test -z "$ac_cv_path_DX_HHC"; then | |
16878 | ac_pt_DX_HHC=$DX_HHC | |
16879 | # Extract the first word of "hhc", so it can be a program name with args. | |
16880 | set dummy hhc; ac_word=$2 | |
16881 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16882 | $as_echo_n "checking for $ac_word... " >&6; } | |
16883 | if ${ac_cv_path_ac_pt_DX_HHC+:} false; then : | |
16884 | $as_echo_n "(cached) " >&6 | |
16885 | else | |
16886 | case $ac_pt_DX_HHC in | |
16887 | [\\/]* | ?:[\\/]*) | |
16888 | ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. | |
16889 | ;; | |
16890 | *) | |
16891 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16892 | for as_dir in $PATH | |
16893 | do | |
16894 | IFS=$as_save_IFS | |
16895 | test -z "$as_dir" && as_dir=. | |
16896 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16897 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16898 | ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" | |
16899 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16900 | break 2 | |
16901 | fi | |
16902 | done | |
16903 | done | |
16904 | IFS=$as_save_IFS | |
16905 | ||
16906 | ;; | |
16907 | esac | |
16908 | fi | |
16909 | ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC | |
16910 | if test -n "$ac_pt_DX_HHC"; then | |
16911 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 | |
16912 | $as_echo "$ac_pt_DX_HHC" >&6; } | |
16913 | else | |
16914 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16915 | $as_echo "no" >&6; } | |
16916 | fi | |
16917 | ||
16918 | if test "x$ac_pt_DX_HHC" = x; then | |
16919 | DX_HHC="" | |
16920 | else | |
16921 | case $cross_compiling:$ac_tool_warned in | |
16922 | yes:) | |
16923 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
16924 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
16925 | ac_tool_warned=yes ;; | |
16926 | esac | |
16927 | DX_HHC=$ac_pt_DX_HHC | |
16928 | fi | |
16929 | else | |
16930 | DX_HHC="$ac_cv_path_DX_HHC" | |
16931 | fi | |
16932 | ||
16933 | if test "$DX_FLAG_chm$DX_HHC" = 1; then | |
16934 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 | |
16935 | $as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} | |
16936 | DX_FLAG_chm=0 | |
16937 | ||
16938 | fi | |
16939 | ||
16940 | : | |
16941 | fi | |
16942 | if test "$DX_FLAG_chm" = 1; then | |
16943 | DX_COND_chm_TRUE= | |
16944 | DX_COND_chm_FALSE='#' | |
16945 | else | |
16946 | DX_COND_chm_TRUE='#' | |
16947 | DX_COND_chm_FALSE= | |
16948 | fi | |
16949 | ||
16950 | if test "$DX_FLAG_chm" = 1; then | |
16951 | DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" | |
16952 | ||
16953 | DX_ENV="$DX_ENV GENERATE_HTML='YES'" | |
16954 | ||
16955 | DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" | |
16956 | ||
16957 | : | |
16958 | else | |
16959 | DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" | |
16960 | ||
16961 | : | |
16962 | fi | |
16963 | ||
16964 | ||
16965 | # Seperate CHI file generation. | |
16966 | ||
16967 | ||
16968 | ||
16969 | # Check whether --enable-doxygen-chi was given. | |
16970 | if test "${enable_doxygen_chi+set}" = set; then : | |
16971 | enableval=$enable_doxygen_chi; | |
16972 | case "$enableval" in | |
16973 | #( | |
16974 | y|Y|yes|Yes|YES) | |
16975 | DX_FLAG_chi=1 | |
16976 | ||
16977 | ||
16978 | test "$DX_FLAG_chm" = "1" \ | |
16979 | || as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 | |
16980 | ||
16981 | ;; #( | |
16982 | n|N|no|No|NO) | |
16983 | DX_FLAG_chi=0 | |
16984 | ||
16985 | ;; #( | |
16986 | *) | |
16987 | as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 | |
16988 | ;; | |
16989 | esac | |
16990 | ||
16991 | else | |
16992 | ||
16993 | DX_FLAG_chi=0 | |
16994 | ||
16995 | ||
16996 | test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 | |
16997 | ||
16998 | ||
16999 | ||
17000 | fi | |
17001 | ||
17002 | if test "$DX_FLAG_chi" = 1; then | |
17003 | ||
17004 | : | |
17005 | fi | |
17006 | if test "$DX_FLAG_chi" = 1; then | |
17007 | DX_COND_chi_TRUE= | |
17008 | DX_COND_chi_FALSE='#' | |
17009 | else | |
17010 | DX_COND_chi_TRUE='#' | |
17011 | DX_COND_chi_FALSE= | |
17012 | fi | |
17013 | ||
17014 | if test "$DX_FLAG_chi" = 1; then | |
17015 | DX_ENV="$DX_ENV GENERATE_CHI='YES'" | |
17016 | ||
17017 | : | |
17018 | else | |
17019 | DX_ENV="$DX_ENV GENERATE_CHI='NO'" | |
17020 | ||
17021 | : | |
17022 | fi | |
17023 | ||
17024 | ||
17025 | # Plain HTML pages generation: | |
17026 | ||
17027 | ||
17028 | ||
17029 | # Check whether --enable-doxygen-html was given. | |
17030 | if test "${enable_doxygen_html+set}" = set; then : | |
17031 | enableval=$enable_doxygen_html; | |
17032 | case "$enableval" in | |
17033 | #( | |
17034 | y|Y|yes|Yes|YES) | |
17035 | DX_FLAG_html=1 | |
17036 | ||
17037 | ||
17038 | test "$DX_FLAG_doc" = "1" \ | |
17039 | || as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 | |
17040 | ||
17041 | test "$DX_FLAG_chm" = "0" \ | |
17042 | || as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 | |
17043 | ||
17044 | ;; #( | |
17045 | n|N|no|No|NO) | |
17046 | DX_FLAG_html=0 | |
17047 | ||
17048 | ;; #( | |
17049 | *) | |
17050 | as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 | |
17051 | ;; | |
17052 | esac | |
17053 | ||
17054 | else | |
17055 | ||
17056 | DX_FLAG_html=1 | |
17057 | ||
17058 | ||
17059 | test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 | |
17060 | ||
17061 | ||
17062 | test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 | |
17063 | ||
17064 | ||
17065 | ||
17066 | fi | |
17067 | ||
17068 | if test "$DX_FLAG_html" = 1; then | |
17069 | ||
17070 | : | |
17071 | fi | |
17072 | if test "$DX_FLAG_html" = 1; then | |
17073 | DX_COND_html_TRUE= | |
17074 | DX_COND_html_FALSE='#' | |
17075 | else | |
17076 | DX_COND_html_TRUE='#' | |
17077 | DX_COND_html_FALSE= | |
17078 | fi | |
17079 | ||
17080 | if test "$DX_FLAG_html" = 1; then | |
17081 | DX_ENV="$DX_ENV GENERATE_HTML='YES'" | |
17082 | ||
17083 | : | |
17084 | else | |
17085 | test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" | |
17086 | ||
17087 | : | |
17088 | fi | |
17089 | ||
17090 | ||
17091 | # PostScript file generation: | |
17092 | ||
17093 | ||
17094 | ||
17095 | # Check whether --enable-doxygen-ps was given. | |
17096 | if test "${enable_doxygen_ps+set}" = set; then : | |
17097 | enableval=$enable_doxygen_ps; | |
17098 | case "$enableval" in | |
17099 | #( | |
17100 | y|Y|yes|Yes|YES) | |
17101 | DX_FLAG_ps=1 | |
17102 | ||
17103 | ||
17104 | test "$DX_FLAG_doc" = "1" \ | |
17105 | || as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 | |
17106 | ||
17107 | ;; #( | |
17108 | n|N|no|No|NO) | |
17109 | DX_FLAG_ps=0 | |
17110 | ||
17111 | ;; #( | |
17112 | *) | |
17113 | as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 | |
17114 | ;; | |
17115 | esac | |
17116 | ||
17117 | else | |
17118 | ||
17119 | DX_FLAG_ps=0 | |
17120 | ||
17121 | ||
17122 | test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 | |
17123 | ||
17124 | ||
17125 | ||
17126 | fi | |
17127 | ||
17128 | if test "$DX_FLAG_ps" = 1; then | |
17129 | ||
17130 | if test -n "$ac_tool_prefix"; then | |
17131 | # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. | |
17132 | set dummy ${ac_tool_prefix}latex; ac_word=$2 | |
17133 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17134 | $as_echo_n "checking for $ac_word... " >&6; } | |
17135 | if ${ac_cv_path_DX_LATEX+:} false; then : | |
17136 | $as_echo_n "(cached) " >&6 | |
17137 | else | |
17138 | case $DX_LATEX in | |
17139 | [\\/]* | ?:[\\/]*) | |
17140 | ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. | |
17141 | ;; | |
17142 | *) | |
17143 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17144 | for as_dir in $PATH | |
17145 | do | |
17146 | IFS=$as_save_IFS | |
17147 | test -z "$as_dir" && as_dir=. | |
17148 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17149 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17150 | ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" | |
17151 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17152 | break 2 | |
17153 | fi | |
17154 | done | |
17155 | done | |
17156 | IFS=$as_save_IFS | |
17157 | ||
17158 | ;; | |
17159 | esac | |
17160 | fi | |
17161 | DX_LATEX=$ac_cv_path_DX_LATEX | |
17162 | if test -n "$DX_LATEX"; then | |
17163 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 | |
17164 | $as_echo "$DX_LATEX" >&6; } | |
17165 | else | |
17166 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17167 | $as_echo "no" >&6; } | |
17168 | fi | |
17169 | ||
17170 | ||
17171 | fi | |
17172 | if test -z "$ac_cv_path_DX_LATEX"; then | |
17173 | ac_pt_DX_LATEX=$DX_LATEX | |
17174 | # Extract the first word of "latex", so it can be a program name with args. | |
17175 | set dummy latex; ac_word=$2 | |
17176 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17177 | $as_echo_n "checking for $ac_word... " >&6; } | |
17178 | if ${ac_cv_path_ac_pt_DX_LATEX+:} false; then : | |
17179 | $as_echo_n "(cached) " >&6 | |
17180 | else | |
17181 | case $ac_pt_DX_LATEX in | |
17182 | [\\/]* | ?:[\\/]*) | |
17183 | ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. | |
17184 | ;; | |
17185 | *) | |
17186 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17187 | for as_dir in $PATH | |
17188 | do | |
17189 | IFS=$as_save_IFS | |
17190 | test -z "$as_dir" && as_dir=. | |
17191 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17192 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17193 | ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" | |
17194 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17195 | break 2 | |
17196 | fi | |
17197 | done | |
17198 | done | |
17199 | IFS=$as_save_IFS | |
17200 | ||
17201 | ;; | |
17202 | esac | |
17203 | fi | |
17204 | ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX | |
17205 | if test -n "$ac_pt_DX_LATEX"; then | |
17206 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 | |
17207 | $as_echo "$ac_pt_DX_LATEX" >&6; } | |
17208 | else | |
17209 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17210 | $as_echo "no" >&6; } | |
17211 | fi | |
17212 | ||
17213 | if test "x$ac_pt_DX_LATEX" = x; then | |
17214 | DX_LATEX="" | |
17215 | else | |
17216 | case $cross_compiling:$ac_tool_warned in | |
17217 | yes:) | |
17218 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17219 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17220 | ac_tool_warned=yes ;; | |
17221 | esac | |
17222 | DX_LATEX=$ac_pt_DX_LATEX | |
17223 | fi | |
17224 | else | |
17225 | DX_LATEX="$ac_cv_path_DX_LATEX" | |
17226 | fi | |
17227 | ||
17228 | if test "$DX_FLAG_ps$DX_LATEX" = 1; then | |
17229 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 | |
17230 | $as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} | |
17231 | DX_FLAG_ps=0 | |
17232 | ||
17233 | fi | |
17234 | ||
17235 | ||
17236 | if test -n "$ac_tool_prefix"; then | |
17237 | # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. | |
17238 | set dummy ${ac_tool_prefix}makeindex; ac_word=$2 | |
17239 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17240 | $as_echo_n "checking for $ac_word... " >&6; } | |
17241 | if ${ac_cv_path_DX_MAKEINDEX+:} false; then : | |
17242 | $as_echo_n "(cached) " >&6 | |
17243 | else | |
17244 | case $DX_MAKEINDEX in | |
17245 | [\\/]* | ?:[\\/]*) | |
17246 | ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. | |
17247 | ;; | |
17248 | *) | |
17249 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17250 | for as_dir in $PATH | |
17251 | do | |
17252 | IFS=$as_save_IFS | |
17253 | test -z "$as_dir" && as_dir=. | |
17254 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17255 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17256 | ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" | |
17257 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17258 | break 2 | |
17259 | fi | |
17260 | done | |
17261 | done | |
17262 | IFS=$as_save_IFS | |
17263 | ||
17264 | ;; | |
17265 | esac | |
17266 | fi | |
17267 | DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX | |
17268 | if test -n "$DX_MAKEINDEX"; then | |
17269 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 | |
17270 | $as_echo "$DX_MAKEINDEX" >&6; } | |
17271 | else | |
17272 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17273 | $as_echo "no" >&6; } | |
17274 | fi | |
17275 | ||
17276 | ||
17277 | fi | |
17278 | if test -z "$ac_cv_path_DX_MAKEINDEX"; then | |
17279 | ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX | |
17280 | # Extract the first word of "makeindex", so it can be a program name with args. | |
17281 | set dummy makeindex; ac_word=$2 | |
17282 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17283 | $as_echo_n "checking for $ac_word... " >&6; } | |
17284 | if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : | |
17285 | $as_echo_n "(cached) " >&6 | |
17286 | else | |
17287 | case $ac_pt_DX_MAKEINDEX in | |
17288 | [\\/]* | ?:[\\/]*) | |
17289 | ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. | |
17290 | ;; | |
17291 | *) | |
17292 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17293 | for as_dir in $PATH | |
17294 | do | |
17295 | IFS=$as_save_IFS | |
17296 | test -z "$as_dir" && as_dir=. | |
17297 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17298 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17299 | ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" | |
17300 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17301 | break 2 | |
17302 | fi | |
17303 | done | |
17304 | done | |
17305 | IFS=$as_save_IFS | |
17306 | ||
17307 | ;; | |
17308 | esac | |
17309 | fi | |
17310 | ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX | |
17311 | if test -n "$ac_pt_DX_MAKEINDEX"; then | |
17312 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 | |
17313 | $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } | |
17314 | else | |
17315 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17316 | $as_echo "no" >&6; } | |
17317 | fi | |
17318 | ||
17319 | if test "x$ac_pt_DX_MAKEINDEX" = x; then | |
17320 | DX_MAKEINDEX="" | |
17321 | else | |
17322 | case $cross_compiling:$ac_tool_warned in | |
17323 | yes:) | |
17324 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17325 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17326 | ac_tool_warned=yes ;; | |
17327 | esac | |
17328 | DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX | |
17329 | fi | |
17330 | else | |
17331 | DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" | |
17332 | fi | |
17333 | ||
17334 | if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then | |
17335 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 | |
17336 | $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} | |
17337 | DX_FLAG_ps=0 | |
17338 | ||
17339 | fi | |
17340 | ||
17341 | ||
17342 | if test -n "$ac_tool_prefix"; then | |
17343 | # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. | |
17344 | set dummy ${ac_tool_prefix}dvips; ac_word=$2 | |
17345 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17346 | $as_echo_n "checking for $ac_word... " >&6; } | |
17347 | if ${ac_cv_path_DX_DVIPS+:} false; then : | |
17348 | $as_echo_n "(cached) " >&6 | |
17349 | else | |
17350 | case $DX_DVIPS in | |
17351 | [\\/]* | ?:[\\/]*) | |
17352 | ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. | |
17353 | ;; | |
17354 | *) | |
17355 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17356 | for as_dir in $PATH | |
17357 | do | |
17358 | IFS=$as_save_IFS | |
17359 | test -z "$as_dir" && as_dir=. | |
17360 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17361 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17362 | ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" | |
17363 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17364 | break 2 | |
17365 | fi | |
17366 | done | |
17367 | done | |
17368 | IFS=$as_save_IFS | |
17369 | ||
17370 | ;; | |
17371 | esac | |
17372 | fi | |
17373 | DX_DVIPS=$ac_cv_path_DX_DVIPS | |
17374 | if test -n "$DX_DVIPS"; then | |
17375 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 | |
17376 | $as_echo "$DX_DVIPS" >&6; } | |
17377 | else | |
17378 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17379 | $as_echo "no" >&6; } | |
17380 | fi | |
17381 | ||
17382 | ||
17383 | fi | |
17384 | if test -z "$ac_cv_path_DX_DVIPS"; then | |
17385 | ac_pt_DX_DVIPS=$DX_DVIPS | |
17386 | # Extract the first word of "dvips", so it can be a program name with args. | |
17387 | set dummy dvips; ac_word=$2 | |
17388 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17389 | $as_echo_n "checking for $ac_word... " >&6; } | |
17390 | if ${ac_cv_path_ac_pt_DX_DVIPS+:} false; then : | |
17391 | $as_echo_n "(cached) " >&6 | |
17392 | else | |
17393 | case $ac_pt_DX_DVIPS in | |
17394 | [\\/]* | ?:[\\/]*) | |
17395 | ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. | |
17396 | ;; | |
17397 | *) | |
17398 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17399 | for as_dir in $PATH | |
17400 | do | |
17401 | IFS=$as_save_IFS | |
17402 | test -z "$as_dir" && as_dir=. | |
17403 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17404 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17405 | ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" | |
17406 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17407 | break 2 | |
17408 | fi | |
17409 | done | |
17410 | done | |
17411 | IFS=$as_save_IFS | |
17412 | ||
17413 | ;; | |
17414 | esac | |
17415 | fi | |
17416 | ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS | |
17417 | if test -n "$ac_pt_DX_DVIPS"; then | |
17418 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 | |
17419 | $as_echo "$ac_pt_DX_DVIPS" >&6; } | |
17420 | else | |
17421 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17422 | $as_echo "no" >&6; } | |
17423 | fi | |
17424 | ||
17425 | if test "x$ac_pt_DX_DVIPS" = x; then | |
17426 | DX_DVIPS="" | |
17427 | else | |
17428 | case $cross_compiling:$ac_tool_warned in | |
17429 | yes:) | |
17430 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17431 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17432 | ac_tool_warned=yes ;; | |
17433 | esac | |
17434 | DX_DVIPS=$ac_pt_DX_DVIPS | |
17435 | fi | |
17436 | else | |
17437 | DX_DVIPS="$ac_cv_path_DX_DVIPS" | |
17438 | fi | |
17439 | ||
17440 | if test "$DX_FLAG_ps$DX_DVIPS" = 1; then | |
17441 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 | |
17442 | $as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} | |
17443 | DX_FLAG_ps=0 | |
17444 | ||
17445 | fi | |
17446 | ||
17447 | ||
17448 | if test -n "$ac_tool_prefix"; then | |
17449 | # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. | |
17450 | set dummy ${ac_tool_prefix}egrep; ac_word=$2 | |
17451 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17452 | $as_echo_n "checking for $ac_word... " >&6; } | |
17453 | if ${ac_cv_path_DX_EGREP+:} false; then : | |
17454 | $as_echo_n "(cached) " >&6 | |
17455 | else | |
17456 | case $DX_EGREP in | |
17457 | [\\/]* | ?:[\\/]*) | |
17458 | ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. | |
17459 | ;; | |
17460 | *) | |
17461 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17462 | for as_dir in $PATH | |
17463 | do | |
17464 | IFS=$as_save_IFS | |
17465 | test -z "$as_dir" && as_dir=. | |
17466 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17467 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17468 | ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" | |
17469 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17470 | break 2 | |
17471 | fi | |
17472 | done | |
17473 | done | |
17474 | IFS=$as_save_IFS | |
17475 | ||
17476 | ;; | |
17477 | esac | |
17478 | fi | |
17479 | DX_EGREP=$ac_cv_path_DX_EGREP | |
17480 | if test -n "$DX_EGREP"; then | |
17481 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 | |
17482 | $as_echo "$DX_EGREP" >&6; } | |
17483 | else | |
17484 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17485 | $as_echo "no" >&6; } | |
17486 | fi | |
17487 | ||
17488 | ||
17489 | fi | |
17490 | if test -z "$ac_cv_path_DX_EGREP"; then | |
17491 | ac_pt_DX_EGREP=$DX_EGREP | |
17492 | # Extract the first word of "egrep", so it can be a program name with args. | |
17493 | set dummy egrep; ac_word=$2 | |
17494 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17495 | $as_echo_n "checking for $ac_word... " >&6; } | |
17496 | if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : | |
17497 | $as_echo_n "(cached) " >&6 | |
17498 | else | |
17499 | case $ac_pt_DX_EGREP in | |
17500 | [\\/]* | ?:[\\/]*) | |
17501 | ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. | |
17502 | ;; | |
17503 | *) | |
17504 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17505 | for as_dir in $PATH | |
17506 | do | |
17507 | IFS=$as_save_IFS | |
17508 | test -z "$as_dir" && as_dir=. | |
17509 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17510 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17511 | ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" | |
17512 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17513 | break 2 | |
17514 | fi | |
17515 | done | |
17516 | done | |
17517 | IFS=$as_save_IFS | |
17518 | ||
17519 | ;; | |
17520 | esac | |
17521 | fi | |
17522 | ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP | |
17523 | if test -n "$ac_pt_DX_EGREP"; then | |
17524 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 | |
17525 | $as_echo "$ac_pt_DX_EGREP" >&6; } | |
17526 | else | |
17527 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17528 | $as_echo "no" >&6; } | |
17529 | fi | |
17530 | ||
17531 | if test "x$ac_pt_DX_EGREP" = x; then | |
17532 | DX_EGREP="" | |
17533 | else | |
17534 | case $cross_compiling:$ac_tool_warned in | |
17535 | yes:) | |
17536 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17537 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17538 | ac_tool_warned=yes ;; | |
17539 | esac | |
17540 | DX_EGREP=$ac_pt_DX_EGREP | |
17541 | fi | |
17542 | else | |
17543 | DX_EGREP="$ac_cv_path_DX_EGREP" | |
17544 | fi | |
17545 | ||
17546 | if test "$DX_FLAG_ps$DX_EGREP" = 1; then | |
17547 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 | |
17548 | $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} | |
17549 | DX_FLAG_ps=0 | |
17550 | ||
17551 | fi | |
17552 | ||
17553 | : | |
17554 | fi | |
17555 | if test "$DX_FLAG_ps" = 1; then | |
17556 | DX_COND_ps_TRUE= | |
17557 | DX_COND_ps_FALSE='#' | |
17558 | else | |
17559 | DX_COND_ps_TRUE='#' | |
17560 | DX_COND_ps_FALSE= | |
17561 | fi | |
17562 | ||
17563 | if test "$DX_FLAG_ps" = 1; then | |
17564 | ||
17565 | : | |
17566 | else | |
17567 | ||
17568 | : | |
17569 | fi | |
17570 | ||
17571 | ||
17572 | # PDF file generation: | |
17573 | ||
17574 | ||
17575 | ||
17576 | # Check whether --enable-doxygen-pdf was given. | |
17577 | if test "${enable_doxygen_pdf+set}" = set; then : | |
17578 | enableval=$enable_doxygen_pdf; | |
17579 | case "$enableval" in | |
17580 | #( | |
17581 | y|Y|yes|Yes|YES) | |
17582 | DX_FLAG_pdf=1 | |
17583 | ||
17584 | ||
17585 | test "$DX_FLAG_doc" = "1" \ | |
17586 | || as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 | |
17587 | ||
17588 | ;; #( | |
17589 | n|N|no|No|NO) | |
17590 | DX_FLAG_pdf=0 | |
17591 | ||
17592 | ;; #( | |
17593 | *) | |
17594 | as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 | |
17595 | ;; | |
17596 | esac | |
17597 | ||
17598 | else | |
17599 | ||
17600 | DX_FLAG_pdf=0 | |
17601 | ||
17602 | ||
17603 | test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 | |
17604 | ||
17605 | ||
17606 | ||
17607 | fi | |
17608 | ||
17609 | if test "$DX_FLAG_pdf" = 1; then | |
17610 | ||
17611 | if test -n "$ac_tool_prefix"; then | |
17612 | # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. | |
17613 | set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 | |
17614 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17615 | $as_echo_n "checking for $ac_word... " >&6; } | |
17616 | if ${ac_cv_path_DX_PDFLATEX+:} false; then : | |
17617 | $as_echo_n "(cached) " >&6 | |
17618 | else | |
17619 | case $DX_PDFLATEX in | |
17620 | [\\/]* | ?:[\\/]*) | |
17621 | ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. | |
17622 | ;; | |
17623 | *) | |
17624 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17625 | for as_dir in $PATH | |
17626 | do | |
17627 | IFS=$as_save_IFS | |
17628 | test -z "$as_dir" && as_dir=. | |
17629 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17630 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17631 | ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" | |
17632 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17633 | break 2 | |
17634 | fi | |
17635 | done | |
17636 | done | |
17637 | IFS=$as_save_IFS | |
17638 | ||
17639 | ;; | |
17640 | esac | |
17641 | fi | |
17642 | DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX | |
17643 | if test -n "$DX_PDFLATEX"; then | |
17644 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 | |
17645 | $as_echo "$DX_PDFLATEX" >&6; } | |
17646 | else | |
17647 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17648 | $as_echo "no" >&6; } | |
17649 | fi | |
17650 | ||
17651 | ||
17652 | fi | |
17653 | if test -z "$ac_cv_path_DX_PDFLATEX"; then | |
17654 | ac_pt_DX_PDFLATEX=$DX_PDFLATEX | |
17655 | # Extract the first word of "pdflatex", so it can be a program name with args. | |
17656 | set dummy pdflatex; ac_word=$2 | |
17657 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17658 | $as_echo_n "checking for $ac_word... " >&6; } | |
17659 | if ${ac_cv_path_ac_pt_DX_PDFLATEX+:} false; then : | |
17660 | $as_echo_n "(cached) " >&6 | |
17661 | else | |
17662 | case $ac_pt_DX_PDFLATEX in | |
17663 | [\\/]* | ?:[\\/]*) | |
17664 | ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. | |
17665 | ;; | |
17666 | *) | |
17667 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17668 | for as_dir in $PATH | |
17669 | do | |
17670 | IFS=$as_save_IFS | |
17671 | test -z "$as_dir" && as_dir=. | |
17672 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17673 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17674 | ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" | |
17675 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17676 | break 2 | |
17677 | fi | |
17678 | done | |
17679 | done | |
17680 | IFS=$as_save_IFS | |
17681 | ||
17682 | ;; | |
17683 | esac | |
17684 | fi | |
17685 | ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX | |
17686 | if test -n "$ac_pt_DX_PDFLATEX"; then | |
17687 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 | |
17688 | $as_echo "$ac_pt_DX_PDFLATEX" >&6; } | |
17689 | else | |
17690 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17691 | $as_echo "no" >&6; } | |
17692 | fi | |
17693 | ||
17694 | if test "x$ac_pt_DX_PDFLATEX" = x; then | |
17695 | DX_PDFLATEX="" | |
17696 | else | |
17697 | case $cross_compiling:$ac_tool_warned in | |
17698 | yes:) | |
17699 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17700 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17701 | ac_tool_warned=yes ;; | |
17702 | esac | |
17703 | DX_PDFLATEX=$ac_pt_DX_PDFLATEX | |
17704 | fi | |
17705 | else | |
17706 | DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" | |
17707 | fi | |
17708 | ||
17709 | if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then | |
17710 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 | |
17711 | $as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} | |
17712 | DX_FLAG_pdf=0 | |
17713 | ||
17714 | fi | |
17715 | ||
17716 | ||
17717 | if test -n "$ac_tool_prefix"; then | |
17718 | # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. | |
17719 | set dummy ${ac_tool_prefix}makeindex; ac_word=$2 | |
17720 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17721 | $as_echo_n "checking for $ac_word... " >&6; } | |
17722 | if ${ac_cv_path_DX_MAKEINDEX+:} false; then : | |
17723 | $as_echo_n "(cached) " >&6 | |
17724 | else | |
17725 | case $DX_MAKEINDEX in | |
17726 | [\\/]* | ?:[\\/]*) | |
17727 | ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. | |
17728 | ;; | |
17729 | *) | |
17730 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17731 | for as_dir in $PATH | |
17732 | do | |
17733 | IFS=$as_save_IFS | |
17734 | test -z "$as_dir" && as_dir=. | |
17735 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17736 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17737 | ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" | |
17738 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17739 | break 2 | |
17740 | fi | |
17741 | done | |
17742 | done | |
17743 | IFS=$as_save_IFS | |
17744 | ||
17745 | ;; | |
17746 | esac | |
17747 | fi | |
17748 | DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX | |
17749 | if test -n "$DX_MAKEINDEX"; then | |
17750 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 | |
17751 | $as_echo "$DX_MAKEINDEX" >&6; } | |
17752 | else | |
17753 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17754 | $as_echo "no" >&6; } | |
17755 | fi | |
17756 | ||
17757 | ||
17758 | fi | |
17759 | if test -z "$ac_cv_path_DX_MAKEINDEX"; then | |
17760 | ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX | |
17761 | # Extract the first word of "makeindex", so it can be a program name with args. | |
17762 | set dummy makeindex; ac_word=$2 | |
17763 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17764 | $as_echo_n "checking for $ac_word... " >&6; } | |
17765 | if ${ac_cv_path_ac_pt_DX_MAKEINDEX+:} false; then : | |
17766 | $as_echo_n "(cached) " >&6 | |
17767 | else | |
17768 | case $ac_pt_DX_MAKEINDEX in | |
17769 | [\\/]* | ?:[\\/]*) | |
17770 | ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. | |
17771 | ;; | |
17772 | *) | |
17773 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17774 | for as_dir in $PATH | |
17775 | do | |
17776 | IFS=$as_save_IFS | |
17777 | test -z "$as_dir" && as_dir=. | |
17778 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17779 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17780 | ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" | |
17781 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17782 | break 2 | |
17783 | fi | |
17784 | done | |
17785 | done | |
17786 | IFS=$as_save_IFS | |
17787 | ||
17788 | ;; | |
17789 | esac | |
17790 | fi | |
17791 | ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX | |
17792 | if test -n "$ac_pt_DX_MAKEINDEX"; then | |
17793 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 | |
17794 | $as_echo "$ac_pt_DX_MAKEINDEX" >&6; } | |
17795 | else | |
17796 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17797 | $as_echo "no" >&6; } | |
17798 | fi | |
17799 | ||
17800 | if test "x$ac_pt_DX_MAKEINDEX" = x; then | |
17801 | DX_MAKEINDEX="" | |
17802 | else | |
17803 | case $cross_compiling:$ac_tool_warned in | |
17804 | yes:) | |
17805 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17806 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17807 | ac_tool_warned=yes ;; | |
17808 | esac | |
17809 | DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX | |
17810 | fi | |
17811 | else | |
17812 | DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" | |
17813 | fi | |
17814 | ||
17815 | if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then | |
17816 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 | |
17817 | $as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} | |
17818 | DX_FLAG_pdf=0 | |
17819 | ||
17820 | fi | |
17821 | ||
17822 | ||
17823 | if test -n "$ac_tool_prefix"; then | |
17824 | # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. | |
17825 | set dummy ${ac_tool_prefix}egrep; ac_word=$2 | |
17826 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17827 | $as_echo_n "checking for $ac_word... " >&6; } | |
17828 | if ${ac_cv_path_DX_EGREP+:} false; then : | |
17829 | $as_echo_n "(cached) " >&6 | |
17830 | else | |
17831 | case $DX_EGREP in | |
17832 | [\\/]* | ?:[\\/]*) | |
17833 | ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. | |
17834 | ;; | |
17835 | *) | |
17836 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17837 | for as_dir in $PATH | |
17838 | do | |
17839 | IFS=$as_save_IFS | |
17840 | test -z "$as_dir" && as_dir=. | |
17841 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17842 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17843 | ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" | |
17844 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17845 | break 2 | |
17846 | fi | |
17847 | done | |
17848 | done | |
17849 | IFS=$as_save_IFS | |
17850 | ||
17851 | ;; | |
17852 | esac | |
17853 | fi | |
17854 | DX_EGREP=$ac_cv_path_DX_EGREP | |
17855 | if test -n "$DX_EGREP"; then | |
17856 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 | |
17857 | $as_echo "$DX_EGREP" >&6; } | |
17858 | else | |
17859 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17860 | $as_echo "no" >&6; } | |
17861 | fi | |
17862 | ||
17863 | ||
17864 | fi | |
17865 | if test -z "$ac_cv_path_DX_EGREP"; then | |
17866 | ac_pt_DX_EGREP=$DX_EGREP | |
17867 | # Extract the first word of "egrep", so it can be a program name with args. | |
17868 | set dummy egrep; ac_word=$2 | |
17869 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
17870 | $as_echo_n "checking for $ac_word... " >&6; } | |
17871 | if ${ac_cv_path_ac_pt_DX_EGREP+:} false; then : | |
17872 | $as_echo_n "(cached) " >&6 | |
17873 | else | |
17874 | case $ac_pt_DX_EGREP in | |
17875 | [\\/]* | ?:[\\/]*) | |
17876 | ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. | |
17877 | ;; | |
17878 | *) | |
17879 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
17880 | for as_dir in $PATH | |
17881 | do | |
17882 | IFS=$as_save_IFS | |
17883 | test -z "$as_dir" && as_dir=. | |
17884 | for ac_exec_ext in '' $ac_executable_extensions; do | |
17885 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
17886 | ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" | |
17887 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
17888 | break 2 | |
17889 | fi | |
17890 | done | |
17891 | done | |
17892 | IFS=$as_save_IFS | |
17893 | ||
17894 | ;; | |
17895 | esac | |
17896 | fi | |
17897 | ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP | |
17898 | if test -n "$ac_pt_DX_EGREP"; then | |
17899 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 | |
17900 | $as_echo "$ac_pt_DX_EGREP" >&6; } | |
17901 | else | |
17902 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
17903 | $as_echo "no" >&6; } | |
17904 | fi | |
17905 | ||
17906 | if test "x$ac_pt_DX_EGREP" = x; then | |
17907 | DX_EGREP="" | |
17908 | else | |
17909 | case $cross_compiling:$ac_tool_warned in | |
17910 | yes:) | |
17911 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 | |
17912 | $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} | |
17913 | ac_tool_warned=yes ;; | |
17914 | esac | |
17915 | DX_EGREP=$ac_pt_DX_EGREP | |
17916 | fi | |
17917 | else | |
17918 | DX_EGREP="$ac_cv_path_DX_EGREP" | |
17919 | fi | |
17920 | ||
17921 | if test "$DX_FLAG_pdf$DX_EGREP" = 1; then | |
17922 | { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 | |
17923 | $as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} | |
17924 | DX_FLAG_pdf=0 | |
17925 | ||
17926 | fi | |
17927 | ||
17928 | : | |
17929 | fi | |
17930 | if test "$DX_FLAG_pdf" = 1; then | |
17931 | DX_COND_pdf_TRUE= | |
17932 | DX_COND_pdf_FALSE='#' | |
17933 | else | |
17934 | DX_COND_pdf_TRUE='#' | |
17935 | DX_COND_pdf_FALSE= | |
17936 | fi | |
17937 | ||
17938 | if test "$DX_FLAG_pdf" = 1; then | |
17939 | ||
17940 | : | |
17941 | else | |
17942 | ||
17943 | : | |
17944 | fi | |
17945 | ||
17946 | ||
17947 | # LaTeX generation for PS and/or PDF: | |
17948 | if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then | |
17949 | DX_COND_latex_TRUE= | |
17950 | DX_COND_latex_FALSE='#' | |
17951 | else | |
17952 | DX_COND_latex_TRUE='#' | |
17953 | DX_COND_latex_FALSE= | |
17954 | fi | |
17955 | ||
17956 | if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then | |
17957 | DX_ENV="$DX_ENV GENERATE_LATEX='YES'" | |
17958 | ||
17959 | else | |
17960 | DX_ENV="$DX_ENV GENERATE_LATEX='NO'" | |
17961 | ||
17962 | fi | |
17963 | ||
17964 | # Paper size for PS and/or PDF: | |
17965 | ||
17966 | case "$DOXYGEN_PAPER_SIZE" in | |
17967 | #( | |
17968 | "") | |
17969 | DOXYGEN_PAPER_SIZE="" | |
17970 | ||
17971 | ;; #( | |
17972 | a4wide|a4|letter|legal|executive) | |
17973 | DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" | |
17974 | ||
17975 | ;; #( | |
17976 | *) | |
17977 | as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 | |
17978 | ;; | |
17979 | esac | |
17980 | ||
17981 | #For debugging: | |
17982 | #echo DX_FLAG_doc=$DX_FLAG_doc | |
17983 | #echo DX_FLAG_dot=$DX_FLAG_dot | |
17984 | #echo DX_FLAG_man=$DX_FLAG_man | |
17985 | #echo DX_FLAG_html=$DX_FLAG_html | |
17986 | #echo DX_FLAG_chm=$DX_FLAG_chm | |
17987 | #echo DX_FLAG_chi=$DX_FLAG_chi | |
17988 | #echo DX_FLAG_rtf=$DX_FLAG_rtf | |
17989 | #echo DX_FLAG_xml=$DX_FLAG_xml | |
17990 | #echo DX_FLAG_pdf=$DX_FLAG_pdf | |
17991 | #echo DX_FLAG_ps=$DX_FLAG_ps | |
17992 | #echo DX_ENV=$DX_ENV | |
17993 | ||
17994 | if test "x$DX_DOXYGEN" != "x"; then : | |
17995 | has_doxygen=yes | |
17996 | else | |
17997 | has_doxygen=no | |
17998 | fi | |
17999 | if test "x$has_doxygen" = "xyes"; then | |
18000 | DOXYGEN_TARGET_TRUE= | |
18001 | DOXYGEN_TARGET_FALSE='#' | |
18002 | else | |
18003 | DOXYGEN_TARGET_TRUE='#' | |
18004 | DOXYGEN_TARGET_FALSE= | |
18005 | fi | |
18006 | ||
18007 | 16176 | |
18008 | 16177 | # Check whether --enable-protoc was given. |
18009 | 16178 | if test "${enable_protoc+set}" = set; then : |
18332 | 16501 | $as_echo_n "checking whether self tests are run under valgrind... " >&6; } |
18333 | 16502 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5 |
18334 | 16503 | $as_echo "$opt_valgrind_tests" >&6; } |
16504 | ||
16505 | ||
16506 | ||
16507 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5 | |
16508 | $as_echo_n "checking whether to build with code coverage support... " >&6; } | |
16509 | # Check whether --enable-code-coverage was given. | |
16510 | if test "${enable_code_coverage+set}" = set; then : | |
16511 | enableval=$enable_code_coverage; | |
16512 | else | |
16513 | enable_code_coverage=no | |
16514 | fi | |
16515 | ||
16516 | if test x$enable_code_coverage = xyes; then | |
16517 | CODE_COVERAGE_ENABLED_TRUE= | |
16518 | CODE_COVERAGE_ENABLED_FALSE='#' | |
16519 | else | |
16520 | CODE_COVERAGE_ENABLED_TRUE='#' | |
16521 | CODE_COVERAGE_ENABLED_FALSE= | |
16522 | fi | |
16523 | ||
16524 | CODE_COVERAGE_ENABLED=$enable_code_coverage | |
16525 | ||
16526 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5 | |
16527 | $as_echo "$enable_code_coverage" >&6; } | |
16528 | ||
16529 | if test "$enable_code_coverage" = "yes" ; then : | |
16530 | ||
16531 | if test "$GCC" = "no" ; then : | |
16532 | ||
16533 | as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5 | |
16534 | ||
16535 | fi | |
16536 | ||
16537 | # Extract the first word of "lcov", so it can be a program name with args. | |
16538 | set dummy lcov; ac_word=$2 | |
16539 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16540 | $as_echo_n "checking for $ac_word... " >&6; } | |
16541 | if ${ac_cv_prog_LCOV+:} false; then : | |
16542 | $as_echo_n "(cached) " >&6 | |
16543 | else | |
16544 | if test -n "$LCOV"; then | |
16545 | ac_cv_prog_LCOV="$LCOV" # Let the user override the test. | |
16546 | else | |
16547 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16548 | for as_dir in $PATH | |
16549 | do | |
16550 | IFS=$as_save_IFS | |
16551 | test -z "$as_dir" && as_dir=. | |
16552 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16553 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16554 | ac_cv_prog_LCOV="lcov" | |
16555 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16556 | break 2 | |
16557 | fi | |
16558 | done | |
16559 | done | |
16560 | IFS=$as_save_IFS | |
16561 | ||
16562 | fi | |
16563 | fi | |
16564 | LCOV=$ac_cv_prog_LCOV | |
16565 | if test -n "$LCOV"; then | |
16566 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 | |
16567 | $as_echo "$LCOV" >&6; } | |
16568 | else | |
16569 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16570 | $as_echo "no" >&6; } | |
16571 | fi | |
16572 | ||
16573 | ||
16574 | # Extract the first word of "genhtml", so it can be a program name with args. | |
16575 | set dummy genhtml; ac_word=$2 | |
16576 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
16577 | $as_echo_n "checking for $ac_word... " >&6; } | |
16578 | if ${ac_cv_prog_GENHTML+:} false; then : | |
16579 | $as_echo_n "(cached) " >&6 | |
16580 | else | |
16581 | if test -n "$GENHTML"; then | |
16582 | ac_cv_prog_GENHTML="$GENHTML" # Let the user override the test. | |
16583 | else | |
16584 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
16585 | for as_dir in $PATH | |
16586 | do | |
16587 | IFS=$as_save_IFS | |
16588 | test -z "$as_dir" && as_dir=. | |
16589 | for ac_exec_ext in '' $ac_executable_extensions; do | |
16590 | if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then | |
16591 | ac_cv_prog_GENHTML="genhtml" | |
16592 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
16593 | break 2 | |
16594 | fi | |
16595 | done | |
16596 | done | |
16597 | IFS=$as_save_IFS | |
16598 | ||
16599 | fi | |
16600 | fi | |
16601 | GENHTML=$ac_cv_prog_GENHTML | |
16602 | if test -n "$GENHTML"; then | |
16603 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 | |
16604 | $as_echo "$GENHTML" >&6; } | |
16605 | else | |
16606 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
16607 | $as_echo "no" >&6; } | |
16608 | fi | |
16609 | ||
16610 | ||
16611 | ||
16612 | if test -z "$LCOV" ; then : | |
16613 | ||
16614 | as_fn_error $? "The lcov program was not found. Please install lcov!" "$LINENO" 5 | |
16615 | ||
16616 | fi | |
16617 | ||
16618 | if test -z "$GENHTML" ; then : | |
16619 | ||
16620 | as_fn_error $? "The genhtml program was not found. Please install lcov!" "$LINENO" 5 | |
16621 | ||
16622 | fi | |
16623 | ||
16624 | CODE_COVERAGE_CFLAGS="-O0 -g --coverage" | |
16625 | CODE_COVERAGE_LDFLAGS="--coverage" | |
16626 | ||
16627 | ||
16628 | ||
16629 | ||
16630 | ||
16631 | CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` | |
16632 | ||
16633 | ||
16634 | fi | |
16635 | ||
16636 | CODE_COVERAGE_RULES=' | |
16637 | # Code coverage | |
16638 | # | |
16639 | # Optional: | |
16640 | # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. | |
16641 | # (Default: $(top_builddir)) | |
16642 | # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated | |
16643 | # by lcov for code coverage. (Default: | |
16644 | # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) | |
16645 | # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage | |
16646 | # reports to be created. (Default: | |
16647 | # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) | |
16648 | # - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the lcov instance. | |
16649 | # (Default: empty) | |
16650 | # - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml | |
16651 | # instance. (Default: empty) | |
16652 | # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore | |
16653 | # | |
16654 | # The generated report will be titled using the $(PACKAGE_NAME) and | |
16655 | # $(PACKAGE_VERSION). In order to add the current git hash to the title, | |
16656 | # use the git-version-gen script, available online. | |
16657 | ||
16658 | # Optional variables | |
16659 | CODE_COVERAGE_DIRECTORY ?= $(abs_top_builddir) | |
16660 | CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info | |
16661 | CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage | |
16662 | CODE_COVERAGE_LCOV_OPTIONS ?= | |
16663 | CODE_COVERAGE_GENHTML_OPTIONS ?= | |
16664 | CODE_COVERAGE_IGNORE_PATTERN ?= | |
16665 | ||
16666 | code_coverage_quiet = $(code_coverage_quiet_$(V)) | |
16667 | code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) | |
16668 | code_coverage_quiet_0 = --quiet | |
16669 | ||
16670 | # Use recursive makes in order to ignore errors during check | |
16671 | check-code-coverage: | |
16672 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
16673 | -$(MAKE) $(AM_MAKEFLAGS) -k check | |
16674 | $(MAKE) $(AM_MAKEFLAGS) code-coverage-capture | |
16675 | else | |
16676 | @echo "Need to reconfigure with --enable-code-coverage" | |
16677 | endif | |
16678 | ||
16679 | # Capture code coverage data | |
16680 | code-coverage-capture: code-coverage-capture-hook | |
16681 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
16682 | $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_OPTIONS) | |
16683 | $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" | |
16684 | -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp | |
16685 | LANG=C $(GENHTML) $(code_coverage_quiet) --prefix $(CODE_COVERAGE_DIRECTORY) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) | |
16686 | @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" | |
16687 | else | |
16688 | @echo "Need to reconfigure with --enable-code-coverage" | |
16689 | endif | |
16690 | ||
16691 | # Hook rule executed before code-coverage-capture, overridable by the user | |
16692 | code-coverage-capture-hook: | |
16693 | ||
16694 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
16695 | clean: code-coverage-clean | |
16696 | code-coverage-clean: | |
16697 | -$(LCOV) --directory $(CODE_COVERAGE_DIRECTORY) -z | |
16698 | -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY) | |
16699 | -find . -name "*.gcda" -o -name "*.gcov" -delete | |
16700 | endif | |
16701 | ||
16702 | GITIGNOREFILES ?= | |
16703 | GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) | |
16704 | ||
16705 | DISTCHECK_CONFIGURE_FLAGS ?= | |
16706 | DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage | |
16707 | ||
16708 | .PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean | |
16709 | ' | |
16710 | ||
16711 | ||
16712 | ||
18335 | 16713 | |
18336 | 16714 | |
18337 | 16715 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 |
18696 | 17074 | as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. |
18697 | 17075 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
18698 | 17076 | fi |
18699 | if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then | |
18700 | as_fn_error $? "conditional \"DX_COND_doc\" was never defined. | |
18701 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18702 | fi | |
18703 | if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then | |
18704 | as_fn_error $? "conditional \"DX_COND_dot\" was never defined. | |
18705 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18706 | fi | |
18707 | if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then | |
18708 | as_fn_error $? "conditional \"DX_COND_man\" was never defined. | |
18709 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18710 | fi | |
18711 | if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then | |
18712 | as_fn_error $? "conditional \"DX_COND_rtf\" was never defined. | |
18713 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18714 | fi | |
18715 | if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then | |
18716 | as_fn_error $? "conditional \"DX_COND_xml\" was never defined. | |
18717 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18718 | fi | |
18719 | if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then | |
18720 | as_fn_error $? "conditional \"DX_COND_chm\" was never defined. | |
18721 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18722 | fi | |
18723 | if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then | |
18724 | as_fn_error $? "conditional \"DX_COND_chi\" was never defined. | |
18725 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18726 | fi | |
18727 | if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then | |
18728 | as_fn_error $? "conditional \"DX_COND_html\" was never defined. | |
18729 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18730 | fi | |
18731 | if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then | |
18732 | as_fn_error $? "conditional \"DX_COND_ps\" was never defined. | |
18733 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18734 | fi | |
18735 | if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then | |
18736 | as_fn_error $? "conditional \"DX_COND_pdf\" was never defined. | |
18737 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18738 | fi | |
18739 | if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then | |
18740 | as_fn_error $? "conditional \"DX_COND_latex\" was never defined. | |
18741 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
18742 | fi | |
18743 | if test -z "${DOXYGEN_TARGET_TRUE}" && test -z "${DOXYGEN_TARGET_FALSE}"; then | |
18744 | as_fn_error $? "conditional \"DOXYGEN_TARGET\" was never defined. | |
17077 | if test -z "${HAVE_DOXYGEN_TRUE}" && test -z "${HAVE_DOXYGEN_FALSE}"; then | |
17078 | as_fn_error $? "conditional \"HAVE_DOXYGEN\" was never defined. | |
18745 | 17079 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
18746 | 17080 | fi |
18747 | 17081 | if test -z "${BUILD_COMPILER_TRUE}" && test -z "${BUILD_COMPILER_FALSE}"; then |
18750 | 17084 | fi |
18751 | 17085 | if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then |
18752 | 17086 | as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. |
17087 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 | |
17088 | fi | |
17089 | if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then | |
17090 | as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined. | |
18753 | 17091 | Usually this means the macro was only invoked conditionally." "$LINENO" 5 |
18754 | 17092 | fi |
18755 | 17093 | |
19150 | 17488 | # report actual input values of CONFIG_FILES etc. instead of their |
19151 | 17489 | # values after options handling. |
19152 | 17490 | ac_log=" |
19153 | This file was extended by protobuf-c $as_me 1.0.0-rc1, which was | |
17491 | This file was extended by protobuf-c $as_me 1.0.0-rc2, which was | |
19154 | 17492 | generated by GNU Autoconf 2.69. Invocation command line was |
19155 | 17493 | |
19156 | 17494 | CONFIG_FILES = $CONFIG_FILES |
19210 | 17548 | Configuration commands: |
19211 | 17549 | $config_commands |
19212 | 17550 | |
19213 | Report bugs to the package provider." | |
17551 | Report bugs to <https://github.com/protobuf-c/protobuf-c/issues>. | |
17552 | protobuf-c home page: <https://github.com/protobuf-c/protobuf-c>." | |
19214 | 17553 | |
19215 | 17554 | _ACEOF |
19216 | 17555 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
19217 | 17556 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
19218 | 17557 | ac_cs_version="\\ |
19219 | protobuf-c config.status 1.0.0-rc1 | |
17558 | protobuf-c config.status 1.0.0-rc2 | |
19220 | 17559 | configured by $0, generated by GNU Autoconf 2.69, |
19221 | 17560 | with options \\"\$ac_cs_config\\" |
19222 | 17561 | |
19725 | 18064 | "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; |
19726 | 18065 | "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; |
19727 | 18066 | "protobuf-c/libprotobuf-c.pc") CONFIG_FILES="$CONFIG_FILES protobuf-c/libprotobuf-c.pc" ;; |
18067 | "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; | |
19728 | 18068 | |
19729 | 18069 | *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; |
19730 | 18070 | esac |
21266 | 19606 | |
21267 | 19607 | bigendian: ${ac_cv_c_bigendian} |
21268 | 19608 | protobuf version: ${PROTOBUF_VERSION} |
21269 | doxygen docs: ${has_doxygen} | |
21270 | 19609 | " >&5 |
21271 | 19610 | $as_echo " |
21272 | 19611 | $PACKAGE $VERSION |
21286 | 19625 | |
21287 | 19626 | bigendian: ${ac_cv_c_bigendian} |
21288 | 19627 | protobuf version: ${PROTOBUF_VERSION} |
21289 | doxygen docs: ${has_doxygen} | |
21290 | 19628 | " >&6; } |
0 | AC_PREREQ(2.60) | |
1 | AC_INIT([protobuf-c], [1.0.0-rc1]) | |
0 | AC_PREREQ(2.64) | |
1 | ||
2 | AC_INIT([protobuf-c], | |
3 | [1.0.0-rc2], | |
4 | [https://github.com/protobuf-c/protobuf-c/issues], | |
5 | [protobuf-c], | |
6 | [https://github.com/protobuf-c/protobuf-c]) | |
7 | PACKAGE_DESCRIPTION="Protocol Buffers implementation in C" | |
8 | AC_SUBST(PACKAGE_DESCRIPTION) | |
9 | ||
2 | 10 | AC_CONFIG_SRCDIR([protobuf-c/protobuf-c.c]) |
3 | 11 | AC_CONFIG_AUX_DIR([build-aux]) |
4 | 12 | AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules subdir-objects]) |
15 | 23 | AC_CONFIG_HEADERS(config.h) |
16 | 24 | AC_CONFIG_FILES([Makefile protobuf-c/libprotobuf-c.pc]) |
17 | 25 | |
26 | AC_CHECK_PROGS([DOXYGEN], [doxygen]) | |
27 | AM_CONDITIONAL([HAVE_DOXYGEN], | |
28 | [test -n "$DOXYGEN"]) | |
29 | AM_COND_IF([HAVE_DOXYGEN], | |
30 | [AC_CONFIG_FILES([Doxyfile]) | |
31 | DOXYGEN_INPUT="${srcdir}/protobuf-c" | |
32 | AC_SUBST(DOXYGEN_INPUT) | |
33 | ]) | |
34 | ||
18 | 35 | PKG_PROG_PKG_CONFIG |
19 | 36 | if test -n "$PKG_CONFIG"; then |
20 | 37 | # Horrible hack for systems where the pkg-config install directory is simply wrong! |
24 | 41 | PKG_INSTALLDIR |
25 | 42 | fi |
26 | 43 | fi |
27 | ||
28 | DX_DOXYGEN_FEATURE(OFF) | |
29 | DX_PDF_FEATURE(OFF) | |
30 | DX_PS_FEATURE(OFF) | |
31 | DX_MAN_FEATURE(ON) | |
32 | DX_INIT_DOXYGEN([protobuf-c], [Doxyfile], [doxygen-doc]) | |
33 | AS_IF([test "x$DX_DOXYGEN" != "x"], [has_doxygen=yes], [has_doxygen=no]) | |
34 | AM_CONDITIONAL([DOXYGEN_TARGET], [test "x$has_doxygen" = "xyes"]) | |
35 | 44 | |
36 | 45 | AC_ARG_ENABLE([protoc], |
37 | 46 | AS_HELP_STRING([--disable-protoc], [Disable building protoc_c (also disables tests)])) |
62 | 71 | |
63 | 72 | gl_VALGRIND_TESTS |
64 | 73 | |
74 | MY_CODE_COVERAGE | |
75 | ||
65 | 76 | AC_C_BIGENDIAN |
66 | 77 | |
67 | 78 | AC_OUTPUT |
83 | 94 | |
84 | 95 | bigendian: ${ac_cv_c_bigendian} |
85 | 96 | protobuf version: ${PROTOBUF_VERSION} |
86 | doxygen docs: ${has_doxygen} | |
87 | 97 | ]) |
0 | # =========================================================================== | |
1 | # http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html | |
2 | # =========================================================================== | |
3 | # | |
4 | # SYNOPSIS | |
5 | # | |
6 | # DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR]) | |
7 | # DX_DOXYGEN_FEATURE(ON|OFF) | |
8 | # DX_DOT_FEATURE(ON|OFF) | |
9 | # DX_HTML_FEATURE(ON|OFF) | |
10 | # DX_CHM_FEATURE(ON|OFF) | |
11 | # DX_CHI_FEATURE(ON|OFF) | |
12 | # DX_MAN_FEATURE(ON|OFF) | |
13 | # DX_RTF_FEATURE(ON|OFF) | |
14 | # DX_XML_FEATURE(ON|OFF) | |
15 | # DX_PDF_FEATURE(ON|OFF) | |
16 | # DX_PS_FEATURE(ON|OFF) | |
17 | # | |
18 | # DESCRIPTION | |
19 | # | |
20 | # The DX_*_FEATURE macros control the default setting for the given | |
21 | # Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for | |
22 | # generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML | |
23 | # help (for MS users), 'CHI' for generating a seperate .chi file by the | |
24 | # .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate | |
25 | # output formats. The environment variable DOXYGEN_PAPER_SIZE may be | |
26 | # specified to override the default 'a4wide' paper size. | |
27 | # | |
28 | # By default, HTML, PDF and PS documentation is generated as this seems to | |
29 | # be the most popular and portable combination. MAN pages created by | |
30 | # Doxygen are usually problematic, though by picking an appropriate subset | |
31 | # and doing some massaging they might be better than nothing. CHM and RTF | |
32 | # are specific for MS (note that you can't generate both HTML and CHM at | |
33 | # the same time). The XML is rather useless unless you apply specialized | |
34 | # post-processing to it. | |
35 | # | |
36 | # The macros mainly control the default state of the feature. The use can | |
37 | # override the default by specifying --enable or --disable. The macros | |
38 | # ensure that contradictory flags are not given (e.g., | |
39 | # --enable-doxygen-html and --enable-doxygen-chm, | |
40 | # --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each | |
41 | # feature will be automatically disabled (with a warning) if the required | |
42 | # programs are missing. | |
43 | # | |
44 | # Once all the feature defaults have been specified, call DX_INIT_DOXYGEN | |
45 | # with the following parameters: a one-word name for the project for use | |
46 | # as a filename base etc., an optional configuration file name (the | |
47 | # default is 'Doxyfile', the same as Doxygen's default), and an optional | |
48 | # output directory name (the default is 'doxygen-doc'). | |
49 | # | |
50 | # Automake Support | |
51 | # | |
52 | # The following is a template aminclude.am file for use with Automake. | |
53 | # Make targets and variables values are controlled by the various | |
54 | # DX_COND_* conditionals set by autoconf. | |
55 | # | |
56 | # The provided targets are: | |
57 | # | |
58 | # doxygen-doc: Generate all doxygen documentation. | |
59 | # | |
60 | # doxygen-run: Run doxygen, which will generate some of the | |
61 | # documentation (HTML, CHM, CHI, MAN, RTF, XML) | |
62 | # but will not do the post processing required | |
63 | # for the rest of it (PS, PDF, and some MAN). | |
64 | # | |
65 | # doxygen-man: Rename some doxygen generated man pages. | |
66 | # | |
67 | # doxygen-ps: Generate doxygen PostScript documentation. | |
68 | # | |
69 | # doxygen-pdf: Generate doxygen PDF documentation. | |
70 | # | |
71 | # Note that by default these are not integrated into the automake targets. | |
72 | # If doxygen is used to generate man pages, you can achieve this | |
73 | # integration by setting man3_MANS to the list of man pages generated and | |
74 | # then adding the dependency: | |
75 | # | |
76 | # $(man3_MANS): doxygen-doc | |
77 | # | |
78 | # This will cause make to run doxygen and generate all the documentation. | |
79 | # | |
80 | # The following variable is intended for use in Makefile.am: | |
81 | # | |
82 | # DX_CLEANFILES = everything to clean. | |
83 | # | |
84 | # Then add this variable to MOSTLYCLEANFILES. | |
85 | # | |
86 | # ----- begin aminclude.am ------------------------------------- | |
87 | # | |
88 | # ## --------------------------------- ## | |
89 | # ## Format-independent Doxygen rules. ## | |
90 | # ## --------------------------------- ## | |
91 | # | |
92 | # if DX_COND_doc | |
93 | # | |
94 | # ## ------------------------------- ## | |
95 | # ## Rules specific for HTML output. ## | |
96 | # ## ------------------------------- ## | |
97 | # | |
98 | # if DX_COND_html | |
99 | # | |
100 | # DX_CLEAN_HTML = @DX_DOCDIR@/html | |
101 | # | |
102 | # endif DX_COND_html | |
103 | # | |
104 | # ## ------------------------------ ## | |
105 | # ## Rules specific for CHM output. ## | |
106 | # ## ------------------------------ ## | |
107 | # | |
108 | # if DX_COND_chm | |
109 | # | |
110 | # DX_CLEAN_CHM = @DX_DOCDIR@/chm | |
111 | # | |
112 | # if DX_COND_chi | |
113 | # | |
114 | # DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi | |
115 | # | |
116 | # endif DX_COND_chi | |
117 | # | |
118 | # endif DX_COND_chm | |
119 | # | |
120 | # ## ------------------------------ ## | |
121 | # ## Rules specific for MAN output. ## | |
122 | # ## ------------------------------ ## | |
123 | # | |
124 | # if DX_COND_man | |
125 | # | |
126 | # DX_CLEAN_MAN = @DX_DOCDIR@/man | |
127 | # | |
128 | # endif DX_COND_man | |
129 | # | |
130 | # ## ------------------------------ ## | |
131 | # ## Rules specific for RTF output. ## | |
132 | # ## ------------------------------ ## | |
133 | # | |
134 | # if DX_COND_rtf | |
135 | # | |
136 | # DX_CLEAN_RTF = @DX_DOCDIR@/rtf | |
137 | # | |
138 | # endif DX_COND_rtf | |
139 | # | |
140 | # ## ------------------------------ ## | |
141 | # ## Rules specific for XML output. ## | |
142 | # ## ------------------------------ ## | |
143 | # | |
144 | # if DX_COND_xml | |
145 | # | |
146 | # DX_CLEAN_XML = @DX_DOCDIR@/xml | |
147 | # | |
148 | # endif DX_COND_xml | |
149 | # | |
150 | # ## ----------------------------- ## | |
151 | # ## Rules specific for PS output. ## | |
152 | # ## ----------------------------- ## | |
153 | # | |
154 | # if DX_COND_ps | |
155 | # | |
156 | # DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps | |
157 | # | |
158 | # DX_PS_GOAL = doxygen-ps | |
159 | # | |
160 | # doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps | |
161 | # | |
162 | # @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag | |
163 | # cd @DX_DOCDIR@/latex; \ | |
164 | # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
165 | # $(DX_LATEX) refman.tex; \ | |
166 | # $(MAKEINDEX_PATH) refman.idx; \ | |
167 | # $(DX_LATEX) refman.tex; \ | |
168 | # countdown=5; \ | |
169 | # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
170 | # refman.log > /dev/null 2>&1 \ | |
171 | # && test $$countdown -gt 0; do \ | |
172 | # $(DX_LATEX) refman.tex; \ | |
173 | # countdown=`expr $$countdown - 1`; \ | |
174 | # done; \ | |
175 | # $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi | |
176 | # | |
177 | # endif DX_COND_ps | |
178 | # | |
179 | # ## ------------------------------ ## | |
180 | # ## Rules specific for PDF output. ## | |
181 | # ## ------------------------------ ## | |
182 | # | |
183 | # if DX_COND_pdf | |
184 | # | |
185 | # DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf | |
186 | # | |
187 | # DX_PDF_GOAL = doxygen-pdf | |
188 | # | |
189 | # doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf | |
190 | # | |
191 | # @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag | |
192 | # cd @DX_DOCDIR@/latex; \ | |
193 | # rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ | |
194 | # $(DX_PDFLATEX) refman.tex; \ | |
195 | # $(DX_MAKEINDEX) refman.idx; \ | |
196 | # $(DX_PDFLATEX) refman.tex; \ | |
197 | # countdown=5; \ | |
198 | # while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ | |
199 | # refman.log > /dev/null 2>&1 \ | |
200 | # && test $$countdown -gt 0; do \ | |
201 | # $(DX_PDFLATEX) refman.tex; \ | |
202 | # countdown=`expr $$countdown - 1`; \ | |
203 | # done; \ | |
204 | # mv refman.pdf ../@PACKAGE@.pdf | |
205 | # | |
206 | # endif DX_COND_pdf | |
207 | # | |
208 | # ## ------------------------------------------------- ## | |
209 | # ## Rules specific for LaTeX (shared for PS and PDF). ## | |
210 | # ## ------------------------------------------------- ## | |
211 | # | |
212 | # if DX_COND_latex | |
213 | # | |
214 | # DX_CLEAN_LATEX = @DX_DOCDIR@/latex | |
215 | # | |
216 | # endif DX_COND_latex | |
217 | # | |
218 | # .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
219 | # | |
220 | # .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
221 | # | |
222 | # doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag | |
223 | # | |
224 | # doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) | |
225 | # | |
226 | # @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) | |
227 | # rm -rf @DX_DOCDIR@ | |
228 | # $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) | |
229 | # | |
230 | # DX_CLEANFILES = \ | |
231 | # @DX_DOCDIR@/@PACKAGE@.tag \ | |
232 | # -r \ | |
233 | # $(DX_CLEAN_HTML) \ | |
234 | # $(DX_CLEAN_CHM) \ | |
235 | # $(DX_CLEAN_CHI) \ | |
236 | # $(DX_CLEAN_MAN) \ | |
237 | # $(DX_CLEAN_RTF) \ | |
238 | # $(DX_CLEAN_XML) \ | |
239 | # $(DX_CLEAN_PS) \ | |
240 | # $(DX_CLEAN_PDF) \ | |
241 | # $(DX_CLEAN_LATEX) | |
242 | # | |
243 | # endif DX_COND_doc | |
244 | # | |
245 | # ----- end aminclude.am --------------------------------------- | |
246 | # | |
247 | # LICENSE | |
248 | # | |
249 | # Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org> | |
250 | # | |
251 | # Copying and distribution of this file, with or without modification, are | |
252 | # permitted in any medium without royalty provided the copyright notice | |
253 | # and this notice are preserved. This file is offered as-is, without any | |
254 | # warranty. | |
255 | ||
256 | #serial 12 | |
257 | ||
258 | ## ----------## | |
259 | ## Defaults. ## | |
260 | ## ----------## | |
261 | ||
262 | DX_ENV="" | |
263 | AC_DEFUN([DX_FEATURE_doc], ON) | |
264 | AC_DEFUN([DX_FEATURE_dot], OFF) | |
265 | AC_DEFUN([DX_FEATURE_man], OFF) | |
266 | AC_DEFUN([DX_FEATURE_html], ON) | |
267 | AC_DEFUN([DX_FEATURE_chm], OFF) | |
268 | AC_DEFUN([DX_FEATURE_chi], OFF) | |
269 | AC_DEFUN([DX_FEATURE_rtf], OFF) | |
270 | AC_DEFUN([DX_FEATURE_xml], OFF) | |
271 | AC_DEFUN([DX_FEATURE_pdf], ON) | |
272 | AC_DEFUN([DX_FEATURE_ps], ON) | |
273 | ||
274 | ## --------------- ## | |
275 | ## Private macros. ## | |
276 | ## --------------- ## | |
277 | ||
278 | # DX_ENV_APPEND(VARIABLE, VALUE) | |
279 | # ------------------------------ | |
280 | # Append VARIABLE="VALUE" to DX_ENV for invoking doxygen. | |
281 | AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) | |
282 | ||
283 | # DX_DIRNAME_EXPR | |
284 | # --------------- | |
285 | # Expand into a shell expression prints the directory part of a path. | |
286 | AC_DEFUN([DX_DIRNAME_EXPR], | |
287 | [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) | |
288 | ||
289 | # DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) | |
290 | # ------------------------------------- | |
291 | # Expands according to the M4 (static) status of the feature. | |
292 | AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) | |
293 | ||
294 | # DX_REQUIRE_PROG(VARIABLE, PROGRAM) | |
295 | # ---------------------------------- | |
296 | # Require the specified program to be found for the DX_CURRENT_FEATURE to work. | |
297 | AC_DEFUN([DX_REQUIRE_PROG], [ | |
298 | AC_PATH_TOOL([$1], [$2]) | |
299 | if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then | |
300 | AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) | |
301 | AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) | |
302 | fi | |
303 | ]) | |
304 | ||
305 | # DX_TEST_FEATURE(FEATURE) | |
306 | # ------------------------ | |
307 | # Expand to a shell expression testing whether the feature is active. | |
308 | AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) | |
309 | ||
310 | # DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) | |
311 | # ------------------------------------------------- | |
312 | # Verify that a required features has the right state before trying to turn on | |
313 | # the DX_CURRENT_FEATURE. | |
314 | AC_DEFUN([DX_CHECK_DEPEND], [ | |
315 | test "$DX_FLAG_$1" = "$2" \ | |
316 | || AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, | |
317 | requires, contradicts) doxygen-DX_CURRENT_FEATURE]) | |
318 | ]) | |
319 | ||
320 | # DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) | |
321 | # ---------------------------------------------------------- | |
322 | # Turn off the DX_CURRENT_FEATURE if the required feature is off. | |
323 | AC_DEFUN([DX_CLEAR_DEPEND], [ | |
324 | test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) | |
325 | ]) | |
326 | ||
327 | # DX_FEATURE_ARG(FEATURE, DESCRIPTION, | |
328 | # CHECK_DEPEND, CLEAR_DEPEND, | |
329 | # REQUIRE, DO-IF-ON, DO-IF-OFF) | |
330 | # -------------------------------------------- | |
331 | # Parse the command-line option controlling a feature. CHECK_DEPEND is called | |
332 | # if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), | |
333 | # otherwise CLEAR_DEPEND is called to turn off the default state if a required | |
334 | # feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional | |
335 | # requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and | |
336 | # DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. | |
337 | AC_DEFUN([DX_ARG_ABLE], [ | |
338 | AC_DEFUN([DX_CURRENT_FEATURE], [$1]) | |
339 | AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) | |
340 | AC_ARG_ENABLE(doxygen-$1, | |
341 | [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], | |
342 | [--enable-doxygen-$1]), | |
343 | DX_IF_FEATURE([$1], [don't $2], [$2]))], | |
344 | [ | |
345 | case "$enableval" in | |
346 | #( | |
347 | y|Y|yes|Yes|YES) | |
348 | AC_SUBST([DX_FLAG_$1], 1) | |
349 | $3 | |
350 | ;; #( | |
351 | n|N|no|No|NO) | |
352 | AC_SUBST([DX_FLAG_$1], 0) | |
353 | ;; #( | |
354 | *) | |
355 | AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) | |
356 | ;; | |
357 | esac | |
358 | ], [ | |
359 | AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) | |
360 | $4 | |
361 | ]) | |
362 | if DX_TEST_FEATURE([$1]); then | |
363 | $5 | |
364 | : | |
365 | fi | |
366 | AM_CONDITIONAL(DX_COND_$1, DX_TEST_FEATURE([$1])) | |
367 | if DX_TEST_FEATURE([$1]); then | |
368 | $6 | |
369 | : | |
370 | else | |
371 | $7 | |
372 | : | |
373 | fi | |
374 | ]) | |
375 | ||
376 | ## -------------- ## | |
377 | ## Public macros. ## | |
378 | ## -------------- ## | |
379 | ||
380 | # DX_XXX_FEATURE(DEFAULT_STATE) | |
381 | # ----------------------------- | |
382 | AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) | |
383 | AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) | |
384 | AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) | |
385 | AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) | |
386 | AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) | |
387 | AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) | |
388 | AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) | |
389 | AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) | |
390 | AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) | |
391 | AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) | |
392 | AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) | |
393 | ||
394 | # DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR]) | |
395 | # --------------------------------------------------------- | |
396 | # PROJECT also serves as the base name for the documentation files. | |
397 | # The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc". | |
398 | AC_DEFUN([DX_INIT_DOXYGEN], [ | |
399 | ||
400 | # Files: | |
401 | AC_SUBST([DX_PROJECT], [$1]) | |
402 | AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) | |
403 | AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) | |
404 | ||
405 | # Environment variables used inside doxygen.cfg: | |
406 | DX_ENV_APPEND(SRCDIR, $srcdir) | |
407 | DX_ENV_APPEND(PROJECT, $DX_PROJECT) | |
408 | DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) | |
409 | DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) | |
410 | ||
411 | # Doxygen itself: | |
412 | DX_ARG_ABLE(doc, [generate any doxygen documentation], | |
413 | [], | |
414 | [], | |
415 | [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) | |
416 | DX_REQUIRE_PROG([DX_PERL], perl)], | |
417 | [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) | |
418 | ||
419 | # Dot for graphics: | |
420 | DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], | |
421 | [DX_CHECK_DEPEND(doc, 1)], | |
422 | [DX_CLEAR_DEPEND(doc, 1)], | |
423 | [DX_REQUIRE_PROG([DX_DOT], dot)], | |
424 | [DX_ENV_APPEND(HAVE_DOT, YES) | |
425 | DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], | |
426 | [DX_ENV_APPEND(HAVE_DOT, NO)]) | |
427 | ||
428 | # Man pages generation: | |
429 | DX_ARG_ABLE(man, [generate doxygen manual pages], | |
430 | [DX_CHECK_DEPEND(doc, 1)], | |
431 | [DX_CLEAR_DEPEND(doc, 1)], | |
432 | [], | |
433 | [DX_ENV_APPEND(GENERATE_MAN, YES)], | |
434 | [DX_ENV_APPEND(GENERATE_MAN, NO)]) | |
435 | ||
436 | # RTF file generation: | |
437 | DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], | |
438 | [DX_CHECK_DEPEND(doc, 1)], | |
439 | [DX_CLEAR_DEPEND(doc, 1)], | |
440 | [], | |
441 | [DX_ENV_APPEND(GENERATE_RTF, YES)], | |
442 | [DX_ENV_APPEND(GENERATE_RTF, NO)]) | |
443 | ||
444 | # XML file generation: | |
445 | DX_ARG_ABLE(xml, [generate doxygen XML documentation], | |
446 | [DX_CHECK_DEPEND(doc, 1)], | |
447 | [DX_CLEAR_DEPEND(doc, 1)], | |
448 | [], | |
449 | [DX_ENV_APPEND(GENERATE_XML, YES)], | |
450 | [DX_ENV_APPEND(GENERATE_XML, NO)]) | |
451 | ||
452 | # (Compressed) HTML help generation: | |
453 | DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], | |
454 | [DX_CHECK_DEPEND(doc, 1)], | |
455 | [DX_CLEAR_DEPEND(doc, 1)], | |
456 | [DX_REQUIRE_PROG([DX_HHC], hhc)], | |
457 | [DX_ENV_APPEND(HHC_PATH, $DX_HHC) | |
458 | DX_ENV_APPEND(GENERATE_HTML, YES) | |
459 | DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], | |
460 | [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) | |
461 | ||
462 | # Seperate CHI file generation. | |
463 | DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], | |
464 | [DX_CHECK_DEPEND(chm, 1)], | |
465 | [DX_CLEAR_DEPEND(chm, 1)], | |
466 | [], | |
467 | [DX_ENV_APPEND(GENERATE_CHI, YES)], | |
468 | [DX_ENV_APPEND(GENERATE_CHI, NO)]) | |
469 | ||
470 | # Plain HTML pages generation: | |
471 | DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], | |
472 | [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], | |
473 | [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], | |
474 | [], | |
475 | [DX_ENV_APPEND(GENERATE_HTML, YES)], | |
476 | [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) | |
477 | ||
478 | # PostScript file generation: | |
479 | DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], | |
480 | [DX_CHECK_DEPEND(doc, 1)], | |
481 | [DX_CLEAR_DEPEND(doc, 1)], | |
482 | [DX_REQUIRE_PROG([DX_LATEX], latex) | |
483 | DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) | |
484 | DX_REQUIRE_PROG([DX_DVIPS], dvips) | |
485 | DX_REQUIRE_PROG([DX_EGREP], egrep)]) | |
486 | ||
487 | # PDF file generation: | |
488 | DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], | |
489 | [DX_CHECK_DEPEND(doc, 1)], | |
490 | [DX_CLEAR_DEPEND(doc, 1)], | |
491 | [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) | |
492 | DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) | |
493 | DX_REQUIRE_PROG([DX_EGREP], egrep)]) | |
494 | ||
495 | # LaTeX generation for PS and/or PDF: | |
496 | AM_CONDITIONAL(DX_COND_latex, DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf)) | |
497 | if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then | |
498 | DX_ENV_APPEND(GENERATE_LATEX, YES) | |
499 | else | |
500 | DX_ENV_APPEND(GENERATE_LATEX, NO) | |
501 | fi | |
502 | ||
503 | # Paper size for PS and/or PDF: | |
504 | AC_ARG_VAR(DOXYGEN_PAPER_SIZE, | |
505 | [a4wide (default), a4, letter, legal or executive]) | |
506 | case "$DOXYGEN_PAPER_SIZE" in | |
507 | #( | |
508 | "") | |
509 | AC_SUBST(DOXYGEN_PAPER_SIZE, "") | |
510 | ;; #( | |
511 | a4wide|a4|letter|legal|executive) | |
512 | DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) | |
513 | ;; #( | |
514 | *) | |
515 | AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) | |
516 | ;; | |
517 | esac | |
518 | ||
519 | #For debugging: | |
520 | #echo DX_FLAG_doc=$DX_FLAG_doc | |
521 | #echo DX_FLAG_dot=$DX_FLAG_dot | |
522 | #echo DX_FLAG_man=$DX_FLAG_man | |
523 | #echo DX_FLAG_html=$DX_FLAG_html | |
524 | #echo DX_FLAG_chm=$DX_FLAG_chm | |
525 | #echo DX_FLAG_chi=$DX_FLAG_chi | |
526 | #echo DX_FLAG_rtf=$DX_FLAG_rtf | |
527 | #echo DX_FLAG_xml=$DX_FLAG_xml | |
528 | #echo DX_FLAG_pdf=$DX_FLAG_pdf | |
529 | #echo DX_FLAG_ps=$DX_FLAG_ps | |
530 | #echo DX_ENV=$DX_ENV | |
531 | ]) |
0 | # SYNOPSIS | |
1 | # | |
2 | # MY_CODE_COVERAGE() | |
3 | # | |
4 | # DESCRIPTION | |
5 | # | |
6 | # Defines CODE_COVERAGE_CFLAGS and CODE_COVERAGE_LDFLAGS which should be | |
7 | # included in the CFLAGS and LIBS/LDFLAGS variables of every build target | |
8 | # (program or library) which should be built with code coverage support. | |
9 | # Also defines CODE_COVERAGE_RULES which should be substituted in your | |
10 | # Makefile; and $enable_code_coverage which can be used in subsequent | |
11 | # configure output. CODE_COVERAGE_ENABLED is defined and substituted, and | |
12 | # corresponds to the value of the --enable-code-coverage option, which | |
13 | # defaults to being disabled. | |
14 | # | |
15 | # Usage example: | |
16 | # configure.ac: | |
17 | # MY_CODE_COVERAGE | |
18 | # | |
19 | # Makefile.am: | |
20 | # @CODE_COVERAGE_RULES@ | |
21 | # my_program_LIBS = … $(CODE_COVERAGE_LDFLAGS) … | |
22 | # my_program_CFLAGS = … $(CODE_COVERAGE_CFLAGS) … | |
23 | # | |
24 | # This results in a “check-code-coverage” rule being added to any Makefile.am | |
25 | # which includes “@CODE_COVERAGE_RULES@” (assuming the module has been | |
26 | # configured with --enable-code-coverage). Running `make check-code-coverage` | |
27 | # in that directory will run the module’s test suite (`make check`) and build | |
28 | # a code coverage report detailing the code which was touched, then print the | |
29 | # URI for the report. | |
30 | # | |
31 | # LICENSE | |
32 | # | |
33 | # Copyright © 2012, 2014 Philip Withnall | |
34 | # Copyright © 2012 Xan Lopez | |
35 | # Copyright © 2012 Christian Persch | |
36 | # Copyright © 2012 Paolo Borelli | |
37 | # Copyright © 2012 Dan Winship | |
38 | # | |
39 | # Derived from Makefile.decl in GLib, originally licenced under LGPLv2.1+. | |
40 | # This file is licenced under LGPLv2.1+. | |
41 | ||
42 | AC_DEFUN([MY_CODE_COVERAGE],[ | |
43 | dnl Check for --enable-code-coverage | |
44 | AC_MSG_CHECKING([whether to build with code coverage support]) | |
45 | AC_ARG_ENABLE([code-coverage], AS_HELP_STRING([--enable-code-coverage], [Whether to enable code coverage support]),, enable_code_coverage=no) | |
46 | AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes]) | |
47 | AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) | |
48 | AC_MSG_RESULT($enable_code_coverage) | |
49 | ||
50 | AS_IF([ test "$enable_code_coverage" = "yes" ], [ | |
51 | dnl Check if gcc is being used | |
52 | AS_IF([ test "$GCC" = "no" ], [ | |
53 | AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) | |
54 | ]) | |
55 | ||
56 | AC_CHECK_PROG([LCOV], [lcov], [lcov]) | |
57 | AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) | |
58 | ||
59 | AS_IF([ test -z "$LCOV" ], [ | |
60 | AC_MSG_ERROR([The lcov program was not found. Please install lcov!]) | |
61 | ]) | |
62 | ||
63 | AS_IF([ test -z "$GENHTML" ], [ | |
64 | AC_MSG_ERROR([The genhtml program was not found. Please install lcov!]) | |
65 | ]) | |
66 | ||
67 | dnl Build the code coverage flags | |
68 | CODE_COVERAGE_CFLAGS="-O0 -g --coverage" | |
69 | CODE_COVERAGE_LDFLAGS="--coverage" | |
70 | ||
71 | AC_SUBST([CODE_COVERAGE_CFLAGS]) | |
72 | AC_SUBST([CODE_COVERAGE_LDFLAGS]) | |
73 | ||
74 | dnl Strip optimisation flags | |
75 | changequote({,}) | |
76 | CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` | |
77 | changequote([,]) | |
78 | ]) | |
79 | ||
80 | CODE_COVERAGE_RULES=' | |
81 | # Code coverage | |
82 | # | |
83 | # Optional: | |
84 | # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. | |
85 | # (Default: $(top_builddir)) | |
86 | # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated | |
87 | # by lcov for code coverage. (Default: | |
88 | # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) | |
89 | # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage | |
90 | # reports to be created. (Default: | |
91 | # $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) | |
92 | # - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the lcov instance. | |
93 | # (Default: empty) | |
94 | # - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml | |
95 | # instance. (Default: empty) | |
96 | # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore | |
97 | # | |
98 | # The generated report will be titled using the $(PACKAGE_NAME) and | |
99 | # $(PACKAGE_VERSION). In order to add the current git hash to the title, | |
100 | # use the git-version-gen script, available online. | |
101 | ||
102 | # Optional variables | |
103 | CODE_COVERAGE_DIRECTORY ?= $(abs_top_builddir) | |
104 | CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info | |
105 | CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage | |
106 | CODE_COVERAGE_LCOV_OPTIONS ?= | |
107 | CODE_COVERAGE_GENHTML_OPTIONS ?= | |
108 | CODE_COVERAGE_IGNORE_PATTERN ?= | |
109 | ||
110 | code_coverage_quiet = $(code_coverage_quiet_$(V)) | |
111 | code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) | |
112 | code_coverage_quiet_0 = --quiet | |
113 | ||
114 | # Use recursive makes in order to ignore errors during check | |
115 | check-code-coverage: | |
116 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
117 | -$(MAKE) $(AM_MAKEFLAGS) -k check | |
118 | $(MAKE) $(AM_MAKEFLAGS) code-coverage-capture | |
119 | else | |
120 | @echo "Need to reconfigure with --enable-code-coverage" | |
121 | endif | |
122 | ||
123 | # Capture code coverage data | |
124 | code-coverage-capture: code-coverage-capture-hook | |
125 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
126 | $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_OPTIONS) | |
127 | $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" | |
128 | -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp | |
129 | LANG=C $(GENHTML) $(code_coverage_quiet) --prefix $(CODE_COVERAGE_DIRECTORY) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) | |
130 | @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" | |
131 | else | |
132 | @echo "Need to reconfigure with --enable-code-coverage" | |
133 | endif | |
134 | ||
135 | # Hook rule executed before code-coverage-capture, overridable by the user | |
136 | code-coverage-capture-hook: | |
137 | ||
138 | ifeq ($(CODE_COVERAGE_ENABLED),yes) | |
139 | clean: code-coverage-clean | |
140 | code-coverage-clean: | |
141 | -$(LCOV) --directory $(CODE_COVERAGE_DIRECTORY) -z | |
142 | -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY) | |
143 | -find . -name "*.gcda" -o -name "*.gcov" -delete | |
144 | endif | |
145 | ||
146 | GITIGNOREFILES ?= | |
147 | GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) | |
148 | ||
149 | DISTCHECK_CONFIGURE_FLAGS ?= | |
150 | DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage | |
151 | ||
152 | .PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean | |
153 | ' | |
154 | ||
155 | AC_SUBST([CODE_COVERAGE_RULES]) | |
156 | m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])]) | |
157 | ]) |
1 | 1 | exec_prefix=@exec_prefix@ |
2 | 2 | libdir=@libdir@ |
3 | 3 | includedir=@includedir@ |
4 | bindir=@bindir@ | |
4 | 5 | |
5 | 6 | Name: libprotobuf-c |
6 | 7 | Description: Protocol Buffers C library |
0 | 0 | LIBPROTOBUF_C_1.0.0 { |
1 | 1 | global: |
2 | 2 | protobuf_c_buffer_simple_append; |
3 | protobuf_c_default_allocator; | |
4 | 3 | protobuf_c_enum_descriptor_get_value; |
5 | 4 | protobuf_c_enum_descriptor_get_value_by_name; |
6 | 5 | protobuf_c_message_check; |
0 | /* --- protobuf-c.c: protobuf c runtime implementation --- */ | |
1 | ||
2 | 0 | /* |
3 | 1 | * Copyright (c) 2008-2014, Dave Benson and the protobuf-c authors. |
4 | 2 | * All rights reserved. |
28 | 26 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | 27 | */ |
30 | 28 | |
31 | /* | |
32 | * Todo items: | |
33 | * | |
34 | * 64-BIT OPTIMIZATION: certain implementations use 32-bit math even on 64-bit | |
35 | * platforms (uint64_size, uint64_pack, parse_uint64). | |
36 | * | |
37 | * get_packed_size and pack seem to use type-prefixed names, whereas parse uses | |
38 | * type-suffixed names. pick one and stick with it. Decision: go with | |
39 | * type-suffixed, since the type (or its instance) is typically the object of | |
40 | * the verb. NOTE: perhaps the "parse" methods should be renamed to "unpack" at | |
41 | * the same time. (this only affects internal (static) functions) | |
42 | * | |
43 | * use TRUE and FALSE instead of 1 and 0 as appropriate. | |
44 | * | |
45 | * use size_t consistently. | |
29 | /*! \file | |
30 | * Support library for `protoc-c` generated code. | |
31 | * | |
32 | * This file implements the public API used by the code generated | |
33 | * by `protoc-c`. | |
34 | * | |
35 | * \authors Dave Benson and the protobuf-c authors | |
36 | * | |
37 | * \copyright 2008-2014. Licensed under the terms of the [BSD-2-Clause] license. | |
38 | */ | |
39 | ||
40 | /** | |
41 | * \todo 64-BIT OPTIMIZATION: certain implementations use 32-bit math | |
42 | * even on 64-bit platforms (uint64_size, uint64_pack, parse_uint64). | |
43 | * | |
44 | * \todo Use size_t consistently. | |
46 | 45 | */ |
47 | 46 | |
48 | 47 | #include <stdlib.h> /* for malloc, free */ |
53 | 52 | #define TRUE 1 |
54 | 53 | #define FALSE 0 |
55 | 54 | |
56 | /* The maximum length of a 64 bit integer in varint encoding. */ | |
55 | #define PROTOBUF_C__ASSERT_NOT_REACHED() assert(0) | |
56 | ||
57 | /** | |
58 | * \defgroup internal Internal functions and macros | |
59 | * | |
60 | * These are not exported by the library but are useful to developers working | |
61 | * on `libprotobuf-c` itself. | |
62 | */ | |
63 | ||
64 | /** | |
65 | * \defgroup macros Utility macros for manipulating structures | |
66 | * | |
67 | * Macros and constants used to manipulate the base "classes" generated by | |
68 | * `protobuf-c`. They also define limits and check correctness. | |
69 | * | |
70 | * \ingroup internal | |
71 | * @{ | |
72 | */ | |
73 | ||
74 | /** The maximum length of a 64-bit integer in varint encoding. */ | |
57 | 75 | #define MAX_UINT64_ENCODED_SIZE 10 |
58 | 76 | |
59 | 77 | #ifndef PROTOBUF_C_UNPACK_ERROR |
60 | 78 | # define PROTOBUF_C_UNPACK_ERROR(...) |
61 | 79 | #endif |
62 | 80 | |
81 | /** | |
82 | * Internal `ProtobufCMessage` manipulation macro. | |
83 | * | |
84 | * Base macro for manipulating a `ProtobufCMessage`. Used by STRUCT_MEMBER() and | |
85 | * STRUCT_MEMBER_PTR(). | |
86 | */ | |
63 | 87 | #define STRUCT_MEMBER_P(struct_p, struct_offset) \ |
64 | 88 | ((void *) ((uint8_t *) (struct_p) + (struct_offset))) |
65 | 89 | |
90 | /** | |
91 | * Return field in a `ProtobufCMessage` based on offset. | |
92 | * | |
93 | * Take a pointer to a `ProtobufCMessage` and find the field at the offset. | |
94 | * Cast it to the passed type. | |
95 | */ | |
66 | 96 | #define STRUCT_MEMBER(member_type, struct_p, struct_offset) \ |
67 | 97 | (*(member_type *) STRUCT_MEMBER_P((struct_p), (struct_offset))) |
68 | 98 | |
99 | /** | |
100 | * Return field in a `ProtobufCMessage` based on offset. | |
101 | * | |
102 | * Take a pointer to a `ProtobufCMessage` and find the field at the offset. Cast | |
103 | * it to a pointer to the passed type. | |
104 | */ | |
69 | 105 | #define STRUCT_MEMBER_PTR(member_type, struct_p, struct_offset) \ |
70 | 106 | ((member_type *) STRUCT_MEMBER_P((struct_p), (struct_offset))) |
71 | 107 | |
72 | 108 | /* Assertions for magic numbers. */ |
73 | 109 | |
74 | 110 | #define ASSERT_IS_ENUM_DESCRIPTOR(desc) \ |
75 | assert((desc)->magic == PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC) | |
111 | assert((desc)->magic == PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC) | |
76 | 112 | |
77 | 113 | #define ASSERT_IS_MESSAGE_DESCRIPTOR(desc) \ |
78 | assert((desc)->magic == PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC) | |
114 | assert((desc)->magic == PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC) | |
79 | 115 | |
80 | 116 | #define ASSERT_IS_MESSAGE(message) \ |
81 | 117 | ASSERT_IS_MESSAGE_DESCRIPTOR((message)->descriptor) |
82 | 118 | |
83 | 119 | #define ASSERT_IS_SERVICE_DESCRIPTOR(desc) \ |
84 | assert((desc)->magic == PROTOBUF_C_SERVICE_DESCRIPTOR_MAGIC) | |
120 | assert((desc)->magic == PROTOBUF_C__SERVICE_DESCRIPTOR_MAGIC) | |
121 | ||
122 | /**@}*/ | |
85 | 123 | |
86 | 124 | /* --- version --- */ |
87 | 125 | |
125 | 163 | } |
126 | 164 | |
127 | 165 | /* |
128 | * Some users may configure the default allocator; providing your own allocator | |
129 | * to unpack() is preferred. This allocator is still used for packing nested | |
130 | * messages. | |
131 | */ | |
132 | ProtobufCAllocator protobuf_c_default_allocator = { | |
166 | * This allocator uses the system's malloc() and free(). It is the default | |
167 | * allocator used if NULL is passed as the ProtobufCAllocator to an exported | |
168 | * function. | |
169 | */ | |
170 | static ProtobufCAllocator protobuf_c__allocator = { | |
133 | 171 | .alloc = &system_alloc, |
134 | 172 | .free = &system_free, |
135 | 173 | .allocator_data = NULL, |
145 | 183 | size_t new_len = simp->len + len; |
146 | 184 | |
147 | 185 | if (new_len > simp->alloced) { |
186 | ProtobufCAllocator *allocator = simp->allocator; | |
148 | 187 | size_t new_alloced = simp->alloced * 2; |
149 | 188 | uint8_t *new_data; |
189 | ||
190 | if (allocator == NULL) | |
191 | allocator = &protobuf_c__allocator; | |
150 | 192 | while (new_alloced < new_len) |
151 | 193 | new_alloced += new_alloced; |
152 | new_data = do_alloc(&protobuf_c_default_allocator, new_alloced); | |
194 | new_data = do_alloc(allocator, new_alloced); | |
153 | 195 | if (!new_data) |
154 | 196 | return; |
155 | 197 | memcpy(new_data, simp->data, simp->len); |
156 | 198 | if (simp->must_free_data) |
157 | do_free(&protobuf_c_default_allocator, simp->data); | |
199 | do_free(allocator, simp->data); | |
158 | 200 | else |
159 | simp->must_free_data = 1; | |
201 | simp->must_free_data = TRUE; | |
160 | 202 | simp->data = new_data; |
161 | 203 | simp->alloced = new_alloced; |
162 | 204 | } |
164 | 206 | simp->len = new_len; |
165 | 207 | } |
166 | 208 | |
167 | /* === protobuf_c_message_get_packed_size() implementation === */ | |
168 | ||
169 | /* | |
209 | /** | |
210 | * \defgroup packedsz protobuf_c_message_get_packed_size() implementation | |
211 | * | |
212 | * Routines mainly used by protobuf_c_message_get_packed_size(). | |
213 | * | |
214 | * \ingroup internal | |
215 | * @{ | |
216 | */ | |
217 | ||
218 | /** | |
170 | 219 | * Return the number of bytes required to store the tag for the field. Includes |
171 | 220 | * 3 bits for the wire-type, and a single bit that denotes the end-of-tag. |
221 | * | |
222 | * \param number | |
223 | * Field tag to encode. | |
224 | * \return | |
225 | * Number of bytes required. | |
172 | 226 | */ |
173 | 227 | static inline size_t |
174 | 228 | get_tag_size(unsigned number) |
186 | 240 | } |
187 | 241 | } |
188 | 242 | |
189 | /* | |
243 | /** | |
190 | 244 | * Return the number of bytes required to store a variable-length unsigned |
191 | 245 | * 32-bit integer in base-128 varint encoding. |
246 | * | |
247 | * \param v | |
248 | * Value to encode. | |
249 | * \return | |
250 | * Number of bytes required. | |
192 | 251 | */ |
193 | 252 | static inline size_t |
194 | 253 | uint32_size(uint32_t v) |
206 | 265 | } |
207 | 266 | } |
208 | 267 | |
209 | /* | |
268 | /** | |
210 | 269 | * Return the number of bytes required to store a variable-length signed 32-bit |
211 | 270 | * integer in base-128 varint encoding. |
271 | * | |
272 | * \param v | |
273 | * Value to encode. | |
274 | * \return | |
275 | * Number of bytes required. | |
212 | 276 | */ |
213 | 277 | static inline size_t |
214 | 278 | int32_size(int32_t v) |
228 | 292 | } |
229 | 293 | } |
230 | 294 | |
231 | /* | |
232 | * Return the ZigZag-encoded 32-bit unsigned integer from a 32-bit signed | |
295 | /** | |
296 | * Return the ZigZag-encoded 32-bit unsigned integer form of a 32-bit signed | |
233 | 297 | * integer. |
298 | * | |
299 | * \param v | |
300 | * Value to encode. | |
301 | * \return | |
302 | * ZigZag encoded integer. | |
234 | 303 | */ |
235 | 304 | static inline uint32_t |
236 | 305 | zigzag32(int32_t v) |
241 | 310 | return v * 2; |
242 | 311 | } |
243 | 312 | |
244 | /* | |
313 | /** | |
245 | 314 | * Return the number of bytes required to store a signed 32-bit integer, |
246 | 315 | * converted to an unsigned 32-bit integer with ZigZag encoding, using base-128 |
247 | 316 | * varint encoding. |
317 | * | |
318 | * \param v | |
319 | * Value to encode. | |
320 | * \return | |
321 | * Number of bytes required. | |
248 | 322 | */ |
249 | 323 | static inline size_t |
250 | 324 | sint32_size(int32_t v) |
252 | 326 | return uint32_size(zigzag32(v)); |
253 | 327 | } |
254 | 328 | |
255 | /* | |
329 | /** | |
256 | 330 | * Return the number of bytes required to store a 64-bit unsigned integer in |
257 | 331 | * base-128 varint encoding. |
332 | * | |
333 | * \param v | |
334 | * Value to encode. | |
335 | * \return | |
336 | * Number of bytes required. | |
258 | 337 | */ |
259 | 338 | static inline size_t |
260 | 339 | uint64_size(uint64_t v) |
278 | 357 | } |
279 | 358 | } |
280 | 359 | |
281 | /* | |
282 | * Return the ZigZag-encoded 64-bit unsigned integer from a 64-bit signed | |
360 | /** | |
361 | * Return the ZigZag-encoded 64-bit unsigned integer form of a 64-bit signed | |
283 | 362 | * integer. |
363 | * | |
364 | * \param v | |
365 | * Value to encode. | |
366 | * \return | |
367 | * ZigZag encoded integer. | |
284 | 368 | */ |
285 | 369 | static inline uint64_t |
286 | 370 | zigzag64(int64_t v) |
291 | 375 | return v * 2; |
292 | 376 | } |
293 | 377 | |
294 | /* | |
378 | /** | |
295 | 379 | * Return the number of bytes required to store a signed 64-bit integer, |
296 | 380 | * converted to an unsigned 64-bit integer with ZigZag encoding, using base-128 |
297 | 381 | * varint encoding. |
382 | * | |
383 | * \param v | |
384 | * Value to encode. | |
385 | * \return | |
386 | * Number of bytes required. | |
298 | 387 | */ |
299 | 388 | static inline size_t |
300 | 389 | sint64_size(int64_t v) |
302 | 391 | return uint64_size(zigzag64(v)); |
303 | 392 | } |
304 | 393 | |
305 | /* | |
394 | /** | |
306 | 395 | * Calculate the serialized size of a single required message field, including |
307 | 396 | * the space needed by the preceding tag. |
397 | * | |
398 | * \param field | |
399 | * Field descriptor for member. | |
400 | * \param member | |
401 | * Field to encode. | |
402 | * \return | |
403 | * Number of bytes required. | |
308 | 404 | */ |
309 | 405 | static size_t |
310 | 406 | required_field_get_packed_size(const ProtobufCFieldDescriptor *field, |
337 | 433 | case PROTOBUF_C_TYPE_DOUBLE: |
338 | 434 | return rv + 8; |
339 | 435 | case PROTOBUF_C_TYPE_ENUM: |
340 | /* TODO: is this correct for negative-valued enums? */ | |
436 | /* \todo Is this correct for negative-valued enums? */ | |
341 | 437 | return rv + uint32_size(*(const uint32_t *) member); |
342 | 438 | case PROTOBUF_C_TYPE_STRING: { |
343 | 439 | const char *str = *(char * const *) member; |
348 | 444 | size_t len = ((const ProtobufCBinaryData *) member)->len; |
349 | 445 | return rv + uint32_size(len) + len; |
350 | 446 | } |
351 | /* case PROTOBUF_C_TYPE_GROUP: */ | |
352 | 447 | case PROTOBUF_C_TYPE_MESSAGE: { |
353 | 448 | const ProtobufCMessage *msg = *(ProtobufCMessage * const *) member; |
354 | 449 | size_t subrv = msg ? protobuf_c_message_get_packed_size(msg) : 0; |
355 | 450 | return rv + uint32_size(subrv) + subrv; |
356 | 451 | } |
357 | 452 | } |
358 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
453 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
359 | 454 | return 0; |
360 | 455 | } |
361 | 456 | |
362 | /* | |
457 | /** | |
363 | 458 | * Calculate the serialized size of a single optional message field, including |
364 | * the space needed by the preceding tag. Returns 0 if the optional field isn't | |
365 | * set. */ | |
459 | * the space needed by the preceding tag. Returns 0 if the optional field isn't | |
460 | * set. | |
461 | * | |
462 | * \param field | |
463 | * Field descriptor for member. | |
464 | * \param has | |
465 | * True if the field exists, false if not. | |
466 | * \param member | |
467 | * Field to encode. | |
468 | * \return | |
469 | * Number of bytes required. | |
470 | */ | |
366 | 471 | static size_t |
367 | 472 | optional_field_get_packed_size(const ProtobufCFieldDescriptor *field, |
368 | 473 | const protobuf_c_boolean *has, |
381 | 486 | return required_field_get_packed_size(field, member); |
382 | 487 | } |
383 | 488 | |
384 | /* | |
489 | /** | |
385 | 490 | * Calculate the serialized size of repeated message fields, which may consist |
386 | 491 | * of any number of values (including 0). Includes the space needed by the |
387 | 492 | * preceding tags (as needed). |
493 | * | |
494 | * \param field | |
495 | * Field descriptor for member. | |
496 | * \param count | |
497 | * Number of repeated field members. | |
498 | * \param member | |
499 | * Field to encode. | |
500 | * \return | |
501 | * Number of bytes required. | |
388 | 502 | */ |
389 | 503 | static size_t |
390 | 504 | repeated_field_get_packed_size(const ProtobufCFieldDescriptor *field, |
456 | 570 | rv += uint32_size(len) + len; |
457 | 571 | } |
458 | 572 | break; |
459 | /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */ | |
460 | 573 | } |
461 | 574 | |
462 | 575 | if (0 != (field->flags & PROTOBUF_C_FIELD_FLAG_PACKED)) |
464 | 577 | return header_size + rv; |
465 | 578 | } |
466 | 579 | |
467 | /* | |
580 | /** | |
468 | 581 | * Calculate the serialized size of an unknown field, i.e. one that is passed |
469 | 582 | * through mostly uninterpreted. This is required for forward compatibility if |
470 | 583 | * new fields are added to the message descriptor. |
584 | * | |
585 | * \param field | |
586 | * Unknown field type. | |
587 | * \return | |
588 | * Number of bytes required. | |
471 | 589 | */ |
472 | 590 | static inline size_t |
473 | 591 | unknown_field_get_packed_size(const ProtobufCMessageUnknownField *field) |
474 | 592 | { |
475 | 593 | return get_tag_size(field->tag) + field->len; |
476 | 594 | } |
595 | ||
596 | /**@}*/ | |
477 | 597 | |
478 | 598 | /* |
479 | 599 | * Calculate the serialized size of the message. |
509 | 629 | return rv; |
510 | 630 | } |
511 | 631 | |
512 | /* === protobuf_c_message_pack() implementation === */ | |
513 | ||
514 | /* | |
632 | /** | |
633 | * \defgroup pack protobuf_c_message_pack() implementation | |
634 | * | |
635 | * Routines mainly used by protobuf_c_message_pack(). | |
636 | * | |
637 | * \ingroup internal | |
638 | * @{ | |
639 | */ | |
640 | ||
641 | /** | |
515 | 642 | * Pack an unsigned 32-bit integer in base-128 varint encoding and return the |
516 | 643 | * number of bytes written, which must be 5 or less. |
644 | * | |
645 | * \param value | |
646 | * Value to encode. | |
647 | * \param[out] out | |
648 | * Packed value. | |
649 | * \return | |
650 | * Number of bytes written to `out`. | |
517 | 651 | */ |
518 | 652 | static inline size_t |
519 | 653 | uint32_pack(uint32_t value, uint8_t *out) |
541 | 675 | return rv; |
542 | 676 | } |
543 | 677 | |
544 | /* | |
678 | /** | |
545 | 679 | * Pack a signed 32-bit integer and return the number of bytes written. |
546 | 680 | * Negative numbers are encoded as two's complement 64-bit integers. |
681 | * | |
682 | * \param value | |
683 | * Value to encode. | |
684 | * \param[out] out | |
685 | * Packed value. | |
686 | * \return | |
687 | * Number of bytes written to `out`. | |
547 | 688 | */ |
548 | 689 | static inline size_t |
549 | 690 | int32_pack(int32_t value, uint8_t *out) |
562 | 703 | } |
563 | 704 | } |
564 | 705 | |
565 | /* | |
706 | /** | |
566 | 707 | * Pack a signed 32-bit integer using ZigZag encoding and return the number of |
567 | 708 | * bytes written. |
709 | * | |
710 | * \param value | |
711 | * Value to encode. | |
712 | * \param[out] out | |
713 | * Packed value. | |
714 | * \return | |
715 | * Number of bytes written to `out`. | |
568 | 716 | */ |
569 | 717 | static inline size_t |
570 | 718 | sint32_pack(int32_t value, uint8_t *out) |
572 | 720 | return uint32_pack(zigzag32(value), out); |
573 | 721 | } |
574 | 722 | |
575 | /* | |
723 | /** | |
576 | 724 | * Pack a 64-bit unsigned integer using base-128 varint encoding and return the |
577 | 725 | * number of bytes written. |
726 | * | |
727 | * \param value | |
728 | * Value to encode. | |
729 | * \param[out] out | |
730 | * Packed value. | |
731 | * \return | |
732 | * Number of bytes written to `out`. | |
578 | 733 | */ |
579 | 734 | static size_t |
580 | 735 | uint64_pack(uint64_t value, uint8_t *out) |
605 | 760 | return rv; |
606 | 761 | } |
607 | 762 | |
608 | /* | |
763 | /** | |
609 | 764 | * Pack a 64-bit signed integer in ZigZag encoding and return the number of |
610 | 765 | * bytes written. |
766 | * | |
767 | * \param value | |
768 | * Value to encode. | |
769 | * \param[out] out | |
770 | * Packed value. | |
771 | * \return | |
772 | * Number of bytes written to `out`. | |
611 | 773 | */ |
612 | 774 | static inline size_t |
613 | 775 | sint64_pack(int64_t value, uint8_t *out) |
615 | 777 | return uint64_pack(zigzag64(value), out); |
616 | 778 | } |
617 | 779 | |
618 | /* | |
780 | /** | |
619 | 781 | * Pack a 32-bit quantity in little-endian byte order. Used for protobuf wire |
620 | 782 | * types fixed32, sfixed32, float. Similar to "htole32". |
783 | * | |
784 | * \param value | |
785 | * Value to encode. | |
786 | * \param[out] out | |
787 | * Packed value. | |
788 | * \return | |
789 | * Number of bytes written to `out`. | |
621 | 790 | */ |
622 | 791 | static inline size_t |
623 | 792 | fixed32_pack(uint32_t value, void *out) |
635 | 804 | return 4; |
636 | 805 | } |
637 | 806 | |
638 | /* | |
807 | /** | |
639 | 808 | * Pack a 64-bit quantity in little-endian byte order. Used for protobuf wire |
640 | 809 | * types fixed64, sfixed64, double. Similar to "htole64". |
641 | 810 | * |
642 | * XXX: the big-endian impl is really only good for 32-bit machines, a 64-bit | |
811 | * \todo The big-endian impl is really only good for 32-bit machines, a 64-bit | |
643 | 812 | * version would be appreciated, plus a way to decide to use 64-bit math where |
644 | 813 | * convenient. |
814 | * | |
815 | * \param value | |
816 | * Value to encode. | |
817 | * \param[out] out | |
818 | * Packed value. | |
819 | * \return | |
820 | * Number of bytes written to `out`. | |
645 | 821 | */ |
646 | 822 | static inline size_t |
647 | 823 | fixed64_pack(uint64_t value, void *out) |
655 | 831 | return 8; |
656 | 832 | } |
657 | 833 | |
658 | /* | |
834 | /** | |
659 | 835 | * Pack a boolean value as an integer and return the number of bytes written. |
660 | 836 | * |
661 | * XXX: perhaps on some platforms "*out = !!value" would be a better impl, b/c | |
837 | * \todo Perhaps on some platforms *out = !!value would be a better impl, b/c | |
662 | 838 | * that is idiomatic C++ in some STL implementations. |
839 | * | |
840 | * \param value | |
841 | * Value to encode. | |
842 | * \param[out] out | |
843 | * Packed value. | |
844 | * \return | |
845 | * Number of bytes written to `out`. | |
663 | 846 | */ |
664 | 847 | static inline size_t |
665 | 848 | boolean_pack(protobuf_c_boolean value, uint8_t *out) |
666 | 849 | { |
667 | *out = value ? 1 : 0; | |
850 | *out = value ? TRUE : FALSE; | |
668 | 851 | return 1; |
669 | 852 | } |
670 | 853 | |
671 | /* | |
854 | /** | |
672 | 855 | * Pack a NUL-terminated C string and return the number of bytes written. The |
673 | 856 | * output includes a length delimiter. |
674 | 857 | * |
675 | * The NULL pointer is treated as an empty string. This isn't really necessary, | |
676 | * but it allows people to leave required strings blank. (See Issue #13 in the | |
858 | * The NULL pointer is treated as an empty string. This isn't really necessary, | |
859 | * but it allows people to leave required strings blank. (See Issue #13 in the | |
677 | 860 | * bug tracker for a little more explanation). |
861 | * | |
862 | * \param str | |
863 | * String to encode. | |
864 | * \param[out] out | |
865 | * Packed value. | |
866 | * \return | |
867 | * Number of bytes written to `out`. | |
678 | 868 | */ |
679 | 869 | static inline size_t |
680 | 870 | string_pack(const char *str, uint8_t *out) |
690 | 880 | } |
691 | 881 | } |
692 | 882 | |
693 | /* | |
883 | /** | |
694 | 884 | * Pack a ProtobufCBinaryData and return the number of bytes written. The output |
695 | 885 | * includes a length delimiter. |
886 | * | |
887 | * \param bd | |
888 | * ProtobufCBinaryData to encode. | |
889 | * \param[out] out | |
890 | * Packed value. | |
891 | * \return | |
892 | * Number of bytes written to `out`. | |
696 | 893 | */ |
697 | 894 | static inline size_t |
698 | 895 | binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out) |
703 | 900 | return rv + len; |
704 | 901 | } |
705 | 902 | |
903 | /** | |
904 | * Pack a ProtobufCMessage and return the number of bytes written. The output | |
905 | * includes a length delimiter. | |
906 | * | |
907 | * \param message | |
908 | * ProtobufCMessage object to pack. | |
909 | * \param[out] out | |
910 | * Packed message. | |
911 | * \return | |
912 | * Number of bytes written to `out`. | |
913 | */ | |
706 | 914 | static inline size_t |
707 | 915 | prefixed_message_pack(const ProtobufCMessage *message, uint8_t *out) |
708 | 916 | { |
718 | 926 | } |
719 | 927 | } |
720 | 928 | |
721 | /* wire-type will be added in required_field_pack() */ | |
722 | /* XXX: just call uint64_pack on 64-bit platforms. */ | |
929 | /** | |
930 | * Pack a field tag. | |
931 | * | |
932 | * Wire-type will be added in required_field_pack(). | |
933 | * | |
934 | * \todo Just call uint64_pack on 64-bit platforms. | |
935 | * | |
936 | * \param id | |
937 | * Tag value to encode. | |
938 | * \param[out] out | |
939 | * Packed value. | |
940 | * \return | |
941 | * Number of bytes written to `out`. | |
942 | */ | |
723 | 943 | static size_t |
724 | 944 | tag_pack(uint32_t id, uint8_t *out) |
725 | 945 | { |
729 | 949 | return uint64_pack(((uint64_t) id) << 3, out); |
730 | 950 | } |
731 | 951 | |
952 | /** | |
953 | * Pack a required field and return the number of bytes written. | |
954 | * | |
955 | * \param field | |
956 | * Field descriptor. | |
957 | * \param member | |
958 | * The field member. | |
959 | * \param[out] out | |
960 | * Packed value. | |
961 | * \return | |
962 | * Number of bytes written to `out`. | |
963 | */ | |
732 | 964 | static size_t |
733 | 965 | required_field_pack(const ProtobufCFieldDescriptor *field, |
734 | 966 | const void *member, uint8_t *out) |
772 | 1004 | case PROTOBUF_C_TYPE_BYTES: |
773 | 1005 | out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED; |
774 | 1006 | return rv + binary_data_pack((const ProtobufCBinaryData *) member, out + rv); |
775 | /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */ | |
776 | 1007 | case PROTOBUF_C_TYPE_MESSAGE: |
777 | 1008 | out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED; |
778 | 1009 | return rv + prefixed_message_pack(*(ProtobufCMessage * const *) member, out + rv); |
779 | 1010 | } |
780 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1011 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
781 | 1012 | return 0; |
782 | 1013 | } |
783 | 1014 | |
1015 | /** | |
1016 | * Pack an optional field and return the number of bytes written. | |
1017 | * | |
1018 | * \param field | |
1019 | * Field descriptor. | |
1020 | * \param has | |
1021 | * Whether the field is set. | |
1022 | * \param member | |
1023 | * The field member. | |
1024 | * \param[out] out | |
1025 | * Packed value. | |
1026 | * \return | |
1027 | * Number of bytes written to `out`. | |
1028 | */ | |
784 | 1029 | static size_t |
785 | 1030 | optional_field_pack(const ProtobufCFieldDescriptor *field, |
786 | 1031 | const protobuf_c_boolean *has, |
799 | 1044 | return required_field_pack(field, member, out); |
800 | 1045 | } |
801 | 1046 | |
802 | /* TODO: implement as a table lookup */ | |
1047 | /** | |
1048 | * Given a field type, return the in-memory size. | |
1049 | * | |
1050 | * \todo Implement as a table lookup. | |
1051 | * | |
1052 | * \param type | |
1053 | * Field type. | |
1054 | * \return | |
1055 | * Size of the field. | |
1056 | */ | |
803 | 1057 | static inline size_t |
804 | 1058 | sizeof_elt_in_repeated_array(ProtobufCType type) |
805 | 1059 | { |
827 | 1081 | case PROTOBUF_C_TYPE_BYTES: |
828 | 1082 | return sizeof(ProtobufCBinaryData); |
829 | 1083 | } |
830 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1084 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
831 | 1085 | return 0; |
832 | 1086 | } |
833 | 1087 | |
1088 | /** | |
1089 | * Pack an array of 32-bit quantities. | |
1090 | * | |
1091 | * \param[out] out | |
1092 | * Destination. | |
1093 | * \param[in] in | |
1094 | * Source. | |
1095 | * \param[in] n | |
1096 | * Number of elements in the source array. | |
1097 | */ | |
834 | 1098 | static void |
835 | 1099 | copy_to_little_endian_32(void *out, const void *in, const unsigned n) |
836 | 1100 | { |
844 | 1108 | #endif |
845 | 1109 | } |
846 | 1110 | |
1111 | /** | |
1112 | * Pack an array of 64-bit quantities. | |
1113 | * | |
1114 | * \param[out] out | |
1115 | * Destination. | |
1116 | * \param[in] in | |
1117 | * Source. | |
1118 | * \param[in] n | |
1119 | * Number of elements in the source array. | |
1120 | */ | |
847 | 1121 | static void |
848 | 1122 | copy_to_little_endian_64(void *out, const void *in, const unsigned n) |
849 | 1123 | { |
857 | 1131 | #endif |
858 | 1132 | } |
859 | 1133 | |
1134 | /** | |
1135 | * Get the minimum number of bytes required to pack a field value of a | |
1136 | * particular type. | |
1137 | * | |
1138 | * \param type | |
1139 | * Field type. | |
1140 | * \return | |
1141 | * Number of bytes. | |
1142 | */ | |
860 | 1143 | static unsigned |
861 | 1144 | get_type_min_size(ProtobufCType type) |
862 | 1145 | { |
875 | 1158 | return 1; |
876 | 1159 | } |
877 | 1160 | |
1161 | /** | |
1162 | * Packs the elements of a repeated field and returns the serialised field and | |
1163 | * its length. | |
1164 | * | |
1165 | * \param field | |
1166 | * Field descriptor. | |
1167 | * \param count | |
1168 | * Number of elements in the repeated field array. | |
1169 | * \param member | |
1170 | * Pointer to the elements for this repeated field. | |
1171 | * \param[out] out | |
1172 | * Serialised representation of the repeated field. | |
1173 | * \return | |
1174 | * Number of bytes serialised to `out`. | |
1175 | */ | |
878 | 1176 | static size_t |
879 | 1177 | repeated_field_pack(const ProtobufCFieldDescriptor *field, |
880 | 1178 | size_t count, const void *member, uint8_t *out) |
953 | 1251 | break; |
954 | 1252 | } |
955 | 1253 | default: |
956 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1254 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
957 | 1255 | } |
958 | 1256 | |
959 | 1257 | payload_len = payload_at - (out + header_len); |
988 | 1286 | memcpy(out + rv, field->data, field->len); |
989 | 1287 | return rv + field->len; |
990 | 1288 | } |
1289 | ||
1290 | /**@}*/ | |
991 | 1291 | |
992 | 1292 | size_t |
993 | 1293 | protobuf_c_message_pack(const ProtobufCMessage *message, uint8_t *out) |
1030 | 1330 | return rv; |
1031 | 1331 | } |
1032 | 1332 | |
1033 | /* === protobuf_c_message_pack_to_buffer() implementation === */ | |
1034 | ||
1333 | /** | |
1334 | * \defgroup packbuf protobuf_c_message_pack_to_buffer() implementation | |
1335 | * | |
1336 | * Routines mainly used by protobuf_c_message_pack_to_buffer(). | |
1337 | * | |
1338 | * \ingroup internal | |
1339 | * @{ | |
1340 | */ | |
1341 | ||
1342 | /** | |
1343 | * Pack a required field to a virtual buffer. | |
1344 | * | |
1345 | * \param field | |
1346 | * Field descriptor. | |
1347 | * \param member | |
1348 | * The element to be packed. | |
1349 | * \param[out] buffer | |
1350 | * Virtual buffer to append data to. | |
1351 | * \return | |
1352 | * Number of bytes packed. | |
1353 | */ | |
1035 | 1354 | static size_t |
1036 | 1355 | required_field_pack_to_buffer(const ProtobufCFieldDescriptor *field, |
1037 | 1356 | const void *member, ProtobufCBuffer *buffer) |
1109 | 1428 | rv += sublen; |
1110 | 1429 | break; |
1111 | 1430 | } |
1112 | /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */ | |
1113 | 1431 | case PROTOBUF_C_TYPE_MESSAGE: { |
1114 | 1432 | uint8_t simple_buffer_scratch[256]; |
1115 | 1433 | size_t sublen; |
1130 | 1448 | break; |
1131 | 1449 | } |
1132 | 1450 | default: |
1133 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1451 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
1134 | 1452 | } |
1135 | 1453 | return rv; |
1136 | 1454 | } |
1137 | 1455 | |
1456 | /** | |
1457 | * Pack an optional field to a buffer. | |
1458 | * | |
1459 | * \param field | |
1460 | * Field descriptor. | |
1461 | * \param has | |
1462 | * Whether the field is set. | |
1463 | * \param member | |
1464 | * The element to be packed. | |
1465 | * \param[out] buffer | |
1466 | * Virtual buffer to append data to. | |
1467 | * \return | |
1468 | * Number of bytes serialised to `buffer`. | |
1469 | */ | |
1138 | 1470 | static size_t |
1139 | 1471 | optional_field_pack_to_buffer(const ProtobufCFieldDescriptor *field, |
1140 | 1472 | const protobuf_c_boolean *has, |
1153 | 1485 | return required_field_pack_to_buffer(field, member, buffer); |
1154 | 1486 | } |
1155 | 1487 | |
1488 | /** | |
1489 | * Get the packed size of an array of same field type. | |
1490 | * | |
1491 | * \param field | |
1492 | * Field descriptor. | |
1493 | * \param count | |
1494 | * Number of elements of this type. | |
1495 | * \param array | |
1496 | * The elements to get the size of. | |
1497 | * \return | |
1498 | * Number of bytes required. | |
1499 | */ | |
1156 | 1500 | static size_t |
1157 | 1501 | get_packed_payload_length(const ProtobufCFieldDescriptor *field, |
1158 | 1502 | unsigned count, const void *array) |
1204 | 1548 | case PROTOBUF_C_TYPE_BOOL: |
1205 | 1549 | return count; |
1206 | 1550 | default: |
1207 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1551 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
1208 | 1552 | } |
1209 | 1553 | return rv; |
1210 | 1554 | } |
1211 | 1555 | |
1556 | /** | |
1557 | * Pack an array of same field type to a virtual buffer. | |
1558 | * | |
1559 | * \param field | |
1560 | * Field descriptor. | |
1561 | * \param count | |
1562 | * Number of elements of this type. | |
1563 | * \param array | |
1564 | * The elements to get the size of. | |
1565 | * \param[out] buffer | |
1566 | * Virtual buffer to append data to. | |
1567 | * \return | |
1568 | * Number of bytes packed. | |
1569 | */ | |
1212 | 1570 | static size_t |
1213 | 1571 | pack_buffer_packed_payload(const ProtobufCFieldDescriptor *field, |
1214 | 1572 | unsigned count, const void *array, |
1231 | 1589 | buffer->append(buffer, len, scratch); |
1232 | 1590 | rv += len; |
1233 | 1591 | } |
1592 | break; | |
1234 | 1593 | #endif |
1235 | break; | |
1236 | 1594 | case PROTOBUF_C_TYPE_SFIXED64: |
1237 | 1595 | case PROTOBUF_C_TYPE_FIXED64: |
1238 | 1596 | case PROTOBUF_C_TYPE_DOUBLE: |
1292 | 1650 | } |
1293 | 1651 | return count; |
1294 | 1652 | default: |
1295 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
1653 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
1296 | 1654 | } |
1297 | 1655 | return rv; |
1298 | 1656 | |
1349 | 1707 | buffer->append(buffer, field->len, field->data); |
1350 | 1708 | return rv + field->len; |
1351 | 1709 | } |
1710 | ||
1711 | /**@}*/ | |
1352 | 1712 | |
1353 | 1713 | size_t |
1354 | 1714 | protobuf_c_message_pack_to_buffer(const ProtobufCMessage *message, |
1390 | 1750 | return rv; |
1391 | 1751 | } |
1392 | 1752 | |
1393 | /* === unpacking === */ | |
1753 | /** | |
1754 | * \defgroup unpack unpacking implementation | |
1755 | * | |
1756 | * Routines mainly used by the unpacking functions. | |
1757 | * | |
1758 | * \ingroup internal | |
1759 | * @{ | |
1760 | */ | |
1394 | 1761 | |
1395 | 1762 | static inline int |
1396 | 1763 | int_range_lookup(unsigned n_ranges, const ProtobufCIntRange *ranges, int value) |
1465 | 1832 | /* sizeof(ScannedMember) must be <= (1<<BOUND_SIZEOF_SCANNED_MEMBER_LOG2) */ |
1466 | 1833 | #define BOUND_SIZEOF_SCANNED_MEMBER_LOG2 5 |
1467 | 1834 | typedef struct _ScannedMember ScannedMember; |
1835 | /** Field as it's being read. */ | |
1468 | 1836 | struct _ScannedMember { |
1469 | uint32_t tag; | |
1470 | uint8_t wire_type; | |
1471 | uint8_t length_prefix_len; | |
1472 | const ProtobufCFieldDescriptor *field; | |
1473 | size_t len; | |
1474 | const uint8_t *data; | |
1837 | uint32_t tag; /**< Field tag. */ | |
1838 | uint8_t wire_type; /**< Field type. */ | |
1839 | uint8_t length_prefix_len; /**< Prefix length. */ | |
1840 | const ProtobufCFieldDescriptor *field; /**< Field descriptor. */ | |
1841 | size_t len; /**< Field length. */ | |
1842 | const uint8_t *data; /**< Pointer to field data. */ | |
1475 | 1843 | }; |
1476 | 1844 | |
1477 | 1845 | static inline uint32_t |
1513 | 1881 | return rv; |
1514 | 1882 | } |
1515 | 1883 | |
1516 | /* Merge earlier message into the latter message as follows: | |
1517 | * For numeric types and strings, if the same value appears multiple times, the | |
1518 | * parser accepts the last value it sees. | |
1519 | * For embedded message fields, the parser merges multiple instances of the same | |
1520 | * field. That is, all singular scalar fields in the latter instance replace those | |
1521 | * in the former, singular embedded messages are merged, and repeated fields are | |
1522 | * concatenated. | |
1523 | * The earlier message should be freed after calling this function, as some of its | |
1524 | * fields may have been reused and changed to their default values during the merge*/ | |
1884 | /**@}*/ | |
1885 | ||
1886 | /** | |
1887 | * Merge earlier message into a latter message. | |
1888 | * | |
1889 | * For numeric types and strings, if the same value appears multiple | |
1890 | * times, the parser accepts the last value it sees. For embedded | |
1891 | * message fields, the parser merges multiple instances of the same | |
1892 | * field. That is, all singular scalar fields in the latter instance | |
1893 | * replace those in the former, singular embedded messages are merged, | |
1894 | * and repeated fields are concatenated. | |
1895 | * | |
1896 | * The earlier message should be freed after calling this function, as | |
1897 | * some of its fields may have been reused and changed to their default | |
1898 | * values during the merge. | |
1899 | */ | |
1525 | 1900 | static protobuf_c_boolean |
1526 | 1901 | merge_messages(ProtobufCMessage *earlier_msg, |
1527 | 1902 | ProtobufCMessage *latter_msg, |
1555 | 1930 | new_field = do_alloc(allocator, |
1556 | 1931 | (*n_earlier + *n_latter) * el_size); |
1557 | 1932 | if (!new_field) |
1558 | return 0; | |
1559 | ||
1560 | memcpy(new_field, *p_latter, | |
1933 | return FALSE; | |
1934 | ||
1935 | memcpy(new_field, *p_earlier, | |
1936 | *n_earlier * el_size); | |
1937 | memcpy(new_field + | |
1938 | *n_earlier * el_size, | |
1939 | *p_latter, | |
1561 | 1940 | *n_latter * el_size); |
1562 | memcpy(new_field + | |
1563 | *n_latter * el_size, | |
1564 | *p_earlier, | |
1565 | *n_earlier * el_size); | |
1566 | 1941 | |
1567 | 1942 | do_free(allocator, *p_latter); |
1568 | 1943 | do_free(allocator, *p_earlier); |
1590 | 1965 | if (*lm != NULL) { |
1591 | 1966 | if (!merge_messages |
1592 | 1967 | (*em, *lm, allocator)) |
1593 | return 0; | |
1968 | return FALSE; | |
1594 | 1969 | } else { |
1595 | 1970 | /* Zero copy the optional message */ |
1596 | 1971 | assert(fields[i].label == |
1601 | 1976 | } |
1602 | 1977 | } else if (fields[i].label == PROTOBUF_C_LABEL_OPTIONAL) { |
1603 | 1978 | size_t el_size = 0; |
1604 | protobuf_c_boolean need_to_merge = 0; | |
1979 | protobuf_c_boolean need_to_merge = FALSE; | |
1605 | 1980 | void *earlier_elem = |
1606 | 1981 | STRUCT_MEMBER_P(earlier_msg, fields[i].offset); |
1607 | 1982 | void *latter_elem = |
1609 | 1984 | const void *def_val = fields[i].default_value; |
1610 | 1985 | |
1611 | 1986 | switch (fields[i].type) { |
1612 | case PROTOBUF_C_TYPE_BYTES: | |
1987 | case PROTOBUF_C_TYPE_BYTES: { | |
1613 | 1988 | el_size = sizeof(ProtobufCBinaryData); |
1614 | 1989 | uint8_t *e_data = |
1615 | 1990 | ((ProtobufCBinaryData *) earlier_elem)->data; |
1626 | 2001 | (d_bd != NULL && |
1627 | 2002 | l_data == d_bd->data)); |
1628 | 2003 | break; |
1629 | case PROTOBUF_C_TYPE_STRING: | |
2004 | } | |
2005 | case PROTOBUF_C_TYPE_STRING: { | |
1630 | 2006 | el_size = sizeof(char *); |
1631 | 2007 | char *e_str = *(char **) earlier_elem; |
1632 | 2008 | char *l_str = *(char **) latter_elem; |
1634 | 2010 | |
1635 | 2011 | need_to_merge = e_str != d_str && l_str == d_str; |
1636 | 2012 | break; |
1637 | default: | |
2013 | } | |
2014 | default: { | |
1638 | 2015 | el_size = sizeof_elt_in_repeated_array(fields[i].type); |
1639 | 2016 | |
1640 | 2017 | need_to_merge = |
1645 | 2022 | latter_msg, |
1646 | 2023 | fields[i].quantifier_offset); |
1647 | 2024 | break; |
2025 | } | |
1648 | 2026 | } |
1649 | 2027 | |
1650 | 2028 | if (need_to_merge) { |
1663 | 2041 | STRUCT_MEMBER(protobuf_c_boolean, |
1664 | 2042 | latter_msg, |
1665 | 2043 | fields[i]. |
1666 | quantifier_offset) = 1; | |
2044 | quantifier_offset) = TRUE; | |
1667 | 2045 | STRUCT_MEMBER(protobuf_c_boolean, |
1668 | 2046 | earlier_msg, |
1669 | 2047 | fields[i]. |
1670 | quantifier_offset) = 0; | |
2048 | quantifier_offset) = FALSE; | |
1671 | 2049 | } |
1672 | 2050 | } |
1673 | 2051 | } |
1674 | 2052 | } |
1675 | return 1; | |
1676 | } | |
1677 | ||
1678 | /* | |
1679 | * Given a raw slab of packed-repeated values, determine the number of elements. | |
1680 | * This function detects certain kinds of errors but not others; the remaining | |
1681 | * error checking is done by parse_packed_repeated_member(). | |
1682 | */ | |
2053 | return TRUE; | |
2054 | } | |
2055 | ||
2056 | /** | |
2057 | * Count packed elements. | |
2058 | * | |
2059 | * Given a raw slab of packed-repeated values, determine the number of | |
2060 | * elements. This function detects certain kinds of errors but not | |
2061 | * others; the remaining error checking is done by | |
2062 | * parse_packed_repeated_member(). | |
2063 | */ | |
1683 | 2064 | static protobuf_c_boolean |
1684 | 2065 | count_packed_elements(ProtobufCType type, |
1685 | 2066 | size_t len, const uint8_t *data, size_t *count_out) |
1820 | 2201 | unsigned i; |
1821 | 2202 | for (i = 0; i < len; i++) |
1822 | 2203 | if (data[i] & 0x7f) |
1823 | return 1; | |
1824 | return 0; | |
2204 | return TRUE; | |
2205 | return FALSE; | |
1825 | 2206 | } |
1826 | 2207 | |
1827 | 2208 | static protobuf_c_boolean |
1837 | 2218 | switch (scanned_member->field->type) { |
1838 | 2219 | case PROTOBUF_C_TYPE_INT32: |
1839 | 2220 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1840 | return 0; | |
2221 | return FALSE; | |
1841 | 2222 | *(uint32_t *) member = parse_int32(len, data); |
1842 | return 1; | |
2223 | return TRUE; | |
1843 | 2224 | case PROTOBUF_C_TYPE_UINT32: |
1844 | 2225 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1845 | return 0; | |
2226 | return FALSE; | |
1846 | 2227 | *(uint32_t *) member = parse_uint32(len, data); |
1847 | return 1; | |
2228 | return TRUE; | |
1848 | 2229 | case PROTOBUF_C_TYPE_SINT32: |
1849 | 2230 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1850 | return 0; | |
2231 | return FALSE; | |
1851 | 2232 | *(int32_t *) member = unzigzag32(parse_uint32(len, data)); |
1852 | return 1; | |
2233 | return TRUE; | |
1853 | 2234 | case PROTOBUF_C_TYPE_SFIXED32: |
1854 | 2235 | case PROTOBUF_C_TYPE_FIXED32: |
1855 | 2236 | case PROTOBUF_C_TYPE_FLOAT: |
1856 | 2237 | if (wire_type != PROTOBUF_C_WIRE_TYPE_32BIT) |
1857 | return 0; | |
2238 | return FALSE; | |
1858 | 2239 | *(uint32_t *) member = parse_fixed_uint32(data); |
1859 | return 1; | |
2240 | return TRUE; | |
1860 | 2241 | case PROTOBUF_C_TYPE_INT64: |
1861 | 2242 | case PROTOBUF_C_TYPE_UINT64: |
1862 | 2243 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1863 | return 0; | |
2244 | return FALSE; | |
1864 | 2245 | *(uint64_t *) member = parse_uint64(len, data); |
1865 | return 1; | |
2246 | return TRUE; | |
1866 | 2247 | case PROTOBUF_C_TYPE_SINT64: |
1867 | 2248 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1868 | return 0; | |
2249 | return FALSE; | |
1869 | 2250 | *(int64_t *) member = unzigzag64(parse_uint64(len, data)); |
1870 | return 1; | |
2251 | return TRUE; | |
1871 | 2252 | case PROTOBUF_C_TYPE_SFIXED64: |
1872 | 2253 | case PROTOBUF_C_TYPE_FIXED64: |
1873 | 2254 | case PROTOBUF_C_TYPE_DOUBLE: |
1874 | 2255 | if (wire_type != PROTOBUF_C_WIRE_TYPE_64BIT) |
1875 | return 0; | |
2256 | return FALSE; | |
1876 | 2257 | *(uint64_t *) member = parse_fixed_uint64(data); |
1877 | return 1; | |
2258 | return TRUE; | |
1878 | 2259 | case PROTOBUF_C_TYPE_BOOL: |
1879 | 2260 | *(protobuf_c_boolean *) member = parse_boolean(len, data); |
1880 | return 1; | |
2261 | return TRUE; | |
1881 | 2262 | case PROTOBUF_C_TYPE_ENUM: |
1882 | 2263 | if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT) |
1883 | return 0; | |
2264 | return FALSE; | |
1884 | 2265 | *(uint32_t *) member = parse_uint32(len, data); |
1885 | return 1; | |
2266 | return TRUE; | |
1886 | 2267 | case PROTOBUF_C_TYPE_STRING: { |
1887 | 2268 | char **pstr = member; |
1888 | 2269 | unsigned pref_len = scanned_member->length_prefix_len; |
1889 | 2270 | |
1890 | 2271 | if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED) |
1891 | return 0; | |
2272 | return FALSE; | |
1892 | 2273 | |
1893 | 2274 | if (maybe_clear && *pstr != NULL) { |
1894 | 2275 | const char *def = scanned_member->field->default_value; |
1897 | 2278 | } |
1898 | 2279 | *pstr = do_alloc(allocator, len - pref_len + 1); |
1899 | 2280 | if (*pstr == NULL) |
1900 | return 0; | |
2281 | return FALSE; | |
1901 | 2282 | memcpy(*pstr, data + pref_len, len - pref_len); |
1902 | 2283 | (*pstr)[len - pref_len] = 0; |
1903 | return 1; | |
2284 | return TRUE; | |
1904 | 2285 | } |
1905 | 2286 | case PROTOBUF_C_TYPE_BYTES: { |
1906 | 2287 | ProtobufCBinaryData *bd = member; |
1908 | 2289 | unsigned pref_len = scanned_member->length_prefix_len; |
1909 | 2290 | |
1910 | 2291 | if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED) |
1911 | return 0; | |
2292 | return FALSE; | |
1912 | 2293 | |
1913 | 2294 | def_bd = scanned_member->field->default_value; |
1914 | 2295 | if (maybe_clear && |
1920 | 2301 | if (len - pref_len > 0) { |
1921 | 2302 | bd->data = do_alloc(allocator, len - pref_len); |
1922 | 2303 | if (bd->data == NULL) |
1923 | return 0; | |
2304 | return FALSE; | |
1924 | 2305 | memcpy(bd->data, data + pref_len, len - pref_len); |
1925 | 2306 | } |
1926 | 2307 | bd->len = len - pref_len; |
1927 | return 1; | |
1928 | } | |
1929 | /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */ | |
2308 | return TRUE; | |
2309 | } | |
1930 | 2310 | case PROTOBUF_C_TYPE_MESSAGE: { |
1931 | 2311 | ProtobufCMessage **pmessage = member; |
1932 | 2312 | ProtobufCMessage *subm; |
1933 | 2313 | const ProtobufCMessage *def_mess; |
1934 | protobuf_c_boolean merge_successful = 1; | |
2314 | protobuf_c_boolean merge_successful = TRUE; | |
1935 | 2315 | unsigned pref_len = scanned_member->length_prefix_len; |
1936 | 2316 | |
1937 | 2317 | if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED) |
1938 | return 0; | |
2318 | return FALSE; | |
1939 | 2319 | |
1940 | 2320 | def_mess = scanned_member->field->default_value; |
1941 | 2321 | subm = protobuf_c_message_unpack(scanned_member->field->descriptor, |
1954 | 2334 | } |
1955 | 2335 | *pmessage = subm; |
1956 | 2336 | if (subm == NULL || !merge_successful) |
1957 | return 0; | |
1958 | return 1; | |
1959 | } | |
1960 | } | |
1961 | return 0; | |
2337 | return FALSE; | |
2338 | return TRUE; | |
2339 | } | |
2340 | } | |
2341 | return FALSE; | |
1962 | 2342 | } |
1963 | 2343 | |
1964 | 2344 | static protobuf_c_boolean |
1968 | 2348 | ProtobufCAllocator *allocator) |
1969 | 2349 | { |
1970 | 2350 | if (!parse_required_member(scanned_member, member, allocator, TRUE)) |
1971 | return 0; | |
2351 | return FALSE; | |
1972 | 2352 | if (scanned_member->field->quantifier_offset != 0) |
1973 | 2353 | STRUCT_MEMBER(protobuf_c_boolean, |
1974 | 2354 | message, |
1975 | scanned_member->field->quantifier_offset) = 1; | |
1976 | return 1; | |
2355 | scanned_member->field->quantifier_offset) = TRUE; | |
2356 | return TRUE; | |
1977 | 2357 | } |
1978 | 2358 | |
1979 | 2359 | static protobuf_c_boolean |
1990 | 2370 | if (!parse_required_member(scanned_member, array + siz * (*p_n), |
1991 | 2371 | allocator, FALSE)) |
1992 | 2372 | { |
1993 | return 0; | |
2373 | return FALSE; | |
1994 | 2374 | } |
1995 | 2375 | *p_n += 1; |
1996 | return 1; | |
2376 | return TRUE; | |
1997 | 2377 | } |
1998 | 2378 | |
1999 | 2379 | static unsigned |
2036 | 2416 | ((uint32_t *) array)[i] = parse_fixed_uint32(at); |
2037 | 2417 | at += 4; |
2038 | 2418 | } |
2419 | break; | |
2039 | 2420 | #endif |
2040 | break; | |
2041 | 2421 | case PROTOBUF_C_TYPE_SFIXED64: |
2042 | 2422 | case PROTOBUF_C_TYPE_FIXED64: |
2043 | 2423 | case PROTOBUF_C_TYPE_DOUBLE: |
2125 | 2505 | } |
2126 | 2506 | break; |
2127 | 2507 | default: |
2128 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
2508 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
2129 | 2509 | } |
2130 | 2510 | *p_n += count; |
2131 | 2511 | return TRUE; |
2164 | 2544 | ufield->len = scanned_member->len; |
2165 | 2545 | ufield->data = do_alloc(allocator, scanned_member->len); |
2166 | 2546 | if (ufield->data == NULL) |
2167 | return 0; | |
2547 | return FALSE; | |
2168 | 2548 | memcpy(ufield->data, scanned_member->data, ufield->len); |
2169 | return 1; | |
2549 | return TRUE; | |
2170 | 2550 | } |
2171 | 2551 | member = (char *) message + field->offset; |
2172 | 2552 | switch (field->label) { |
2190 | 2570 | allocator); |
2191 | 2571 | } |
2192 | 2572 | } |
2193 | PROTOBUF_C_ASSERT_NOT_REACHED(); | |
2573 | PROTOBUF_C__ASSERT_NOT_REACHED(); | |
2194 | 2574 | return 0; |
2195 | 2575 | } |
2196 | 2576 | |
2197 | /* | |
2198 | * This function is used if desc->message_init == NULL (which occurs for old | |
2199 | * code, and which would be useful to support allocating descriptors | |
2200 | * dynamically). | |
2577 | /** | |
2578 | * Initialise messages generated by old code. | |
2579 | * | |
2580 | * This function is used if desc->message_init == NULL (which occurs | |
2581 | * for old code, and which would be useful to support allocating | |
2582 | * descriptors dynamically). | |
2201 | 2583 | */ |
2202 | 2584 | static void |
2203 | 2585 | message_init_generic(const ProtobufCMessageDescriptor *desc, |
2253 | 2635 | } |
2254 | 2636 | } |
2255 | 2637 | |
2638 | /**@}*/ | |
2639 | ||
2256 | 2640 | /* |
2257 | 2641 | * ScannedMember slabs (an unpacking implementation detail). Before doing real |
2258 | 2642 | * unpacking, we first scan through the elements to see how many there are (for |
2309 | 2693 | unsigned required_fields_bitmap_len; |
2310 | 2694 | unsigned char required_fields_bitmap_stack[16]; |
2311 | 2695 | unsigned char *required_fields_bitmap = required_fields_bitmap_stack; |
2312 | protobuf_c_boolean required_fields_bitmap_alloced = 0; | |
2696 | protobuf_c_boolean required_fields_bitmap_alloced = FALSE; | |
2313 | 2697 | |
2314 | 2698 | ASSERT_IS_MESSAGE_DESCRIPTOR(desc); |
2315 | 2699 | |
2316 | 2700 | if (allocator == NULL) |
2317 | allocator = &protobuf_c_default_allocator; | |
2701 | allocator = &protobuf_c__allocator; | |
2318 | 2702 | |
2319 | 2703 | rv = do_alloc(allocator, desc->sizeof_message); |
2320 | 2704 | if (!rv) |
2328 | 2712 | do_free(allocator, rv); |
2329 | 2713 | return (NULL); |
2330 | 2714 | } |
2331 | required_fields_bitmap_alloced = 1; | |
2715 | required_fields_bitmap_alloced = TRUE; | |
2332 | 2716 | } |
2333 | 2717 | memset(required_fields_bitmap, 0, required_fields_bitmap_len); |
2334 | 2718 | |
2355 | 2739 | (unsigned) (at - data)); |
2356 | 2740 | goto error_cleanup_during_scan; |
2357 | 2741 | } |
2358 | /* XXX: consider optimizing for field[1].id == tag, if field[1] exists! */ | |
2742 | /* | |
2743 | * \todo Consider optimizing for field[1].id == tag, if field[1] | |
2744 | * exists! | |
2745 | */ | |
2359 | 2746 | if (last_field == NULL || last_field->id != tag) { |
2360 | 2747 | /* lookup field */ |
2361 | 2748 | int field_index = |
2570 | 2957 | return NULL; |
2571 | 2958 | } |
2572 | 2959 | |
2573 | /* === protobuf_c_message_free_unpacked() implementation === */ | |
2574 | ||
2575 | 2960 | void |
2576 | 2961 | protobuf_c_message_free_unpacked(ProtobufCMessage *message, |
2577 | 2962 | ProtobufCAllocator *allocator) |
2581 | 2966 | |
2582 | 2967 | ASSERT_IS_MESSAGE(message); |
2583 | 2968 | if (allocator == NULL) |
2584 | allocator = &protobuf_c_default_allocator; | |
2969 | allocator = &protobuf_c__allocator; | |
2585 | 2970 | message->descriptor = NULL; |
2586 | 2971 | for (f = 0; f < desc->n_fields; f++) { |
2587 | 2972 | if (desc->fields[f].label == PROTOBUF_C_LABEL_REPEATED) { |
2658 | 3043 | { |
2659 | 3044 | if (!message || |
2660 | 3045 | !message->descriptor || |
2661 | message->descriptor->magic != PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC) | |
3046 | message->descriptor->magic != PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC) | |
2662 | 3047 | { |
2663 | 3048 | return FALSE; |
2664 | 3049 | } |
2720 | 3105 | GenericHandler handler; |
2721 | 3106 | |
2722 | 3107 | /* |
2723 | * Verify that method_index is within range. If this fails, you are | |
2724 | * likely invoking a newly added method on an old service. (Although | |
3108 | * Verify that method_index is within range. If this fails, you are | |
3109 | * likely invoking a newly added method on an old service. (Although | |
2725 | 3110 | * other memory corruption bugs can cause this assertion too.) |
2726 | */ | |
2727 | PROTOBUF_C_ASSERT(method_index < service->descriptor->n_methods); | |
3111 | */ | |
3112 | assert(method_index < service->descriptor->n_methods); | |
2728 | 3113 | |
2729 | 3114 | /* |
2730 | 3115 | * Get the array of virtual methods (which are enumerated by the |
2732 | 3117 | */ |
2733 | 3118 | handlers = (GenericHandler *) (service + 1); |
2734 | 3119 | |
2735 | /* Get our method and invoke it. */ | |
2736 | /* TODO: seems like handler==NULL is a situation that needs handling. */ | |
3120 | /* | |
3121 | * Get our method and invoke it. | |
3122 | * \todo Seems like handler == NULL is a situation that needs handling. | |
3123 | */ | |
2737 | 3124 | handler = handlers[method_index]; |
2738 | 3125 | (*handler)(service, input, closure, closure_data); |
2739 | 3126 | } |
0 | /* --- protobuf-c.h: protobuf c runtime api --- */ | |
1 | ||
2 | 0 | /* |
3 | 1 | * Copyright (c) 2008-2014, Dave Benson and the protobuf-c authors. |
4 | 2 | * All rights reserved. |
28 | 26 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | 27 | */ |
30 | 28 | |
31 | #ifndef __PROTOBUF_C_RUNTIME_H_ | |
32 | #define __PROTOBUF_C_RUNTIME_H_ | |
29 | /*! \file | |
30 | * \mainpage Introduction | |
31 | * | |
32 | * This is [protobuf-c], a C implementation of [Protocol Buffers]. | |
33 | * | |
34 | * This file defines the public API for the `libprotobuf-c` support library. | |
35 | * This API includes interfaces that can be used directly by client code as well | |
36 | * as the interfaces used by the code generated by the `protoc-c` compiler. | |
37 | * | |
38 | * The `libprotobuf-c` support library performs the actual serialization and | |
39 | * deserialization of Protocol Buffers messages. It interacts with structures, | |
40 | * definitions, and metadata generated by the `protoc-c` compiler from .proto | |
41 | * files. | |
42 | * | |
43 | * \authors Dave Benson and the `protobuf-c` authors. | |
44 | * | |
45 | * \copyright 2008-2014. Licensed under the terms of the [BSD-2-Clause] license. | |
46 | * | |
47 | * [protobuf-c]: https://github.com/protobuf-c/protobuf-c | |
48 | * [Protocol Buffers]: https://developers.google.com/protocol-buffers/ | |
49 | * [BSD-2-Clause]: http://opensource.org/licenses/BSD-2-Clause | |
50 | * | |
51 | * \page gencode Generated Code | |
52 | * | |
53 | * For each enum, we generate a C enum. For each message, we generate a C | |
54 | * structure which can be cast to a `ProtobufCMessage`. | |
55 | * | |
56 | * For each enum and message, we generate a descriptor object that allows us to | |
57 | * implement a kind of reflection on the structures. | |
58 | * | |
59 | * First, some naming conventions: | |
60 | * | |
61 | * - The name of the type for enums and messages and services is camel case | |
62 | * (meaning WordsAreCrammedTogether) except that double underscores are used | |
63 | * to delimit scopes. For example, the following `.proto` file: | |
64 | * | |
65 | ~~~{.proto} | |
66 | package foo.bar; | |
67 | message BazBah { | |
68 | optional int32 val = 1; | |
69 | } | |
70 | ~~~ | |
71 | * | |
72 | * would generate a C type `Foo__Bar__BazBah`. | |
73 | * | |
74 | * - Identifiers for functions and globals are all lowercase, with camel case | |
75 | * words separated by single underscores. For example, one of the function | |
76 | * prototypes generated by `protoc-c` for the above example: | |
77 | * | |
78 | ~~~{.c} | |
79 | Foo__Bar__BazBah * | |
80 | foo__bar__baz_bah__unpack | |
81 | (ProtobufCAllocator *allocator, | |
82 | size_t len, | |
83 | const uint8_t *data); | |
84 | ~~~ | |
85 | * | |
86 | * - Identifiers for enum values contain an uppercase prefix which embeds the | |
87 | * package name and the enum type name. | |
88 | * | |
89 | * - A double underscore is used to separate further components of identifier | |
90 | * names. | |
91 | * | |
92 | * For example, in the name of the unpack function above, the package name | |
93 | * `foo.bar` has become `foo__bar`, the message name BazBah has become | |
94 | * `baz_bah`, and the method name is `unpack`. These are all joined with double | |
95 | * underscores to form the C identifier `foo__bar__baz_bah__unpack`. | |
96 | * | |
97 | * We also generate descriptor objects for messages and enums. These are | |
98 | * declared in the `.pb-c.h` files: | |
99 | * | |
100 | ~~~{.c} | |
101 | extern const ProtobufCMessageDescriptor foo__bar__baz_bah__descriptor; | |
102 | ~~~ | |
103 | * | |
104 | * The message structures all begin with `ProtobufCMessageDescriptor *` which is | |
105 | * sufficient to allow them to be cast to `ProtobufCMessage`. | |
106 | * | |
107 | * For each message defined in a `.proto` file, we generate a number of | |
108 | * functions. Each function name contains a prefix based on the package name and | |
109 | * message name in order to make it a unique C identifier. | |
110 | * | |
111 | * - `unpack()`. Unpacks data for a particular message format. Note that the | |
112 | * `allocator` parameter is usually `NULL` to indicate that the system's | |
113 | * `malloc()` and `free()` functions should be used for dynamically allocating | |
114 | * memory. | |
115 | * | |
116 | ~~~{.c} | |
117 | Foo__Bar__BazBah * | |
118 | foo__bar__baz_bah__unpack | |
119 | (ProtobufCAllocator *allocator, | |
120 | size_t len, | |
121 | const uint8_t *data); | |
122 | ~~~ | |
123 | * | |
124 | * - `free_unpacked()`. Frees a message object obtained with the `unpack()` | |
125 | * method. | |
126 | * | |
127 | ~~~{.c} | |
128 | void foo__bar__baz_bah__free_unpacked | |
129 | (Foo__Bar__BazBah *message, | |
130 | ProtobufCAllocator *allocator); | |
131 | ~~~ | |
132 | * | |
133 | * - `get_packed_size()`. Calculates the length in bytes of the serialized | |
134 | * representation of the message object. | |
135 | * | |
136 | ~~~{.c} | |
137 | size_t foo__bar__baz_bah__get_packed_size | |
138 | (const Foo__Bar__BazBah *message); | |
139 | ~~~ | |
140 | * | |
141 | * - `pack()`. Pack a message object into a preallocated buffer. Assumes that | |
142 | * the buffer is large enough. (Use `get_packed_size()` first.) | |
143 | * | |
144 | ~~~{.c} | |
145 | size_t foo__bar__baz_bah__pack | |
146 | (const Foo__Bar__BazBah *message, | |
147 | uint8_t *out); | |
148 | ~~~ | |
149 | * | |
150 | * - `pack_to_buffer()`. Packs a message into a "virtual buffer". This is an | |
151 | * object which defines an "append bytes" callback to consume data as it is | |
152 | * serialized. | |
153 | * | |
154 | ~~~{.c} | |
155 | size_t foo__bar__baz_bah__pack_to_buffer | |
156 | (const Foo__Bar__BazBah *message, | |
157 | ProtobufCBuffer *buffer); | |
158 | ~~~ | |
159 | * | |
160 | * \page pack Packing and unpacking messages | |
161 | * | |
162 | * To pack a message, first compute the packed size of the message with | |
163 | * protobuf_c_message_get_packed_size(), then allocate a buffer of at least | |
164 | * that size, then call protobuf_c_message_pack(). | |
165 | * | |
166 | * Alternatively, a message can be serialized without calculating the final size | |
167 | * first. Use the protobuf_c_message_pack_to_buffer() function and provide a | |
168 | * ProtobufCBuffer object which implements an "append" method that consumes | |
169 | * data. | |
170 | * | |
171 | * To unpack a message, call the protobuf_c_message_unpack() function. The | |
172 | * result can be cast to an object of the type that matches the descriptor for | |
173 | * the message. | |
174 | * | |
175 | * The result of unpacking a message should be freed with | |
176 | * protobuf_c_message_free_unpacked(). | |
177 | */ | |
178 | ||
179 | #ifndef PROTOBUF_C_H | |
180 | #define PROTOBUF_C_H | |
33 | 181 | |
34 | 182 | #include <assert.h> |
183 | #include <limits.h> | |
35 | 184 | #include <stddef.h> |
36 | 185 | #include <stdint.h> |
37 | #include <limits.h> | |
38 | 186 | |
39 | 187 | #ifdef __cplusplus |
40 | # define PROTOBUF_C_BEGIN_DECLS extern "C" { | |
41 | # define PROTOBUF_C_END_DECLS } | |
188 | # define PROTOBUF_C__BEGIN_DECLS extern "C" { | |
189 | # define PROTOBUF_C__END_DECLS } | |
42 | 190 | #else |
43 | # define PROTOBUF_C_BEGIN_DECLS | |
44 | # define PROTOBUF_C_END_DECLS | |
191 | # define PROTOBUF_C__BEGIN_DECLS | |
192 | # define PROTOBUF_C__END_DECLS | |
45 | 193 | #endif |
46 | 194 | |
47 | #define PROTOBUF_C_ASSERT(condition) assert(condition) | |
48 | #define PROTOBUF_C_ASSERT_NOT_REACHED() assert(0) | |
49 | ||
50 | #if !defined(PROTOBUF_C_NO_DEPRECATED) | |
51 | # if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) | |
52 | # define PROTOBUF_C_DEPRECATED __attribute__((__deprecated__)) | |
195 | PROTOBUF_C__BEGIN_DECLS | |
196 | ||
197 | #if defined(_WIN32) && defined(PROTOBUF_C_USE_SHARED_LIB) | |
198 | # ifdef PROTOBUF_C_EXPORT | |
199 | # define PROTOBUF_C__API __declspec(dllexport) | |
200 | # else | |
201 | # define PROTOBUF_C__API __declspec(dllimport) | |
53 | 202 | # endif |
54 | 203 | #else |
55 | # define PROTOBUF_C_DEPRECATED | |
204 | # define PROTOBUF_C__API | |
56 | 205 | #endif |
57 | 206 | |
58 | #define PROTOBUF_C_OFFSETOF(struct, member) offsetof(struct, member) | |
59 | ||
60 | #if defined(_WIN32) && defined(PROTOBUF_C_USE_SHARED_LIB) | |
61 | # ifdef PROTOBUF_C_EXPORT | |
62 | # define PROTOBUF_C_API __declspec(dllexport) | |
63 | # else | |
64 | # define PROTOBUF_C_API __declspec(dllimport) | |
207 | #if !defined(PROTOBUF_C__NO_DEPRECATED) | |
208 | # if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) | |
209 | # define PROTOBUF_C__DEPRECATED __attribute__((__deprecated__)) | |
65 | 210 | # endif |
66 | 211 | #else |
67 | # define PROTOBUF_C_API | |
212 | # define PROTOBUF_C__DEPRECATED | |
68 | 213 | #endif |
69 | 214 | |
70 | PROTOBUF_C_BEGIN_DECLS | |
71 | ||
72 | /** | |
73 | * Get the version of the protobuf-c library. Note that this is the version of | |
74 | * the library linked against, not the version of the headers compiled against. | |
75 | * | |
76 | * \return A string containing the version number of protobuf-c. | |
77 | */ | |
78 | PROTOBUF_C_API | |
79 | const char * | |
80 | protobuf_c_version(void); | |
81 | ||
82 | /** | |
83 | * Get the version of the protobuf-c library. Note that this is the version of | |
84 | * the library linked against, not the version of the headers compiled against. | |
85 | * | |
86 | * \return A 32 bit unsigned integer containing the version number of | |
87 | * protobuf-c, represented in base-10 as (MAJOR*1E6) + (MINOR*1E3) + PATCH. | |
88 | */ | |
89 | PROTOBUF_C_API | |
90 | uint32_t | |
91 | protobuf_c_version_number(void); | |
92 | ||
93 | /** | |
94 | * The version of the protobuf-c headers, represented as a string using the same | |
95 | * format as protobuf_c_version(). | |
96 | */ | |
97 | #define PROTOBUF_C_VERSION "1.0.0-rc1" | |
98 | ||
99 | /** | |
100 | * The version of the protobuf-c headers, represented as an integer using the | |
101 | * same format as protobuf_c_version_number(). | |
102 | */ | |
103 | #define PROTOBUF_C_VERSION_NUMBER 1000000 | |
104 | ||
215 | #ifndef PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE | |
216 | #define PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(enum_name) \ | |
217 | , _##enum_name##_IS_INT_SIZE = INT_MAX | |
218 | #endif | |
219 | ||
220 | #define PROTOBUF_C__SERVICE_DESCRIPTOR_MAGIC 0x14159bc3 | |
221 | #define PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC 0x28aaeef9 | |
222 | #define PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC 0x114315af | |
223 | ||
224 | /** | |
225 | * \defgroup api Public API | |
226 | * | |
227 | * This is the public API for `libprotobuf-c`. These interfaces are stable and | |
228 | * subject to Semantic Versioning guarantees. | |
229 | * | |
230 | * @{ | |
231 | */ | |
232 | ||
233 | /** | |
234 | * Values for the `flags` word in `ProtobufCFieldDescriptor`. | |
235 | */ | |
236 | typedef enum { | |
237 | /** Set if the field is repeated and marked with the `packed` option. */ | |
238 | PROTOBUF_C_FIELD_FLAG_PACKED = (1 << 0), | |
239 | ||
240 | /** Set if the field is marked with the `deprecated` option. */ | |
241 | PROTOBUF_C_FIELD_FLAG_DEPRECATED = (1 << 1), | |
242 | } ProtobufCFieldFlag; | |
243 | ||
244 | /** | |
245 | * Message field rules. | |
246 | * | |
247 | * \see [Defining A Message Type] in the Protocol Buffers documentation. | |
248 | * | |
249 | * [Defining A Message Type]: | |
250 | * https://developers.google.com/protocol-buffers/docs/proto#simple | |
251 | */ | |
252 | typedef enum { | |
253 | /** A well-formed message must have exactly one of this field. */ | |
254 | PROTOBUF_C_LABEL_REQUIRED, | |
255 | ||
256 | /** | |
257 | * A well-formed message can have zero or one of this field (but not | |
258 | * more than one). | |
259 | */ | |
260 | PROTOBUF_C_LABEL_OPTIONAL, | |
261 | ||
262 | /** | |
263 | * This field can be repeated any number of times (including zero) in a | |
264 | * well-formed message. The order of the repeated values will be | |
265 | * preserved. | |
266 | */ | |
267 | PROTOBUF_C_LABEL_REPEATED, | |
268 | } ProtobufCLabel; | |
269 | ||
270 | /** | |
271 | * Field value types. | |
272 | * | |
273 | * \see [Scalar Value Types] in the Protocol Buffers documentation. | |
274 | * | |
275 | * [Scalar Value Types]: | |
276 | * https://developers.google.com/protocol-buffers/docs/proto#scalar | |
277 | */ | |
278 | typedef enum { | |
279 | PROTOBUF_C_TYPE_INT32, /**< int32 */ | |
280 | PROTOBUF_C_TYPE_SINT32, /**< signed int32 */ | |
281 | PROTOBUF_C_TYPE_SFIXED32, /**< signed int32 (4 bytes) */ | |
282 | PROTOBUF_C_TYPE_INT64, /**< int64 */ | |
283 | PROTOBUF_C_TYPE_SINT64, /**< signed int64 */ | |
284 | PROTOBUF_C_TYPE_SFIXED64, /**< signed int64 (8 bytes) */ | |
285 | PROTOBUF_C_TYPE_UINT32, /**< unsigned int32 */ | |
286 | PROTOBUF_C_TYPE_FIXED32, /**< unsigned int32 (4 bytes) */ | |
287 | PROTOBUF_C_TYPE_UINT64, /**< unsigned int64 */ | |
288 | PROTOBUF_C_TYPE_FIXED64, /**< unsigned int64 (8 bytes) */ | |
289 | PROTOBUF_C_TYPE_FLOAT, /**< float */ | |
290 | PROTOBUF_C_TYPE_DOUBLE, /**< double */ | |
291 | PROTOBUF_C_TYPE_BOOL, /**< boolean */ | |
292 | PROTOBUF_C_TYPE_ENUM, /**< enumerated type */ | |
293 | PROTOBUF_C_TYPE_STRING, /**< UTF-8 or ASCII string */ | |
294 | PROTOBUF_C_TYPE_BYTES, /**< arbitrary byte sequence */ | |
295 | PROTOBUF_C_TYPE_MESSAGE, /**< nested message */ | |
296 | } ProtobufCType; | |
297 | ||
298 | /** | |
299 | * Field wire types. | |
300 | * | |
301 | * \see [Message Structure] in the Protocol Buffers documentation. | |
302 | * | |
303 | * [Message Structure]: | |
304 | * https://developers.google.com/protocol-buffers/docs/encoding#structure | |
305 | */ | |
306 | typedef enum { | |
307 | PROTOBUF_C_WIRE_TYPE_VARINT = 0, | |
308 | PROTOBUF_C_WIRE_TYPE_64BIT = 1, | |
309 | PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED = 2, | |
310 | /* "Start group" and "end group" wire types are unsupported. */ | |
311 | PROTOBUF_C_WIRE_TYPE_32BIT = 5, | |
312 | } ProtobufCWireType; | |
313 | ||
314 | struct ProtobufCAllocator; | |
315 | struct ProtobufCBinaryData; | |
316 | struct ProtobufCBuffer; | |
317 | struct ProtobufCBufferSimple; | |
318 | struct ProtobufCEnumDescriptor; | |
319 | struct ProtobufCEnumValue; | |
320 | struct ProtobufCEnumValueIndex; | |
321 | struct ProtobufCFieldDescriptor; | |
322 | struct ProtobufCIntRange; | |
323 | struct ProtobufCMessage; | |
324 | struct ProtobufCMessageDescriptor; | |
325 | struct ProtobufCMessageUnknownField; | |
326 | struct ProtobufCMethodDescriptor; | |
327 | struct ProtobufCService; | |
328 | struct ProtobufCServiceDescriptor; | |
329 | ||
330 | typedef struct ProtobufCAllocator ProtobufCAllocator; | |
331 | typedef struct ProtobufCBinaryData ProtobufCBinaryData; | |
332 | typedef struct ProtobufCBuffer ProtobufCBuffer; | |
333 | typedef struct ProtobufCBufferSimple ProtobufCBufferSimple; | |
334 | typedef struct ProtobufCEnumDescriptor ProtobufCEnumDescriptor; | |
335 | typedef struct ProtobufCEnumValue ProtobufCEnumValue; | |
336 | typedef struct ProtobufCEnumValueIndex ProtobufCEnumValueIndex; | |
337 | typedef struct ProtobufCFieldDescriptor ProtobufCFieldDescriptor; | |
338 | typedef struct ProtobufCIntRange ProtobufCIntRange; | |
339 | typedef struct ProtobufCMessage ProtobufCMessage; | |
340 | typedef struct ProtobufCMessageDescriptor ProtobufCMessageDescriptor; | |
341 | typedef struct ProtobufCMessageUnknownField ProtobufCMessageUnknownField; | |
342 | typedef struct ProtobufCMethodDescriptor ProtobufCMethodDescriptor; | |
343 | typedef struct ProtobufCService ProtobufCService; | |
344 | typedef struct ProtobufCServiceDescriptor ProtobufCServiceDescriptor; | |
345 | ||
346 | /** Boolean type. */ | |
105 | 347 | typedef int protobuf_c_boolean; |
106 | 348 | |
107 | typedef enum { | |
108 | PROTOBUF_C_LABEL_REQUIRED, | |
109 | PROTOBUF_C_LABEL_OPTIONAL, | |
110 | PROTOBUF_C_LABEL_REPEATED | |
111 | } ProtobufCLabel; | |
112 | ||
113 | typedef enum { | |
114 | PROTOBUF_C_TYPE_INT32, | |
115 | PROTOBUF_C_TYPE_SINT32, | |
116 | PROTOBUF_C_TYPE_SFIXED32, | |
117 | PROTOBUF_C_TYPE_INT64, | |
118 | PROTOBUF_C_TYPE_SINT64, | |
119 | PROTOBUF_C_TYPE_SFIXED64, | |
120 | PROTOBUF_C_TYPE_UINT32, | |
121 | PROTOBUF_C_TYPE_FIXED32, | |
122 | PROTOBUF_C_TYPE_UINT64, | |
123 | PROTOBUF_C_TYPE_FIXED64, | |
124 | PROTOBUF_C_TYPE_FLOAT, | |
125 | PROTOBUF_C_TYPE_DOUBLE, | |
126 | PROTOBUF_C_TYPE_BOOL, | |
127 | PROTOBUF_C_TYPE_ENUM, | |
128 | PROTOBUF_C_TYPE_STRING, | |
129 | PROTOBUF_C_TYPE_BYTES, | |
130 | /* PROTOBUF_C_TYPE_GROUP, -- NOT SUPPORTED */ | |
131 | PROTOBUF_C_TYPE_MESSAGE, | |
132 | } ProtobufCType; | |
133 | ||
134 | typedef struct _ProtobufCBinaryData ProtobufCBinaryData; | |
135 | struct _ProtobufCBinaryData { | |
136 | size_t len; | |
137 | uint8_t *data; | |
138 | }; | |
139 | ||
140 | typedef struct _ProtobufCIntRange ProtobufCIntRange; /* private */ | |
141 | ||
142 | /* --- memory management --- */ | |
143 | typedef struct _ProtobufCAllocator ProtobufCAllocator; | |
144 | struct _ProtobufCAllocator | |
349 | typedef void (*ProtobufCClosure)(const ProtobufCMessage *, void *closure_data); | |
350 | typedef void (*ProtobufCMessageInit)(ProtobufCMessage *); | |
351 | typedef void (*ProtobufCServiceDestroy)(ProtobufCService *); | |
352 | ||
353 | /** | |
354 | * Structure for defining a custom memory allocator. | |
355 | */ | |
356 | struct ProtobufCAllocator { | |
357 | /** Function to allocate memory. */ | |
358 | void *(*alloc)(void *allocator_data, size_t size); | |
359 | ||
360 | /** Function to free memory. */ | |
361 | void (*free)(void *allocator_data, void *pointer); | |
362 | ||
363 | /** Opaque pointer passed to `alloc` and `free` functions. */ | |
364 | void *allocator_data; | |
365 | }; | |
366 | ||
367 | /** | |
368 | * Structure for the protobuf `bytes` scalar type. | |
369 | * | |
370 | * The data contained in a `ProtobufCBinaryData` is an arbitrary sequence of | |
371 | * bytes. It may contain embedded `NUL` characters and is not required to be | |
372 | * `NUL`-terminated. | |
373 | */ | |
374 | struct ProtobufCBinaryData { | |
375 | size_t len; /**< Number of bytes in the `data` field. */ | |
376 | uint8_t *data; /**< Data bytes. */ | |
377 | }; | |
378 | ||
379 | /** | |
380 | * Structure for defining a virtual append-only buffer. Used by | |
381 | * protobuf_c_message_pack_to_buffer() to abstract the consumption of serialized | |
382 | * bytes. | |
383 | * | |
384 | * `ProtobufCBuffer` "subclasses" may be defined on the stack. For example, to | |
385 | * write to a `FILE` object: | |
386 | * | |
387 | ~~~{.c} | |
388 | typedef struct { | |
389 | ProtobufCBuffer base; | |
390 | FILE *fp; | |
391 | } BufferAppendToFile; | |
392 | ||
393 | static void | |
394 | my_buffer_file_append(ProtobufCBuffer *buffer, | |
395 | size_t len, | |
396 | const uint8_t *data) | |
145 | 397 | { |
146 | void *(*alloc)(void *allocator_data, size_t size); | |
147 | void (*free)(void *allocator_data, void *pointer); | |
148 | void *allocator_data; | |
149 | }; | |
150 | ||
151 | /* | |
152 | * This is a configurable allocator. | |
153 | * By default, it uses the system allocator (meaning malloc() and free()). | |
154 | * This is typically changed to adapt to frameworks that provide | |
155 | * some nonstandard allocation functions. | |
156 | * | |
157 | * NOTE: you may modify this allocator. | |
158 | */ | |
159 | extern PROTOBUF_C_API ProtobufCAllocator protobuf_c_default_allocator; /* settable */ | |
160 | ||
161 | /* --- append-only data buffer --- */ | |
162 | typedef struct _ProtobufCBuffer ProtobufCBuffer; | |
163 | struct _ProtobufCBuffer { | |
398 | BufferAppendToFile *file_buf = (BufferAppendToFile *) buffer; | |
399 | fwrite(data, len, 1, file_buf->fp); // XXX: No error handling! | |
400 | } | |
401 | ~~~ | |
402 | * | |
403 | * To use this new type of ProtobufCBuffer, it could be called as follows: | |
404 | * | |
405 | ~~~{.c} | |
406 | ... | |
407 | BufferAppendToFile tmp = {0}; | |
408 | tmp.base.append = my_buffer_file_append; | |
409 | tmp.fp = fp; | |
410 | protobuf_c_message_pack_to_buffer(&message, &tmp); | |
411 | ... | |
412 | ~~~ | |
413 | */ | |
414 | struct ProtobufCBuffer { | |
415 | /** Append function. Consumes the `len` bytes stored at `data`. */ | |
164 | 416 | void (*append)(ProtobufCBuffer *buffer, |
165 | 417 | size_t len, |
166 | 418 | const uint8_t *data); |
167 | 419 | }; |
168 | 420 | |
169 | /* --- enums --- */ | |
170 | ||
171 | typedef struct _ProtobufCEnumValue ProtobufCEnumValue; | |
172 | typedef struct _ProtobufCEnumValueIndex ProtobufCEnumValueIndex; | |
173 | typedef struct _ProtobufCEnumDescriptor ProtobufCEnumDescriptor; | |
174 | ||
175 | /* | |
176 | * ProtobufCEnumValue: this represents a single value of an enumeration. | |
177 | * 'name' is the string identifying this value, as given in the .proto file. | |
178 | * 'c_name' is the full name of the C enumeration value. | |
179 | * 'value' is the number assigned to this value, as given in the .proto file. | |
180 | */ | |
181 | struct _ProtobufCEnumValue { | |
421 | /** | |
422 | * Simple buffer "subclass" of `ProtobufCBuffer`. | |
423 | * | |
424 | * A `ProtobufCBufferSimple` object is declared on the stack and uses a | |
425 | * scratch buffer provided by the user for the initial allocation. It performs | |
426 | * exponential resizing, using dynamically allocated memory. A | |
427 | * `ProtobufCBufferSimple` object can be created and used as follows: | |
428 | * | |
429 | ~~~{.c} | |
430 | uint8_t pad[128]; | |
431 | ProtobufCBufferSimple simple = PROTOBUF_C_BUFFER_SIMPLE_INIT(pad); | |
432 | ProtobufCBuffer *buffer = (ProtobufCBuffer *) &simple; | |
433 | ~~~ | |
434 | * | |
435 | * `buffer` can now be used with `protobuf_c_message_pack_to_buffer()`. Once a | |
436 | * message has been serialized to a `ProtobufCBufferSimple` object, the | |
437 | * serialized data bytes can be accessed from the `.data` field. | |
438 | * | |
439 | * To free the memory allocated by a `ProtobufCBufferSimple` object, if any, | |
440 | * call PROTOBUF_C_BUFFER_SIMPLE_CLEAR() on the object, for example: | |
441 | * | |
442 | ~~~{.c} | |
443 | PROTOBUF_C_BUFFER_SIMPLE_CLEAR(&simple); | |
444 | ~~~ | |
445 | * | |
446 | * \see PROTOBUF_C_BUFFER_SIMPLE_INIT | |
447 | * \see PROTOBUF_C_BUFFER_SIMPLE_CLEAR | |
448 | */ | |
449 | struct ProtobufCBufferSimple { | |
450 | /** "Base class". */ | |
451 | ProtobufCBuffer base; | |
452 | /** Number of bytes allocated in `data`. */ | |
453 | size_t alloced; | |
454 | /** Number of bytes currently stored in `data`. */ | |
455 | size_t len; | |
456 | /** Data bytes. */ | |
457 | uint8_t *data; | |
458 | /** Whether `data` must be freed. */ | |
459 | protobuf_c_boolean must_free_data; | |
460 | /** Allocator to use. May be NULL to indicate the system allocator. */ | |
461 | ProtobufCAllocator *allocator; | |
462 | }; | |
463 | ||
464 | /** | |
465 | * Describes an enumeration as a whole, with all of its values. | |
466 | */ | |
467 | struct ProtobufCEnumDescriptor { | |
468 | /** Magic value checked to ensure that the API is used correctly. */ | |
469 | uint32_t magic; | |
470 | ||
471 | /** The qualified name (e.g., "namespace.Type"). */ | |
472 | const char *name; | |
473 | /** The unqualified name as given in the .proto file (e.g., "Type"). */ | |
474 | const char *short_name; | |
475 | /** Identifier used in generated C code. */ | |
476 | const char *c_name; | |
477 | /** The dot-separated namespace. */ | |
478 | const char *package_name; | |
479 | ||
480 | /** Number elements in `values`. */ | |
481 | unsigned n_values; | |
482 | /** Array of distinct values, sorted by numeric value. */ | |
483 | const ProtobufCEnumValue *values; | |
484 | ||
485 | /** Number of elements in `values_by_name`. */ | |
486 | unsigned n_value_names; | |
487 | /** Array of named values, including aliases, sorted by name. */ | |
488 | const ProtobufCEnumValueIndex *values_by_name; | |
489 | ||
490 | /** Number of elements in `value_ranges`. */ | |
491 | unsigned n_value_ranges; | |
492 | /** Value ranges, for faster lookups by numeric value. */ | |
493 | const ProtobufCIntRange *value_ranges; | |
494 | ||
495 | /** Reserved for future use. */ | |
496 | void *reserved1; | |
497 | /** Reserved for future use. */ | |
498 | void *reserved2; | |
499 | /** Reserved for future use. */ | |
500 | void *reserved3; | |
501 | /** Reserved for future use. */ | |
502 | void *reserved4; | |
503 | }; | |
504 | ||
505 | /** | |
506 | * Represents a single value of an enumeration. | |
507 | */ | |
508 | struct ProtobufCEnumValue { | |
509 | /** The string identifying this value in the .proto file. */ | |
182 | 510 | const char *name; |
511 | ||
512 | /** The string identifying this value in generated C code. */ | |
183 | 513 | const char *c_name; |
514 | ||
515 | /** The numeric value assigned in the .proto file. */ | |
184 | 516 | int value; |
185 | 517 | }; |
186 | 518 | |
187 | /* | |
188 | * ProtobufCEnumDescriptor: represents the enum as a whole, with all its values. | |
189 | * | |
190 | * 'magic' is a code we check to ensure that the api is used correctly. | |
191 | * 'name' is the qualified name (e.g. "namespace.Type"). | |
192 | * 'short_name' is the unqualified name ("Type"), as given in the .proto file. | |
193 | * 'package_name' is the '.'-separated namespace | |
194 | * 'n_values' is the number of distinct values. | |
195 | * 'values' is the array of distinct values. | |
196 | * 'n_value_names' number of named values (including aliases). | |
197 | * 'value_names' are the named values (including aliases). | |
198 | * | |
199 | * The rest of the values are private essentially. | |
200 | * | |
201 | * See also: Use protobuf_c_enum_descriptor_get_value_by_name() | |
202 | * and protobuf_c_enum_descriptor_get_value() to efficiently | |
203 | * lookup values in the descriptor. | |
204 | */ | |
205 | struct _ProtobufCEnumDescriptor { | |
519 | /** | |
520 | * Used by `ProtobufCEnumDescriptor` to look up enum values. | |
521 | */ | |
522 | struct ProtobufCEnumValueIndex { | |
523 | /** Name of the enum value. */ | |
524 | const char *name; | |
525 | /** Index into values[] array. */ | |
526 | unsigned index; | |
527 | }; | |
528 | ||
529 | /** | |
530 | * Describes a single field in a message. | |
531 | */ | |
532 | struct ProtobufCFieldDescriptor { | |
533 | /** Name of the field as given in the .proto file. */ | |
534 | const char *name; | |
535 | ||
536 | /** Tag value of the field as given in the .proto file. */ | |
537 | uint32_t id; | |
538 | ||
539 | /** Whether the field is `REQUIRED`, `OPTIONAL`, or `REPEATED`. */ | |
540 | ProtobufCLabel label; | |
541 | ||
542 | /** The type of the field. */ | |
543 | ProtobufCType type; | |
544 | ||
545 | /** | |
546 | * The offset in bytes of the message's C structure's quantifier field | |
547 | * (the `has_MEMBER` field for optional members or the `n_MEMBER` field | |
548 | * for repeated members. | |
549 | */ | |
550 | unsigned quantifier_offset; | |
551 | ||
552 | /** | |
553 | * The offset in bytes into the message's C structure for the member | |
554 | * itself. | |
555 | */ | |
556 | unsigned offset; | |
557 | ||
558 | /** | |
559 | * A type-specific descriptor. | |
560 | * | |
561 | * If `type` is `PROTOBUF_C_TYPE_ENUM`, then `descriptor` points to the | |
562 | * corresponding `ProtobufCEnumDescriptor`. | |
563 | * | |
564 | * If `type` is `PROTOBUF_C_TYPE_MESSAGE`, then `descriptor` points to | |
565 | * the corresponding `ProtobufCMessageDescriptor`. | |
566 | * | |
567 | * Otherwise this field is NULL. | |
568 | */ | |
569 | const void *descriptor; /* for MESSAGE and ENUM types */ | |
570 | ||
571 | /** The default value for this field, if defined. May be NULL. */ | |
572 | const void *default_value; | |
573 | ||
574 | /** | |
575 | * A flag word. Zero or more of the bits defined in the | |
576 | * `ProtobufCFieldFlag` enum may be set. | |
577 | */ | |
578 | uint32_t flags; | |
579 | ||
580 | /** Reserved for future use. */ | |
581 | unsigned reserved_flags; | |
582 | /** Reserved for future use. */ | |
583 | void *reserved2; | |
584 | /** Reserved for future use. */ | |
585 | void *reserved3; | |
586 | }; | |
587 | ||
588 | /** | |
589 | * Helper structure for optimizing int => index lookups in the case | |
590 | * where the keys are mostly consecutive values, as they presumably are for | |
591 | * enums and fields. | |
592 | * | |
593 | * The data structures requires that the values in the original array are | |
594 | * sorted. | |
595 | */ | |
596 | struct ProtobufCIntRange { | |
597 | int start_value; | |
598 | unsigned orig_index; | |
599 | /* | |
600 | * NOTE: the number of values in the range can be inferred by looking | |
601 | * at the next element's orig_index. A dummy element is added to make | |
602 | * this simple. | |
603 | */ | |
604 | }; | |
605 | ||
606 | /** | |
607 | * An instance of a message. | |
608 | * | |
609 | * `ProtobufCMessage` is a light-weight "base class" for all messages. | |
610 | * | |
611 | * In particular, `ProtobufCMessage` doesn't have any allocation policy | |
612 | * associated with it. That's because it's common to create `ProtobufCMessage` | |
613 | * objects on the stack. In fact, that's what we recommend for sending messages. | |
614 | * If the object is allocated from the stack, you can't really have a memory | |
615 | * leak. | |
616 | * | |
617 | * This means that calls to functions like protobuf_c_message_unpack() which | |
618 | * return a `ProtobufCMessage` must be paired with a call to a free function, | |
619 | * like protobuf_c_message_free_unpacked(). | |
620 | */ | |
621 | struct ProtobufCMessage { | |
622 | /** The descriptor for this message type. */ | |
623 | const ProtobufCMessageDescriptor *descriptor; | |
624 | /** The number of elements in `unknown_fields`. */ | |
625 | unsigned n_unknown_fields; | |
626 | /** The fields that weren't recognized by the parser. */ | |
627 | ProtobufCMessageUnknownField *unknown_fields; | |
628 | }; | |
629 | ||
630 | /** | |
631 | * Describes a message. | |
632 | */ | |
633 | struct ProtobufCMessageDescriptor { | |
634 | /** Magic value checked to ensure that the API is used correctly. */ | |
206 | 635 | uint32_t magic; |
207 | 636 | |
637 | /** The qualified name (e.g., "namespace.Type"). */ | |
208 | 638 | const char *name; |
639 | /** The unqualified name as given in the .proto file (e.g., "Type"). */ | |
209 | 640 | const char *short_name; |
641 | /** Identifier used in generated C code. */ | |
210 | 642 | const char *c_name; |
643 | /** The dot-separated namespace. */ | |
211 | 644 | const char *package_name; |
212 | 645 | |
213 | /* sorted by value */ | |
214 | unsigned n_values; | |
215 | const ProtobufCEnumValue *values; | |
216 | ||
217 | /* sorted by name */ | |
218 | unsigned n_value_names; | |
219 | const ProtobufCEnumValueIndex *values_by_name; | |
220 | ||
221 | /* value-ranges, for faster lookups by number */ | |
222 | unsigned n_value_ranges; | |
223 | const ProtobufCIntRange *value_ranges; | |
224 | ||
646 | /** | |
647 | * Size in bytes of the C structure representing an instance of this | |
648 | * type of message. | |
649 | */ | |
650 | size_t sizeof_message; | |
651 | ||
652 | /** Number of elements in `fields`. */ | |
653 | unsigned n_fields; | |
654 | /** Field descriptors, sorted by tag number. */ | |
655 | const ProtobufCFieldDescriptor *fields; | |
656 | /** Used for looking up fields by name. */ | |
657 | const unsigned *fields_sorted_by_name; | |
658 | ||
659 | /** Number of elements in `field_ranges`. */ | |
660 | unsigned n_field_ranges; | |
661 | /** Used for looking up fields by id. */ | |
662 | const ProtobufCIntRange *field_ranges; | |
663 | ||
664 | /** Message initialisation function. */ | |
665 | ProtobufCMessageInit message_init; | |
666 | ||
667 | /** Reserved for future use. */ | |
225 | 668 | void *reserved1; |
669 | /** Reserved for future use. */ | |
226 | 670 | void *reserved2; |
671 | /** Reserved for future use. */ | |
227 | 672 | void *reserved3; |
228 | void *reserved4; | |
229 | }; | |
230 | ||
231 | /* --- messages --- */ | |
232 | ||
233 | typedef struct _ProtobufCMessageDescriptor ProtobufCMessageDescriptor; | |
234 | typedef struct _ProtobufCFieldDescriptor ProtobufCFieldDescriptor; | |
235 | typedef struct _ProtobufCMessage ProtobufCMessage; | |
236 | typedef void (*ProtobufCMessageInit)(ProtobufCMessage *); | |
237 | ||
238 | /* | |
239 | * ProtobufCFieldDescriptor: description of a single field in a message. | |
240 | * | |
241 | * 'name' is the name of the field, as given in the .proto file. | |
242 | * 'id' is the code representing the field, as given in the .proto file. | |
243 | * 'label' is one of PROTOBUF_C_LABEL_{REQUIRED,OPTIONAL,REPEATED} | |
244 | * 'type' is the type of field. | |
245 | * 'quantifier_offset' is the offset in bytes into the message's C structure | |
246 | * for this member's "has_MEMBER" field (for optional members) or | |
247 | * "n_MEMBER" field (for repeated members). | |
248 | * 'offset' is the offset in bytes into the message's C structure | |
249 | * for the member itself. | |
250 | * 'descriptor' is a pointer to a ProtobufC{Enum,Message}Descriptor | |
251 | * if type is PROTOBUF_C_TYPE_{ENUM,MESSAGE} respectively, | |
252 | * otherwise NULL. | |
253 | * 'default_value' is a pointer to a default value for this field, | |
254 | * where allowed. | |
255 | * 'flags' is a flag word. Zero or more of the bits defined in the | |
256 | * ProtobufCFieldFlag enum may be set. | |
257 | */ | |
258 | struct _ProtobufCFieldDescriptor { | |
259 | const char *name; | |
260 | uint32_t id; | |
261 | ProtobufCLabel label; | |
262 | ProtobufCType type; | |
263 | unsigned quantifier_offset; | |
264 | unsigned offset; | |
265 | const void *descriptor; /* for MESSAGE and ENUM types */ | |
266 | const void *default_value; /* can be NULL */ | |
267 | uint32_t flags; | |
268 | ||
269 | unsigned reserved_flags; | |
270 | void *reserved2; | |
271 | void *reserved3; | |
272 | }; | |
273 | ||
274 | typedef enum { | |
275 | /* Set if the field is repeated and marked with the 'packed' option. */ | |
276 | PROTOBUF_C_FIELD_FLAG_PACKED = (1 << 0), | |
277 | ||
278 | /* Set if the field is marked with the 'deprecated' option. */ | |
279 | PROTOBUF_C_FIELD_FLAG_DEPRECATED = (1 << 1), | |
280 | } ProtobufCFieldFlag; | |
281 | ||
282 | /* | |
283 | * ProtobufCMessageDescriptor: description of a message. | |
284 | * | |
285 | * 'magic' is a code we check to ensure that the api is used correctly. | |
286 | * 'name' is the qualified name (e.g. "namespace.Type"). | |
287 | * 'short_name' is the unqualified name ("Type"), as given in the .proto file. | |
288 | * 'c_name' is the c-formatted name of the structure | |
289 | * 'package_name' is the '.'-separated namespace | |
290 | * 'sizeof_message' is the size in bytes of the C structure | |
291 | * representing an instance of this type of message. | |
292 | * 'n_fields' is the number of known fields in this message. | |
293 | * 'fields' is the fields sorted by id number. | |
294 | * 'fields_sorted_by_name', 'n_field_ranges' and 'field_ranges' | |
295 | * are used for looking up fields by name and id. (private) | |
296 | */ | |
297 | struct _ProtobufCMessageDescriptor { | |
298 | uint32_t magic; | |
299 | ||
300 | const char *name; | |
301 | const char *short_name; | |
302 | const char *c_name; | |
303 | const char *package_name; | |
304 | ||
305 | size_t sizeof_message; | |
306 | ||
307 | /* sorted by field-id */ | |
308 | unsigned n_fields; | |
309 | const ProtobufCFieldDescriptor *fields; | |
310 | const unsigned *fields_sorted_by_name; | |
311 | ||
312 | /* ranges, optimization for looking up fields */ | |
313 | unsigned n_field_ranges; | |
314 | const ProtobufCIntRange *field_ranges; | |
315 | ||
316 | ProtobufCMessageInit message_init; | |
317 | void *reserved1; | |
318 | void *reserved2; | |
319 | void *reserved3; | |
320 | }; | |
321 | ||
322 | /* | |
323 | * ProtobufCMessage: an instance of a message. | |
324 | * | |
325 | * ProtobufCMessage is sort of a light-weight base class for all messages. | |
326 | * | |
327 | * In particular, ProtobufCMessage doesn't have any allocation policy | |
328 | * associated with it. That's because it's common to create ProtobufCMessage's | |
329 | * on the stack. In fact, that's what we recommend for sending messages | |
330 | * (because if you just allocate from the stack, then you can't really have a | |
331 | * memory leak). | |
332 | * | |
333 | * This means that functions like protobuf_c_message_unpack() which return a | |
334 | * ProtobufCMessage must be paired with a free function, like | |
335 | * protobuf_c_message_free_unpacked(). | |
336 | * | |
337 | * 'descriptor' gives the locations and types of the members of message. | |
338 | * 'n_unknown_fields' is the number of fields we didn't recognize. | |
339 | * 'unknown_fields' are fields we didn't recognize. | |
340 | */ | |
341 | typedef struct _ProtobufCMessageUnknownField ProtobufCMessageUnknownField; | |
342 | struct _ProtobufCMessage { | |
343 | const ProtobufCMessageDescriptor *descriptor; | |
344 | unsigned n_unknown_fields; | |
345 | ProtobufCMessageUnknownField *unknown_fields; | |
346 | }; | |
347 | ||
348 | #define PROTOBUF_C_MESSAGE_INIT(descriptor) { descriptor, 0, NULL } | |
349 | ||
350 | /* | |
351 | * To pack a message: you have two options: | |
352 | * (1) you can compute the size of the message using | |
353 | * protobuf_c_message_get_packed_size() then pass | |
354 | * protobuf_c_message_pack() a buffer of that length. | |
355 | * | |
356 | * (2) Provide a virtual buffer (a ProtobufCBuffer) to | |
357 | * accept data as we scan through it. | |
358 | */ | |
359 | PROTOBUF_C_API size_t | |
360 | protobuf_c_message_get_packed_size(const ProtobufCMessage *); | |
361 | ||
362 | PROTOBUF_C_API size_t | |
363 | protobuf_c_message_pack(const ProtobufCMessage *, uint8_t *out); | |
364 | ||
365 | PROTOBUF_C_API size_t | |
366 | protobuf_c_message_pack_to_buffer(const ProtobufCMessage *, ProtobufCBuffer *); | |
367 | ||
368 | PROTOBUF_C_API ProtobufCMessage * | |
369 | protobuf_c_message_unpack( | |
370 | const ProtobufCMessageDescriptor *, | |
371 | ProtobufCAllocator *, | |
372 | size_t len, | |
373 | const uint8_t *data); | |
374 | ||
375 | PROTOBUF_C_API void | |
376 | protobuf_c_message_free_unpacked(ProtobufCMessage *, ProtobufCAllocator *); | |
377 | ||
378 | PROTOBUF_C_API protobuf_c_boolean | |
379 | protobuf_c_message_check(const ProtobufCMessage *); | |
380 | ||
381 | /* | |
382 | * WARNING: 'message' must be a block of memory of size | |
383 | * descriptor->sizeof_message. | |
384 | */ | |
385 | PROTOBUF_C_API void | |
386 | protobuf_c_message_init(const ProtobufCMessageDescriptor *, void *message); | |
387 | ||
388 | /* --- services --- */ | |
389 | ||
390 | typedef struct _ProtobufCMethodDescriptor ProtobufCMethodDescriptor; | |
391 | struct _ProtobufCMethodDescriptor { | |
673 | }; | |
674 | ||
675 | /** | |
676 | * An unknown message field. | |
677 | */ | |
678 | struct ProtobufCMessageUnknownField { | |
679 | /** The tag number. */ | |
680 | uint32_t tag; | |
681 | /** The wire type of the field. */ | |
682 | ProtobufCWireType wire_type; | |
683 | /** Number of bytes in `data`. */ | |
684 | size_t len; | |
685 | /** Field data. */ | |
686 | uint8_t *data; | |
687 | }; | |
688 | ||
689 | /** | |
690 | * Method descriptor. | |
691 | */ | |
692 | struct ProtobufCMethodDescriptor { | |
693 | /** Method name. */ | |
392 | 694 | const char *name; |
695 | /** Input message descriptor. */ | |
393 | 696 | const ProtobufCMessageDescriptor *input; |
697 | /** Output message descriptor. */ | |
394 | 698 | const ProtobufCMessageDescriptor *output; |
395 | 699 | }; |
396 | 700 | |
397 | typedef struct _ProtobufCServiceDescriptor ProtobufCServiceDescriptor; | |
398 | struct _ProtobufCServiceDescriptor { | |
399 | uint32_t magic; | |
400 | ||
401 | const char *name; | |
402 | const char *short_name; | |
403 | const char *c_name; | |
404 | const char *package; | |
405 | unsigned n_methods; | |
406 | const ProtobufCMethodDescriptor *methods; /* in order from .proto file */ | |
407 | const unsigned *method_indices_by_name; | |
408 | }; | |
409 | ||
410 | typedef void (*ProtobufCClosure)(const ProtobufCMessage *, void *closure_data); | |
411 | ||
412 | typedef struct _ProtobufCService ProtobufCService; | |
413 | struct _ProtobufCService { | |
701 | /** | |
702 | * Service. | |
703 | */ | |
704 | struct ProtobufCService { | |
705 | /** Service descriptor. */ | |
414 | 706 | const ProtobufCServiceDescriptor *descriptor; |
707 | /** Function to invoke the service. */ | |
415 | 708 | void (*invoke)(ProtobufCService *service, |
416 | 709 | unsigned method_index, |
417 | 710 | const ProtobufCMessage *input, |
418 | 711 | ProtobufCClosure closure, |
419 | 712 | void *closure_data); |
713 | /** Function to destroy the service. */ | |
420 | 714 | void (*destroy)(ProtobufCService *service); |
421 | 715 | }; |
422 | 716 | |
423 | PROTOBUF_C_API void | |
424 | protobuf_c_service_destroy(ProtobufCService *); | |
425 | ||
426 | /* --- querying the descriptors --- */ | |
427 | ||
428 | PROTOBUF_C_API const ProtobufCEnumValue * | |
717 | /** | |
718 | * Service descriptor. | |
719 | */ | |
720 | struct ProtobufCServiceDescriptor { | |
721 | /** Magic value checked to ensure that the API is used correctly. */ | |
722 | uint32_t magic; | |
723 | ||
724 | /** Service name. */ | |
725 | const char *name; | |
726 | /** Short version of service name. */ | |
727 | const char *short_name; | |
728 | /** C identifier for the service name. */ | |
729 | const char *c_name; | |
730 | /** Package name. */ | |
731 | const char *package; | |
732 | /** Number of elements in `methods`. */ | |
733 | unsigned n_methods; | |
734 | /** Method descriptors, in the order defined in the .proto file. */ | |
735 | const ProtobufCMethodDescriptor *methods; | |
736 | /** Sort index of methods. */ | |
737 | const unsigned *method_indices_by_name; | |
738 | }; | |
739 | ||
740 | /** | |
741 | * Get the version of the protobuf-c library. Note that this is the version of | |
742 | * the library linked against, not the version of the headers compiled against. | |
743 | * | |
744 | * \return A string containing the version number of protobuf-c. | |
745 | */ | |
746 | PROTOBUF_C__API | |
747 | const char * | |
748 | protobuf_c_version(void); | |
749 | ||
750 | /** | |
751 | * Get the version of the protobuf-c library. Note that this is the version of | |
752 | * the library linked against, not the version of the headers compiled against. | |
753 | * | |
754 | * \return A 32 bit unsigned integer containing the version number of | |
755 | * protobuf-c, represented in base-10 as (MAJOR*1E6) + (MINOR*1E3) + PATCH. | |
756 | */ | |
757 | PROTOBUF_C__API | |
758 | uint32_t | |
759 | protobuf_c_version_number(void); | |
760 | ||
761 | /** | |
762 | * The version of the protobuf-c headers, represented as a string using the same | |
763 | * format as protobuf_c_version(). | |
764 | */ | |
765 | #define PROTOBUF_C_VERSION "1.0.0-rc2" | |
766 | ||
767 | /** | |
768 | * The version of the protobuf-c headers, represented as an integer using the | |
769 | * same format as protobuf_c_version_number(). | |
770 | */ | |
771 | #define PROTOBUF_C_VERSION_NUMBER 1000000 | |
772 | ||
773 | /** | |
774 | * The minimum protoc-c version which works with the current version of the | |
775 | * protobuf-c headers. | |
776 | */ | |
777 | #define PROTOBUF_C_MIN_COMPILER_VERSION 1000000 | |
778 | ||
779 | /** | |
780 | * Look up a `ProtobufCEnumValue` from a `ProtobufCEnumDescriptor` by name. | |
781 | * | |
782 | * \param desc | |
783 | * The `ProtobufCEnumDescriptor` object. | |
784 | * \param name | |
785 | * The `name` field from the corresponding `ProtobufCEnumValue` object to | |
786 | * match. | |
787 | * \return | |
788 | * A `ProtobufCEnumValue` object. | |
789 | * \retval NULL | |
790 | * If not found. | |
791 | */ | |
792 | PROTOBUF_C__API | |
793 | const ProtobufCEnumValue * | |
429 | 794 | protobuf_c_enum_descriptor_get_value_by_name( |
430 | 795 | const ProtobufCEnumDescriptor *desc, |
431 | 796 | const char *name); |
432 | 797 | |
433 | PROTOBUF_C_API const ProtobufCEnumValue * | |
798 | /** | |
799 | * Look up a `ProtobufCEnumValue` from a `ProtobufCEnumDescriptor` by numeric | |
800 | * value. | |
801 | * | |
802 | * \param desc | |
803 | * The `ProtobufCEnumDescriptor` object. | |
804 | * \param value | |
805 | * The `value` field from the corresponding `ProtobufCEnumValue` object to | |
806 | * match. | |
807 | * | |
808 | * \return | |
809 | * A `ProtobufCEnumValue` object. | |
810 | * \retval NULL | |
811 | * If not found. | |
812 | */ | |
813 | PROTOBUF_C__API | |
814 | const ProtobufCEnumValue * | |
434 | 815 | protobuf_c_enum_descriptor_get_value( |
435 | 816 | const ProtobufCEnumDescriptor *desc, |
436 | 817 | int value); |
437 | 818 | |
438 | PROTOBUF_C_API const ProtobufCFieldDescriptor * | |
819 | /** | |
820 | * Look up a `ProtobufCFieldDescriptor` from a `ProtobufCMessageDescriptor` by | |
821 | * the name of the field. | |
822 | * | |
823 | * \param desc | |
824 | * The `ProtobufCMessageDescriptor` object. | |
825 | * \param name | |
826 | * The name of the field. | |
827 | * \return | |
828 | * A `ProtobufCFieldDescriptor` object. | |
829 | * \retval NULL | |
830 | * If not found. | |
831 | */ | |
832 | PROTOBUF_C__API | |
833 | const ProtobufCFieldDescriptor * | |
439 | 834 | protobuf_c_message_descriptor_get_field_by_name( |
440 | 835 | const ProtobufCMessageDescriptor *desc, |
441 | 836 | const char *name); |
442 | 837 | |
443 | PROTOBUF_C_API const ProtobufCFieldDescriptor * | |
838 | /** | |
839 | * Look up a `ProtobufCFieldDescriptor` from a `ProtobufCMessageDescriptor` by | |
840 | * the tag value of the field. | |
841 | * | |
842 | * \param desc | |
843 | * The `ProtobufCMessageDescriptor` object. | |
844 | * \param value | |
845 | * The tag value of the field. | |
846 | * \return | |
847 | * A `ProtobufCFieldDescriptor` object. | |
848 | * \retval NULL | |
849 | * If not found. | |
850 | */ | |
851 | PROTOBUF_C__API | |
852 | const ProtobufCFieldDescriptor * | |
444 | 853 | protobuf_c_message_descriptor_get_field( |
445 | 854 | const ProtobufCMessageDescriptor *desc, |
446 | 855 | unsigned value); |
447 | 856 | |
448 | PROTOBUF_C_API const ProtobufCMethodDescriptor * | |
857 | /** | |
858 | * Determine the number of bytes required to store the serialised message. | |
859 | * | |
860 | * \param message | |
861 | * The message object to serialise. | |
862 | * \return | |
863 | * Number of bytes. | |
864 | */ | |
865 | PROTOBUF_C__API | |
866 | size_t | |
867 | protobuf_c_message_get_packed_size(const ProtobufCMessage *message); | |
868 | ||
869 | /** | |
870 | * Serialise a message from its in-memory representation. | |
871 | * | |
872 | * This function stores the serialised bytes of the message in a pre-allocated | |
873 | * buffer. | |
874 | * | |
875 | * \param message | |
876 | * The message object to serialise. | |
877 | * \param[out] out | |
878 | * Buffer to store the bytes of the serialised message. This buffer must | |
879 | * have enough space to store the packed message. Use | |
880 | * protobuf_c_message_get_packed_size() to determine the number of bytes | |
881 | * required. | |
882 | * \return | |
883 | * Number of bytes stored in `out`. | |
884 | */ | |
885 | PROTOBUF_C__API | |
886 | size_t | |
887 | protobuf_c_message_pack(const ProtobufCMessage *message, uint8_t *out); | |
888 | ||
889 | /** | |
890 | * Serialise a message from its in-memory representation to a virtual buffer. | |
891 | * | |
892 | * This function calls the `append` method of a `ProtobufCBuffer` object to | |
893 | * consume the bytes generated by the serialiser. | |
894 | * | |
895 | * \param message | |
896 | * The message object to serialise. | |
897 | * \param buffer | |
898 | * The virtual buffer object. | |
899 | * \return | |
900 | * Number of bytes passed to the virtual buffer. | |
901 | */ | |
902 | PROTOBUF_C__API | |
903 | size_t | |
904 | protobuf_c_message_pack_to_buffer( | |
905 | const ProtobufCMessage *message, | |
906 | ProtobufCBuffer *buffer); | |
907 | ||
908 | /** | |
909 | * Unpack a serialised message into an in-memory representation. | |
910 | * | |
911 | * \param descriptor | |
912 | * The message descriptor. | |
913 | * \param allocator | |
914 | * `ProtobufCAllocator` to use for memory allocation. May be NULL to | |
915 | * specify the default allocator. | |
916 | * \param len | |
917 | * Length in bytes of the serialised message. | |
918 | * \param data | |
919 | * Pointer to the serialised message. | |
920 | * \return | |
921 | * An unpacked message object. | |
922 | * \retval NULL | |
923 | * If an error occurred during unpacking. | |
924 | */ | |
925 | PROTOBUF_C__API | |
926 | ProtobufCMessage * | |
927 | protobuf_c_message_unpack( | |
928 | const ProtobufCMessageDescriptor *descriptor, | |
929 | ProtobufCAllocator *allocator, | |
930 | size_t len, | |
931 | const uint8_t *data); | |
932 | ||
933 | /** | |
934 | * Free an unpacked message object. | |
935 | * | |
936 | * This function should be used to deallocate the memory used by a call to | |
937 | * protobuf_c_message_unpack(). | |
938 | * | |
939 | * \param message | |
940 | * The message object to free. | |
941 | * \param allocator | |
942 | * `ProtobufCAllocator` to use for memory deallocation. May be NULL to | |
943 | * specify the default allocator. | |
944 | */ | |
945 | PROTOBUF_C__API | |
946 | void | |
947 | protobuf_c_message_free_unpacked( | |
948 | ProtobufCMessage *message, | |
949 | ProtobufCAllocator *allocator); | |
950 | ||
951 | /** | |
952 | * Check the validity of a message object. | |
953 | * | |
954 | * Makes sure all required fields (`PROTOBUF_C_LABEL_REQUIRED`) are present. | |
955 | * Recursively checks nested messages. | |
956 | * | |
957 | * \retval TRUE | |
958 | * Message is valid. | |
959 | * \retval FALSE | |
960 | * Message is invalid. | |
961 | */ | |
962 | PROTOBUF_C__API | |
963 | protobuf_c_boolean | |
964 | protobuf_c_message_check(const ProtobufCMessage *); | |
965 | ||
966 | /** Message initialiser. */ | |
967 | #define PROTOBUF_C_MESSAGE_INIT(descriptor) { descriptor, 0, NULL } | |
968 | ||
969 | /** | |
970 | * Initialise a message object from a message descriptor. | |
971 | * | |
972 | * \param descriptor | |
973 | * Message descriptor. | |
974 | * \param message | |
975 | * Allocated block of memory of size `descriptor->sizeof_message`. | |
976 | */ | |
977 | PROTOBUF_C__API | |
978 | void | |
979 | protobuf_c_message_init( | |
980 | const ProtobufCMessageDescriptor *descriptor, | |
981 | void *message); | |
982 | ||
983 | /** | |
984 | * Free a service. | |
985 | * | |
986 | * \param service | |
987 | * The service object to free. | |
988 | */ | |
989 | PROTOBUF_C__API | |
990 | void | |
991 | protobuf_c_service_destroy(ProtobufCService *service); | |
992 | ||
993 | /** | |
994 | * Look up a `ProtobufCMethodDescriptor` by name. | |
995 | * | |
996 | * \param desc | |
997 | * Service descriptor. | |
998 | * \param name | |
999 | * Name of the method. | |
1000 | * | |
1001 | * \return | |
1002 | * A `ProtobufCMethodDescriptor` object. | |
1003 | * \retval NULL | |
1004 | * If not found. | |
1005 | */ | |
1006 | PROTOBUF_C__API | |
1007 | const ProtobufCMethodDescriptor * | |
449 | 1008 | protobuf_c_service_descriptor_get_method_by_name( |
450 | 1009 | const ProtobufCServiceDescriptor *desc, |
451 | 1010 | const char *name); |
452 | 1011 | |
453 | /* --- wire format enums --- */ | |
454 | ||
455 | typedef enum { | |
456 | PROTOBUF_C_WIRE_TYPE_VARINT, | |
457 | PROTOBUF_C_WIRE_TYPE_64BIT, | |
458 | PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED, | |
459 | PROTOBUF_C_WIRE_TYPE_START_GROUP, /* unsupported */ | |
460 | PROTOBUF_C_WIRE_TYPE_END_GROUP, /* unsupported */ | |
461 | PROTOBUF_C_WIRE_TYPE_32BIT | |
462 | } ProtobufCWireType; | |
463 | ||
464 | /* --- unknown message fields --- */ | |
465 | ||
466 | struct _ProtobufCMessageUnknownField { | |
467 | uint32_t tag; | |
468 | ProtobufCWireType wire_type; | |
469 | size_t len; | |
470 | uint8_t *data; | |
471 | }; | |
472 | ||
473 | /* --- extra (superfluous) api: trivial buffer --- */ | |
474 | ||
475 | typedef struct _ProtobufCBufferSimple ProtobufCBufferSimple; | |
476 | struct _ProtobufCBufferSimple { | |
477 | ProtobufCBuffer base; | |
478 | size_t alloced; | |
479 | size_t len; | |
480 | uint8_t *data; | |
481 | protobuf_c_boolean must_free_data; | |
482 | }; | |
483 | ||
484 | #define PROTOBUF_C_BUFFER_SIMPLE_INIT(array_of_bytes) \ | |
485 | { \ | |
486 | { protobuf_c_buffer_simple_append }, \ | |
487 | sizeof(array_of_bytes), \ | |
488 | 0, \ | |
489 | (array_of_bytes), \ | |
490 | 0 \ | |
1012 | /** | |
1013 | * Initialise a `ProtobufCBufferSimple` object. | |
1014 | */ | |
1015 | #define PROTOBUF_C_BUFFER_SIMPLE_INIT(array_of_bytes) \ | |
1016 | { \ | |
1017 | { protobuf_c_buffer_simple_append }, \ | |
1018 | sizeof(array_of_bytes), \ | |
1019 | 0, \ | |
1020 | (array_of_bytes), \ | |
1021 | 0, \ | |
1022 | NULL \ | |
491 | 1023 | } |
492 | 1024 | |
493 | #define PROTOBUF_C_BUFFER_SIMPLE_CLEAR(simp_buf) \ | |
494 | do { \ | |
495 | if ((simp_buf)->must_free_data) { \ | |
496 | protobuf_c_default_allocator.free( \ | |
497 | &protobuf_c_default_allocator, \ | |
498 | (simp_buf)->data); \ | |
499 | } \ | |
1025 | /** | |
1026 | * Clear a `ProtobufCBufferSimple` object, freeing any allocated memory. | |
1027 | */ | |
1028 | #define PROTOBUF_C_BUFFER_SIMPLE_CLEAR(simp_buf) \ | |
1029 | do { \ | |
1030 | if ((simp_buf)->must_free_data) { \ | |
1031 | if ((simp_buf)->allocator != NULL) \ | |
1032 | (simp_buf)->allocator->free( \ | |
1033 | (simp_buf)->allocator, \ | |
1034 | (simp_buf)->data); \ | |
1035 | else \ | |
1036 | free((simp_buf)->data); \ | |
1037 | } \ | |
500 | 1038 | } while (0) |
501 | 1039 | |
502 | /* ====== private ====== */ | |
503 | ||
504 | #define PROTOBUF_C_SERVICE_DESCRIPTOR_MAGIC 0x14159bc3 | |
505 | #define PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC 0x28aaeef9 | |
506 | #define PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC 0x114315af | |
507 | ||
508 | /* | |
509 | * A little enum helper macro: this will ensure that your enum's size is | |
510 | * sizeof(int). In protobuf, it need not be larger than 32-bits. This is | |
511 | * written assuming it is appended to a list w/o a tail comma. | |
512 | */ | |
513 | #ifndef _PROTOBUF_C_FORCE_ENUM_TO_BE_INT_SIZE | |
514 | #define _PROTOBUF_C_FORCE_ENUM_TO_BE_INT_SIZE(enum_name) \ | |
515 | , _##enum_name##_IS_INT_SIZE = INT_MAX | |
516 | #endif | |
517 | ||
518 | /* === needs to be declared for the PROTOBUF_C_BUFFER_SIMPLE_INIT macro === */ | |
519 | ||
1040 | /** | |
1041 | * The `append` method for `ProtobufCBufferSimple`. | |
1042 | * | |
1043 | * \param buffer | |
1044 | * The buffer object to append to. Must actually be a | |
1045 | * `ProtobufCBufferSimple` object. | |
1046 | * \param len | |
1047 | * Number of bytes in `data`. | |
1048 | * \param data | |
1049 | * Data to append. | |
1050 | */ | |
1051 | PROTOBUF_C__API | |
520 | 1052 | void |
521 | 1053 | protobuf_c_buffer_simple_append( |
522 | 1054 | ProtobufCBuffer *buffer, |
523 | 1055 | size_t len, |
524 | 1056 | const unsigned char *data); |
525 | 1057 | |
526 | /* === stuff which needs to be declared for use in the generated code === */ | |
527 | ||
528 | struct _ProtobufCEnumValueIndex { | |
529 | const char *name; | |
530 | unsigned index; /* into values[] array */ | |
531 | }; | |
532 | ||
533 | /* | |
534 | * IntRange: helper structure for optimizing int => index lookups in the case | |
535 | * where the keys are mostly consecutive values, as they presumably are for | |
536 | * enums and fields. | |
537 | * | |
538 | * The data structures assumes that the values in the original array are | |
539 | * sorted. | |
540 | */ | |
541 | struct _ProtobufCIntRange { | |
542 | int start_value; | |
543 | unsigned orig_index; | |
544 | /* | |
545 | * NOTE: the number of values in the range can be inferred by looking | |
546 | * at the next element's orig_index. A dummy element is added to make | |
547 | * this simple. | |
548 | */ | |
549 | }; | |
550 | ||
551 | /* === declared for exposition on ProtobufCIntRange === */ | |
552 | ||
553 | /* | |
554 | * Note: ranges must have an extra sentinel IntRange at the end whose | |
555 | * orig_index is set to the number of actual values in the original array. | |
556 | * Returns -1 if no orig_index found. | |
557 | */ | |
558 | int | |
559 | protobuf_c_int_ranges_lookup(unsigned n_ranges, ProtobufCIntRange *ranges); | |
560 | ||
561 | /* === behind the scenes on the generated service's __init functions */ | |
562 | ||
563 | typedef void (*ProtobufCServiceDestroy)(ProtobufCService *); | |
564 | ||
1058 | PROTOBUF_C__API | |
565 | 1059 | void |
566 | 1060 | protobuf_c_service_generated_init( |
567 | 1061 | ProtobufCService *service, |
568 | 1062 | const ProtobufCServiceDescriptor *descriptor, |
569 | 1063 | ProtobufCServiceDestroy destroy); |
570 | 1064 | |
571 | void | |
1065 | PROTOBUF_C__API | |
1066 | void | |
572 | 1067 | protobuf_c_service_invoke_internal( |
573 | 1068 | ProtobufCService *service, |
574 | 1069 | unsigned method_index, |
576 | 1071 | ProtobufCClosure closure, |
577 | 1072 | void *closure_data); |
578 | 1073 | |
579 | PROTOBUF_C_END_DECLS | |
580 | ||
581 | #endif /* __PROTOBUF_C_RUNTIME_H_ */ | |
1074 | /**@}*/ | |
1075 | ||
1076 | PROTOBUF_C__END_DECLS | |
1077 | ||
1078 | #endif /* PROTOBUF_C_H */ |
110 | 110 | } |
111 | 111 | } |
112 | 112 | |
113 | printer->Print(vars, " _PROTOBUF_C_FORCE_ENUM_TO_BE_INT_SIZE($uc_name$)\n"); | |
113 | printer->Print(vars, " PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE($uc_name$)\n"); | |
114 | 114 | printer->Outdent(); |
115 | 115 | printer->Print(vars, "} $classname$;\n"); |
116 | 116 | } |
271 | 271 | printer->Print(vars, |
272 | 272 | "const ProtobufCEnumDescriptor $lcclassname$__descriptor =\n" |
273 | 273 | "{\n" |
274 | " PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC,\n" | |
274 | " PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,\n" | |
275 | 275 | " \"$fullname$\",\n" |
276 | 276 | " \"$shortname$\",\n" |
277 | 277 | " \"$cname$\",\n" |
144 | 144 | break; |
145 | 145 | case FieldDescriptor::LABEL_OPTIONAL: |
146 | 146 | if (optional_uses_has) { |
147 | printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, has_$name$),\n"); | |
147 | printer->Print(variables, " offsetof($classname$, has_$name$),\n"); | |
148 | 148 | } else { |
149 | 149 | printer->Print(variables, " 0, /* quantifier_offset */\n"); |
150 | 150 | } |
151 | 151 | break; |
152 | 152 | case FieldDescriptor::LABEL_REPEATED: |
153 | printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, n_$name$),\n"); | |
153 | printer->Print(variables, " offsetof($classname$, n_$name$),\n"); | |
154 | 154 | break; |
155 | 155 | } |
156 | printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, $name$),\n"); | |
156 | printer->Print(variables, " offsetof($classname$, $name$),\n"); | |
157 | 157 | printer->Print(variables, " $descriptor_addr$,\n"); |
158 | 158 | printer->Print(variables, " $default_value$,\n"); |
159 | 159 | printer->Print(variables, " $flags$, /* flags */\n"); |
118 | 118 | void FileGenerator::GenerateHeader(io::Printer* printer) { |
119 | 119 | string filename_identifier = FilenameIdentifier(file_->name()); |
120 | 120 | |
121 | static const int min_header_version = 1000000; | |
122 | ||
121 | 123 | // Generate top of header. |
122 | 124 | printer->Print( |
123 | 125 | "/* Generated by the protocol buffer compiler. DO NOT EDIT! */\n" |
128 | 130 | "\n" |
129 | 131 | "#include <protobuf-c/protobuf-c.h>\n" |
130 | 132 | "\n" |
131 | "PROTOBUF_C_BEGIN_DECLS\n" | |
133 | "PROTOBUF_C__BEGIN_DECLS\n" | |
132 | 134 | "\n", |
133 | 135 | "filename", file_->name(), |
134 | 136 | "filename_identifier", filename_identifier); |
139 | 141 | "#if PROTOBUF_C_VERSION_NUMBER < $min_header_version$\n" |
140 | 142 | "# error This file was generated by a newer version of protoc-c which is " |
141 | 143 | "incompatible with your libprotobuf-c headers. Please update your headers.\n" |
142 | "#elif $protoc_version$ < PROTOBUF_C_VERSION_NUMBER\n" | |
144 | "#elif $protoc_version$ < PROTOBUF_C_MIN_COMPILER_VERSION\n" | |
143 | 145 | "# error This file was generated by an older version of protoc-c which is " |
144 | 146 | "incompatible with your libprotobuf-c headers. Please regenerate this file " |
145 | 147 | "with a newer version of protoc-c.\n" |
146 | 148 | "#endif\n" |
147 | 149 | "\n", |
148 | "min_header_version", | |
149 | SimpleItoa(PROTOBUF_C_VERSION_NUMBER), | |
150 | "min_header_version", SimpleItoa(min_header_version), | |
150 | 151 | "protoc_version", SimpleItoa(PROTOBUF_C_VERSION_NUMBER)); |
151 | 152 | |
152 | 153 | for (int i = 0; i < file_->dependency_count(); i++) { |
212 | 213 | |
213 | 214 | printer->Print( |
214 | 215 | "\n" |
215 | "PROTOBUF_C_END_DECLS\n" | |
216 | "\n\n#endif /* PROTOBUF_$filename_identifier$__INCLUDED */\n", | |
216 | "PROTOBUF_C__END_DECLS\n" | |
217 | "\n\n#endif /* PROTOBUF_C_$filename_identifier$__INCLUDED */\n", | |
217 | 218 | "filename_identifier", filename_identifier); |
218 | 219 | } |
219 | 220 | |
223 | 224 | "/* Generated from: $filename$ */\n" |
224 | 225 | "\n" |
225 | 226 | "/* Do not generate deprecated warnings for self */\n" |
226 | "#ifndef PROTOBUF_C_NO_DEPRECATED\n" | |
227 | "#define PROTOBUF_C_NO_DEPRECATED\n" | |
227 | "#ifndef PROTOBUF_C__NO_DEPRECATED\n" | |
228 | "#define PROTOBUF_C__NO_DEPRECATED\n" | |
228 | 229 | "#endif\n" |
229 | 230 | "\n" |
230 | 231 | "#include \"$basename$.pb-c.h\"\n", |
287 | 287 | |
288 | 288 | string FieldDeprecated(const FieldDescriptor* field) { |
289 | 289 | if (field->options().deprecated()) { |
290 | return " PROTOBUF_C_DEPRECATED"; | |
290 | return " PROTOBUF_C__DEPRECATED"; | |
291 | 291 | } |
292 | 292 | return ""; |
293 | 293 | } |
275 | 275 | "size_t $lcclassname$__get_packed_size\n" |
276 | 276 | " (const $classname$ *message)\n" |
277 | 277 | "{\n" |
278 | " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n" | |
278 | " assert(message->base.descriptor == &$lcclassname$__descriptor);\n" | |
279 | 279 | " return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));\n" |
280 | 280 | "}\n" |
281 | 281 | "size_t $lcclassname$__pack\n" |
282 | 282 | " (const $classname$ *message,\n" |
283 | 283 | " uint8_t *out)\n" |
284 | 284 | "{\n" |
285 | " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n" | |
285 | " assert(message->base.descriptor == &$lcclassname$__descriptor);\n" | |
286 | 286 | " return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);\n" |
287 | 287 | "}\n" |
288 | 288 | "size_t $lcclassname$__pack_to_buffer\n" |
289 | 289 | " (const $classname$ *message,\n" |
290 | 290 | " ProtobufCBuffer *buffer)\n" |
291 | 291 | "{\n" |
292 | " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n" | |
292 | " assert(message->base.descriptor == &$lcclassname$__descriptor);\n" | |
293 | 293 | " return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);\n" |
294 | 294 | "}\n" |
295 | 295 | "$classname$ *\n" |
306 | 306 | " ($classname$ *message,\n" |
307 | 307 | " ProtobufCAllocator *allocator)\n" |
308 | 308 | "{\n" |
309 | " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n" | |
309 | " assert(message->base.descriptor == &$lcclassname$__descriptor);\n" | |
310 | 310 | " protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);\n" |
311 | 311 | "}\n" |
312 | 312 | ); |
466 | 466 | printer->Print(vars, |
467 | 467 | "const ProtobufCMessageDescriptor $lcclassname$__descriptor =\n" |
468 | 468 | "{\n" |
469 | " PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC,\n" | |
469 | " PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,\n" | |
470 | 470 | " \"$fullname$\",\n" |
471 | 471 | " \"$shortname$\",\n" |
472 | 472 | " \"$classname$\",\n" |
225 | 225 | |
226 | 226 | printer->Print(vars_, "const ProtobufCServiceDescriptor $lcfullname$__descriptor =\n" |
227 | 227 | "{\n" |
228 | " PROTOBUF_C_SERVICE_DESCRIPTOR_MAGIC,\n" | |
228 | " PROTOBUF_C__SERVICE_DESCRIPTOR_MAGIC,\n" | |
229 | 229 | " \"$fullname$\",\n" |
230 | 230 | " \"$name$\",\n" |
231 | 231 | " \"$cname$\",\n" |
257 | 257 | " $padddddddddddddddddd$ $output_typename$_Closure closure,\n" |
258 | 258 | " $padddddddddddddddddd$ void *closure_data)\n" |
259 | 259 | "{\n" |
260 | " PROTOBUF_C_ASSERT (service->descriptor == &$lcfullname$__descriptor);\n" | |
260 | " assert(service->descriptor == &$lcfullname$__descriptor);\n" | |
261 | 261 | " service->invoke(service, $index$, (const ProtobufCMessage *) input, (ProtobufCClosure) closure, closure_data);\n" |
262 | 262 | "}\n"); |
263 | 263 | } |
1468 | 1468 | msg2.test_message = &sub2; |
1469 | 1469 | sub2.has_val2 = 1; |
1470 | 1470 | sub2.val2 = 666; |
1471 | int32_t arr2[] = {2, 3}; | |
1472 | sub2.n_rep = 2; | |
1471 | int32_t arr2[] = {2, 3, 4}; | |
1472 | sub2.n_rep = 3; | |
1473 | 1473 | sub2.rep = arr2; |
1474 | 1474 | sub2.sub1 = &subsub2; |
1475 | 1475 | subsub2.has_val1 = 1; |
1495 | 1495 | assert (merged->test_message->has_val1 && merged->test_message->val1 == sub1.val1); |
1496 | 1496 | assert (merged->test_message->has_val2 && merged->test_message->val2 == sub2.val2); |
1497 | 1497 | /* Repeated fields should get concatenated */ |
1498 | int32_t merged_arr[] = {2, 3, 0, 1}; | |
1499 | assert (merged->test_message->n_rep == 4 && | |
1498 | int32_t merged_arr[] = {0, 1, 2, 3, 4}; | |
1499 | assert (merged->test_message->n_rep == 5 && | |
1500 | 1500 | memcmp(merged->test_message->rep, merged_arr, sizeof(merged_arr)) == 0); |
1501 | 1501 | |
1502 | 1502 | assert (merged->test_message->sub1->val1 == subsub2.val1); |