Browse Source

upgraded to C++17 compatibility

master
Marc Wäckerlin 7 months ago
parent
commit
80c80e9cc4

+ 41
- 0
ChangeLog View File

@@ -1,3 +1,44 @@
1
+2018-10-23 21:19  
2
+
3
+	* [r488] build-in-docker.sh, mac-create-app-bundle.sh,
4
+	  resolve-rpmbuilddeps.sh, src/mrw/string.hxx:
5
+	  update buildsystem
6
+
7
+2018-09-14 08:43  
8
+
9
+	* [r487] build-in-docker.sh:
10
+	  added support for opensuse tumbleweed
11
+
12
+2018-09-11 10:07  
13
+
14
+	* [r486] ax_init_standard_project.m4, build-in-docker.sh:
15
+	  fix installation check after package build
16
+
17
+2018-09-10 20:56  
18
+
19
+	* [r485] ax_init_standard_project.m4, bootstrap.sh,
20
+	  build-in-docker.sh:
21
+	  add check whether built package can be installed
22
+
23
+2018-09-07 13:24  
24
+
25
+	* [r484] bootstrap.sh, debian/control.in:
26
+	  fixed build for xenial and bionic
27
+
28
+2018-08-21 14:32  
29
+
30
+	* [r483] ChangeLog, ax_check_qt.m4, ax_init_standard_project.m4,
31
+	  bootstrap.sh, build-in-docker.sh, debian/control.in,
32
+	  mac-create-app-bundle.sh, resolve-debbuilddeps.sh,
33
+	  resolve-rpmbuilddeps.sh:
34
+	  cross compilation with qemu enabled
35
+
36
+2018-04-12 11:01  
37
+
38
+	* [r482] ChangeLog, ax_init_standard_project.m4, configure.ac,
39
+	  mac-create-app-bundle.sh:
40
+	  fix log4cxx dependency in buster
41
+
1 42
 2018-04-04 19:50  
2 43
 
3 44
 	* [r481] bootstrap.sh, build-in-docker.sh:

+ 8
- 0
NEWS View File

@@ -1,3 +1,11 @@
1
+2018-11-21
2
+
3
+Upgraded to support C++17, mainly all throw declarations have been
4
+replaced by noexcept. Now minimum requirement is C++11. The library
5
+should be reviewed with regard to latest C++ standards. Probably some
6
+features can be removed, especially regular expressions are now part
7
+of the standard.
8
+
1 9
 2006-02-04
2 10
 
3 11
 New RPM mrw-c++-minimal with minimal dependencies on other libraries

+ 0
- 59
README View File

@@ -1,59 +0,0 @@
1
-MRW C++ Library
2
-
3
-Featureful C++ Library containing a lot of needful things. Everything,
4
-I often need, but is missing in C++ standard libraries and other
5
-common 3rd party libraries, such as log4cxx, cppunit and boost.
6
-
7
-I have paid attention to define simple and a nice to use
8
-interfaces. The library makes use of object orientation, operator
9
-overload and templates, where it makes sense. The library passes
10
-several module tests before each delivery. It is therefore stable and
11
-tested.
12
-
13
-The library contains modules for the following purposes:
14
-
15
- - Collect and Format a Stack Trace
16
-   Having a stack trace is extremely useful, if you have
17
-   unexpected or uncaught exceptions
18
-    - Exceptions with Stack Trace 
19
-    - Automated Unexpected and Terminate Handler
20
-
21
- - C++ Evaluation of Command Line Arguments
22
-   A fully object oriented replacement for optarg
23
-
24
- - Classes for Automated Resource Handling
25
-   Automatically free resources from C libraries,
26
-   such as open, malloc, etc.
27
-
28
- - Configuration File Handler
29
-   Read and write UNIX / Windows like configuration files
30
-
31
- - Execute UNIX Commands
32
-   Write to stdin and read from stdout, stderr of the sub process
33
-
34
- - File and System Utilities
35
-   C++ wrapper around C library file and directory access (incomplete)
36
-
37
- - Regular Expressions
38
-   C++ wrapper around C library regular expressions
39
-
40
- - Tokenizer
41
-   Split a string into tokens and iterate through them
42
-
43
- - Function Trace (using log4cxx)
44
-    - Automatic Function Trace: Add function trace with no code
45
-      change!
46
-
47
- - A C++ wrapper around libltdl, Libtool Dynamic Loading library
48
-
49
- - Extensions for C++ Standard Libraries
50
-
51
- - STL extensions
52
-    - Shift values into containers
53
-    - Read Line that reads a full line
54
-
55
- - String extensions
56
-   Add integers to strings, shift into strings
57
-
58
-HTML and PDF documentation is include in the installation (built with
59
-Doxygen) and available online on: https://dev.marc.waeckerlin.org/projects/mrw-cxx

+ 71
- 0
README.md View File

@@ -0,0 +1,71 @@
1
+MRW C++ Library
2
+===============
3
+
4
+Featureful C++ Library containing a lot of needful things. Everything, I often need, but is missing in C++ standard libraries and other common 3rd party libraries, such as log4cxx, cppunit and boost.
5
+
6
+I have paid attention to define simple and a nice to use interfaces. The library makes use of object orientation, operator overload and templates, where it makes sense. The library passes several module tests before each delivery. It is therefore stable and tested.
7
+
8
+Features
9
+--------
10
+
11
+This library contains [modules](modules.html) for the following purposes:
12
+
13
+ - [Collect and Format a Stack Trace](group__grpStackTrace.html):  
14
+   Having a stack trace is extremely useful, if you have
15
+   unexpected or uncaught exceptions
16
+    - Exceptions with Stack Trace 
17
+    - Automated Unexpected and Terminate Handler
18
+    
19
+ - [C++ Evaluation of Command Line Arguments](group__arguments.html):  
20
+   A fully object oriented replacement for optarg
21
+
22
+ - [Classes for Automated Resource Handling](group__AutoTools.html):  
23
+   Automatically free resources from C libraries, such as open, malloc, etc.
24
+
25
+ - [Configuration File Handler](group__config.html):  
26
+   Read and write UNIX / Windows like configuration files
27
+
28
+ - [Execute UNIX Commands](group__CmdExec.html):  
29
+   Write to stdin and read from stdout, stderr of the sub process
30
+
31
+ - [File and System Utilities](group__sysFile.html):  
32
+   C++ wrapper around C library file and directory access (incomplete)
33
+
34
+ - [Regular Expressions](group__regexp.html):  
35
+   C++ wrapper around C library regular expressions
36
+     - [Tokenizer](group__regexptokenizer.html):  
37
+       Split a string into tokens and iterate through them
38
+
39
+ - [Function Trace (using log4cxx)](group__FunctionTrace.html):  
40
+   Automatic Function Trace: Add function trace with no code change!
41
+
42
+ - [Libtool Wrapper](group__dll.html):  
43
+   A C++ wrapper around libltdl, Libtool Dynamic Loading library
44
+
45
+ - [Extensions for C++ Standard Libraries](group__StdExt.html):
46
+     - Shift values into containers
47
+     - Read Line that reads a full line
48
+     - String ext ensions:  
49
+       Add integers to strings, shift into strings
50
+     - Useful Functions:  
51
+       Minumum, maximum of any kind of values
52
+
53
+
54
+In the Web
55
+----------
56
+
57
+ - The official project page is on: https://mrw.sh/libraries/mrw-cxx
58
+ - The official documentation is on: https://doc.mrw.sh/mrw-c++
59
+ - The official repositories are on: https://repository.mrw.sh
60
+
61
+
62
+Supported Platforms
63
+-------------------
64
+
65
+The library is generic UNIX, but should also work on Windows. It is sporadically tested on Windows in Cygwin. Stack trace works on Linux only, it could theoretically work on Sun Solaris too, but this is untested. Stack trace without symbol resolution, just getting the raw addresses, only depends on GNU gcc and should work on all platforms. Feedback is welcome!
66
+
67
+
68
+Missing a Feature, Found a Bug
69
+------------------------------
70
+
71
+You are missing a feature, or an implementation is too incomplete for the purpose you need it? Or you even found a bug? Just register and open an issue [on the project management page](https://mrw.sh/libraries/mrw-cxx/issues).

+ 948
- 0
ax_cxx_compile_stdcxx.m4 View File

@@ -0,0 +1,948 @@
1
+# ===========================================================================
2
+#  https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
3
+# ===========================================================================
4
+#
5
+# SYNOPSIS
6
+#
7
+#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
8
+#
9
+# DESCRIPTION
10
+#
11
+#   Check for baseline language coverage in the compiler for the specified
12
+#   version of the C++ standard.  If necessary, add switches to CXX and
13
+#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
14
+#   or '14' (for the C++14 standard).
15
+#
16
+#   The second argument, if specified, indicates whether you insist on an
17
+#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
18
+#   -std=c++11).  If neither is specified, you get whatever works, with
19
+#   preference for an extended mode.
20
+#
21
+#   The third argument, if specified 'mandatory' or if left unspecified,
22
+#   indicates that baseline support for the specified C++ standard is
23
+#   required and that the macro should error out if no mode with that
24
+#   support is found.  If specified 'optional', then configuration proceeds
25
+#   regardless, after defining HAVE_CXX${VERSION} if and only if a
26
+#   supporting mode is found.
27
+#
28
+# LICENSE
29
+#
30
+#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
31
+#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
32
+#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
33
+#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
34
+#   Copyright (c) 2015 Paul Norman <penorman@mac.com>
35
+#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
36
+#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
37
+#
38
+#   Copying and distribution of this file, with or without modification, are
39
+#   permitted in any medium without royalty provided the copyright notice
40
+#   and this notice are preserved.  This file is offered as-is, without any
41
+#   warranty.
42
+
43
+#serial 10
44
+
45
+dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
46
+dnl  (serial version number 13).
47
+
48
+AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
49
+  m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
50
+        [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
51
+        [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
52
+        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
53
+  m4_if([$2], [], [],
54
+        [$2], [ext], [],
55
+        [$2], [noext], [],
56
+        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
57
+  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
58
+        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
59
+        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
60
+        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
61
+  AC_LANG_PUSH([C++])dnl
62
+  ac_success=no
63
+
64
+  m4_if([$2], [noext], [], [dnl
65
+  if test x$ac_success = xno; then
66
+    for alternative in ${ax_cxx_compile_alternatives}; do
67
+      switch="-std=gnu++${alternative}"
68
+      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
69
+      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
70
+                     $cachevar,
71
+        [ac_save_CXX="$CXX"
72
+         CXX="$CXX $switch"
73
+         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
74
+          [eval $cachevar=yes],
75
+          [eval $cachevar=no])
76
+         CXX="$ac_save_CXX"])
77
+      if eval test x\$$cachevar = xyes; then
78
+        CXX="$CXX $switch"
79
+        if test -n "$CXXCPP" ; then
80
+          CXXCPP="$CXXCPP $switch"
81
+        fi
82
+        ac_success=yes
83
+        break
84
+      fi
85
+    done
86
+  fi])
87
+
88
+  m4_if([$2], [ext], [], [dnl
89
+  if test x$ac_success = xno; then
90
+    dnl HP's aCC needs +std=c++11 according to:
91
+    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
92
+    dnl Cray's crayCC needs "-h std=c++11"
93
+    for alternative in ${ax_cxx_compile_alternatives}; do
94
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
95
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
96
+        AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
97
+                       $cachevar,
98
+          [ac_save_CXX="$CXX"
99
+           CXX="$CXX $switch"
100
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
101
+            [eval $cachevar=yes],
102
+            [eval $cachevar=no])
103
+           CXX="$ac_save_CXX"])
104
+        if eval test x\$$cachevar = xyes; then
105
+          CXX="$CXX $switch"
106
+          if test -n "$CXXCPP" ; then
107
+            CXXCPP="$CXXCPP $switch"
108
+          fi
109
+          ac_success=yes
110
+          break
111
+        fi
112
+      done
113
+      if test x$ac_success = xyes; then
114
+        break
115
+      fi
116
+    done
117
+  fi])
118
+  AC_LANG_POP([C++])
119
+  if test x$ax_cxx_compile_cxx$1_required = xtrue; then
120
+    if test x$ac_success = xno; then
121
+      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
122
+    fi
123
+  fi
124
+  if test x$ac_success = xno; then
125
+    HAVE_CXX$1=0
126
+    AC_MSG_NOTICE([No compiler with C++$1 support was found])
127
+  else
128
+    HAVE_CXX$1=1
129
+    AC_DEFINE(HAVE_CXX$1,1,
130
+              [define if the compiler supports basic C++$1 syntax])
131
+  fi
132
+  AC_SUBST(HAVE_CXX$1)
133
+])
134
+
135
+
136
+dnl  Test body for checking C++11 support
137
+
138
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
139
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
140
+)
141
+
142
+
143
+dnl  Test body for checking C++14 support
144
+
145
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
146
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
147
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
148
+)
149
+
150
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
151
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
152
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
153
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
154
+)
155
+
156
+dnl  Tests for new features in C++11
157
+
158
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
159
+
160
+// If the compiler admits that it is not ready for C++11, why torture it?
161
+// Hopefully, this will speed up the test.
162
+
163
+#ifndef __cplusplus
164
+
165
+#error "This is not a C++ compiler"
166
+
167
+#elif __cplusplus < 201103L
168
+
169
+#error "This is not a C++11 compiler"
170
+
171
+#else
172
+
173
+namespace cxx11
174
+{
175
+
176
+  namespace test_static_assert
177
+  {
178
+
179
+    template <typename T>
180
+    struct check
181
+    {
182
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
183
+    };
184
+
185
+  }
186
+
187
+  namespace test_final_override
188
+  {
189
+
190
+    struct Base
191
+    {
192
+      virtual void f() {}
193
+    };
194
+
195
+    struct Derived : public Base
196
+    {
197
+      virtual void f() override {}
198
+    };
199
+
200
+  }
201
+
202
+  namespace test_double_right_angle_brackets
203
+  {
204
+
205
+    template < typename T >
206
+    struct check {};
207
+
208
+    typedef check<void> single_type;
209
+    typedef check<check<void>> double_type;
210
+    typedef check<check<check<void>>> triple_type;
211
+    typedef check<check<check<check<void>>>> quadruple_type;
212
+
213
+  }
214
+
215
+  namespace test_decltype
216
+  {
217
+
218
+    int
219
+    f()
220
+    {
221
+      int a = 1;
222
+      decltype(a) b = 2;
223
+      return a + b;
224
+    }
225
+
226
+  }
227
+
228
+  namespace test_type_deduction
229
+  {
230
+
231
+    template < typename T1, typename T2 >
232
+    struct is_same
233
+    {
234
+      static const bool value = false;
235
+    };
236
+
237
+    template < typename T >
238
+    struct is_same<T, T>
239
+    {
240
+      static const bool value = true;
241
+    };
242
+
243
+    template < typename T1, typename T2 >
244
+    auto
245
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
246
+    {
247
+      return a1 + a2;
248
+    }
249
+
250
+    int
251
+    test(const int c, volatile int v)
252
+    {
253
+      static_assert(is_same<int, decltype(0)>::value == true, "");
254
+      static_assert(is_same<int, decltype(c)>::value == false, "");
255
+      static_assert(is_same<int, decltype(v)>::value == false, "");
256
+      auto ac = c;
257
+      auto av = v;
258
+      auto sumi = ac + av + 'x';
259
+      auto sumf = ac + av + 1.0;
260
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
261
+      static_assert(is_same<int, decltype(av)>::value == true, "");
262
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
263
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
264
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
265
+      return (sumf > 0.0) ? sumi : add(c, v);
266
+    }
267
+
268
+  }
269
+
270
+  namespace test_noexcept
271
+  {
272
+
273
+    int f() { return 0; }
274
+    int g() noexcept { return 0; }
275
+
276
+    static_assert(noexcept(f()) == false, "");
277
+    static_assert(noexcept(g()) == true, "");
278
+
279
+  }
280
+
281
+  namespace test_constexpr
282
+  {
283
+
284
+    template < typename CharT >
285
+    unsigned long constexpr
286
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
287
+    {
288
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
289
+    }
290
+
291
+    template < typename CharT >
292
+    unsigned long constexpr
293
+    strlen_c(const CharT *const s) noexcept
294
+    {
295
+      return strlen_c_r(s, 0UL);
296
+    }
297
+
298
+    static_assert(strlen_c("") == 0UL, "");
299
+    static_assert(strlen_c("1") == 1UL, "");
300
+    static_assert(strlen_c("example") == 7UL, "");
301
+    static_assert(strlen_c("another\0example") == 7UL, "");
302
+
303
+  }
304
+
305
+  namespace test_rvalue_references
306
+  {
307
+
308
+    template < int N >
309
+    struct answer
310
+    {
311
+      static constexpr int value = N;
312
+    };
313
+
314
+    answer<1> f(int&)       { return answer<1>(); }
315
+    answer<2> f(const int&) { return answer<2>(); }
316
+    answer<3> f(int&&)      { return answer<3>(); }
317
+
318
+    void
319
+    test()
320
+    {
321
+      int i = 0;
322
+      const int c = 0;
323
+      static_assert(decltype(f(i))::value == 1, "");
324
+      static_assert(decltype(f(c))::value == 2, "");
325
+      static_assert(decltype(f(0))::value == 3, "");
326
+    }
327
+
328
+  }
329
+
330
+  namespace test_uniform_initialization
331
+  {
332
+
333
+    struct test
334
+    {
335
+      static const int zero {};
336
+      static const int one {1};
337
+    };
338
+
339
+    static_assert(test::zero == 0, "");
340
+    static_assert(test::one == 1, "");
341
+
342
+  }
343
+
344
+  namespace test_lambdas
345
+  {
346
+
347
+    void
348
+    test1()
349
+    {
350
+      auto lambda1 = [](){};
351
+      auto lambda2 = lambda1;
352
+      lambda1();
353
+      lambda2();
354
+    }
355
+
356
+    int
357
+    test2()
358
+    {
359
+      auto a = [](int i, int j){ return i + j; }(1, 2);
360
+      auto b = []() -> int { return '0'; }();
361
+      auto c = [=](){ return a + b; }();
362
+      auto d = [&](){ return c; }();
363
+      auto e = [a, &b](int x) mutable {
364
+        const auto identity = [](int y){ return y; };
365
+        for (auto i = 0; i < a; ++i)
366
+          a += b--;
367
+        return x + identity(a + b);
368
+      }(0);
369
+      return a + b + c + d + e;
370
+    }
371
+
372
+    int
373
+    test3()
374
+    {
375
+      const auto nullary = [](){ return 0; };
376
+      const auto unary = [](int x){ return x; };
377
+      using nullary_t = decltype(nullary);
378
+      using unary_t = decltype(unary);
379
+      const auto higher1st = [](nullary_t f){ return f(); };
380
+      const auto higher2nd = [unary](nullary_t f1){
381
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
382
+      };
383
+      return higher1st(nullary) + higher2nd(nullary)(unary);
384
+    }
385
+
386
+  }
387
+
388
+  namespace test_variadic_templates
389
+  {
390
+
391
+    template <int...>
392
+    struct sum;
393
+
394
+    template <int N0, int... N1toN>
395
+    struct sum<N0, N1toN...>
396
+    {
397
+      static constexpr auto value = N0 + sum<N1toN...>::value;
398
+    };
399
+
400
+    template <>
401
+    struct sum<>
402
+    {
403
+      static constexpr auto value = 0;
404
+    };
405
+
406
+    static_assert(sum<>::value == 0, "");
407
+    static_assert(sum<1>::value == 1, "");
408
+    static_assert(sum<23>::value == 23, "");
409
+    static_assert(sum<1, 2>::value == 3, "");
410
+    static_assert(sum<5, 5, 11>::value == 21, "");
411
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
412
+
413
+  }
414
+
415
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
416
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
417
+  // because of this.
418
+  namespace test_template_alias_sfinae
419
+  {
420
+
421
+    struct foo {};
422
+
423
+    template<typename T>
424
+    using member = typename T::member_type;
425
+
426
+    template<typename T>
427
+    void func(...) {}
428
+
429
+    template<typename T>
430
+    void func(member<T>*) {}
431
+
432
+    void test();
433
+
434
+    void test() { func<foo>(0); }
435
+
436
+  }
437
+
438
+}  // namespace cxx11
439
+
440
+#endif  // __cplusplus >= 201103L
441
+
442
+]])
443
+
444
+
445
+dnl  Tests for new features in C++14
446
+
447
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
448
+
449
+// If the compiler admits that it is not ready for C++14, why torture it?
450
+// Hopefully, this will speed up the test.
451
+
452
+#ifndef __cplusplus
453
+
454
+#error "This is not a C++ compiler"
455
+
456
+#elif __cplusplus < 201402L
457
+
458
+#error "This is not a C++14 compiler"
459
+
460
+#else
461
+
462
+namespace cxx14
463
+{
464
+
465
+  namespace test_polymorphic_lambdas
466
+  {
467
+
468
+    int
469
+    test()
470
+    {
471
+      const auto lambda = [](auto&&... args){
472
+        const auto istiny = [](auto x){
473
+          return (sizeof(x) == 1UL) ? 1 : 0;
474
+        };
475
+        const int aretiny[] = { istiny(args)... };
476
+        return aretiny[0];
477
+      };
478
+      return lambda(1, 1L, 1.0f, '1');
479
+    }
480
+
481
+  }
482
+
483
+  namespace test_binary_literals
484
+  {
485
+
486
+    constexpr auto ivii = 0b0000000000101010;
487
+    static_assert(ivii == 42, "wrong value");
488
+
489
+  }
490
+
491
+  namespace test_generalized_constexpr
492
+  {
493
+
494
+    template < typename CharT >
495
+    constexpr unsigned long
496
+    strlen_c(const CharT *const s) noexcept
497
+    {
498
+      auto length = 0UL;
499
+      for (auto p = s; *p; ++p)
500
+        ++length;
501
+      return length;
502
+    }
503
+
504
+    static_assert(strlen_c("") == 0UL, "");
505
+    static_assert(strlen_c("x") == 1UL, "");
506
+    static_assert(strlen_c("test") == 4UL, "");
507
+    static_assert(strlen_c("another\0test") == 7UL, "");
508
+
509
+  }
510
+
511
+  namespace test_lambda_init_capture
512
+  {
513
+
514
+    int
515
+    test()
516
+    {
517
+      auto x = 0;
518
+      const auto lambda1 = [a = x](int b){ return a + b; };
519
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
520
+      return lambda2();
521
+    }
522
+
523
+  }
524
+
525
+  namespace test_digit_separators
526
+  {
527
+
528
+    constexpr auto ten_million = 100'000'000;
529
+    static_assert(ten_million == 100000000, "");
530
+
531
+  }
532
+
533
+  namespace test_return_type_deduction
534
+  {
535
+
536
+    auto f(int& x) { return x; }
537
+    decltype(auto) g(int& x) { return x; }
538
+
539
+    template < typename T1, typename T2 >
540
+    struct is_same
541
+    {
542
+      static constexpr auto value = false;
543
+    };
544
+
545
+    template < typename T >
546
+    struct is_same<T, T>
547
+    {
548
+      static constexpr auto value = true;
549
+    };
550
+
551
+    int
552
+    test()
553
+    {
554
+      auto x = 0;
555
+      static_assert(is_same<int, decltype(f(x))>::value, "");
556
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
557
+      return x;
558
+    }
559
+
560
+  }
561
+
562
+}  // namespace cxx14
563
+
564
+#endif  // __cplusplus >= 201402L
565
+
566
+]])
567
+
568
+
569
+dnl  Tests for new features in C++17
570
+
571
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
572
+
573
+// If the compiler admits that it is not ready for C++17, why torture it?
574
+// Hopefully, this will speed up the test.
575
+
576
+#ifndef __cplusplus
577
+
578
+#error "This is not a C++ compiler"
579
+
580
+#elif __cplusplus < 201703L
581
+
582
+#error "This is not a C++17 compiler"
583
+
584
+#else
585
+
586
+#include <initializer_list>
587
+#include <utility>
588
+#include <type_traits>
589
+
590
+namespace cxx17
591
+{
592
+
593
+  namespace test_constexpr_lambdas
594
+  {
595
+
596
+    constexpr int foo = [](){return 42;}();
597
+
598
+  }
599
+
600
+  namespace test::nested_namespace::definitions
601
+  {
602
+
603
+  }
604
+
605
+  namespace test_fold_expression
606
+  {
607
+
608
+    template<typename... Args>
609
+    int multiply(Args... args)
610
+    {
611
+      return (args * ... * 1);
612
+    }
613
+
614
+    template<typename... Args>
615
+    bool all(Args... args)
616
+    {
617
+      return (args && ...);
618
+    }
619
+
620
+  }
621
+
622
+  namespace test_extended_static_assert
623
+  {
624
+
625
+    static_assert (true);
626
+
627
+  }
628
+
629
+  namespace test_auto_brace_init_list
630
+  {
631
+
632
+    auto foo = {5};
633
+    auto bar {5};
634
+
635
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
636
+    static_assert(std::is_same<int, decltype(bar)>::value);
637
+  }
638
+
639
+  namespace test_typename_in_template_template_parameter
640
+  {
641
+
642
+    template<template<typename> typename X> struct D;
643
+
644
+  }
645
+
646
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
647
+  {
648
+
649
+    int f1()
650
+    {
651
+      return 42;
652
+    }
653
+
654
+    [[nodiscard]] int f2()
655
+    {
656
+      [[maybe_unused]] auto unused = f1();
657
+
658
+      switch (f1())
659
+      {
660
+      case 17:
661
+        f1();
662
+        [[fallthrough]];
663
+      case 42:
664
+        f1();
665
+      }
666
+      return f1();
667
+    }
668
+
669
+  }
670
+
671
+  namespace test_extended_aggregate_initialization
672
+  {
673
+
674
+    struct base1
675
+    {
676
+      int b1, b2 = 42;
677
+    };
678
+
679
+    struct base2
680
+    {
681
+      base2() {
682
+        b3 = 42;
683
+      }
684
+      int b3;
685
+    };
686
+
687
+    struct derived : base1, base2
688
+    {
689
+        int d;
690
+    };
691
+
692
+    derived d1 {{1, 2}, {}, 4};  // full initialization
693
+    derived d2 {{}, {}, 4};      // value-initialized bases
694
+
695
+  }
696
+
697
+  namespace test_general_range_based_for_loop
698
+  {
699
+
700
+    struct iter
701
+    {
702
+      int i;
703
+
704
+      int& operator* ()
705
+      {
706
+        return i;
707
+      }
708
+
709
+      const int& operator* () const
710
+      {
711
+        return i;
712
+      }
713
+
714
+      iter& operator++()
715
+      {
716
+        ++i;
717
+        return *this;
718
+      }
719
+    };
720
+
721
+    struct sentinel
722
+    {
723
+      int i;
724
+    };
725
+
726
+    bool operator== (const iter& i, const sentinel& s)
727
+    {
728
+      return i.i == s.i;
729
+    }
730
+
731
+    bool operator!= (const iter& i, const sentinel& s)
732
+    {
733
+      return !(i == s);
734
+    }
735
+
736
+    struct range
737
+    {
738
+      iter begin() const
739
+      {
740
+        return {0};
741
+      }
742
+
743
+      sentinel end() const
744
+      {
745
+        return {5};
746
+      }
747
+    };
748
+
749
+    void f()
750
+    {
751
+      range r {};
752
+
753
+      for (auto i : r)
754
+      {
755
+        [[maybe_unused]] auto v = i;
756
+      }
757
+    }
758
+
759
+  }
760
+
761
+  namespace test_lambda_capture_asterisk_this_by_value
762
+  {
763
+
764
+    struct t
765
+    {
766
+      int i;
767
+      int foo()
768
+      {
769
+        return [*this]()
770
+        {
771
+          return i;
772
+        }();
773
+      }
774
+    };
775
+
776
+  }
777
+
778
+  namespace test_enum_class_construction
779
+  {
780
+
781
+    enum class byte : unsigned char
782
+    {};
783
+
784
+    byte foo {42};
785
+
786
+  }
787
+
788
+  namespace test_constexpr_if
789
+  {
790
+
791
+    template <bool cond>
792
+    int f ()
793
+    {
794
+      if constexpr(cond)
795
+      {
796
+        return 13;
797
+      }
798
+      else
799
+      {
800
+        return 42;
801
+      }
802
+    }
803
+
804
+  }
805
+
806
+  namespace test_selection_statement_with_initializer
807
+  {
808
+
809
+    int f()
810
+    {
811
+      return 13;
812
+    }
813
+
814
+    int f2()
815
+    {
816
+      if (auto i = f(); i > 0)
817
+      {
818
+        return 3;
819
+      }
820
+
821
+      switch (auto i = f(); i + 4)
822
+      {
823
+      case 17:
824
+        return 2;
825
+
826
+      default:
827
+        return 1;
828
+      }
829
+    }
830
+
831
+  }
832
+
833
+  namespace test_template_argument_deduction_for_class_templates
834
+  {
835
+
836
+    template <typename T1, typename T2>
837
+    struct pair
838
+    {
839
+      pair (T1 p1, T2 p2)
840
+        : m1 {p1},
841
+          m2 {p2}
842
+      {}
843
+
844
+      T1 m1;
845
+      T2 m2;
846
+    };
847
+
848
+    void f()
849
+    {
850
+      [[maybe_unused]] auto p = pair{13, 42u};
851
+    }
852
+
853
+  }
854
+
855
+  namespace test_non_type_auto_template_parameters
856
+  {
857
+
858
+    template <auto n>
859
+    struct B
860
+    {};
861
+
862
+    B<5> b1;
863
+    B<'a'> b2;
864
+
865
+  }
866
+
867
+  namespace test_structured_bindings
868
+  {
869
+
870
+    int arr[2] = { 1, 2 };
871
+    std::pair<int, int> pr = { 1, 2 };
872
+
873
+    auto f1() -> int(&)[2]
874
+    {
875
+      return arr;
876
+    }
877
+
878
+    auto f2() -> std::pair<int, int>&
879
+    {
880
+      return pr;
881
+    }
882
+
883
+    struct S
884
+    {
885
+      int x1 : 2;
886
+      volatile double y1;
887
+    };
888
+
889
+    S f3()
890
+    {
891
+      return {};
892
+    }
893
+
894
+    auto [ x1, y1 ] = f1();
895
+    auto& [ xr1, yr1 ] = f1();
896
+    auto [ x2, y2 ] = f2();
897
+    auto& [ xr2, yr2 ] = f2();
898
+    const auto [ x3, y3 ] = f3();
899
+
900
+  }
901
+
902
+  namespace test_exception_spec_type_system
903
+  {
904
+
905
+    struct Good {};
906
+    struct Bad {};
907
+
908
+    void g1() noexcept;
909
+    void g2();
910
+
911
+    template<typename T>
912
+    Bad
913
+    f(T*, T*);
914
+
915
+    template<typename T1, typename T2>
916
+    Good
917
+    f(T1*, T2*);
918
+
919
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
920
+
921
+  }
922
+
923
+  namespace test_inline_variables
924
+  {
925
+
926
+    template<class T> void f(T)
927
+    {}
928
+
929
+    template<class T> inline T g(T)
930
+    {
931
+      return T{};
932
+    }
933
+
934
+    template<> inline void f<>(int)
935
+    {}
936
+
937
+    template<> int g<>(int)
938
+    {
939
+      return 5;
940
+    }
941
+
942
+  }
943
+
944
+}  // namespace cxx17
945
+
946
+#endif  // __cplusplus < 201703L
947
+
948
+]])

+ 0
- 231
ax_cxx_compile_stdcxx_11.m4 View File

@@ -1,231 +0,0 @@
1
-# ============================================================================
2
-#  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
3
-# ============================================================================
4
-#
5
-# SYNOPSIS
6
-#
7
-#   AX_REQUIRE_STDCXX_11
8
-#   AX_REQUIRE_STDCXX_14
9
-#   AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
10
-#   AX_CXX_COMPILE_STDCXX_14([ext|noext],[mandatory|optional])
11
-#
12
-# DESCRIPTION
13
-#
14
-#   Check for baseline language coverage in the compiler for the C++11
15
-#   or C++14 standard; if necessary, add switches to CXXFLAGS to
16
-#   enable support.
17
-#
18
-#   The first argument, if specified, indicates whether you insist on an
19
-#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
20
-#   -std=c++11).  If neither is specified, you get whatever works, with
21
-#   preference for an extended mode.
22
-#
23
-#   The second argument, if specified 'mandatory' or if left unspecified,
24
-#   indicates that baseline C++11 support is required and that the macro
25
-#   should error out if no mode with that support is found.  If specified
26
-#   'optional', then configuration proceeds regardless, after defining
27
-#   HAVE_CXX11 if and only if a supporting mode is found.
28
-#
29
-# LICENSE
30
-#
31
-#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
32
-#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
33
-#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
34
-#
35
-#   Copying and distribution of this file, with or without modification, are
36
-#   permitted in any medium without royalty provided the copyright notice
37
-#   and this notice are preserved. This file is offered as-is, without any
38
-#   warranty.
39
-
40
-#serial 3
41
-
42
-m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [
43
-  template <typename T>
44
-    struct check
45
-    {
46
-      static_assert(sizeof(int) <= sizeof(T), "not big enough");
47
-    };
48
-
49
-    typedef check<check<bool>> right_angle_brackets;
50
-
51
-    int a;
52
-    decltype(a) b;
53
-
54
-    typedef check<int> check_type;
55
-    check_type c;
56
-    check_type&& cr = static_cast<check_type&&>(c);
57
-
58
-    auto d = a;
59
-])
60
-
61
-AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
62
-  m4_if([$1], [], [],
63
-        [$1], [ext], [],
64
-        [$1], [noext], [],
65
-        [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
66
-  m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
67
-        [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
68
-        [$2], [optional], [ax_cxx_compile_cxx11_required=false],
69
-        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
70
-  AC_LANG_PUSH([C++])dnl
71
-  ac_success=no
72
-  AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
73
-  ax_cv_cxx_compile_cxx11,
74
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
75
-    [ax_cv_cxx_compile_cxx11=yes],
76
-    [ax_cv_cxx_compile_cxx11=no])])
77
-  if test x$ax_cv_cxx_compile_cxx11 = xyes; then
78
-    ac_success=yes
79
-  fi
80
-
81
-  m4_if([$1], [noext], [], [dnl
82
-  if test x$ac_success = xno; then
83
-    for switch in -std=gnu++11 -std=gnu++0x; do
84
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
85
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
86
-                     $cachevar,
87
-        [ac_save_CXXFLAGS="$CXXFLAGS"
88
-         CXXFLAGS="$CXXFLAGS $switch"
89
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
90
-          [eval $cachevar=yes],
91
-          [eval $cachevar=no])
92
-         CXXFLAGS="$ac_save_CXXFLAGS"])
93
-      if eval test x\$$cachevar = xyes; then
94
-        CXXFLAGS="$CXXFLAGS $switch"
95
-        ac_success=yes
96
-        break
97
-      fi
98
-    done
99
-  fi])
100
-
101
-  m4_if([$1], [ext], [], [dnl
102
-  if test x$ac_success = xno; then
103
-    for switch in -std=c++11 -std=c++0x; do
104
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
105
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
106
-                     $cachevar,
107
-        [ac_save_CXXFLAGS="$CXXFLAGS"
108
-         CXXFLAGS="$CXXFLAGS $switch"
109
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
110
-          [eval $cachevar=yes],
111
-          [eval $cachevar=no])
112
-         CXXFLAGS="$ac_save_CXXFLAGS"])
113
-      if eval test x\$$cachevar = xyes; then
114
-        CXXFLAGS="$CXXFLAGS $switch"
115
-        ac_success=yes
116
-        break
117
-      fi
118
-    done
119
-  fi])
120
-  AC_LANG_POP([C++])
121
-  if test x$ax_cxx_compile_cxx11_required = xtrue; then
122
-    if test x$ac_success = xno; then
123
-      AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
124
-    fi
125
-  else
126
-    if test x$ac_success = xno; then
127
-      HAVE_CXX11=0
128
-      AC_MSG_NOTICE([No compiler with C++11 support was found])
129
-    else
130
-      HAVE_CXX11=1
131
-      AC_DEFINE(HAVE_CXX11,1,
132
-                [define if the compiler supports basic C++11 syntax])
133
-    fi
134
-
135
-    AC_SUBST(HAVE_CXX11)
136
-  fi
137
-])
138
-
139
-AC_DEFUN([AX_CXX_COMPILE_STDCXX_14], [dnl
140
-  m4_if([$1], [], [],
141
-        [$1], [ext], [],
142
-        [$1], [noext], [],
143
-        [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_14])])dnl
144
-  m4_if([$2], [], [ax_cxx_compile_cxx14_required=true],
145
-        [$2], [mandatory], [ax_cxx_compile_cxx14_required=true],
146
-        [$2], [optional], [ax_cxx_compile_cxx14_required=false],
147
-        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_14])])dnl
148
-  AC_LANG_PUSH([C++])dnl
149
-  ac_success=no
150
-  AC_CACHE_CHECK(whether $CXX supports C++14 features by default,
151
-  ax_cv_cxx_compile_cxx14,
152
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
153
-    [ax_cv_cxx_compile_cxx14=yes],
154
-    [ax_cv_cxx_compile_cxx14=no])])
155
-  if test x$ax_cv_cxx_compile_cxx14 = xyes; then
156
-    ac_success=yes
157
-  fi
158
-
159
-  m4_if([$1], [noext], [], [dnl
160
-  if test x$ac_success = xno; then
161
-    for switch in -std=gnu++14 -std=gnu++0y; do
162
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx14_$switch])
163
-      AC_CACHE_CHECK(whether $CXX supports C++14 features with $switch,
164
-                     $cachevar,
165
-        [ac_save_CXXFLAGS="$CXXFLAGS"
166
-         CXXFLAGS="$CXXFLAGS $switch"
167
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
168
-          [eval $cachevar=yes],
169
-          [eval $cachevar=no])
170
-         CXXFLAGS="$ac_save_CXXFLAGS"])
171
-      if eval test x\$$cachevar = xyes; then
172
-        CXXFLAGS="$CXXFLAGS $switch"
173
-        ac_success=yes
174
-        break
175
-      fi
176
-    done
177
-  fi])
178
-
179
-  m4_if([$1], [ext], [], [dnl
180
-  if test x$ac_success = xno; then
181
-    for switch in -std=c++14 -std=c++0y; do
182
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx14_$switch])
183
-      AC_CACHE_CHECK(whether $CXX supports C++14 features with $switch,
184
-                     $cachevar,
185
-        [ac_save_CXXFLAGS="$CXXFLAGS"
186
-         CXXFLAGS="$CXXFLAGS $switch"
187
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
188
-          [eval $cachevar=yes],
189
-          [eval $cachevar=no])
190
-         CXXFLAGS="$ac_save_CXXFLAGS"])
191
-      if eval test x\$$cachevar = xyes; then
192
-        CXXFLAGS="$CXXFLAGS $switch"
193
-        ac_success=yes
194
-        break
195
-      fi
196
-    done
197
-  fi])
198
-  AC_LANG_POP([C++])
199
-  if test x$ax_cxx_compile_cxx14_required = xtrue; then
200
-    if test x$ac_success = xno; then
201
-      AC_MSG_ERROR([*** A compiler with support for C++14 language features is required.])
202
-    fi
203
-  else
204
-    if test x$ac_success = xno; then
205
-      HAVE_CXX14=0
206
-      AC_MSG_NOTICE([No compiler with C++14 support was found])
207
-      AX_CXX_COMPILE_STDCXX_11([$1], [optional])
208
-    else
209
-      HAVE_CXX11=1
210
-      HAVE_CXX14=1
211
-      AC_DEFINE(HAVE_CXX14,1,
212
-                [define if the compiler supports basic C++14 syntax])
213
-      AC_DEFINE(HAVE_CXX11,1,
214
-                [define if the compiler supports basic C++14 syntax])
215
-    fi
216
-    AC_SUBST(HAVE_CXX11)
217
-    AC_SUBST(HAVE_CXX14)
218
-  fi
219
-])
220
-
221
-AC_DEFUN([AX_REQUIRE_STDCXX_11], [
222
-  if test x${HAVE_CXX11} != x1; then
223
-    AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
224
-  fi
225
-])
226
-
227
-AC_DEFUN([AX_REQUIRE_STDCXX_14], [
228
-  if test x${HAVE_CXX14} != x1; then
229
-    AC_MSG_ERROR([*** A compiler with support for C++14 language features is required.])
230
-  fi
231
-])

+ 6
- 3
ax_init_standard_project.m4 View File

@@ -170,9 +170,11 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
170 170
   AX_SUBST(NUMBERS)
171 171
   AX_SUBST(HOME)
172 172
   if test -f README.md; then
173
+    README_FILE=README.md
173 174
     README=$(tail -n +3 README.md)
174 175
     DESCRIPTION=$(head -1 README.md | sed 's,^#\+ *,,;s, *#\+$,,')
175 176
   else
177
+    README_FILE=README
176 178
     README=$(tail -n +3 README)
177 179
     DESCRIPTION=$(head -1 README)
178 180
   fi
@@ -182,6 +184,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
182 184
   else
183 185
     README_HTML="${README}"
184 186
   fi
187
+  AX_SUBST(README_FILE)
185 188
   AX_SUBST(README)
186 189
   _AM_SUBST_NOTMAKE([README])
187 190
   AX_SUBST(README_ESCAPED)
@@ -329,7 +332,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
329 332
   AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-standard-project-targets], [makefile.in])
330 333
   test -f makefile.in && cat >> makefile.in <<EOF
331 334
 #### Begin: Appended by $0
332
-EXTRA_DIST += bootstrap.sh ax_init_standard_project.m4 ax_cxx_compile_stdcxx_11.m4 \
335
+EXTRA_DIST += bootstrap.sh ax_init_standard_project.m4 ax_cxx_compile_stdcxx.m4 \
333 336
               ax_check_qt.m4 resolve-debbuilddeps.sh resolve-rpmbuilddeps.sh \
334 337
               build-resource-file.sh mac-create-app-bundle.sh
335 338
 
@@ -347,9 +350,9 @@ EOF
347 350
 
348 351
 # use this in configure.ac to support C++
349 352
 AC_DEFUN([AX_USE_CXX], [
350
-  m4_include(ax_cxx_compile_stdcxx_11.m4)
353
+  m4_include(ax_cxx_compile_stdcxx.m4)
351 354
   AC_LANG(C++)
352
-  AX_CXX_COMPILE_STDCXX_14(noext, optional)
355
+  AX_CXX_COMPILE_STDCXX([17], [noext], [optional])
353 356
   AC_PROG_CXX
354 357
   AC_PROG_CPP
355 358
 

+ 8
- 7
bootstrap.sh View File

@@ -129,7 +129,7 @@ GENERATED FILES
129 129
     * ${MY_NAME}
130 130
     * autogen.sh - just the basics to initialize auto tools and create configure
131 131
     * ax_init_standard_project.m4 - auxiliary macro definition file
132
-    * ax_cxx_compile_stdcxx_11.m4 - auxiliary macro definition file
132
+    * ax_cxx_compile_stdcxx.m4 - auxiliary macro definition file
133 133
     * ax_check_qt.m4 - auxiliary macro definition file
134 134
     * makefile_test.inc.am - makefile to be included in tests
135 135
     * resolve-debbuilddeps.sh - script to install debian package dependencies
@@ -274,7 +274,7 @@ FILES
274 274
       * Enable C++ testing using CppUnit: AX_USE_CPPUNIT
275 275
       * Enable other tests: AX_BUILD_TEST
276 276
       * Enable C++ examples, i.e. for libraries: AX_BUILD_EXAMPLES
277
-      * Check for C++11 support: AX_CXX_COMPILE_STDCXX_11 (see ax_cxx_compile_stdcxx_11.m4)
277
+      * Require C++17 support: AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory]) (see ax_cxx_compile_stdcxx.m4)
278 278
       * Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4)
279 279
       * Optionally use a QT module: AX_CHECK_QT  (see ax_check_qt.m4)
280 280
       * Require a module: AX_PKG_REQUIRE (see ax_init_standard_project.m4)
@@ -591,7 +591,7 @@ fi
591 591
 # Initialize the environment:
592 592
 copy ${MY_NAME}
593 593
 copy ax_init_standard_project.m4
594
-copy ax_cxx_compile_stdcxx_11.m4
594
+copy ax_cxx_compile_stdcxx.m4
595 595
 copy ax_check_qt.m4
596 596
 copy makefile_test.inc.am
597 597
 copy resolve-debbuilddeps.sh
@@ -1505,6 +1505,7 @@ if testtag AX_USE_DOXYGEN; then
1505 1505
     if ! checkfile doc/doxyfile.in || \
1506 1506
         contains doc/doxyfile.in "${rebuildfiles[@]}"; then
1507 1507
         run doxygen -g doc/doxyfile.in
1508
+        sed -i ':a;/\\$/{s///;N;s/ *\n */ /g;ba}' doc/doxyfile.in
1508 1509
         if test $exists -eq 0; then
1509 1510
             if test -n "${VCS}" -a $novcs -eq 0 && ! contains "doc/doxyfile" "${excludevcs[@]}"; then
1510 1511
                 run ${VCS} add doc/doxyfile.in
@@ -1548,6 +1549,7 @@ if testtag AX_USE_DOXYGEN; then
1548 1549
         doxyreplace WARN_IF_UNDOCUMENTED NO
1549 1550
         doxyreplace WARN_LOGFILE doxygen.errors
1550 1551
         doxyreplace INPUT "@top_srcdir@/src"
1552
+        doxyadd INPUT "@top_srcdir@/@README_FILE@"
1551 1553
         if testtag AX_USE_SCRIPTS; then
1552 1554
             doxyadd INPUT "@top_srcdir@/scripts"
1553 1555
         fi
@@ -1562,6 +1564,7 @@ if testtag AX_USE_DOXYGEN; then
1562 1564
             doxyadd EXCLUDE "@top_srcdir@/nodejs/node_modules"
1563 1565
 	    doxyadd EXCLUDE "@top_srcdir@/nodejs/public/javascripts/ext"
1564 1566
         fi
1567
+        doxyreplace USE_MDFILE_AS_MAINPAGE "@top_srcdir@/@README_FILE@"
1565 1568
         doxyreplace FILE_PATTERNS '*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt *.sql'
1566 1569
         doxyreplace RECURSIVE YES
1567 1570
         doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_* version.[ch]xx"
@@ -1571,9 +1574,7 @@ if testtag AX_USE_DOXYGEN; then
1571 1574
         doxyreplace HTML_DYNAMIC_SECTIONS YES
1572 1575
         doxyreplace DISABLE_INDEX NO
1573 1576
         doxyreplace GENERATE_TREEVIEW YES 
1574
-        if testtag AX_BUILD_EXAMPLES; then
1575
-            doxyreplace EXAMPLE_PATH @top_srcdir@/examples
1576
-        fi
1577
+        doxyreplace EXAMPLE_PATH @top_srcdir@
1577 1578
         doxyreplace EXAMPLE_RECURSIVE YES
1578 1579
         doxyreplace FILTER_PATTERNS '*.wt=doxygen-webtester.sed *.sql=@top_srcdir@/sql-to-dot.sed'
1579 1580
         doxyreplace SOURCE_BROWSER YES
@@ -1874,7 +1875,7 @@ desktop_DATA = @PACKAGE_DESKTOP@
1874 1875
 dist_pkgdata_DATA = @PACKAGE_ICON@
1875 1876
 dist_noinst_DATA = ax_check_qt.m4 bootstrap.sh				\\
1876 1877
                    resolve-rpmbuilddeps.sh autogen.sh			\\
1877
-                    ax_cxx_compile_stdcxx_11.m4 build-in-docker.sh	\\
1878
+                    ax_cxx_compile_stdcxx.m4 build-in-docker.sh	        \\
1878 1879
                     build-resource-file.sh				\\
1879 1880
                     ax_init_standard_project.m4				\\
1880 1881
                     mac-create-app-bundle.sh resolve-debbuilddeps.sh    \\

+ 3
- 3
configure.ac View File

@@ -8,9 +8,9 @@
8 8
 
9 9
 PROJECT_URL="https://dev.marc.waeckerlin.org/projects/mrw-c++"
10 10
 m4_define(x_package_name, mrw-c++) # project's name
11
-m4_define(x_major, 4) # project's major version
12
-m4_define(x_minor, 5) # project's minor version
13
-m4_define(x_least_diff, 469) # diff in minor
11
+m4_define(x_major, 5) # project's major version
12
+m4_define(x_minor, 0) # project's minor version
13
+m4_define(x_least_diff, 488) # diff in minor
14 14
 m4_include(ax_init_standard_project.m4)
15 15
 AC_INIT(x_package_name, x_version, x_bugreport, x_package_name)
16 16
 AM_INIT_AUTOMAKE([1.9 tar-pax])

+ 306
- 163
doc/doxyfile.in View File

@@ -1,4 +1,4 @@
1
-# Doxyfile 1.8.6
1
+# Doxyfile 1.8.13
2 2
 
3 3
 # This file describes the settings to be used by the documentation system
4 4
 # doxygen (www.doxygen.org) for a project.
@@ -46,12 +46,12 @@ PROJECT_NUMBER         = @PACKAGE_VERSION@
46 46
 
47 47
 PROJECT_BRIEF          = @DESCRIPTION@
48 48
 
49
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
50
-# the documentation. The maximum height of the logo should not exceed 55 pixels
51
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
52
-# to the output directory.
49
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
50
+# in the documentation. The maximum height of the logo should not exceed 55
51
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
52
+# the logo to the output directory.
53 53
 
54
-PROJECT_LOGO           = @PROJECT_LOGO@
54
+PROJECT_LOGO           = @top_srcdir@/@PACKAGE_LOGO@
55 55
 
56 56
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57 57
 # into which the generated documentation will be written. If a relative path is
@@ -60,7 +60,7 @@ PROJECT_LOGO           = @PROJECT_LOGO@
60 60
 
61 61
 OUTPUT_DIRECTORY       =
62 62
 
63
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
63
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
64 64
 # directories (in 2 levels) under the output directory of each output format and
65 65
 # will distribute the generated files over these directories. Enabling this
66 66
 # option can be useful when feeding doxygen a huge amount of source files, where
@@ -70,6 +70,14 @@ OUTPUT_DIRECTORY       =
70 70
 
71 71
 CREATE_SUBDIRS         = NO
72 72
 
73
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
74
+# characters to appear in the names of generated files. If set to NO, non-ASCII
75
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
76
+# U+3044.
77
+# The default value is: NO.
78
+
79
+ALLOW_UNICODE_NAMES    = NO
80
+
73 81
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
74 82
 # documentation generated by doxygen is written. Doxygen will use this
75 83
 # information to generate all constant output in the proper language.
@@ -85,14 +93,14 @@ CREATE_SUBDIRS         = NO
85 93
 
86 94
 OUTPUT_LANGUAGE        = English
87 95
 
88
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
96
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
89 97
 # descriptions after the members that are listed in the file and class
90 98
 # documentation (similar to Javadoc). Set to NO to disable this.
91 99
 # The default value is: YES.
92 100
 
93 101
 BRIEF_MEMBER_DESC      = YES
94 102
 
95
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
103
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
96 104
 # description of a member or function before the detailed description
97 105
 #
98 106
 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
@@ -110,7 +118,7 @@ REPEAT_BRIEF           = YES
110 118
 # the entity):The $name class, The $name widget, The $name file, is, provides,
111 119
 # specifies, contains, represents, a, an and the.
112 120
 
113
-ABBREVIATE_BRIEF       =
121
+ABBREVIATE_BRIEF       = "The $name class" "The $name widget" "The $name file" is provides specifies contains represents a an the
114 122
 
115 123
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
116 124
 # doxygen will generate a detailed section even if there is only a brief
@@ -127,7 +135,7 @@ ALWAYS_DETAILED_SEC    = NO
127 135
 
128 136
 INLINE_INHERITED_MEMB  = YES
129 137
 
130
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
138
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
131 139
 # before files name in the file list and in the header files. If set to NO the
132 140
 # shortest path that makes the file name unique will be used
133 141
 # The default value is: YES.
@@ -197,9 +205,9 @@ MULTILINE_CPP_IS_BRIEF = YES
197 205
 
198 206
 INHERIT_DOCS           = YES
199 207
 
200
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
201
-# new page for each member. If set to NO, the documentation of a member will be
202
-# part of the file/class/namespace that contains it.
208
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
209
+# page for each member. If set to NO, the documentation of a member will be part
210
+# of the file/class/namespace that contains it.
203 211
 # The default value is: NO.
204 212
 
205 213
 SEPARATE_MEMBER_PAGES  = NO
@@ -221,11 +229,15 @@ TAB_SIZE               = 2
221 229
 # newlines.
222 230
 
223 231
 ALIASES                = "id=\par File-ID\n"
232
+ALIASES += "author=<a href="@AUTHOR_URL@" target="_blank">@AUTHOR_NAME@</a>"
233
+ALIASES += "readme=@README_HTML@"
234
+ALIASES += "description=@DESCRIPTION@"
235
+ALIASES += "api=\xrefitem api \"API Call\" \"\""
224 236
 ALIASES += "mutex=\par Reentrant:\nAccess is locked with mutex @c "
225 237
 ALIASES += "instancemutex=\par Reentrant:\nAccess is locked with per instance mutex @c "
226 238
 ALIASES += "classmutex=\par Reentrant:\nAccess is locked with class static mutex @c "
227 239
 ALIASES += "license=\par License\n"
228
-ALIASES += "copy=\par Copyright\n"
240
+ALIASES += "copy=\par Copyright by <a href="@AUTHOR_URL@" target="_blank">@AUTHOR_NAME@</a>\n"
229 241
 
230 242
 # This tag can be used to specify a number of word-keyword mappings (TCL only).
231 243
 # A mapping has the form "name=value". For example adding "class=itcl::class"
@@ -266,11 +278,14 @@ OPTIMIZE_OUTPUT_VHDL   = NO
266 278
 # extension. Doxygen has a built-in mapping, but you can override or extend it
267 279
 # using this tag. The format is ext=language, where ext is a file extension, and
268 280
 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
269
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
270
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
271
-# (default is Fortran), use: inc=Fortran f=C.
281
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
282
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
283
+# Fortran. In the later case the parser tries to guess whether the code is fixed
284
+# or free formatted code, this is the default for Fortran type files), VHDL. For
285
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
286
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
272 287
 #
273
-# Note For files without extension you can use no_extension as a placeholder.
288
+# Note: For files without extension you can use no_extension as a placeholder.
274 289
 #
275 290
 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
276 291
 # the files are not read by doxygen.
@@ -287,10 +302,19 @@ EXTENSION_MAPPING      =
287 302
 
288 303
 MARKDOWN_SUPPORT       = YES
289 304
 
305
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
306
+# to that level are automatically included in the table of contents, even if
307
+# they do not have an id attribute.
308
+# Note: This feature currently applies only to Markdown headings.
309
+# Minimum value: 0, maximum value: 99, default value: 0.
310
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
311
+
312
+TOC_INCLUDE_HEADINGS   = 0
313
+
290 314
 # When enabled doxygen tries to link words that correspond to documented
291 315
 # classes, or namespaces to their corresponding documentation. Such a link can
292
-# be prevented in individual cases by by putting a % sign in front of the word
293
-# or globally by setting AUTOLINK_SUPPORT to NO.
316
+# be prevented in individual cases by putting a % sign in front of the word or
317
+# globally by setting AUTOLINK_SUPPORT to NO.
294 318
 # The default value is: YES.
295 319
 
296 320
 AUTOLINK_SUPPORT       = YES
@@ -330,13 +354,20 @@ SIP_SUPPORT            = NO
330 354
 IDL_PROPERTY_SUPPORT   = YES
331 355
 
332 356
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
333
-# tag is set to YES, then doxygen will reuse the documentation of the first
357
+# tag is set to YES then doxygen will reuse the documentation of the first
334 358
 # member in the group (if any) for the other members of the group. By default
335 359
 # all members of a group must be documented explicitly.
336 360
 # The default value is: NO.
337 361
 
338 362
 DISTRIBUTE_GROUP_DOC   = YES
339 363
 
364
+# If one adds a struct or class to a group and this option is enabled, then also
365
+# any nested class or struct is added to the same group. By default this option
366
+# is disabled and one has to add nested compounds explicitly via \ingroup.
367
+# The default value is: NO.
368
+
369
+GROUP_NESTED_COMPOUNDS = NO
370
+
340 371
 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
341 372
 # (for instance a group of public functions) to be put as a subgroup of that
342 373
 # type (e.g. under the Public Functions section). Set it to NO to prevent
@@ -395,7 +426,7 @@ LOOKUP_CACHE_SIZE      = 0
395 426
 # Build related configuration options
396 427
 #---------------------------------------------------------------------------
397 428
 
398
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
429
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
399 430
 # documentation are documented, even if no documentation was available. Private
400 431
 # class members and static file members will be hidden unless the
401 432
 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
@@ -405,35 +436,35 @@ LOOKUP_CACHE_SIZE      = 0
405 436
 
406 437
 EXTRACT_ALL            = YES
407 438
 
408
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
439
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
409 440
 # be included in the documentation.
410 441
 # The default value is: NO.
411 442
 
412 443
 EXTRACT_PRIVATE        = YES
413 444
 
414
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
445
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
415 446
 # scope will be included in the documentation.
416 447
 # The default value is: NO.
417 448
 
418 449
 EXTRACT_PACKAGE        = YES
419 450
 
420
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
451
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
421 452
 # included in the documentation.
422 453
 # The default value is: NO.
423 454
 
424 455
 EXTRACT_STATIC         = YES
425 456
 
426
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
427
-# locally in source files will be included in the documentation. If set to NO
457
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
458
+# locally in source files will be included in the documentation. If set to NO,
428 459
 # only classes defined in header files are included. Does not have any effect
429 460
 # for Java sources.
430 461
 # The default value is: YES.
431 462
 
432 463
 EXTRACT_LOCAL_CLASSES  = YES
433 464
 
434
-# This flag is only useful for Objective-C code. When set to YES local methods,
465
+# This flag is only useful for Objective-C code. If set to YES, local methods,
435 466
 # which are defined in the implementation section but not in the interface are
436
-# included in the documentation. If set to NO only methods in the interface are
467
+# included in the documentation. If set to NO, only methods in the interface are
437 468
 # included.
438 469
 # The default value is: NO.
439 470
 
@@ -458,21 +489,21 @@ HIDE_UNDOC_MEMBERS     = NO
458 489
 
459 490
 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
460 491
 # undocumented classes that are normally visible in the class hierarchy. If set
461
-# to NO these classes will be included in the various overviews. This option has
462
-# no effect if EXTRACT_ALL is enabled.
492
+# to NO, these classes will be included in the various overviews. This option
493
+# has no effect if EXTRACT_ALL is enabled.
463 494
 # The default value is: NO.
464 495
 
465 496
 HIDE_UNDOC_CLASSES     = NO
466 497
 
467 498
 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
468
-# (class|struct|union) declarations. If set to NO these declarations will be
499
+# (class|struct|union) declarations. If set to NO, these declarations will be
469 500
 # included in the documentation.
470 501
 # The default value is: NO.
471 502
 
472 503
 HIDE_FRIEND_COMPOUNDS  = NO
473 504
 
474 505
 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
475
-# documentation blocks found inside the body of a function. If set to NO these
506
+# documentation blocks found inside the body of a function. If set to NO, these
476 507
 # blocks will be appended to the function's detailed documentation block.
477 508
 # The default value is: NO.
478 509
 
@@ -486,7 +517,7 @@ HIDE_IN_BODY_DOCS      = NO
486 517
 INTERNAL_DOCS          = NO
487 518
 
488 519
 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
489
-# names in lower-case letters. If set to YES upper-case letters are also
520
+# names in lower-case letters. If set to YES, upper-case letters are also
490 521
 # allowed. This is useful if you have classes or files whose names only differ
491 522
 # in case and if your file system supports case sensitive file names. Windows
492 523
 # and Mac users are advised to set this option to NO.
@@ -495,12 +526,19 @@ INTERNAL_DOCS          = NO
495 526
 CASE_SENSE_NAMES       = YES
496 527
 
497 528
 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
498
-# their full class and namespace scopes in the documentation. If set to YES the
529
+# their full class and namespace scopes in the documentation. If set to YES, the
499 530
 # scope will be hidden.
500 531
 # The default value is: NO.
501 532
 
502 533
 HIDE_SCOPE_NAMES       = NO
503 534
 
535
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
536
+# append additional text to a page's title, such as Class Reference. If set to
537
+# YES the compound reference will be hidden.
538
+# The default value is: NO.
539
+
540
+HIDE_COMPOUND_REFERENCE= NO
541
+
504 542
 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
505 543
 # the files that are included by a file in the documentation of that file.
506 544
 # The default value is: YES.
@@ -528,14 +566,14 @@ INLINE_INFO            = YES
528 566
 
529 567
 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
530 568
 # (detailed) documentation of file and class members alphabetically by member
531
-# name. If set to NO the members will appear in declaration order.
569
+# name. If set to NO, the members will appear in declaration order.
532 570
 # The default value is: YES.
533 571
 
534 572
 SORT_MEMBER_DOCS       = YES
535 573
 
536 574
 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
537 575
 # descriptions of file, namespace and class members alphabetically by member
538
-# name. If set to NO the members will appear in declaration order. Note that
576
+# name. If set to NO, the members will appear in declaration order. Note that
539 577
 # this will also influence the order of the classes in the class list.
540 578
 # The default value is: NO.
541 579
 
@@ -580,27 +618,25 @@ SORT_BY_SCOPE_NAME     = NO
580 618
 
581 619
 STRICT_PROTO_MATCHING  = NO
582 620
 
583
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
584
-# todo list. This list is created by putting \todo commands in the
585
-# documentation.
621
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
622
+# list. This list is created by putting \todo commands in the documentation.
586 623
 # The default value is: YES.
587 624
 
588 625
 GENERATE_TODOLIST      = YES
589 626
 
590
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
591
-# test list. This list is created by putting \test commands in the
592
-# documentation.
627
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
628
+# list. This list is created by putting \test commands in the documentation.
593 629
 # The default value is: YES.
594 630
 
595 631
 GENERATE_TESTLIST      = YES
596 632
 
597
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
633
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
598 634
 # list. This list is created by putting \bug commands in the documentation.
599 635
 # The default value is: YES.
600 636
 
601 637
 GENERATE_BUGLIST       = YES
602 638
 
603
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
639
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
604 640
 # the deprecated list. This list is created by putting \deprecated commands in
605 641
 # the documentation.
606 642
 # The default value is: YES.
@@ -625,8 +661,8 @@ ENABLED_SECTIONS       =
625 661
 MAX_INITIALIZER_LINES  = 30
626 662
 
627 663
 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
628
-# the bottom of the documentation of classes and structs. If set to YES the list
629
-# will mention the files that were used to generate the documentation.
664
+# the bottom of the documentation of classes and structs. If set to YES, the
665
+# list will mention the files that were used to generate the documentation.
630 666
 # The default value is: YES.
631 667
 
632 668
 SHOW_USED_FILES        = YES
@@ -674,8 +710,7 @@ LAYOUT_FILE            =
674 710
 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
675 711
 # For LaTeX the style of the bibliography can be controlled using
676 712
 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
677
-# search path. Do not use file names with spaces, bibtex cannot handle them. See
678
-# also \cite for info how to create references.
713
+# search path. See also \cite for info how to create references.
679 714
 
680 715
 CITE_BIB_FILES         =
681 716
 
@@ -691,7 +726,7 @@ CITE_BIB_FILES         =
691 726
 QUIET                  = NO
692 727
 
693 728
 # The WARNINGS tag can be used to turn on/off the warning messages that are
694
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
729
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
695 730
 # this implies that the warnings are on.
696 731
 #
697 732
 # Tip: Turn warnings on while writing the documentation.
@@ -699,7 +734,7 @@ QUIET                  = NO
699 734
 
700 735
 WARNINGS               = YES
701 736
 
702
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
737
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
703 738
 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
704 739
 # will automatically be disabled.
705 740
 # The default value is: YES.
@@ -716,12 +751,18 @@ WARN_IF_DOC_ERROR      = YES
716 751
 
717 752
 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
718 753
 # are documented, but have no documentation for their parameters or return
719
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
720
-# documentation, but not about the absence of documentation.
754
+# value. If set to NO, doxygen will only warn about wrong or incomplete
755
+# parameter documentation, but not about the absence of documentation.
721 756
 # The default value is: NO.
722 757
 
723 758
 WARN_NO_PARAMDOC       = NO
724 759
 
760
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
761
+# a warning is encountered.
762
+# The default value is: NO.
763
+
764
+WARN_AS_ERROR          = NO
765
+
725 766
 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
726 767
 # can produce. The string should contain the $file, $line, and $text tags, which
727 768
 # will be replaced by the file and line number from which the warning originated
@@ -745,11 +786,12 @@ WARN_LOGFILE           = doxygen.errors
745 786
 # The INPUT tag is used to specify the files and/or directories that contain
746 787
 # documented source files. You may enter file names like myfile.cpp or
747 788
 # directories like /usr/src/myproject. Separate the files or directories with
748
-# spaces.
789
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
749 790
 # Note: If this tag is empty the current directory is searched.
750 791
 
751 792
 INPUT                  = @top_srcdir@/src
752 793
 INPUT += @top_srcdir@/test
794
+INPUT += @top_srcdir@/@README_FILE@
753 795
 
754 796
 # This tag can be used to specify the character encoding of the source files
755 797
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -762,14 +804,19 @@ INPUT_ENCODING         = UTF-8
762 804
 
763 805
 # If the value of the INPUT tag contains directories, you can use the
764 806
 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
765
-# *.h) to filter out the source-files in the directories. If left blank the
766
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
767
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
768
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
769
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
770
-# *.qsf, *.as and *.js.
807
+# *.h) to filter out the source-files in the directories.
808
+#
809
+# Note that for custom extensions or not directly supported extensions you also
810
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
811
+# read by doxygen.
812
+#
813
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
814
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
815
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
816
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
817
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
771 818
 
772
-FILE_PATTERNS          = *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt
819
+FILE_PATTERNS          = *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt *.sql
773 820
 
774 821
 # The RECURSIVE tag can be used to specify whether or not subdirectories should
775 822
 # be searched for input files as well.
@@ -800,7 +847,7 @@ EXCLUDE_SYMLINKS       = NO
800 847
 # Note that the wildcards are matched against the file with absolute path, so to
801 848
 # exclude all test directories for example use the pattern */test/*
802 849
 
803
-EXCLUDE_PATTERNS       = moc_* uic_* qrc_*
850
+EXCLUDE_PATTERNS       = moc_* uic_* qrc_* version.[ch]xx
804 851
 
805 852
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
806 853
 # (namespaces, classes, functions, etc.) that should be excluded from the
@@ -817,14 +864,14 @@ EXCLUDE_SYMBOLS        =
817 864
 # that contain example code fragments that are included (see the \include
818 865
 # command).
819 866
 
820
-EXAMPLE_PATH           = @top_srcdir@/examples
867
+EXAMPLE_PATH           = @top_srcdir@
821 868
 
822 869
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
823 870
 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
824 871
 # *.h) to filter out the source-files in the directories. If left blank all
825 872
 # files are included.
826 873
 
827
-EXAMPLE_PATTERNS       =
874
+EXAMPLE_PATTERNS       = *
828 875
 
829 876
 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
830 877
 # searched for input files to be used with the \include or \dontinclude commands
@@ -853,6 +900,10 @@ IMAGE_PATH             =
853 900
 # Note that the filter must not add or remove lines; it is applied before the
854 901
 # code is scanned, but not when the output code is generated. If lines are added
855 902
 # or removed, the anchors will not be placed correctly.
903
+#
904
+# Note that for custom extensions or not directly supported extensions you also
905
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
906
+# properly processed by doxygen.
856 907
 
857 908
 INPUT_FILTER           =
858 909
 
@@ -862,11 +913,15 @@ INPUT_FILTER           =
862 913
 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
863 914
 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
864 915
 # patterns match the file name, INPUT_FILTER is applied.
916
+#
917
+# Note that for custom extensions or not directly supported extensions you also
918
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
919
+# properly processed by doxygen.
865 920
 
866
-FILTER_PATTERNS        = *.wt=doxygen-webtester.sed
921
+FILTER_PATTERNS        = *.wt=doxygen-webtester.sed *.sql=@top_srcdir@/sql-to-dot.sed
867 922
 
868 923
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
869
-# INPUT_FILTER ) will also be used to filter the input files that are used for
924
+# INPUT_FILTER) will also be used to filter the input files that are used for
870 925
 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
871 926
 # The default value is: NO.
872 927
 
@@ -885,7 +940,7 @@ FILTER_SOURCE_PATTERNS =
885 940
 # (index.html). This can be useful if you have a project on for instance GitHub
886 941
 # and want to reuse the introduction page also for the doxygen output.
887 942
 
888
-USE_MDFILE_AS_MAINPAGE =
943
+USE_MDFILE_AS_MAINPAGE = @top_srcdir@/@README_FILE@
889 944
 
890 945
 #---------------------------------------------------------------------------
891 946
 # Configuration options related to source browsing
@@ -926,7 +981,7 @@ REFERENCED_BY_RELATION = NO
926 981
 REFERENCES_RELATION    = NO
927 982
 
928 983
 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
929
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
984
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
930 985
 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
931 986
 # link to the documentation.
932 987
 # The default value is: YES.
@@ -973,6 +1028,25 @@ USE_HTAGS              = NO
973 1028
 
974 1029
 VERBATIM_HEADERS       = YES
975 1030
 
1031
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
1032
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
1033
+# cost of reduced performance. This can be particularly helpful with template
1034
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
1035
+# information.
1036
+# Note: The availability of this option depends on whether or not doxygen was
1037
+# generated with the -Duse-libclang=ON option for CMake.
1038
+# The default value is: NO.
1039
+
1040
+CLANG_ASSISTED_PARSING = NO
1041
+
1042
+# If clang assisted parsing is enabled you can provide the compiler with command
1043
+# line options that you would normally use when invoking the compiler. Note that
1044
+# the include paths will already be set by doxygen for the files and directories
1045
+# specified with INPUT and INCLUDE_PATH.
1046
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1047
+
1048
+CLANG_OPTIONS          =
1049
+
976 1050
 #---------------------------------------------------------------------------
977 1051
 # Configuration options related to the alphabetical class index
978 1052
 #---------------------------------------------------------------------------
@@ -1003,7 +1077,7 @@ IGNORE_PREFIX          =
1003 1077
 # Configuration options related to the HTML output
1004 1078
 #---------------------------------------------------------------------------
1005 1079
 
1006
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
1080
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1007 1081
 # The default value is: YES.
1008 1082
 
1009 1083
 GENERATE_HTML          = YES
@@ -1041,7 +1115,7 @@ HTML_FILE_EXTENSION    = .html
1041 1115
 # of the possible markers and block names see the documentation.
1042 1116
 # This tag requires that the tag GENERATE_HTML is set to YES.
1043 1117
 
1044
-HTML_HEADER            =
1118
+HTML_HEADER            = header.html
1045 1119
 
1046 1120
 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1047 1121
 # generated HTML page. If the tag is left blank doxygen will generate a standard
@@ -1051,7 +1125,7 @@ HTML_HEADER            =
1051 1125
 # that doxygen normally uses.
1052 1126
 # This tag requires that the tag GENERATE_HTML is set to YES.
1053 1127
 
1054
-HTML_FOOTER            =
1128
+HTML_FOOTER            = footer.html
1055 1129
 
1056 1130
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1057 1131
 # sheet that is used by each HTML page. It can be used to fine-tune the look of
@@ -1065,16 +1139,18 @@ HTML_FOOTER            =
1065 1139
 
1066 1140
 HTML_STYLESHEET        =
1067 1141
 
1068
-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
1069
-# defined cascading style sheet that is included after the standard style sheets
1142
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1143
+# cascading style sheets that are included after the standard style sheets
1070 1144
 # created by doxygen. Using this option one can overrule certain style aspects.
1071 1145
 # This is preferred over using HTML_STYLESHEET since it does not replace the
1072
-# standard style sheet and is therefor more robust against future updates.
1073
-# Doxygen will copy the style sheet file to the output directory. For an example
1074
-# see the documentation.
1146
+# standard style sheet and is therefore more robust against future updates.
1147
+# Doxygen will copy the style sheet files to the output directory.
1148
+# Note: The order of the extra style sheet files is of importance (e.g. the last
1149
+# style sheet in the list overrules the setting of the previous ones in the
1150
+# list). For an example see the documentation.
1075 1151
 # This tag requires that the tag GENERATE_HTML is set to YES.
1076 1152
 
1077
-HTML_EXTRA_STYLESHEET  =
1153
+HTML_EXTRA_STYLESHEET  = style.css
1078 1154
 
1079 1155
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1080 1156
 # other source files which should be copied to the HTML output directory. Note
@@ -1087,7 +1163,7 @@ HTML_EXTRA_STYLESHEET  =
1087 1163
 HTML_EXTRA_FILES       =
1088 1164
 
1089 1165
 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1090
-# will adjust the colors in the stylesheet and background images according to
1166
+# will adjust the colors in the style sheet and background images according to
1091 1167
 # this color. Hue is specified as an angle on a colorwheel, see
1092 1168
 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
1093 1169
 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
@@ -1118,11 +1194,12 @@ HTML_COLORSTYLE_GAMMA  = 80
1118 1194
 
1119 1195
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1120 1196
 # page will contain the date and time when the page was generated. Setting this
1121
-# to NO can help when comparing the output of multiple runs.
1122
-# The default value is: YES.
1197
+# to YES can help to show when doxygen was last run and thus if the
1198
+# documentation is up to date.
1199
+# The default value is: NO.
1123 1200
 # This tag requires that the tag GENERATE_HTML is set to YES.
1124 1201
 
1125
-HTML_TIMESTAMP         = YES
1202
+HTML_TIMESTAMP         = NO
1126 1203
 
1127 1204
 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1128 1205
 # documentation will contain sections that can be hidden and shown after the
@@ -1130,7 +1207,7 @@ HTML_TIMESTAMP         = YES
1130 1207
 # The default value is: NO.
1131 1208
 # This tag requires that the tag GENERATE_HTML is set to YES.
1132 1209
 
1133
-HTML_DYNAMIC_SECTIONS  = NO
1210
+HTML_DYNAMIC_SECTIONS  = YES
1134 1211
 
1135 1212
 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1136 1213
 # shown in the various tree structured indices initially; the user can expand
@@ -1215,28 +1292,29 @@ GENERATE_HTMLHELP      = NO
1215 1292
 CHM_FILE               =
1216 1293
 
1217 1294
 # The HHC_LOCATION tag can be used to specify the location (absolute path
1218
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
1295
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
1219 1296
 # doxygen will try to run the HTML help compiler on the generated index.hhp.
1220 1297
 # The file has to be specified with full path.
1221 1298
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1222 1299
 
1223 1300
 HHC_LOCATION           =
1224 1301
 
1225
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
1226
-# YES) or that it should be included in the master .chm file ( NO).
1302
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
1303
+# (YES) or that it should be included in the master .chm file (NO).
1227 1304
 # The default value is: NO.
1228 1305
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1229 1306
 
1230 1307
 GENERATE_CHI           = NO
1231 1308
 
1232
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
1309
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1233 1310
 # and project file content.
1234 1311
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1235 1312
 
1236 1313
 CHM_INDEX_ENCODING     =
1237 1314
 
1238
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
1239
-# YES) or a normal table of contents ( NO) in the .chm file.
1315
+# The BINARY_TOC flag controls whether a binary table of contents is generated
1316
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1317
+# enables the Previous and Next buttons.
1240 1318
 # The default value is: NO.
1241 1319
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1242 1320
 
@@ -1349,7 +1427,7 @@ DISABLE_INDEX          = NO
1349 1427
 # index structure (just like the one that is generated for HTML Help). For this
1350 1428
 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
1351 1429
 # (i.e. any modern browser). Windows users are probably better off using the
1352
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
1430
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
1353 1431
 # further fine-tune the look of the index. As an example, the default style
1354 1432
 # sheet generated by doxygen has an example that shows how to put an image at
1355 1433
 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
@@ -1358,7 +1436,7 @@ DISABLE_INDEX          = NO
1358 1436
 # The default value is: NO.
1359 1437
 # This tag requires that the tag GENERATE_HTML is set to YES.
1360 1438
 
1361
-GENERATE_TREEVIEW      = NO
1439
+GENERATE_TREEVIEW      = YES
1362 1440
 
1363 1441
 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1364 1442
 # doxygen will group on one line in the generated HTML documentation.
@@ -1377,7 +1455,7 @@ ENUM_VALUES_PER_LINE   = 4
1377 1455
 
1378 1456
 TREEVIEW_WIDTH         = 250
1379 1457
 
1380
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
1458
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
1381 1459
 # external symbols imported via tag files in a separate window.
1382 1460
 # The default value is: NO.
1383 1461
 # This tag requires that the tag GENERATE_HTML is set to YES.
@@ -1406,7 +1484,7 @@ FORMULA_TRANSPARENT    = YES
1406 1484
 
1407 1485
 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1408 1486
 # http://www.mathjax.org) which uses client side Javascript for the rendering
1409
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
1487
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1410 1488
 # installed or if you want to formulas look prettier in the HTML output. When
1411 1489
 # enabled you may also need to install MathJax separately and configure the path
1412 1490
 # to it using the MATHJAX_RELPATH option.
@@ -1476,11 +1554,11 @@ SEARCHENGINE           = NO
1476 1554
 
1477 1555
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1478 1556
 # implemented using a web server instead of a web client using Javascript. There
1479
-# are two flavours of web server based searching depending on the
1480
-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
1481
-# searching and an index file used by the script. When EXTERNAL_SEARCH is
1482
-# enabled the indexing and searching needs to be provided by external tools. See
1483
-# the section "External Indexing and Searching" for details.
1557
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1558
+# setting. When disabled, doxygen will generate a PHP script for searching and
1559
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
1560
+# and searching needs to be provided by external tools. See the section
1561
+# "External Indexing and Searching" for details.
1484 1562
 # The default value is: NO.
1485 1563
 # This tag requires that the tag SEARCHENGINE is set to YES.
1486 1564
 
@@ -1492,7 +1570,7 @@ SERVER_BASED_SEARCH    = NO
1492 1570
 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
1493 1571
 # search results.
1494 1572
 #
1495
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
1573
+# Doxygen ships with an example indexer (doxyindexer) and search engine
1496 1574
 # (doxysearch.cgi) which are based on the open source search engine library
1497 1575
 # Xapian (see: http://xapian.org/).
1498 1576
 #
@@ -1505,7 +1583,7 @@ EXTERNAL_SEARCH        = NO
1505 1583
 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
1506 1584
 # which will return the search results when EXTERNAL_SEARCH is enabled.
1507 1585
 #
1508
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
1586
+# Doxygen ships with an example indexer (doxyindexer) and search engine
1509 1587
 # (doxysearch.cgi) which are based on the open source search engine library
1510 1588
 # Xapian (see: http://xapian.org/). See the section "External Indexing and
1511 1589
 # Searching" for details.
@@ -1543,7 +1621,7 @@ EXTRA_SEARCH_MAPPINGS  =
1543 1621
 # Configuration options related to the LaTeX output
1544 1622
 #---------------------------------------------------------------------------
1545 1623
 
1546
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
1624
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
1547 1625
 # The default value is: YES.
1548 1626
 
1549 1627
 GENERATE_LATEX         = NO
@@ -1574,7 +1652,7 @@ LATEX_CMD_NAME         = latex
1574 1652
 
1575 1653
 MAKEINDEX_CMD_NAME     = makeindex
1576 1654
 
1577
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
1655
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
1578 1656
 # documents. This may be useful for small projects and may help to save some
1579 1657
 # trees in general.
1580 1658
 # The default value is: NO.
@@ -1592,9 +1670,12 @@ COMPACT_LATEX          = NO
1592 1670
 PAPER_TYPE             = a4
1593 1671
 
1594 1672
 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
1595
-# that should be included in the LaTeX output. To get the times font for
1596
-# instance you can specify
1597
-# EXTRA_PACKAGES=times
1673
+# that should be included in the LaTeX output. The package can be specified just
1674
+# by its name or with the correct syntax as to be used with the LaTeX
1675
+# \usepackage command. To get the times font for instance you can specify :
1676
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
1677
+# To use the option intlimits with the amsmath package you can specify:
1678
+# EXTRA_PACKAGES=[intlimits]{amsmath}
1598 1679
 # If left blank no extra packages will be included.
1599 1680
 # This tag requires that the tag GENERATE_LATEX is set to YES.
1600 1681
 
@@ -1608,23 +1689,36 @@ EXTRA_PACKAGES         =
1608 1689
 #
1609 1690
 # Note: Only use a user-defined header if you know what you are doing! The
1610 1691
 # following commands have a special meaning inside the header: $title,
1611
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
1612
-# replace them by respectively the title of the page, the current date and time,
1613
-# only the current date, the version number of doxygen, the project name (see
1614
-# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
1692
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
1693
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
1694
+# string, for the replacement values of the other commands the user is referred
1695
+# to HTML_HEADER.
1615 1696
 # This tag requires that the tag GENERATE_LATEX is set to YES.
1616 1697
 
1617 1698
 LATEX_HEADER           =
1618 1699
 
1619 1700
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1620 1701
 # generated LaTeX document. The footer should contain everything after the last
1621
-# chapter. If it is left blank doxygen will generate a standard footer.
1702
+# chapter. If it is left blank doxygen will generate a standard footer. See
1703
+# LATEX_HEADER for more information on how to generate a default footer and what
1704
+# special commands can be used inside the footer.
1622 1705
 #
1623 1706
 # Note: Only use a user-defined footer if you know what you are doing!
1624 1707
 # This tag requires that the tag GENERATE_LATEX is set to YES.
1625 1708
 
1626 1709
 LATEX_FOOTER           =
1627 1710
 
1711
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1712
+# LaTeX style sheets that are included after the standard style sheets created
1713
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
1714
+# will copy the style sheet files to the output directory.
1715
+# Note: The order of the extra style sheet files is of importance (e.g. the last
1716
+# style sheet in the list overrules the setting of the previous ones in the
1717
+# list).
1718
+# This tag requires that the tag GENERATE_LATEX is set to YES.
1719
+
1720
+LATEX_EXTRA_STYLESHEET =
1721
+
1628 1722
 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1629 1723
 # other source files which should be copied to the LATEX_OUTPUT output
1630 1724
 # directory. Note that the files will be copied as-is; there are no commands or
@@ -1642,8 +1736,8 @@ LATEX_EXTRA_FILES      =
1642 1736
 
1643 1737
 PDF_HYPERLINKS         = YES
1644 1738
 
1645
-# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1646
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
1739
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1740
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
1647 1741
 # higher quality PDF documentation.
1648 1742
 # The default value is: YES.
1649 1743
 # This tag requires that the tag GENERATE_LATEX is set to YES.
@@ -1684,11 +1778,19 @@ LATEX_SOURCE_CODE      = NO
1684 1778
 
1685 1779
 LATEX_BIB_STYLE        = plain
1686 1780
 
1781
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
1782
+# page will contain the date and time when the page was generated. Setting this
1783
+# to NO can help when comparing the output of multiple runs.
1784
+# The default value is: NO.
1785
+# This tag requires that the tag GENERATE_LATEX is set to YES.
1786
+
1787
+LATEX_TIMESTAMP        = NO
1788
+
1687 1789
 #---------------------------------------------------------------------------
1688 1790
 # Configuration options related to the RTF output
1689 1791
 #---------------------------------------------------------------------------
1690 1792
 
1691
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
1793
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
1692 1794
 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
1693 1795
 # readers/editors.
1694 1796
 # The default value is: NO.
@@ -1703,7 +1805,7 @@ GENERATE_RTF           = NO
1703 1805
 
1704 1806
 RTF_OUTPUT             = rtf
1705 1807
 
1706
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
1808
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
1707 1809
 # documents. This may be useful for small projects and may help to save some
1708 1810
 # trees in general.
1709 1811
 # The default value is: NO.
@@ -1740,11 +1842,21 @@ RTF_STYLESHEET_FILE    =
1740 1842
 
1741 1843
 RTF_EXTENSIONS_FILE    =
1742 1844
 
1845
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
1846
+# with syntax highlighting in the RTF output.
1847
+#
1848
+# Note that which sources are shown also depends on other settings such as
1849
+# SOURCE_BROWSER.
1850
+# The default value is: NO.
1851
+# This tag requires that the tag GENERATE_RTF is set to YES.
1852
+
1853
+RTF_SOURCE_CODE        = NO
1854
+
1743 1855
 #---------------------------------------------------------------------------
1744 1856
 # Configuration options related to the man page output
1745 1857
 #---------------------------------------------------------------------------
1746 1858
 
1747
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
1859
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
1748 1860
 # classes and files.
1749 1861
 # The default value is: NO.
1750 1862
 
@@ -1768,6 +1880,13 @@ MAN_OUTPUT             = man
1768 1880
 
1769 1881
 MAN_EXTENSION          = .3
1770 1882
 
1883
+# The MAN_SUBDIR tag determines the name of the directory created within
1884
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
1885
+# MAN_EXTENSION with the initial . removed.
1886
+# This tag requires that the tag GENERATE_MAN is set to YES.
1887
+
1888
+MAN_SUBDIR             =
1889
+
1771 1890
 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1772 1891
 # will generate one additional man file for each entity documented in the real
1773 1892
 # man page(s). These additional files only source the real man page, but without
@@ -1781,7 +1900,7 @@ MAN_LINKS              = NO
1781 1900
 # Configuration options related to the XML output
1782 1901
 #---------------------------------------------------------------------------
1783 1902
 
1784
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
1903
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
1785 1904
 # captures the structure of the code including all documentation.
1786 1905
 # The default value is: NO.
1787 1906
 
@@ -1795,19 +1914,7 @@ GENERATE_XML           = NO
1795 1914
 
1796 1915
 XML_OUTPUT             = xml
1797 1916
 
1798
-# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
1799
-# validating XML parser to check the syntax of the XML files.
1800
-# This tag requires that the tag GENERATE_XML is set to YES.
1801
-
1802
-XML_SCHEMA             =
1803
-
1804
-# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
1805
-# validating XML parser to check the syntax of the XML files.
1806
-# This tag requires that the tag GENERATE_XML is set to YES.
1807
-
1808
-XML_DTD                =
1809
-
1810
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
1917
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
1811 1918
 # listings (including syntax highlighting and cross-referencing information) to
1812 1919
 # the XML output. Note that enabling this will significantly increase the size
1813 1920
 # of the XML output.
@@ -1820,7 +1927,7 @@ XML_PROGRAMLISTING     = YES
1820 1927
 # Configuration options related to the DOCBOOK output
1821 1928
 #---------------------------------------------------------------------------
1822 1929
 
1823
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
1930
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
1824 1931
 # that can be used to generate PDF.
1825 1932
 # The default value is: NO.
1826 1933
 
@@ -1834,14 +1941,23 @@ GENERATE_DOCBOOK       = NO
1834 1941
 
1835 1942
 DOCBOOK_OUTPUT         = docbook
1836 1943
 
1944
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
1945
+# program listings (including syntax highlighting and cross-referencing
1946
+# information) to the DOCBOOK output. Note that enabling this will significantly
1947
+# increase the size of the DOCBOOK output.
1948
+# The default value is: NO.
1949
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
1950
+
1951
+DOCBOOK_PROGRAMLISTING = NO
1952
+
1837 1953
 #---------------------------------------------------------------------------
1838 1954
 # Configuration options for the AutoGen Definitions output
1839 1955
 #---------------------------------------------------------------------------
1840 1956
 
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.
1957
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
1958
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
1959
+# structure of the code including all documentation. Note that this feature is
1960
+# still experimental and incomplete at the moment.
1845 1961
 # The default value is: NO.
1846 1962
 
1847 1963
 GENERATE_AUTOGEN_DEF   = NO
@@ -1850,7 +1966,7 @@ GENERATE_AUTOGEN_DEF   = NO
1850 1966
 # Configuration options related to the Perl module output
1851 1967
 #---------------------------------------------------------------------------
1852 1968
 
1853
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
1969
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
1854 1970
 # file that captures the structure of the code including all documentation.
1855 1971
 #
1856 1972
 # Note that this feature is still experimental and incomplete at the moment.
@@ -1858,7 +1974,7 @@ GENERATE_AUTOGEN_DEF   = NO
1858 1974
 
1859 1975
 GENERATE_PERLMOD       = NO
1860 1976
 
1861
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
1977
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
1862 1978
 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
1863 1979
 # output from the Perl module output.
1864 1980
 # The default value is: NO.
@@ -1866,9 +1982,9 @@ GENERATE_PERLMOD       = NO
1866 1982
 
1867 1983
 PERLMOD_LATEX          = NO
1868 1984
 
1869
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
1985
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
1870 1986
 # 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
1987
+# understand what is going on. On the other hand, if this tag is set to NO, the
1872 1988
 # size of the Perl module output will be much smaller and Perl will parse it
1873 1989
 # just the same.
1874 1990
 # The default value is: YES.
@@ -1888,14 +2004,14 @@ PERLMOD_MAKEVAR_PREFIX =
1888 2004
 # Configuration options related to the preprocessor
1889 2005
 #---------------------------------------------------------------------------
1890 2006
 
1891
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
2007
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
1892 2008
 # C-preprocessor directives found in the sources and include files.
1893 2009
 # The default value is: YES.
1894 2010
 
1895 2011
 ENABLE_PREPROCESSING   = YES
1896 2012
 
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
2013
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
2014
+# in the source code. If set to NO, only conditional compilation will be
1899 2015
 # performed. Macro expansion can be done in a controlled way by setting
1900 2016
 # EXPAND_ONLY_PREDEF to YES.
1901 2017
 # The default value is: NO.
@@ -1911,7 +2027,7 @@ MACRO_EXPANSION        = YES