Codebase list protobuf-c / upstream/1.0.0_rc2
Imported Upstream version 1.0.0~rc2 Robert S. Edmonds 9 years ago
26 changed file(s) with 4767 addition(s) and 3670 deletion(s). Raw diff Collapse all Expand all
5151 * Optionally allow running the test suite under valgrind with ./configure
5252 --enable-valgrind-tests. (Based on valgrind-tests.m4 from gnulib.)
5353
54 [Kevin Lyda]
54 [ Kevin Lyda ]
5555 * Autoconf portability fixes.
5656
5757 * Add doxygen detection and make targets to the build system.
5858
59 [Nick Galbreath]
59 * Doxygen documentation for the libprotobuf-c public API (Issue #132).
60
61 [ Nick Galbreath ]
6062 * Prevent possible overflow on 64-bit systems (Issue #106).
6163
6264 [ Robert Edmonds ]
107109 compiled against a protobuf-c header file from the exact same protobuf-c
108110 release.
109111
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
110137 * Update copyright and license statements throughout. The original
111138 protobuf code released by Google was relicensed from Apache-2.0 to
112139 BSD-3-Clause. Dave Benson also converted his license from BSD-3-Clause
113140 to BSD-2-Clause.
114141
115 [Tomasz Wasilczyk]
142 [ Tomasz Wasilczyk ]
116143 * Don't export protobuf_c_message_init_generic() as an external symbol.
117144
118145 * 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>
2020 -I${top_srcdir}
2121 AM_CFLAGS = ${my_CFLAGS}
2222 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@
2331
2432 #
2533 # libprotobuf-c
183191 cd $(DESTDIR)$(includedir)/google/protobuf-c && rm -vf protobuf-c.h
184192 cd $(DESTDIR)$(includedir)/google/protobuf-c && $(LN_S) ../../protobuf-c/protobuf-c.h protobuf-c.h
185193
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
114114 @BUILD_COMPILER_TRUE@ t/test-full.pb.cc t/test-full.pb.h \
115115 @BUILD_COMPILER_TRUE@ t/generated-code2/test-full-cxx-output.inc
116116
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 \
120121 $(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 \
126128 $(top_srcdir)/build-aux/config.guess \
127129 $(top_srcdir)/build-aux/config.sub \
128130 $(top_srcdir)/build-aux/install-sh \
129131 $(top_srcdir)/build-aux/ltmain.sh \
130132 $(top_srcdir)/build-aux/missing
131 subdir = .
132133 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 \
134135 $(top_srcdir)/m4/ld-version-script.m4 \
135136 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
136137 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
142143 configure.lineno config.status.lineno
143144 mkinstalldirs = $(install_sh) -d
144145 CONFIG_HEADER = config.h
145 CONFIG_CLEAN_FILES = protobuf-c/libprotobuf-c.pc
146 CONFIG_CLEAN_FILES = protobuf-c/libprotobuf-c.pc Doxyfile
146147 CONFIG_CLEAN_VPATH_FILES =
147148 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
148149 am__vpath_adj = case $$p in \
561562 CC = @CC@
562563 CCDEPMODE = @CCDEPMODE@
563564 CFLAGS = @CFLAGS@
565 CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
566 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
567 CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
564568 CPP = @CPP@
565569 CPPFLAGS = @CPPFLAGS@
566570 CXX = @CXX@
571575 DEFS = @DEFS@
572576 DEPDIR = @DEPDIR@
573577 DLLTOOL = @DLLTOOL@
574 DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
578 DOXYGEN = @DOXYGEN@
579 DOXYGEN_INPUT = @DOXYGEN_INPUT@
575580 DSYMUTIL = @DSYMUTIL@
576581 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@
600582 ECHO_C = @ECHO_C@
601583 ECHO_N = @ECHO_N@
602584 ECHO_T = @ECHO_T@
603585 EGREP = @EGREP@
604586 EXEEXT = @EXEEXT@
605587 FGREP = @FGREP@
588 GENHTML = @GENHTML@
606589 GREP = @GREP@
607590 INSTALL = @INSTALL@
608591 INSTALL_DATA = @INSTALL_DATA@
609592 INSTALL_PROGRAM = @INSTALL_PROGRAM@
610593 INSTALL_SCRIPT = @INSTALL_SCRIPT@
611594 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
595 LCOV = @LCOV@
612596 LD = @LD@
613597 LDFLAGS = @LDFLAGS@
614598 LIBOBJS = @LIBOBJS@
628612 OTOOL64 = @OTOOL64@
629613 PACKAGE = @PACKAGE@
630614 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
615 PACKAGE_DESCRIPTION = @PACKAGE_DESCRIPTION@
631616 PACKAGE_NAME = @PACKAGE_NAME@
632617 PACKAGE_STRING = @PACKAGE_STRING@
633618 PACKAGE_TARNAME = @PACKAGE_TARNAME@
713698 DISTCLEANFILES =
714699 EXTRA_DIST = LICENSE README.md protobuf-c/libprotobuf-c.sym \
715700 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
717703 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
718704 AM_CPPFLAGS = \
719705 -include $(top_builddir)/config.h \
721707 -I${top_builddir} \
722708 -I${top_srcdir}
723709
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/*"
726716
727717 #
728718 # libprotobuf-c
810800 @BUILD_COMPILER_TRUE@t_version_version_LDADD = \
811801 @BUILD_COMPILER_TRUE@ protobuf-c/libprotobuf-c.la
812802
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)
838803 all: $(BUILT_SOURCES) config.h
839804 $(MAKE) $(AM_MAKEFLAGS) all-am
840805
842807 .SUFFIXES: .c .cc .lo .log .o .obj .test .test$(EXEEXT) .trs
843808 am--refresh: Makefile
844809 @:
845 $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/aminclude_doxygen.am $(am__configure_deps)
810 $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
846811 @for dep in $?; do \
847812 case '$(am__configure_deps)' in \
848813 *$$dep*) \
865830 echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
866831 cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
867832 esac;
868 $(srcdir)/aminclude_doxygen.am:
869833
870834 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
871835 $(SHELL) ./config.status --recheck
892856 -rm -f config.h stamp-h1
893857 protobuf-c/libprotobuf-c.pc: $(top_builddir)/config.status $(top_srcdir)/protobuf-c/libprotobuf-c.pc.in
894858 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 $@
895861
896862 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
897863 @$(NORMAL_INSTALL)
19031869 "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
19041870 fi
19051871 mostlyclean-generic:
1906 -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
19071872 -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
19081873 -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
19091874 -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
19321897 @echo "This command is intended for maintainers to use"
19331898 @echo "it deletes files that may require special tools to rebuild."
19341899 -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
1900 @HAVE_DOXYGEN_FALSE@html-local:
1901 @HAVE_DOXYGEN_FALSE@clean-local:
19351902 clean: clean-am
19361903
19371904 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
19401907
19411908 distclean: distclean-am
19421909 -rm -f $(am__CONFIG_DISTCLEAN_FILES)
19511918
19521919 html: html-am
19531920
1954 html-am:
1921 html-am: html-local
19551922
19561923 info: info-am
19571924
20151982 .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \
20161983 check-am clean clean-binPROGRAMS clean-checkPROGRAMS \
20171984 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 \
20221989 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 \
20251992 install-data-am install-data-hook install-dvi install-dvi-am \
20261993 install-exec install-exec-am install-html install-html-am \
20271994 install-info install-info-am install-libLTLIBRARIES \
20342001 uninstall-am uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
20352002 uninstall-nobase_includeHEADERS uninstall-pkgconfigDATA
20362003
2004 @CODE_COVERAGE_RULES@
20372005 @BUILD_COMPILER_TRUE@t/generated-code2/cxx-generate-packed-data.$(OBJEXT): t/test-full.pb.h
20382006
20392007 @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
20562024 cd $(DESTDIR)$(includedir)/google/protobuf-c && rm -vf protobuf-c.h
20572025 cd $(DESTDIR)$(includedir)/google/protobuf-c && $(LN_S) ../../protobuf-c/protobuf-c.h protobuf-c.h
20582026
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
21042038
21052039 # Tell versions [3.59,3.63) of GNU make to not export all variables.
21062040 # 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)
11
22 ## Overview
33
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.
55
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).
711
812 ## Building
913
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.
1115
1216 ./configure && make && make install
1317
1721
1822 ## Synopsis
1923
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.
2125
22 #include <protobuf-c/protobuf-c.h>
26 protoc-c --c_out=. example.proto
2327
24 Link against the `protobuf-c` library.
28 Include the `.pb-c.h` file from your C source code.
2529
26 -lprotobuf-c
30 #include "example.pb-c.h"
2731
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.
2933
30 PKG_CHECK_MODULES([PROTOBUF_C], [libprotobuf-c])
34 pkg-config --cflags 'libprotobuf-c >= 1.0.0'
3135
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.
3337
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.
3545
3646 ## Versioning
3747
1818 - message unpack alloc failures when allocating unknown field buffers
1919 - packed message corruption.
2020 - meta-todo: get a list of all the unpack errors together to check off
21 - run gcov
2221
2322 ---------------------
2423 --- DOCUMENTATION ---
106106 AC_PREREQ([2.50])dnl
107107 # expand $ac_aux_dir to an absolute path
108108 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
109146 ])
110147
111148 # AM_CONDITIONAL -*- Autoconf -*-
11471184 AC_SUBST([am__untar])
11481185 ]) # _AM_PROG_TAR
11491186
1150 m4_include([m4/ax_prog_doxygen.m4])
1187 m4_include([m4/code_coverage.m4])
11511188 m4_include([m4/ld-version-script.m4])
11521189 m4_include([m4/libtool.m4])
11531190 m4_include([m4/ltoptions.m4])
+0
-156
aminclude_doxygen.am less more
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
00 #! /bin/sh
11 # 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'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
4949 GNU config.guess ($timestamp)
5050
5151 Originally written by Per Bothner.
52 Copyright 1992-2013 Free Software Foundation, Inc.
52 Copyright 1992-2014 Free Software Foundation, Inc.
5353
5454 This is free software; see the source for copying conditions. There is NO
5555 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
148148 LIBC=gnu
149149 #endif
150150 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'`
152152 ;;
153153 esac
154154
825825 *:MINGW*:*)
826826 echo ${UNAME_MACHINE}-pc-mingw32
827827 exit ;;
828 i*:MSYS*:*)
828 *:MSYS*:*)
829829 echo ${UNAME_MACHINE}-pc-msys
830830 exit ;;
831831 i*:windows32*:*)
968968 eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
969969 test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
970970 ;;
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:*:*)
975975 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
976976 exit ;;
977977 padre:Linux:*:*)
12591259 if test "$UNAME_PROCESSOR" = unknown ; then
12601260 UNAME_PROCESSOR=powerpc
12611261 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
12711273 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
12721282 fi
12731283 echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
12741284 exit ;;
13601370 exit ;;
13611371 esac
13621372
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
15111373 cat >&2 <<EOF
15121374 $0: unable to guess system type
15131375
00 #! /bin/sh
11 # 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'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
6767 version="\
6868 GNU config.sub ($timestamp)
6969
70 Copyright 1992-2013 Free Software Foundation, Inc.
70 Copyright 1992-2014 Free Software Foundation, Inc.
7171
7272 This is free software; see the source for copying conditions. There is NO
7373 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
264264 | hexagon \
265265 | i370 | i860 | i960 | ia64 \
266266 | ip2k | iq2000 \
267 | k1om \
267268 | le32 | le64 \
268269 | lm32 \
269270 | m32c | m32r | m32rle | m68000 | m68k | m88k \
281282 | mips64vr5900 | mips64vr5900el \
282283 | mipsisa32 | mipsisa32el \
283284 | mipsisa32r2 | mipsisa32r2el \
285 | mipsisa32r6 | mipsisa32r6el \
284286 | mipsisa64 | mipsisa64el \
285287 | mipsisa64r2 | mipsisa64r2el \
288 | mipsisa64r6 | mipsisa64r6el \
286289 | mipsisa64sb1 | mipsisa64sb1el \
287290 | mipsisa64sr71k | mipsisa64sr71kel \
288291 | mipsr5900 | mipsr5900el \
294297 | nds32 | nds32le | nds32be \
295298 | nios | nios2 | nios2eb | nios2el \
296299 | ns16k | ns32k \
297 | open8 \
298 | or1k | or32 \
300 | open8 | or1k | or1knd | or32 \
299301 | pdp10 | pdp11 | pj | pjl \
300302 | powerpc | powerpc64 | powerpc64le | powerpcle \
301303 | pyramid \
323325 c6x)
324326 basic_machine=tic6x-unknown
325327 ;;
326 m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
328 m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
327329 basic_machine=$basic_machine-unknown
328330 os=-none
329331 ;;
380382 | hexagon-* \
381383 | i*86-* | i860-* | i960-* | ia64-* \
382384 | ip2k-* | iq2000-* \
385 | k1om-* \
383386 | le32-* | le64-* \
384387 | lm32-* \
385388 | m32c-* | m32r-* | m32rle-* \
399402 | mips64vr5900-* | mips64vr5900el-* \
400403 | mipsisa32-* | mipsisa32el-* \
401404 | mipsisa32r2-* | mipsisa32r2el-* \
405 | mipsisa32r6-* | mipsisa32r6el-* \
402406 | mipsisa64-* | mipsisa64el-* \
403407 | mipsisa64r2-* | mipsisa64r2el-* \
408 | mipsisa64r6-* | mipsisa64r6el-* \
404409 | mipsisa64sb1-* | mipsisa64sb1el-* \
405410 | mipsisa64sr71k-* | mipsisa64sr71kel-* \
406411 | mipsr5900-* | mipsr5900el-* \
412417 | nios-* | nios2-* | nios2eb-* | nios2el-* \
413418 | none-* | np1-* | ns16k-* | ns32k-* \
414419 | open8-* \
420 | or1k*-* \
415421 | orion-* \
416422 | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
417423 | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
13731379 | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
13741380 | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
13751381 | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
1376 | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
1382 | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
13771383 # Remember, each alternative MUST END IN *, to match a version number.
13781384 ;;
13791385 -qnx*)
15911597 mips*-*)
15921598 os=-elf
15931599 ;;
1594 or1k-*)
1595 os=-elf
1596 ;;
15971600 or32-*)
15981601 os=-coff
15991602 ;;
+323
-1985
configure less more
00 #! /bin/sh
11 # 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>.
35 #
46 #
57 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
271273 $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
272274 $as_echo "$0: be upgraded to zsh 4.3.4 or later."
273275 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."
278281 fi
279282 exit 1
280283 fi
586589 # Identity of this package.
587590 PACKAGE_NAME='protobuf-c'
588591 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'
593596
594597 ac_unique_file="protobuf-c/protobuf-c.c"
595598 # Factoring default headers for most tests.
632635 am__EXEEXT_TRUE
633636 LTLIBOBJS
634637 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
635646 VALGRIND
636647 HAVE_LD_VERSION_SCRIPT_FALSE
637648 HAVE_LD_VERSION_SCRIPT_TRUE
640651 PROTOC
641652 protobuf_LIBS
642653 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
691654 pkgconfigdir
692655 PKG_CONFIG_LIBDIR
693656 PKG_CONFIG_PATH
694657 PKG_CONFIG
658 DOXYGEN_INPUT
659 HAVE_DOXYGEN_FALSE
660 HAVE_DOXYGEN_TRUE
661 DOXYGEN
695662 CXXCPP
696663 OTOOL64
697664 OTOOL
773740 INSTALL_DATA
774741 INSTALL_SCRIPT
775742 INSTALL_PROGRAM
743 PACKAGE_DESCRIPTION
776744 target_alias
777745 host_alias
778746 build_alias
825793 with_sysroot
826794 enable_libtool_lock
827795 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
838796 enable_protoc
839797 enable_ld_version_script
840798 enable_valgrind_tests
799 enable_code_coverage
841800 '
842801 ac_precious_vars='build_alias
843802 host_alias
855814 PKG_CONFIG
856815 PKG_CONFIG_PATH
857816 PKG_CONFIG_LIBDIR
858 DOXYGEN_PAPER_SIZE
859817 protobuf_CFLAGS
860818 protobuf_LIBS
861819 PROTOC'
13991357 # Omit some internal or obsolete options to make the list less imposing.
14001358 # This message is too long to be a string in the A/UX 3.1 sh.
14011359 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.
14031361
14041362 Usage: $0 [OPTION]... [VAR=VALUE]...
14051363
14691427
14701428 if test -n "$ac_init_help"; then
14711429 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:";;
14731431 esac
14741432 cat <<\_ACEOF
14751433
14891447 --enable-fast-install[=PKGS]
14901448 optimize for fast installation [default=yes]
14911449 --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
15031450 --disable-protoc Disable building protoc_c (also disables tests)
15041451 --enable-ld-version-script
15051452 enable linker version script (default is enabled
15061453 when possible)
15071454 --enable-valgrind-tests run self tests under valgrind
1455 --enable-code-coverage Whether to enable code coverage support
15081456
15091457 Optional Packages:
15101458 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
15341482 directories to add to pkg-config's search path
15351483 PKG_CONFIG_LIBDIR
15361484 path overriding pkg-config's built-in search path
1537 DOXYGEN_PAPER_SIZE
1538 a4wide (default), a4, letter, legal or executive
15391485 protobuf_CFLAGS
15401486 C compiler flags for protobuf, overriding pkg-config
15411487 protobuf_LIBS
15451491 Use these variables to override the choices made by `configure' or to help
15461492 it to find libraries and programs with nonstandard names/locations.
15471493
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>.
15491496 _ACEOF
15501497 ac_status=$?
15511498 fi
16081555 test -n "$ac_init_help" && exit $ac_status
16091556 if $ac_init_version; then
16101557 cat <<\_ACEOF
1611 protobuf-c configure 1.0.0-rc1
1558 protobuf-c configure 1.0.0-rc2
16121559 generated by GNU Autoconf 2.69
16131560
16141561 Copyright (C) 2012 Free Software Foundation, Inc.
18051752 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
18061753 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
18071754 $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
18081759 ;;
18091760 esac
18101761 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
21612112 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
21622113 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
21632114 $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
21642119 ;;
21652120 esac
21662121 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
22232178 This file contains any messages produced by compilers while
22242179 running configure, to aid debugging if configure makes a mistake.
22252180
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
22272182 generated by GNU Autoconf 2.69. Invocation command line was
22282183
22292184 $ $0 $@
25712526 ac_compiler_gnu=$ac_cv_c_compiler_gnu
25722527
25732528
2529 PACKAGE_DESCRIPTION="Protocol Buffers implementation in C"
2530
2531
25742532
25752533 ac_aux_dir=
25762534 for ac_dir in build-aux "$srcdir"/build-aux; do
30873045
30883046 # Define the identity of the package.
30893047 PACKAGE='protobuf-c'
3090 VERSION='1.0.0-rc1'
3048 VERSION='1.0.0-rc2'
30913049
30923050
30933051 cat >>confdefs.h <<_ACEOF
1600115959 ac_config_files="$ac_config_files Makefile protobuf-c/libprotobuf-c.pc"
1600215960
1600315961
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
1600416020
1600516021
1600616022
1615716173
1615816174 fi
1615916175 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
1800716176
1800816177 # Check whether --enable-protoc was given.
1800916178 if test "${enable_protoc+set}" = set; then :
1833216501 $as_echo_n "checking whether self tests are run under valgrind... " >&6; }
1833316502 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5
1833416503 $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
1833516713
1833616714
1833716715 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
1869617074 as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
1869717075 Usually this means the macro was only invoked conditionally." "$LINENO" 5
1869817076 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.
1874517079 Usually this means the macro was only invoked conditionally." "$LINENO" 5
1874617080 fi
1874717081 if test -z "${BUILD_COMPILER_TRUE}" && test -z "${BUILD_COMPILER_FALSE}"; then
1875017084 fi
1875117085 if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then
1875217086 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.
1875317091 Usually this means the macro was only invoked conditionally." "$LINENO" 5
1875417092 fi
1875517093
1915017488 # report actual input values of CONFIG_FILES etc. instead of their
1915117489 # values after options handling.
1915217490 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
1915417492 generated by GNU Autoconf 2.69. Invocation command line was
1915517493
1915617494 CONFIG_FILES = $CONFIG_FILES
1921017548 Configuration commands:
1921117549 $config_commands
1921217550
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>."
1921417553
1921517554 _ACEOF
1921617555 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1921717556 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1921817557 ac_cs_version="\\
19219 protobuf-c config.status 1.0.0-rc1
17558 protobuf-c config.status 1.0.0-rc2
1922017559 configured by $0, generated by GNU Autoconf 2.69,
1922117560 with options \\"\$ac_cs_config\\"
1922217561
1972518064 "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
1972618065 "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
1972718066 "protobuf-c/libprotobuf-c.pc") CONFIG_FILES="$CONFIG_FILES protobuf-c/libprotobuf-c.pc" ;;
18067 "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;;
1972818068
1972918069 *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
1973018070 esac
2126619606
2126719607 bigendian: ${ac_cv_c_bigendian}
2126819608 protobuf version: ${PROTOBUF_VERSION}
21269 doxygen docs: ${has_doxygen}
2127019609 " >&5
2127119610 $as_echo "
2127219611 $PACKAGE $VERSION
2128619625
2128719626 bigendian: ${ac_cv_c_bigendian}
2128819627 protobuf version: ${PROTOBUF_VERSION}
21289 doxygen docs: ${has_doxygen}
2129019628 " >&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
210 AC_CONFIG_SRCDIR([protobuf-c/protobuf-c.c])
311 AC_CONFIG_AUX_DIR([build-aux])
412 AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules subdir-objects])
1523 AC_CONFIG_HEADERS(config.h)
1624 AC_CONFIG_FILES([Makefile protobuf-c/libprotobuf-c.pc])
1725
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
1835 PKG_PROG_PKG_CONFIG
1936 if test -n "$PKG_CONFIG"; then
2037 # Horrible hack for systems where the pkg-config install directory is simply wrong!
2441 PKG_INSTALLDIR
2542 fi
2643 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"])
3544
3645 AC_ARG_ENABLE([protoc],
3746 AS_HELP_STRING([--disable-protoc], [Disable building protoc_c (also disables tests)]))
6271
6372 gl_VALGRIND_TESTS
6473
74 MY_CODE_COVERAGE
75
6576 AC_C_BIGENDIAN
6677
6778 AC_OUTPUT
8394
8495 bigendian: ${ac_cv_c_bigendian}
8596 protobuf version: ${PROTOBUF_VERSION}
86 doxygen docs: ${has_doxygen}
8797 ])
+0
-532
m4/ax_prog_doxygen.m4 less more
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 ])
11 exec_prefix=@exec_prefix@
22 libdir=@libdir@
33 includedir=@includedir@
4 bindir=@bindir@
45
56 Name: libprotobuf-c
67 Description: Protocol Buffers C library
00 LIBPROTOBUF_C_1.0.0 {
11 global:
22 protobuf_c_buffer_simple_append;
3 protobuf_c_default_allocator;
43 protobuf_c_enum_descriptor_get_value;
54 protobuf_c_enum_descriptor_get_value_by_name;
65 protobuf_c_message_check;
0 /* --- protobuf-c.c: protobuf c runtime implementation --- */
1
20 /*
31 * Copyright (c) 2008-2014, Dave Benson and the protobuf-c authors.
42 * All rights reserved.
2826 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2927 */
3028
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.
4645 */
4746
4847 #include <stdlib.h> /* for malloc, free */
5352 #define TRUE 1
5453 #define FALSE 0
5554
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. */
5775 #define MAX_UINT64_ENCODED_SIZE 10
5876
5977 #ifndef PROTOBUF_C_UNPACK_ERROR
6078 # define PROTOBUF_C_UNPACK_ERROR(...)
6179 #endif
6280
81 /**
82 * Internal `ProtobufCMessage` manipulation macro.
83 *
84 * Base macro for manipulating a `ProtobufCMessage`. Used by STRUCT_MEMBER() and
85 * STRUCT_MEMBER_PTR().
86 */
6387 #define STRUCT_MEMBER_P(struct_p, struct_offset) \
6488 ((void *) ((uint8_t *) (struct_p) + (struct_offset)))
6589
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 */
6696 #define STRUCT_MEMBER(member_type, struct_p, struct_offset) \
6797 (*(member_type *) STRUCT_MEMBER_P((struct_p), (struct_offset)))
6898
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 */
69105 #define STRUCT_MEMBER_PTR(member_type, struct_p, struct_offset) \
70106 ((member_type *) STRUCT_MEMBER_P((struct_p), (struct_offset)))
71107
72108 /* Assertions for magic numbers. */
73109
74110 #define ASSERT_IS_ENUM_DESCRIPTOR(desc) \
75 assert((desc)->magic == PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC)
111 assert((desc)->magic == PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC)
76112
77113 #define ASSERT_IS_MESSAGE_DESCRIPTOR(desc) \
78 assert((desc)->magic == PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC)
114 assert((desc)->magic == PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC)
79115
80116 #define ASSERT_IS_MESSAGE(message) \
81117 ASSERT_IS_MESSAGE_DESCRIPTOR((message)->descriptor)
82118
83119 #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 /**@}*/
85123
86124 /* --- version --- */
87125
125163 }
126164
127165 /*
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 = {
133171 .alloc = &system_alloc,
134172 .free = &system_free,
135173 .allocator_data = NULL,
145183 size_t new_len = simp->len + len;
146184
147185 if (new_len > simp->alloced) {
186 ProtobufCAllocator *allocator = simp->allocator;
148187 size_t new_alloced = simp->alloced * 2;
149188 uint8_t *new_data;
189
190 if (allocator == NULL)
191 allocator = &protobuf_c__allocator;
150192 while (new_alloced < new_len)
151193 new_alloced += new_alloced;
152 new_data = do_alloc(&protobuf_c_default_allocator, new_alloced);
194 new_data = do_alloc(allocator, new_alloced);
153195 if (!new_data)
154196 return;
155197 memcpy(new_data, simp->data, simp->len);
156198 if (simp->must_free_data)
157 do_free(&protobuf_c_default_allocator, simp->data);
199 do_free(allocator, simp->data);
158200 else
159 simp->must_free_data = 1;
201 simp->must_free_data = TRUE;
160202 simp->data = new_data;
161203 simp->alloced = new_alloced;
162204 }
164206 simp->len = new_len;
165207 }
166208
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 /**
170219 * Return the number of bytes required to store the tag for the field. Includes
171220 * 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.
172226 */
173227 static inline size_t
174228 get_tag_size(unsigned number)
186240 }
187241 }
188242
189 /*
243 /**
190244 * Return the number of bytes required to store a variable-length unsigned
191245 * 32-bit integer in base-128 varint encoding.
246 *
247 * \param v
248 * Value to encode.
249 * \return
250 * Number of bytes required.
192251 */
193252 static inline size_t
194253 uint32_size(uint32_t v)
206265 }
207266 }
208267
209 /*
268 /**
210269 * Return the number of bytes required to store a variable-length signed 32-bit
211270 * integer in base-128 varint encoding.
271 *
272 * \param v
273 * Value to encode.
274 * \return
275 * Number of bytes required.
212276 */
213277 static inline size_t
214278 int32_size(int32_t v)
228292 }
229293 }
230294
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
233297 * integer.
298 *
299 * \param v
300 * Value to encode.
301 * \return
302 * ZigZag encoded integer.
234303 */
235304 static inline uint32_t
236305 zigzag32(int32_t v)
241310 return v * 2;
242311 }
243312
244 /*
313 /**
245314 * Return the number of bytes required to store a signed 32-bit integer,
246315 * converted to an unsigned 32-bit integer with ZigZag encoding, using base-128
247316 * varint encoding.
317 *
318 * \param v
319 * Value to encode.
320 * \return
321 * Number of bytes required.
248322 */
249323 static inline size_t
250324 sint32_size(int32_t v)
252326 return uint32_size(zigzag32(v));
253327 }
254328
255 /*
329 /**
256330 * Return the number of bytes required to store a 64-bit unsigned integer in
257331 * base-128 varint encoding.
332 *
333 * \param v
334 * Value to encode.
335 * \return
336 * Number of bytes required.
258337 */
259338 static inline size_t
260339 uint64_size(uint64_t v)
278357 }
279358 }
280359
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
283362 * integer.
363 *
364 * \param v
365 * Value to encode.
366 * \return
367 * ZigZag encoded integer.
284368 */
285369 static inline uint64_t
286370 zigzag64(int64_t v)
291375 return v * 2;
292376 }
293377
294 /*
378 /**
295379 * Return the number of bytes required to store a signed 64-bit integer,
296380 * converted to an unsigned 64-bit integer with ZigZag encoding, using base-128
297381 * varint encoding.
382 *
383 * \param v
384 * Value to encode.
385 * \return
386 * Number of bytes required.
298387 */
299388 static inline size_t
300389 sint64_size(int64_t v)
302391 return uint64_size(zigzag64(v));
303392 }
304393
305 /*
394 /**
306395 * Calculate the serialized size of a single required message field, including
307396 * 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.
308404 */
309405 static size_t
310406 required_field_get_packed_size(const ProtobufCFieldDescriptor *field,
337433 case PROTOBUF_C_TYPE_DOUBLE:
338434 return rv + 8;
339435 case PROTOBUF_C_TYPE_ENUM:
340 /* TODO: is this correct for negative-valued enums? */
436 /* \todo Is this correct for negative-valued enums? */
341437 return rv + uint32_size(*(const uint32_t *) member);
342438 case PROTOBUF_C_TYPE_STRING: {
343439 const char *str = *(char * const *) member;
348444 size_t len = ((const ProtobufCBinaryData *) member)->len;
349445 return rv + uint32_size(len) + len;
350446 }
351 /* case PROTOBUF_C_TYPE_GROUP: */
352447 case PROTOBUF_C_TYPE_MESSAGE: {
353448 const ProtobufCMessage *msg = *(ProtobufCMessage * const *) member;
354449 size_t subrv = msg ? protobuf_c_message_get_packed_size(msg) : 0;
355450 return rv + uint32_size(subrv) + subrv;
356451 }
357452 }
358 PROTOBUF_C_ASSERT_NOT_REACHED();
453 PROTOBUF_C__ASSERT_NOT_REACHED();
359454 return 0;
360455 }
361456
362 /*
457 /**
363458 * 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 */
366471 static size_t
367472 optional_field_get_packed_size(const ProtobufCFieldDescriptor *field,
368473 const protobuf_c_boolean *has,
381486 return required_field_get_packed_size(field, member);
382487 }
383488
384 /*
489 /**
385490 * Calculate the serialized size of repeated message fields, which may consist
386491 * of any number of values (including 0). Includes the space needed by the
387492 * 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.
388502 */
389503 static size_t
390504 repeated_field_get_packed_size(const ProtobufCFieldDescriptor *field,
456570 rv += uint32_size(len) + len;
457571 }
458572 break;
459 /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */
460573 }
461574
462575 if (0 != (field->flags & PROTOBUF_C_FIELD_FLAG_PACKED))
464577 return header_size + rv;
465578 }
466579
467 /*
580 /**
468581 * Calculate the serialized size of an unknown field, i.e. one that is passed
469582 * through mostly uninterpreted. This is required for forward compatibility if
470583 * new fields are added to the message descriptor.
584 *
585 * \param field
586 * Unknown field type.
587 * \return
588 * Number of bytes required.
471589 */
472590 static inline size_t
473591 unknown_field_get_packed_size(const ProtobufCMessageUnknownField *field)
474592 {
475593 return get_tag_size(field->tag) + field->len;
476594 }
595
596 /**@}*/
477597
478598 /*
479599 * Calculate the serialized size of the message.
509629 return rv;
510630 }
511631
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 /**
515642 * Pack an unsigned 32-bit integer in base-128 varint encoding and return the
516643 * 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`.
517651 */
518652 static inline size_t
519653 uint32_pack(uint32_t value, uint8_t *out)
541675 return rv;
542676 }
543677
544 /*
678 /**
545679 * Pack a signed 32-bit integer and return the number of bytes written.
546680 * 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`.
547688 */
548689 static inline size_t
549690 int32_pack(int32_t value, uint8_t *out)
562703 }
563704 }
564705
565 /*
706 /**
566707 * Pack a signed 32-bit integer using ZigZag encoding and return the number of
567708 * 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`.
568716 */
569717 static inline size_t
570718 sint32_pack(int32_t value, uint8_t *out)
572720 return uint32_pack(zigzag32(value), out);
573721 }
574722
575 /*
723 /**
576724 * Pack a 64-bit unsigned integer using base-128 varint encoding and return the
577725 * 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`.
578733 */
579734 static size_t
580735 uint64_pack(uint64_t value, uint8_t *out)
605760 return rv;
606761 }
607762
608 /*
763 /**
609764 * Pack a 64-bit signed integer in ZigZag encoding and return the number of
610765 * 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`.
611773 */
612774 static inline size_t
613775 sint64_pack(int64_t value, uint8_t *out)
615777 return uint64_pack(zigzag64(value), out);
616778 }
617779
618 /*
780 /**
619781 * Pack a 32-bit quantity in little-endian byte order. Used for protobuf wire
620782 * 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`.
621790 */
622791 static inline size_t
623792 fixed32_pack(uint32_t value, void *out)
635804 return 4;
636805 }
637806
638 /*
807 /**
639808 * Pack a 64-bit quantity in little-endian byte order. Used for protobuf wire
640809 * types fixed64, sfixed64, double. Similar to "htole64".
641810 *
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
643812 * version would be appreciated, plus a way to decide to use 64-bit math where
644813 * 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`.
645821 */
646822 static inline size_t
647823 fixed64_pack(uint64_t value, void *out)
655831 return 8;
656832 }
657833
658 /*
834 /**
659835 * Pack a boolean value as an integer and return the number of bytes written.
660836 *
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
662838 * 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`.
663846 */
664847 static inline size_t
665848 boolean_pack(protobuf_c_boolean value, uint8_t *out)
666849 {
667 *out = value ? 1 : 0;
850 *out = value ? TRUE : FALSE;
668851 return 1;
669852 }
670853
671 /*
854 /**
672855 * Pack a NUL-terminated C string and return the number of bytes written. The
673856 * output includes a length delimiter.
674857 *
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
677860 * 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`.
678868 */
679869 static inline size_t
680870 string_pack(const char *str, uint8_t *out)
690880 }
691881 }
692882
693 /*
883 /**
694884 * Pack a ProtobufCBinaryData and return the number of bytes written. The output
695885 * 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`.
696893 */
697894 static inline size_t
698895 binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out)
703900 return rv + len;
704901 }
705902
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 */
706914 static inline size_t
707915 prefixed_message_pack(const ProtobufCMessage *message, uint8_t *out)
708916 {
718926 }
719927 }
720928
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 */
723943 static size_t
724944 tag_pack(uint32_t id, uint8_t *out)
725945 {
729949 return uint64_pack(((uint64_t) id) << 3, out);
730950 }
731951
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 */
732964 static size_t
733965 required_field_pack(const ProtobufCFieldDescriptor *field,
734966 const void *member, uint8_t *out)
7721004 case PROTOBUF_C_TYPE_BYTES:
7731005 out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED;
7741006 return rv + binary_data_pack((const ProtobufCBinaryData *) member, out + rv);
775 /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */
7761007 case PROTOBUF_C_TYPE_MESSAGE:
7771008 out[0] |= PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED;
7781009 return rv + prefixed_message_pack(*(ProtobufCMessage * const *) member, out + rv);
7791010 }
780 PROTOBUF_C_ASSERT_NOT_REACHED();
1011 PROTOBUF_C__ASSERT_NOT_REACHED();
7811012 return 0;
7821013 }
7831014
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 */
7841029 static size_t
7851030 optional_field_pack(const ProtobufCFieldDescriptor *field,
7861031 const protobuf_c_boolean *has,
7991044 return required_field_pack(field, member, out);
8001045 }
8011046
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 */
8031057 static inline size_t
8041058 sizeof_elt_in_repeated_array(ProtobufCType type)
8051059 {
8271081 case PROTOBUF_C_TYPE_BYTES:
8281082 return sizeof(ProtobufCBinaryData);
8291083 }
830 PROTOBUF_C_ASSERT_NOT_REACHED();
1084 PROTOBUF_C__ASSERT_NOT_REACHED();
8311085 return 0;
8321086 }
8331087
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 */
8341098 static void
8351099 copy_to_little_endian_32(void *out, const void *in, const unsigned n)
8361100 {
8441108 #endif
8451109 }
8461110
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 */
8471121 static void
8481122 copy_to_little_endian_64(void *out, const void *in, const unsigned n)
8491123 {
8571131 #endif
8581132 }
8591133
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 */
8601143 static unsigned
8611144 get_type_min_size(ProtobufCType type)
8621145 {
8751158 return 1;
8761159 }
8771160
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 */
8781176 static size_t
8791177 repeated_field_pack(const ProtobufCFieldDescriptor *field,
8801178 size_t count, const void *member, uint8_t *out)
9531251 break;
9541252 }
9551253 default:
956 PROTOBUF_C_ASSERT_NOT_REACHED();
1254 PROTOBUF_C__ASSERT_NOT_REACHED();
9571255 }
9581256
9591257 payload_len = payload_at - (out + header_len);
9881286 memcpy(out + rv, field->data, field->len);
9891287 return rv + field->len;
9901288 }
1289
1290 /**@}*/
9911291
9921292 size_t
9931293 protobuf_c_message_pack(const ProtobufCMessage *message, uint8_t *out)
10301330 return rv;
10311331 }
10321332
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 */
10351354 static size_t
10361355 required_field_pack_to_buffer(const ProtobufCFieldDescriptor *field,
10371356 const void *member, ProtobufCBuffer *buffer)
11091428 rv += sublen;
11101429 break;
11111430 }
1112 /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */
11131431 case PROTOBUF_C_TYPE_MESSAGE: {
11141432 uint8_t simple_buffer_scratch[256];
11151433 size_t sublen;
11301448 break;
11311449 }
11321450 default:
1133 PROTOBUF_C_ASSERT_NOT_REACHED();
1451 PROTOBUF_C__ASSERT_NOT_REACHED();
11341452 }
11351453 return rv;
11361454 }
11371455
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 */
11381470 static size_t
11391471 optional_field_pack_to_buffer(const ProtobufCFieldDescriptor *field,
11401472 const protobuf_c_boolean *has,
11531485 return required_field_pack_to_buffer(field, member, buffer);
11541486 }
11551487
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 */
11561500 static size_t
11571501 get_packed_payload_length(const ProtobufCFieldDescriptor *field,
11581502 unsigned count, const void *array)
12041548 case PROTOBUF_C_TYPE_BOOL:
12051549 return count;
12061550 default:
1207 PROTOBUF_C_ASSERT_NOT_REACHED();
1551 PROTOBUF_C__ASSERT_NOT_REACHED();
12081552 }
12091553 return rv;
12101554 }
12111555
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 */
12121570 static size_t
12131571 pack_buffer_packed_payload(const ProtobufCFieldDescriptor *field,
12141572 unsigned count, const void *array,
12311589 buffer->append(buffer, len, scratch);
12321590 rv += len;
12331591 }
1592 break;
12341593 #endif
1235 break;
12361594 case PROTOBUF_C_TYPE_SFIXED64:
12371595 case PROTOBUF_C_TYPE_FIXED64:
12381596 case PROTOBUF_C_TYPE_DOUBLE:
12921650 }
12931651 return count;
12941652 default:
1295 PROTOBUF_C_ASSERT_NOT_REACHED();
1653 PROTOBUF_C__ASSERT_NOT_REACHED();
12961654 }
12971655 return rv;
12981656
13491707 buffer->append(buffer, field->len, field->data);
13501708 return rv + field->len;
13511709 }
1710
1711 /**@}*/
13521712
13531713 size_t
13541714 protobuf_c_message_pack_to_buffer(const ProtobufCMessage *message,
13901750 return rv;
13911751 }
13921752
1393 /* === unpacking === */
1753 /**
1754 * \defgroup unpack unpacking implementation
1755 *
1756 * Routines mainly used by the unpacking functions.
1757 *
1758 * \ingroup internal
1759 * @{
1760 */
13941761
13951762 static inline int
13961763 int_range_lookup(unsigned n_ranges, const ProtobufCIntRange *ranges, int value)
14651832 /* sizeof(ScannedMember) must be <= (1<<BOUND_SIZEOF_SCANNED_MEMBER_LOG2) */
14661833 #define BOUND_SIZEOF_SCANNED_MEMBER_LOG2 5
14671834 typedef struct _ScannedMember ScannedMember;
1835 /** Field as it's being read. */
14681836 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. */
14751843 };
14761844
14771845 static inline uint32_t
15131881 return rv;
15141882 }
15151883
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 */
15251900 static protobuf_c_boolean
15261901 merge_messages(ProtobufCMessage *earlier_msg,
15271902 ProtobufCMessage *latter_msg,
15551930 new_field = do_alloc(allocator,
15561931 (*n_earlier + *n_latter) * el_size);
15571932 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,
15611940 *n_latter * el_size);
1562 memcpy(new_field +
1563 *n_latter * el_size,
1564 *p_earlier,
1565 *n_earlier * el_size);
15661941
15671942 do_free(allocator, *p_latter);
15681943 do_free(allocator, *p_earlier);
15901965 if (*lm != NULL) {
15911966 if (!merge_messages
15921967 (*em, *lm, allocator))
1593 return 0;
1968 return FALSE;
15941969 } else {
15951970 /* Zero copy the optional message */
15961971 assert(fields[i].label ==
16011976 }
16021977 } else if (fields[i].label == PROTOBUF_C_LABEL_OPTIONAL) {
16031978 size_t el_size = 0;
1604 protobuf_c_boolean need_to_merge = 0;
1979 protobuf_c_boolean need_to_merge = FALSE;
16051980 void *earlier_elem =
16061981 STRUCT_MEMBER_P(earlier_msg, fields[i].offset);
16071982 void *latter_elem =
16091984 const void *def_val = fields[i].default_value;
16101985
16111986 switch (fields[i].type) {
1612 case PROTOBUF_C_TYPE_BYTES:
1987 case PROTOBUF_C_TYPE_BYTES: {
16131988 el_size = sizeof(ProtobufCBinaryData);
16141989 uint8_t *e_data =
16151990 ((ProtobufCBinaryData *) earlier_elem)->data;
16262001 (d_bd != NULL &&
16272002 l_data == d_bd->data));
16282003 break;
1629 case PROTOBUF_C_TYPE_STRING:
2004 }
2005 case PROTOBUF_C_TYPE_STRING: {
16302006 el_size = sizeof(char *);
16312007 char *e_str = *(char **) earlier_elem;
16322008 char *l_str = *(char **) latter_elem;
16342010
16352011 need_to_merge = e_str != d_str && l_str == d_str;
16362012 break;
1637 default:
2013 }
2014 default: {
16382015 el_size = sizeof_elt_in_repeated_array(fields[i].type);
16392016
16402017 need_to_merge =
16452022 latter_msg,
16462023 fields[i].quantifier_offset);
16472024 break;
2025 }
16482026 }
16492027
16502028 if (need_to_merge) {
16632041 STRUCT_MEMBER(protobuf_c_boolean,
16642042 latter_msg,
16652043 fields[i].
1666 quantifier_offset) = 1;
2044 quantifier_offset) = TRUE;
16672045 STRUCT_MEMBER(protobuf_c_boolean,
16682046 earlier_msg,
16692047 fields[i].
1670 quantifier_offset) = 0;
2048 quantifier_offset) = FALSE;
16712049 }
16722050 }
16732051 }
16742052 }
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 */
16832064 static protobuf_c_boolean
16842065 count_packed_elements(ProtobufCType type,
16852066 size_t len, const uint8_t *data, size_t *count_out)
18202201 unsigned i;
18212202 for (i = 0; i < len; i++)
18222203 if (data[i] & 0x7f)
1823 return 1;
1824 return 0;
2204 return TRUE;
2205 return FALSE;
18252206 }
18262207
18272208 static protobuf_c_boolean
18372218 switch (scanned_member->field->type) {
18382219 case PROTOBUF_C_TYPE_INT32:
18392220 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1840 return 0;
2221 return FALSE;
18412222 *(uint32_t *) member = parse_int32(len, data);
1842 return 1;
2223 return TRUE;
18432224 case PROTOBUF_C_TYPE_UINT32:
18442225 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1845 return 0;
2226 return FALSE;
18462227 *(uint32_t *) member = parse_uint32(len, data);
1847 return 1;
2228 return TRUE;
18482229 case PROTOBUF_C_TYPE_SINT32:
18492230 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1850 return 0;
2231 return FALSE;
18512232 *(int32_t *) member = unzigzag32(parse_uint32(len, data));
1852 return 1;
2233 return TRUE;
18532234 case PROTOBUF_C_TYPE_SFIXED32:
18542235 case PROTOBUF_C_TYPE_FIXED32:
18552236 case PROTOBUF_C_TYPE_FLOAT:
18562237 if (wire_type != PROTOBUF_C_WIRE_TYPE_32BIT)
1857 return 0;
2238 return FALSE;
18582239 *(uint32_t *) member = parse_fixed_uint32(data);
1859 return 1;
2240 return TRUE;
18602241 case PROTOBUF_C_TYPE_INT64:
18612242 case PROTOBUF_C_TYPE_UINT64:
18622243 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1863 return 0;
2244 return FALSE;
18642245 *(uint64_t *) member = parse_uint64(len, data);
1865 return 1;
2246 return TRUE;
18662247 case PROTOBUF_C_TYPE_SINT64:
18672248 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1868 return 0;
2249 return FALSE;
18692250 *(int64_t *) member = unzigzag64(parse_uint64(len, data));
1870 return 1;
2251 return TRUE;
18712252 case PROTOBUF_C_TYPE_SFIXED64:
18722253 case PROTOBUF_C_TYPE_FIXED64:
18732254 case PROTOBUF_C_TYPE_DOUBLE:
18742255 if (wire_type != PROTOBUF_C_WIRE_TYPE_64BIT)
1875 return 0;
2256 return FALSE;
18762257 *(uint64_t *) member = parse_fixed_uint64(data);
1877 return 1;
2258 return TRUE;
18782259 case PROTOBUF_C_TYPE_BOOL:
18792260 *(protobuf_c_boolean *) member = parse_boolean(len, data);
1880 return 1;
2261 return TRUE;
18812262 case PROTOBUF_C_TYPE_ENUM:
18822263 if (wire_type != PROTOBUF_C_WIRE_TYPE_VARINT)
1883 return 0;
2264 return FALSE;
18842265 *(uint32_t *) member = parse_uint32(len, data);
1885 return 1;
2266 return TRUE;
18862267 case PROTOBUF_C_TYPE_STRING: {
18872268 char **pstr = member;
18882269 unsigned pref_len = scanned_member->length_prefix_len;
18892270
18902271 if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED)
1891 return 0;
2272 return FALSE;
18922273
18932274 if (maybe_clear && *pstr != NULL) {
18942275 const char *def = scanned_member->field->default_value;
18972278 }
18982279 *pstr = do_alloc(allocator, len - pref_len + 1);
18992280 if (*pstr == NULL)
1900 return 0;
2281 return FALSE;
19012282 memcpy(*pstr, data + pref_len, len - pref_len);
19022283 (*pstr)[len - pref_len] = 0;
1903 return 1;
2284 return TRUE;
19042285 }
19052286 case PROTOBUF_C_TYPE_BYTES: {
19062287 ProtobufCBinaryData *bd = member;
19082289 unsigned pref_len = scanned_member->length_prefix_len;
19092290
19102291 if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED)
1911 return 0;
2292 return FALSE;
19122293
19132294 def_bd = scanned_member->field->default_value;
19142295 if (maybe_clear &&
19202301 if (len - pref_len > 0) {
19212302 bd->data = do_alloc(allocator, len - pref_len);
19222303 if (bd->data == NULL)
1923 return 0;
2304 return FALSE;
19242305 memcpy(bd->data, data + pref_len, len - pref_len);
19252306 }
19262307 bd->len = len - pref_len;
1927 return 1;
1928 }
1929 /* case PROTOBUF_C_TYPE_GROUP: -- NOT SUPPORTED */
2308 return TRUE;
2309 }
19302310 case PROTOBUF_C_TYPE_MESSAGE: {
19312311 ProtobufCMessage **pmessage = member;
19322312 ProtobufCMessage *subm;
19332313 const ProtobufCMessage *def_mess;
1934 protobuf_c_boolean merge_successful = 1;
2314 protobuf_c_boolean merge_successful = TRUE;
19352315 unsigned pref_len = scanned_member->length_prefix_len;
19362316
19372317 if (wire_type != PROTOBUF_C_WIRE_TYPE_LENGTH_PREFIXED)
1938 return 0;
2318 return FALSE;
19392319
19402320 def_mess = scanned_member->field->default_value;
19412321 subm = protobuf_c_message_unpack(scanned_member->field->descriptor,
19542334 }
19552335 *pmessage = subm;
19562336 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;
19622342 }
19632343
19642344 static protobuf_c_boolean
19682348 ProtobufCAllocator *allocator)
19692349 {
19702350 if (!parse_required_member(scanned_member, member, allocator, TRUE))
1971 return 0;
2351 return FALSE;
19722352 if (scanned_member->field->quantifier_offset != 0)
19732353 STRUCT_MEMBER(protobuf_c_boolean,
19742354 message,
1975 scanned_member->field->quantifier_offset) = 1;
1976 return 1;
2355 scanned_member->field->quantifier_offset) = TRUE;
2356 return TRUE;
19772357 }
19782358
19792359 static protobuf_c_boolean
19902370 if (!parse_required_member(scanned_member, array + siz * (*p_n),
19912371 allocator, FALSE))
19922372 {
1993 return 0;
2373 return FALSE;
19942374 }
19952375 *p_n += 1;
1996 return 1;
2376 return TRUE;
19972377 }
19982378
19992379 static unsigned
20362416 ((uint32_t *) array)[i] = parse_fixed_uint32(at);
20372417 at += 4;
20382418 }
2419 break;
20392420 #endif
2040 break;
20412421 case PROTOBUF_C_TYPE_SFIXED64:
20422422 case PROTOBUF_C_TYPE_FIXED64:
20432423 case PROTOBUF_C_TYPE_DOUBLE:
21252505 }
21262506 break;
21272507 default:
2128 PROTOBUF_C_ASSERT_NOT_REACHED();
2508 PROTOBUF_C__ASSERT_NOT_REACHED();
21292509 }
21302510 *p_n += count;
21312511 return TRUE;
21642544 ufield->len = scanned_member->len;
21652545 ufield->data = do_alloc(allocator, scanned_member->len);
21662546 if (ufield->data == NULL)
2167 return 0;
2547 return FALSE;
21682548 memcpy(ufield->data, scanned_member->data, ufield->len);
2169 return 1;
2549 return TRUE;
21702550 }
21712551 member = (char *) message + field->offset;
21722552 switch (field->label) {
21902570 allocator);
21912571 }
21922572 }
2193 PROTOBUF_C_ASSERT_NOT_REACHED();
2573 PROTOBUF_C__ASSERT_NOT_REACHED();
21942574 return 0;
21952575 }
21962576
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).
22012583 */
22022584 static void
22032585 message_init_generic(const ProtobufCMessageDescriptor *desc,
22532635 }
22542636 }
22552637
2638 /**@}*/
2639
22562640 /*
22572641 * ScannedMember slabs (an unpacking implementation detail). Before doing real
22582642 * unpacking, we first scan through the elements to see how many there are (for
23092693 unsigned required_fields_bitmap_len;
23102694 unsigned char required_fields_bitmap_stack[16];
23112695 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;
23132697
23142698 ASSERT_IS_MESSAGE_DESCRIPTOR(desc);
23152699
23162700 if (allocator == NULL)
2317 allocator = &protobuf_c_default_allocator;
2701 allocator = &protobuf_c__allocator;
23182702
23192703 rv = do_alloc(allocator, desc->sizeof_message);
23202704 if (!rv)
23282712 do_free(allocator, rv);
23292713 return (NULL);
23302714 }
2331 required_fields_bitmap_alloced = 1;
2715 required_fields_bitmap_alloced = TRUE;
23322716 }
23332717 memset(required_fields_bitmap, 0, required_fields_bitmap_len);
23342718
23552739 (unsigned) (at - data));
23562740 goto error_cleanup_during_scan;
23572741 }
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 */
23592746 if (last_field == NULL || last_field->id != tag) {
23602747 /* lookup field */
23612748 int field_index =
25702957 return NULL;
25712958 }
25722959
2573 /* === protobuf_c_message_free_unpacked() implementation === */
2574
25752960 void
25762961 protobuf_c_message_free_unpacked(ProtobufCMessage *message,
25772962 ProtobufCAllocator *allocator)
25812966
25822967 ASSERT_IS_MESSAGE(message);
25832968 if (allocator == NULL)
2584 allocator = &protobuf_c_default_allocator;
2969 allocator = &protobuf_c__allocator;
25852970 message->descriptor = NULL;
25862971 for (f = 0; f < desc->n_fields; f++) {
25872972 if (desc->fields[f].label == PROTOBUF_C_LABEL_REPEATED) {
26583043 {
26593044 if (!message ||
26603045 !message->descriptor ||
2661 message->descriptor->magic != PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC)
3046 message->descriptor->magic != PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC)
26623047 {
26633048 return FALSE;
26643049 }
27203105 GenericHandler handler;
27213106
27223107 /*
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
27253110 * 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);
27283113
27293114 /*
27303115 * Get the array of virtual methods (which are enumerated by the
27323117 */
27333118 handlers = (GenericHandler *) (service + 1);
27343119
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 */
27373124 handler = handlers[method_index];
27383125 (*handler)(service, input, closure, closure_data);
27393126 }
0 /* --- protobuf-c.h: protobuf c runtime api --- */
1
20 /*
31 * Copyright (c) 2008-2014, Dave Benson and the protobuf-c authors.
42 * All rights reserved.
2826 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2927 */
3028
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
33181
34182 #include <assert.h>
183 #include <limits.h>
35184 #include <stddef.h>
36185 #include <stdint.h>
37 #include <limits.h>
38186
39187 #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 }
42190 #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
45193 #endif
46194
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)
53202 # endif
54203 #else
55 # define PROTOBUF_C_DEPRECATED
204 # define PROTOBUF_C__API
56205 #endif
57206
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__))
65210 # endif
66211 #else
67 # define PROTOBUF_C_API
212 # define PROTOBUF_C__DEPRECATED
68213 #endif
69214
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. */
105347 typedef int protobuf_c_boolean;
106348
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)
145397 {
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`. */
164416 void (*append)(ProtobufCBuffer *buffer,
165417 size_t len,
166418 const uint8_t *data);
167419 };
168420
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. */
182510 const char *name;
511
512 /** The string identifying this value in generated C code. */
183513 const char *c_name;
514
515 /** The numeric value assigned in the .proto file. */
184516 int value;
185517 };
186518
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. */
206635 uint32_t magic;
207636
637 /** The qualified name (e.g., "namespace.Type"). */
208638 const char *name;
639 /** The unqualified name as given in the .proto file (e.g., "Type"). */
209640 const char *short_name;
641 /** Identifier used in generated C code. */
210642 const char *c_name;
643 /** The dot-separated namespace. */
211644 const char *package_name;
212645
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. */
225668 void *reserved1;
669 /** Reserved for future use. */
226670 void *reserved2;
671 /** Reserved for future use. */
227672 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. */
392694 const char *name;
695 /** Input message descriptor. */
393696 const ProtobufCMessageDescriptor *input;
697 /** Output message descriptor. */
394698 const ProtobufCMessageDescriptor *output;
395699 };
396700
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. */
414706 const ProtobufCServiceDescriptor *descriptor;
707 /** Function to invoke the service. */
415708 void (*invoke)(ProtobufCService *service,
416709 unsigned method_index,
417710 const ProtobufCMessage *input,
418711 ProtobufCClosure closure,
419712 void *closure_data);
713 /** Function to destroy the service. */
420714 void (*destroy)(ProtobufCService *service);
421715 };
422716
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 *
429794 protobuf_c_enum_descriptor_get_value_by_name(
430795 const ProtobufCEnumDescriptor *desc,
431796 const char *name);
432797
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 *
434815 protobuf_c_enum_descriptor_get_value(
435816 const ProtobufCEnumDescriptor *desc,
436817 int value);
437818
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 *
439834 protobuf_c_message_descriptor_get_field_by_name(
440835 const ProtobufCMessageDescriptor *desc,
441836 const char *name);
442837
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 *
444853 protobuf_c_message_descriptor_get_field(
445854 const ProtobufCMessageDescriptor *desc,
446855 unsigned value);
447856
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 *
4491008 protobuf_c_service_descriptor_get_method_by_name(
4501009 const ProtobufCServiceDescriptor *desc,
4511010 const char *name);
4521011
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 \
4911023 }
4921024
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 } \
5001038 } while (0)
5011039
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
5201052 void
5211053 protobuf_c_buffer_simple_append(
5221054 ProtobufCBuffer *buffer,
5231055 size_t len,
5241056 const unsigned char *data);
5251057
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
5651059 void
5661060 protobuf_c_service_generated_init(
5671061 ProtobufCService *service,
5681062 const ProtobufCServiceDescriptor *descriptor,
5691063 ProtobufCServiceDestroy destroy);
5701064
571 void
1065 PROTOBUF_C__API
1066 void
5721067 protobuf_c_service_invoke_internal(
5731068 ProtobufCService *service,
5741069 unsigned method_index,
5761071 ProtobufCClosure closure,
5771072 void *closure_data);
5781073
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 */
110110 }
111111 }
112112
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");
114114 printer->Outdent();
115115 printer->Print(vars, "} $classname$;\n");
116116 }
271271 printer->Print(vars,
272272 "const ProtobufCEnumDescriptor $lcclassname$__descriptor =\n"
273273 "{\n"
274 " PROTOBUF_C_ENUM_DESCRIPTOR_MAGIC,\n"
274 " PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,\n"
275275 " \"$fullname$\",\n"
276276 " \"$shortname$\",\n"
277277 " \"$cname$\",\n"
144144 break;
145145 case FieldDescriptor::LABEL_OPTIONAL:
146146 if (optional_uses_has) {
147 printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, has_$name$),\n");
147 printer->Print(variables, " offsetof($classname$, has_$name$),\n");
148148 } else {
149149 printer->Print(variables, " 0, /* quantifier_offset */\n");
150150 }
151151 break;
152152 case FieldDescriptor::LABEL_REPEATED:
153 printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, n_$name$),\n");
153 printer->Print(variables, " offsetof($classname$, n_$name$),\n");
154154 break;
155155 }
156 printer->Print(variables, " PROTOBUF_C_OFFSETOF($classname$, $name$),\n");
156 printer->Print(variables, " offsetof($classname$, $name$),\n");
157157 printer->Print(variables, " $descriptor_addr$,\n");
158158 printer->Print(variables, " $default_value$,\n");
159159 printer->Print(variables, " $flags$, /* flags */\n");
118118 void FileGenerator::GenerateHeader(io::Printer* printer) {
119119 string filename_identifier = FilenameIdentifier(file_->name());
120120
121 static const int min_header_version = 1000000;
122
121123 // Generate top of header.
122124 printer->Print(
123125 "/* Generated by the protocol buffer compiler. DO NOT EDIT! */\n"
128130 "\n"
129131 "#include <protobuf-c/protobuf-c.h>\n"
130132 "\n"
131 "PROTOBUF_C_BEGIN_DECLS\n"
133 "PROTOBUF_C__BEGIN_DECLS\n"
132134 "\n",
133135 "filename", file_->name(),
134136 "filename_identifier", filename_identifier);
139141 "#if PROTOBUF_C_VERSION_NUMBER < $min_header_version$\n"
140142 "# error This file was generated by a newer version of protoc-c which is "
141143 "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"
143145 "# error This file was generated by an older version of protoc-c which is "
144146 "incompatible with your libprotobuf-c headers. Please regenerate this file "
145147 "with a newer version of protoc-c.\n"
146148 "#endif\n"
147149 "\n",
148 "min_header_version",
149 SimpleItoa(PROTOBUF_C_VERSION_NUMBER),
150 "min_header_version", SimpleItoa(min_header_version),
150151 "protoc_version", SimpleItoa(PROTOBUF_C_VERSION_NUMBER));
151152
152153 for (int i = 0; i < file_->dependency_count(); i++) {
212213
213214 printer->Print(
214215 "\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",
217218 "filename_identifier", filename_identifier);
218219 }
219220
223224 "/* Generated from: $filename$ */\n"
224225 "\n"
225226 "/* 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"
228229 "#endif\n"
229230 "\n"
230231 "#include \"$basename$.pb-c.h\"\n",
287287
288288 string FieldDeprecated(const FieldDescriptor* field) {
289289 if (field->options().deprecated()) {
290 return " PROTOBUF_C_DEPRECATED";
290 return " PROTOBUF_C__DEPRECATED";
291291 }
292292 return "";
293293 }
275275 "size_t $lcclassname$__get_packed_size\n"
276276 " (const $classname$ *message)\n"
277277 "{\n"
278 " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n"
278 " assert(message->base.descriptor == &$lcclassname$__descriptor);\n"
279279 " return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));\n"
280280 "}\n"
281281 "size_t $lcclassname$__pack\n"
282282 " (const $classname$ *message,\n"
283283 " uint8_t *out)\n"
284284 "{\n"
285 " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n"
285 " assert(message->base.descriptor == &$lcclassname$__descriptor);\n"
286286 " return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);\n"
287287 "}\n"
288288 "size_t $lcclassname$__pack_to_buffer\n"
289289 " (const $classname$ *message,\n"
290290 " ProtobufCBuffer *buffer)\n"
291291 "{\n"
292 " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n"
292 " assert(message->base.descriptor == &$lcclassname$__descriptor);\n"
293293 " return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);\n"
294294 "}\n"
295295 "$classname$ *\n"
306306 " ($classname$ *message,\n"
307307 " ProtobufCAllocator *allocator)\n"
308308 "{\n"
309 " PROTOBUF_C_ASSERT (message->base.descriptor == &$lcclassname$__descriptor);\n"
309 " assert(message->base.descriptor == &$lcclassname$__descriptor);\n"
310310 " protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);\n"
311311 "}\n"
312312 );
466466 printer->Print(vars,
467467 "const ProtobufCMessageDescriptor $lcclassname$__descriptor =\n"
468468 "{\n"
469 " PROTOBUF_C_MESSAGE_DESCRIPTOR_MAGIC,\n"
469 " PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,\n"
470470 " \"$fullname$\",\n"
471471 " \"$shortname$\",\n"
472472 " \"$classname$\",\n"
225225
226226 printer->Print(vars_, "const ProtobufCServiceDescriptor $lcfullname$__descriptor =\n"
227227 "{\n"
228 " PROTOBUF_C_SERVICE_DESCRIPTOR_MAGIC,\n"
228 " PROTOBUF_C__SERVICE_DESCRIPTOR_MAGIC,\n"
229229 " \"$fullname$\",\n"
230230 " \"$name$\",\n"
231231 " \"$cname$\",\n"
257257 " $padddddddddddddddddd$ $output_typename$_Closure closure,\n"
258258 " $padddddddddddddddddd$ void *closure_data)\n"
259259 "{\n"
260 " PROTOBUF_C_ASSERT (service->descriptor == &$lcfullname$__descriptor);\n"
260 " assert(service->descriptor == &$lcfullname$__descriptor);\n"
261261 " service->invoke(service, $index$, (const ProtobufCMessage *) input, (ProtobufCClosure) closure, closure_data);\n"
262262 "}\n");
263263 }
14681468 msg2.test_message = &sub2;
14691469 sub2.has_val2 = 1;
14701470 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;
14731473 sub2.rep = arr2;
14741474 sub2.sub1 = &subsub2;
14751475 subsub2.has_val1 = 1;
14951495 assert (merged->test_message->has_val1 && merged->test_message->val1 == sub1.val1);
14961496 assert (merged->test_message->has_val2 && merged->test_message->val2 == sub2.val2);
14971497 /* 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 &&
15001500 memcmp(merged->test_message->rep, merged_arr, sizeof(merged_arr)) == 0);
15011501
15021502 assert (merged->test_message->sub1->val1 == subsub2.val1);