Release 1.6 upstream v1.6
authorJose Luis Tallon <jltallon@adv-solutions.net>
Thu, 31 Dec 2015 20:18:44 +0000 (21:18 +0100)
committerJose Luis Tallon <jltallon@adv-solutions.net>
Thu, 31 Dec 2015 20:46:42 +0000 (21:46 +0100)
34 files changed:
ChangeLog
configure.ac
debian/changelog
debian/compat
debian/control
debian/copyright
debian/dirs [new file with mode: 0644]
debian/libconfig++-dev.examples [new file with mode: 0644]
debian/libconfig++-dev.install [new file with mode: 0644]
debian/libconfig++9v5.install [new file with mode: 0644]
debian/libconfig-dev.examples [new file with mode: 0644]
debian/libconfig-dev.info [new file with mode: 0644]
debian/libconfig-dev.install [new file with mode: 0644]
debian/libconfig-doc.doc-base [new file with mode: 0644]
debian/libconfig-doc.docs [new file with mode: 0644]
debian/libconfig9-dev.install
debian/libconfig9.install
debian/rules
debian/source/format [new file with mode: 0644]
doc/libconfig.info [deleted file]
doc/libconfig.texi
lib/Makefile.am
lib/grammar.y
lib/libconfig.c
lib/libconfig.h
lib/libconfig.h++
lib/libconfig.hh
lib/libconfigcpp.c++
lib/libconfigcpp.cc
lib/parsectx.h
lib/scanctx.h
lib/scanner.l
lib/wincompat.h
tests/tests.c

index 28edb75..180703a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2015-12-31  Jose Luis Tallon <jltallon@adv-solutions.net>
+
+        * Added include_dir feature (support for Debian-style conf.d/
+          includes) (pull request #36)
+
+        * Added octal_ints feature (support for integer expressed in octal,
+          useful for permissions and masks in UNIX-like systems (pull req #42)
+
+       * Fixed "Removing a setting removes all siblings" (issue #41)
+         Props random85
+
+       * Allow specifying the number of decimals wanted when outputting
+         Based upon a suggestion by zhaopingsun (issue #31)
+
+       * Make libconfig usable from CMake (pull request/issue #28)
+         Props thfi
+
+        * Documentation fixes
+         - Copyright and examples
+         - Included TeX patch from Debian (fixes FTBS with TeXlive)
+
+        * Resync Debian packaging
+         includes updated packages for GCC5 transition
+
+        ----- version 1.6 ------
+
 2015-10-14  Thomas Fischer <fischer@unix-ag.uni-kl.de>
 
        * configure, configure.ac, debian/libconfig++9-dev.install,
index 7867b7d..96c01de 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(libconfig, 1.5, hyperrealm@gmail.com, libconfig,
+AC_INIT(libconfig, 1.6, hyperrealm@gmail.com, libconfig,
        [http://www.hyperrealm.com/main.php?s=libconfig])
 AC_CONFIG_AUX_DIR([aux-build])
 AC_CONFIG_MACRO_DIR([m4])
index 7e9e00a..4ed2c84 100644 (file)
-libconfig (1.4.8) unstable; urgency=low
+libconfig (1.6-1) unstable; urgency=low
+
+  * New upstream version
+
+  * Resync with Debian packaging. Thanks many, Jonathan & Matthias!
+
+ -- Jose Luis Tallon <jltallon@adv-solutions.net>  Thu, 31 Dec 2015 17:01:20 +0100
+
+libconfig (1.5-0.2) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 04 Aug 2015 17:20:08 +0200
+
+libconfig (1.5-0.1) experimental; urgency=medium
+
+  * Non maintainer upload.
+  * New upstream version.
+  * Rename libconfig++9v5 to libconfig++9v5, libstdc++6 ABI symbol changes.
+    Addresses: #791108.
+  * Add Conflicts/Replaces to the old library.
+  * Don't ship libconfig9.info in libconfig9, but only in libconfig-dev.
+  * Drop versioned dependency on pkg-config. Closes: #734482.
+  * Enable parallel builds. Closes: #759581.
+  * Only build the libconfig documentation for binary indep builds.
+    Closes: #759582.
+  * Add build dependency on texlive-fonts-recommended.
+  * Bump standards version to 3.9.6.
+
+ -- Matthias Klose <doko@ubuntu.com>  Wed, 29 Jul 2015 12:46:50 +0200
+
+libconfig (1.4.9-2) unstable; urgency=medium
+
+  * Update short package description (Closes: #710783)
+  * Build using dh-autoreconf rather than autotools-dev; thanks to Matthias
+    Klose for this fix
+  * Add tex-workaround.patch from Matthias Klose to fix texinfo/tex FTBFS
+  * With sponsor's blessing, set myself as maintainer
+  * Bump Standards-Version to 3.9.5
+    - No changes required
+
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Sat, 28 Dec 2013 17:41:20 +0000
+
+libconfig (1.4.9-1) unstable; urgency=low
 
   * New upstream release
-  * Update debian/control to reflect current Debian packages
-  * Add texlive-latex-base to Build-Depends
+  * Update S-V to 3.9.4
+    - No changes necessary
+  * Ensure that libconfig++-dbg depends on libconfig9 (= ${binary:Version})
+    in addition to libconfig++9 (= ${binary:Version})
+    - Fixes dbg-package-missing-depends lintian warning
+
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Sat, 12 Oct 2013 16:41:14 +0100
+
+libconfig (1.4.8-5) unstable; urgency=low
+
+  * Switch to dh_9 style rules file
+    - Hardened buildflags now provided automatically
+    - Fixes E-binary-arch-produces-all buildd warning
+
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Tue, 26 Jun 2012 21:41:22 +0100
+
+libconfig (1.4.8-4) unstable; urgency=low
+
+  * Add C++ hardened buildflags
+    - Thanks to Simon Ruderich for the patch (closes: #662225)
+  * Fix libconfig(++)8-dev transition packages
+    - Set section as oldlibs
+    - Set priority as extra
+    - Remove package descriptions
+  * Add Multiarch support
+
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Fri, 06 Apr 2012 14:28:39 +0100
 
- -- Jonathan McCrohan <jmccrohan@gmail.com>  Sun, 06 Nov 2011 01:16:39 +0000
+libconfig (1.4.8-3) unstable; urgency=low
 
-libconfig (1.4) unstable; urgency=low
+  * Add Replaces+Breaks: libconfig(++)8-dev to libconfig(++)-dev
+     - Thanks to Andreas Beckmann for reporting (closes: #662643)
+  * Enable hardened buildflags
+     - Thanks to Simon Ruderich for the patch (closes: #662225)
+  * Fix incorrect section and arch for transitional packages.
 
-  * new upstream release
-  * libconfig++9-dev no longer depends on libconfig9-dev
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Mon, 05 Mar 2012 22:01:29 +0000
 
- -- Mark Lindner <hyperrealm@gmail.com>  Fri, 21 Aug 2009 00:00:00 +0800
+libconfig (1.4.8-2) unstable; urgency=low
 
-libconfig (1.3.2) unstable; urgency=low
+  * Upload to unstable
+  * Update to S-V 3.9.3
+  * debian/rules now uses dpkg-buildflags
+  * Provide full transitional packages to help -dev package rename
+  * Multiple lintian fixes
+    - out-of-date-standards-version
+    - copyright-with-old-dh-make-debian-copyright
+    - extended-description-is-probably-too-short
+    - unneeded-build-dep-on-quilt
 
-  * new upstream release
-  * use official Debian files as basis
-  * libconfig++8-dev depends on libconfig8-dev because libconfig.h++
-    includes libconfig.h which is in libconfig8-dev
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Thu, 01 Mar 2012 02:11:47 +0000
+
+libconfig (1.4.8-1~exp1) experimental; urgency=low
+
+  * New upstream release (closes: #583528)
+    - soname bump to 9
+  * Update to S-V 3.9.2
+  * Update to Debhelper v7
+  * Refresh Build-Depends packages
+  * Add debug packages
+  * Remove soname from -dev package names
+    - Build as virtual packages for reverse dependency purposes.
+  * Fix examples (closes: #632081)
+
+ -- Jonathan McCrohan <jmccrohan@gmail.com>  Sat, 11 Feb 2012 18:13:26 +0000
+
+libconfig (1.3.2-2) unstable; urgency=low
+
+  * Removed "conflicts" with older sonames (Closes: #536635)
+  * Added missing compile-time libconfig++8-dev dependencies
+    (libconfig8-dev) (Closes: #537311)
+
+  * Removed libtool's ".la" files (clients should use pkg-config)
+
+  * Updated to S-V 3.8.3 with no changes
+
+  * With many thanks to Christian Hammers, who kindly checked the package.
+
+ -- Jose Luis Tallon <jltallon@adv-solutions.net>  Sun, 13 Sep 2009 04:25:14 +0200
+
+libconfig (1.3.2-1) unstable; urgency=low
+
+  * New upstream release (Closes: #521725)
+    - soname bump to 8
+    - Updated to S-V 3.8.1 with no changes
+
+ -- Jose Luis Tallon <jltallon@adv-solutions.net>  Tue, 07 Apr 2009 21:13:16 +0200
+
+libconfig (1.3.2-0) unstable; urgency=low
+
+   * new upstream release
+   * use official Debian files as basis
+   * libconfig++8-dev depends on libconfig8-dev because libconfig.h++
+     includes libconfig.h which is in libconfig8-dev
 
  -- Klaus Schneider <kschn@users.sourceforge.net>  Wed, 18 Feb 2009 15:26:32 +0100
 
@@ -52,18 +172,6 @@ libconfig (0.9-1) unstable; urgency=low
 
  -- Jose Luis Tallon <jltallon@adv-solutions.net>  Tue, 10 Oct 2006 01:42:09 +0200
 
-libconfigduo (1.3.1) unstable; urgency=low
-
-  * Release 1.3.1
-
- -- Klaus Schneider <kschn@users.sourceforge.net>  Thu, 13 Nov 2008 17:05:12 +0100
-
-libconfigduo (1.3) unstable; urgency=low
-
-  * Release 1.3
-
- -- Klaus Schneider <kschn@users.sourceforge.net>  Fri, 4 Apr 2008 09:36:42 +0200
-
 libconfigduo (1.2.1-1) unstable; urgency=low
 
   * Release 1.2.1
index 7ed6ff8..ec63514 100644 (file)
@@ -1 +1 @@
-5
+9
index 5ac5e83..687ac60 100644 (file)
@@ -1,17 +1,19 @@
 Source: libconfig
 Priority: optional
-Maintainer: Klaus Schneider <kschn@users.sourceforge.net>
-Uploaders: Julien Danjou <acid@debian.org>
-Build-Depends: debhelper (>= 5), autotools-dev, texinfo, texlive-latex-base
-Standards-Version: 3.8.0
+Maintainer: Jonathan McCrohan <jmccrohan@gmail.com>
+Uploaders: Jose Luis Tallon <jltallon@adv-solutions.net>
+Build-Depends: debhelper (>= 9), dh-autoreconf, texinfo, g++ (>= 4:5)
+Build-Depends-Indep: texlive-latex-base, texlive-fonts-recommended
+Standards-Version: 3.9.6
 Homepage: http://www.hyperrealm.com/libconfig/
 Section: libs
 
 Package: libconfig9
-Section: libs
 Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: processing of structured configuration files
+Multi-Arch: same
+Description: parsing/manipulation of structured configuration files
  This library features a fully reentrant parser and includes bindings for
  both the C and C++ programming languages. It runs on modern POSIX-compliant
  systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on 
@@ -20,11 +22,14 @@ Description: processing of structured configuration files
  This library allows parsing, manipulating and writing structured configuration
  files.
 
-Package: libconfig++9
-Section: libs
+Package: libconfig++9v5
 Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: processing of structured configuration files (C++ binding)
+Conflicts: libconfig++9
+Replaces: libconfig++9
+Multi-Arch: same
+Description: parsing/manipulation of structured configuration files (C++ binding)
  This library features a fully reentrant parser and includes bindings for
  both the C and C++ programming languages. It runs on modern POSIX-compliant
  systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on 
@@ -35,13 +40,15 @@ Description: processing of structured configuration files (C++ binding)
  .
  This is the C++ binding.
 
-Package: libconfig9-dev
+Package: libconfig-dev
 Section: libdevel
 Architecture: any
-Provides: libconfig-dev
-Depends: libconfig9 (= ${binary:Version}), pkg-config (>= 0.20)
-Conflicts: libconfig8-dev
-Description: processing of structured config files (development)
+Replaces: libconfig8-dev (<< 1.4.8)
+Breaks: libconfig8-dev (<< 1.4.8)
+Depends: libconfig9 (= ${binary:Version}), pkg-config, ${misc:Depends}
+Recommends: libconfig-doc
+Multi-Arch: same
+Description: parsing/manipulation of structured config files (development)
  This library features a fully reentrant parser and includes bindings for
  both the C and C++ programming languages. It runs on modern POSIX-compliant
  systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on 
@@ -59,13 +66,24 @@ Description: processing of structured config files (development)
  This package contains the files needed in order to use libconfig
  in your own programs.
 
-Package: libconfig++9-dev
+Package: libconfig8-dev
+Depends: libconfig-dev, ${misc:Depends}
+Architecture: any
+Section: oldlibs
+Priority: extra
+Description: Transitional package for libconfig-dev
+ This is a transitional package for libconfig-dev, and can be safely removed
+ when no other package depends on it.
+
+Package: libconfig++-dev
 Section: libdevel
 Architecture: any
-Provides: libconfig++-dev
-Depends: libconfig++9 (= ${binary:Version}), libconfig9 (= ${binary:Version}), pkg-config (>= 0.20)
-Conflicts: libconfig++8-dev
-Description: processing of structured config files (C++ development)
+Replaces: libconfig++8-dev (<< 1.4.8)
+Breaks: libconfig++8-dev (<< 1.4.8)
+Depends: libconfig++9v5 (= ${binary:Version}), libconfig-dev,
+ pkg-config, ${misc:Depends}
+Multi-Arch: same
+Description: parsing/manipulation of structured config files (C++ development)
  This library features a fully reentrant parser and includes bindings for
  both the C and C++ programming languages. It runs on modern POSIX-compliant
  systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on 
@@ -83,16 +101,63 @@ Description: processing of structured config files (C++ development)
  This package contains the files needed in order to use libconfig
  in your own C++ programs.
 
-Package: libconfig9-dbg
+Package: libconfig++8-dev
+Depends: libconfig++-dev, ${misc:Depends}
+Architecture: any
+Section: oldlibs
+Priority: extra
+Description: Transitional package for libconfig++-dev
+ This is a transitional package for libconfig++-dev, and can be safely removed
+ when no other package depends on it.
+
+
+Package: libconfig-dbg
 Section: debug
+Priority: extra
 Architecture: any
-Depends: libconfig9 (= ${binary:Version})
-Description: debug symbols for libconfig9
- This package provides debugging information for libconfig library
+Depends: libconfig9 (= ${binary:Version}), ${misc:Depends}
+Multi-Arch: same
+Description: parsing/manipulation of structured config files (debug symbols)
+ This library features a fully reentrant parser and includes bindings for
+ both the C and C++ programming languages. It runs on modern POSIX-compliant
+ systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on
+ Microsoft Windows 2000/XP and later (Visual Studio or MinGW).
+ .
+ This library allows parsing, manipulating and writing structured configuration
+ files.
+ .
+ This package provides debugging information for the libconfig library.
 
-Package: libconfig++9-dbg
+Package: libconfig++-dbg
 Section: debug
+Priority: extra
 Architecture: any
-Depends: libconfig++9 (= ${binary:Version})
-Description: debug symbols for libconfig++9
- This package provides debugging information for C++ API of libconfig library
+Depends: libconfig9 (= ${binary:Version}), libconfig++9v5 (= ${binary:Version}), ${misc:Depends}
+Multi-Arch: same
+Description: parsing/manipulation of structured config files (C++ debug symbols)
+ This library features a fully reentrant parser and includes bindings for
+ both the C and C++ programming languages. It runs on modern POSIX-compliant
+ systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on
+ Microsoft Windows 2000/XP and later (Visual Studio or MinGW).
+ .
+ This library allows parsing, manipulating and writing structured configuration
+ files.
+ .
+ This package provides debugging information for the libconfig++ library.
+
+Package: libconfig-doc
+Section: doc
+Architecture: all
+Replaces: libconfig-dev (<= 1.4.8)
+Breaks: libconfig-dev (<= 1.4.8)
+Depends: ${misc:Depends}
+Description: parsing/manipulation of structured config files (Documentation)
+ This library features a fully reentrant parser and includes bindings for
+ both the C and C++ programming languages. It runs on modern POSIX-compliant
+ systems such as Linux, Solaris, and Mac OS X (Darwin), as well as on
+ Microsoft Windows 2000/XP and later (Visual Studio or MinGW).
+ .
+ This library allows parsing, manipulating and writing structured configuration
+ files.
+ .
+ This package provides documentation for the libconfig library.
index e6e57d0..94a3ec2 100644 (file)
@@ -8,11 +8,12 @@ Upstream Author: Mark A Lindner
        Daniel Marjamdki - Enhancements & bugfixes.
        Andrew Tytula - Windows Port.
        Glenn Herteg - Enhancements, bugfixes, documentation corrections.
+       Jose Luis Tallon - Enhancements, bugfixes
 
 
-Copyright:     Copyright (C) 2005-2009  Mark A Lindner
+Copyright:     Copyright (C) 2005-2015  Mark A Lindner
 
-License:       (LGPL-2.1)
+License:       LGPL-2.1
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public License
@@ -30,36 +31,7 @@ On Debian systems, the full text of GNU's Lesser General Public License can
 be found at /usr/share/common-licenses/LGPL-2.1
 
 
-The Debian packaging is (C) 2006-2008, Jose Luis Tallon <jltallon@adv-solutions.net>
-and is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
-This package was debianized by Klaus Schneider <kschn@users.sourceforge.net> on
-Mon, 25 Jun 2007 16:21:56 +0200.
-
-It was downloaded from http://www.hyperrealm.com/libconfig/libconfig.html
-
-Upstream Author: Mark A. Lindner
-
-Copyright: (c) 2005-2009 Mark A. Lindner
-
-License:
-
-    This package is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This package is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this package; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-On Debian systems, the complete text of the GNU Lesser General
-Public License can be found in `/usr/share/common-licenses/LGPL'.
-
-
-The Debian packaging is (C) 2007, Klaus Schneider <kschn@users.sourceforge.net> and
-is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
+The Debian packaging is
+copyright 2006-2009, Jose Luis Tallon <jltallon@adv-solutions.net>,
+copyright 2011-2015, Jonathan McCrohan <jmccrohan@gmail.com>
+and is licensed under the GPL version 2, see  `/usr/share/common-licenses/GPL-2'.
diff --git a/debian/dirs b/debian/dirs
new file mode 100644 (file)
index 0000000..6845771
--- /dev/null
@@ -0,0 +1 @@
+usr/lib
diff --git a/debian/libconfig++-dev.examples b/debian/libconfig++-dev.examples
new file mode 100644 (file)
index 0000000..8ee5b2c
--- /dev/null
@@ -0,0 +1,3 @@
+examples/c++/example.cfg
+examples/c++/invalid.cfg
+examples/c++/example*.cpp
diff --git a/debian/libconfig++-dev.install b/debian/libconfig++-dev.install
new file mode 100644 (file)
index 0000000..75c2d47
--- /dev/null
@@ -0,0 +1,4 @@
+debian/tmp/usr/include/libconfig.h++
+debian/tmp/usr/lib/*/libconfig++.a
+debian/tmp/usr/lib/*/libconfig++.so
+debian/tmp/usr/lib/*/pkgconfig/libconfig++.pc
diff --git a/debian/libconfig++9v5.install b/debian/libconfig++9v5.install
new file mode 100644 (file)
index 0000000..f63c7e9
--- /dev/null
@@ -0,0 +1 @@
+debian/tmp/usr/lib/*/libconfig++.so.9*
diff --git a/debian/libconfig-dev.examples b/debian/libconfig-dev.examples
new file mode 100644 (file)
index 0000000..6430e18
--- /dev/null
@@ -0,0 +1,2 @@
+examples/c/example.cfg
+examples/c/example*.c
diff --git a/debian/libconfig-dev.info b/debian/libconfig-dev.info
new file mode 100644 (file)
index 0000000..628d7f3
--- /dev/null
@@ -0,0 +1 @@
+debian/tmp/usr/share/info/libconfig.info
diff --git a/debian/libconfig-dev.install b/debian/libconfig-dev.install
new file mode 100644 (file)
index 0000000..375054d
--- /dev/null
@@ -0,0 +1,4 @@
+debian/tmp/usr/include/libconfig.h
+debian/tmp/usr/lib/*/libconfig.a
+debian/tmp/usr/lib/*/libconfig.so
+debian/tmp/usr/lib/*/pkgconfig/libconfig.pc
diff --git a/debian/libconfig-doc.doc-base b/debian/libconfig-doc.doc-base
new file mode 100644 (file)
index 0000000..281715e
--- /dev/null
@@ -0,0 +1,9 @@
+Document: libconfig9
+Title: libconfig manual
+Author: Mark A Lindner
+Abstract: This manual describes what libconfig is
+ and how it can be used to parse configuration files
+Section: Programming/C
+
+Format: PDF
+Files: /usr/share/doc/libconfig-doc/libconfig.pdf.gz
diff --git a/debian/libconfig-doc.docs b/debian/libconfig-doc.docs
new file mode 100644 (file)
index 0000000..49e707d
--- /dev/null
@@ -0,0 +1 @@
+doc/libconfig.pdf
index f7d6f6b..5b5ce02 100644 (file)
@@ -3,4 +3,3 @@ debian/tmp/usr/lib/libconfig.a
 debian/tmp/usr/lib/libconfig.so
 debian/tmp/usr/lib/libconfig.la
 debian/tmp/usr/lib/pkgconfig/libconfig.pc
-debian/tmp/usr/lib/cmake/libconfig/libconfigConfig.cmake
index aba7b37..9064128 100644 (file)
@@ -1,2 +1 @@
-debian/tmp/usr/lib/libconfig.so.9*
-
+debian/tmp/usr/lib/*/libconfig.so.9*
index d758c24..0d6db96 100755 (executable)
 #!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
 
 # Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
+# # export DH_VERBOSE=1
 
+override_dh_auto_build-indep:
+       $(MAKE) -C doc pdf
 
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
-else
-       CFLAGS += -O2
-endif
-
-# shared library versions
-version=`ls lib/.libs/lib*.so.* | \
-  awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`
-major=`ls lib/.libs/lib*.so.* | \
-  awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'`
-
-config.status: configure
-       dh_testdir
-       ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
-                    --prefix=/usr --mandir=\$${prefix}/share/man \
-                    --infodir=\$${prefix}/share/info \
-                    CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"
-
-build: build-stamp
-build-stamp:  config.status
-       dh_testdir
-       $(MAKE)
-       $(MAKE) pdf
-       touch $@
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp
-       -$(MAKE) distclean
-ifneq "$(wildcard /usr/share/misc/config.sub)" ""
-       cp -f /usr/share/misc/config.sub config.sub
-endif
-ifneq "$(wildcard /usr/share/misc/config.guess)" ""
-       cp -f /usr/share/misc/config.guess config.guess
-endif
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-       $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installchangelogs ChangeLog
-       dh_installdocs
-       dh_installexamples
-       dh_install
-       dh_strip -v --package=libconfig9 --dbg-package=libconfig9-dbg
-       dh_strip -v --package=libconfig++9 --dbg-package=libconfig++9-dbg
-#      dh_installmenu
-#      dh_installdebconf
-#      dh_installlogrotate
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installmime
-#      dh_installinit
-#      dh_installcron
-#      dh_installinfo
-       dh_installman
-       dh_link
-       dh_strip
-       dh_compress
-       dh_fixperms
-#      dh_perl
-#      dh_python
-       dh_makeshlibs
-       dh_installdeb
-       dh_shlibdeps
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
+override_dh_strip:
+       dh_strip -p libconfig9 --dbg-package=libconfig-dbg
+       dh_strip -p libconfig++9v5 --dbg-package=libconfig++-dbg
+       
+%:
+       dh $@ --parallel --with autoreconf
diff --git a/debian/source/format b/debian/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/doc/libconfig.info b/doc/libconfig.info
deleted file mode 100644 (file)
index 3d7a4b3..0000000
+++ /dev/null
@@ -1,2690 +0,0 @@
-This is libconfig.info, produced by makeinfo version 5.1 from
-libconfig.texi.
-
-INFO-DIR-SECTION Software libraries
-START-INFO-DIR-ENTRY
-* libconfig: (libconfig).       A Library For Processing Structured Configuration Files
-END-INFO-DIR-ENTRY
-
-\1f
-File: libconfig.info,  Node: Top,  Next: Introduction,  Up: (dir)
-
-libconfig
-*********
-
-* Menu:
-
-* Introduction::
-* Configuration Files::
-* The C API::
-* The C++ API::
-* Example Programs::
-* Configuration File Grammar::
-* License::
-* Function Index::
-* Type Index::
-* Concept Index::
-
-\1f
-File: libconfig.info,  Node: Introduction,  Next: Configuration Files,  Prev: Top,  Up: Top
-
-* Menu:
-
-* Why Another Configuration File Library?::
-* Using the Library from a C Program::
-* Using the Library from a C++ Program::
-* Multithreading Issues::
-* Internationalization Issues::
-* Compiling Using pkg-config::
-* Version Test Macros::
-
-1 Introduction
-**************
-
-Libconfig is a library for reading, manipulating, and writing structured
-configuration files.  The library features a fully reentrant parser and
-includes bindings for both the C and C++ programming languages.
-
-   The library runs on modern POSIX-compilant systems, such as Linux,
-Solaris, and Mac OS X (Darwin), as well as on Microsoft Windows 2000/XP
-and later (with either Microsoft Visual Studio 2005 or later, or the GNU
-toolchain via the MinGW environment).
-
-\1f
-File: libconfig.info,  Node: Why Another Configuration File Library?,  Next: Using the Library from a C Program,  Up: Introduction
-
-1.1 Why Another Configuration File Library?
-===========================================
-
-There are several open-source configuration file libraries available as
-of this writing.  This library was written because each of those
-libraries falls short in one or more ways.  The main features of
-libconfig that set it apart from the other libraries are:
-
-   * A fully reentrant parser.  Independent configurations can be parsed
-     in concurrent threads at the same time.
-
-   * Both C and C++ bindings, as well as hooks to allow for the creation
-     of wrappers in other languages.
-
-   * A simple, structured configuration file format that is more
-     readable and compact than XML and more flexible than the obsolete
-     but prevalent Windows "INI" file format.
-
-   * A low-footprint implementation (just 37K for the C library and 76K
-     for the C++ library) that is suitable for memory-constrained
-     systems.
-
-   * Proper documentation.
-
-\1f
-File: libconfig.info,  Node: Using the Library from a C Program,  Next: Using the Library from a C++ Program,  Prev: Why Another Configuration File Library?,  Up: Introduction
-
-1.2 Using the Library from a C Program
-======================================
-
-To use the library from C code, include the following preprocessor
-directive in your source files:
-
-
-     #include <libconfig.h>
-
-   To link with the library, specify '-lconfig' as an argument to the
-linker.
-
-\1f
-File: libconfig.info,  Node: Using the Library from a C++ Program,  Next: Multithreading Issues,  Prev: Using the Library from a C Program,  Up: Introduction
-
-1.3 Using the Library from a C++ Program
-========================================
-
-To use the library from C++, include the following preprocessor
-directive in your source files:
-
-
-     #include <libconfig.h++>
-
-   Or, alternatively:
-
-
-     #include <libconfig.hh>
-
-   The C++ API classes are defined in the namespace 'libconfig', hence
-the following statement may optionally be used:
-
-
-     using namespace libconfig;
-
-   To link with the library, specify '-lconfig++' as an argument to the
-linker.
-
-\1f
-File: libconfig.info,  Node: Multithreading Issues,  Next: Internationalization Issues,  Prev: Using the Library from a C++ Program,  Up: Introduction
-
-1.4 Multithreading Issues
-=========================
-
-Libconfig is fully "reentrant"; the functions in the library do not make
-use of global variables and do not maintain state between successive
-calls.  Therefore two independent configurations may be safely
-manipulated concurrently by two distinct threads.
-
-   Libconfig is not "thread-safe".  The library is not aware of the
-presence of threads and knows nothing about the host system's threading
-model.  Therefore, if an instance of a configuration is to be accessed
-from multiple threads, it must be suitably protected by synchronization
-mechanisms like read-write locks or mutexes; the standard rules for safe
-multithreaded access to shared data must be observed.
-
-   Libconfig is not "async-safe".  Calls should not be made into the
-library from signal handlers, because some of the C library routines
-that it uses may not be async-safe.
-
-   Libconfig is not guaranteed to be "cancel-safe".  Since it is not
-aware of the host system's threading model, the library does not contain
-any thread cancellation points.  In most cases this will not be an issue
-for multithreaded programs.  However, be aware that some of the routines
-in the library (namely those that read/write configurations from/to
-files or streams) perform I/O using C library routines which may
-potentially block; whether or not these C library routines are
-cancel-safe depends on the host system.
-
-\1f
-File: libconfig.info,  Node: Internationalization Issues,  Next: Compiling Using pkg-config,  Prev: Multithreading Issues,  Up: Introduction
-
-1.5 Internationalization Issues
-===============================
-
-Libconfig does not natively support Unicode configuration files, but
-string values may contain Unicode text encoded in UTF-8; such strings
-will be treated as ordinary 8-bit ASCII text by the library.  It is the
-responsibility of the calling program to perform the necessary
-conversions to/from wide (wchar_t) strings using the wide string
-conversion functions such as mbsrtowcs() and wcsrtombs() or the iconv()
-function of the libiconv library.
-
-   The textual representation of a floating point value varies by
-locale.  However, the libconfig grammar specifies that floating point
-values are represented using a period ('.')  as the radix symbol; this
-is consistent with the grammar of most programming languages.  When a
-configuration is read in or written out, libconfig temporarily changes
-the LC_NUMERIC category of the locale of the calling thread to the "C"
-locale to ensure consistent handling of floating point values regardless
-of the locale(s) in use by the calling program.
-
-   Note that the MinGW environment does not (as of this writing) provide
-functions for changing the locale of the calling thread.  Therefore,
-when using libconfig in that environment, the calling program is
-responsible for changing the LC_NUMERIC category of the locale to the
-"C" locale before reading or writing a configuration.
-
-\1f
-File: libconfig.info,  Node: Compiling Using pkg-config,  Next: Version Test Macros,  Prev: Internationalization Issues,  Up: Introduction
-
-1.6 Compiling Using pkg-config
-==============================
-
-On UNIX systems you can use the pkg-config utility (version 0.20 or
-later) to automatically select the appropriate compiler and linker
-switches for libconfig.  Ensure that the environment variable
-'PKG_CONFIG_PATH' contains the absolute path to the 'lib/pkgconfig'
-subdirectory of the libconfig installation.  Then, you can compile and
-link C programs with libconfig as follows:
-
-     gcc `pkg-config --cflags libconfig` myprogram.c -o myprogram \
-         `pkg-config --libs libconfig`
-
-   And similarly, for C++ programs:
-
-     g++ `pkg-config --cflags libconfig++` myprogram.cpp -o myprogram \
-         `pkg-config --libs libconfig++`
-
-
-   Note the backticks in the above examples.
-
-   When using autoconf, the 'PKG_CHECK_MODULES' m4 macro may be used to
-check for the presence of a given version of libconfig, and set the
-appropriate Makefile variables automatically.  For example:
-
-     PKG_CHECK_MODULES([LIBCONFIGXX], [libconfig++ >= 1.4],,
-       AC_MSG_ERROR([libconfig++ 1.4 or newer not found.])
-     )
-
-   In the above example, if libconfig++ version 1.4 or newer is found,
-the Makefile variables 'LIBCONFIGXX_LIBS' and 'LIBCONFIGXX_CFLAGS' will
-be set to the appropriate compiler and linker flags for compiling with
-libconfig, and if it is not found, the configure script will abort with
-an error to that effect.
-
-\1f
-File: libconfig.info,  Node: Version Test Macros,  Prev: Compiling Using pkg-config,  Up: Introduction
-
-1.7 Version Test Macros
-=======================
-
-The 'libconfig.h' header declares the following macros:
-
- -- Macro: LIBCONFIG_VER_MAJOR
- -- Macro: LIBCONFIG_VER_MINOR
- -- Macro: LIBCONFIG_VER_REVISION
-
-     These macros represent the major version, minor version, and
-     revision of the libconfig library.  For example, in libconfig 1.4
-     these are defined as '1', '4', and '0', respectively.  These macros
-     can be used in preprocessor directives to determine which libconfig
-     features and/or APIs are present.  For example:
-
-          #if (((LIBCONFIG_VER_MAJOR == 1) && (LIBCONFIG_VER_MINOR >= 4)) \
-               || (LIBCONFIG_VER_MAJOR > 1))
-            /* use features present in libconfig 1.4 and later */
-          #endif
-
-     These macros were introduced in libconfig 1.4.
-
-   Similarly, the 'libconfig.h++' header declares the following macros:
-
- -- Macro: LIBCONFIGXX_VER_MAJOR
- -- Macro: LIBCONFIGXX_VER_MINOR
- -- Macro: LIBCONFIGXX_VER_REVISION
-
-     These macros represent the major version, minor version, and
-     revision of the libconfig++ library.
-
-\1f
-File: libconfig.info,  Node: Configuration Files,  Next: The C API,  Prev: Introduction,  Up: Top
-
-* Menu:
-
-* Settings::
-* Groups::
-* Arrays::
-* Lists::
-* Integer Values::
-* 64-bit Integer Values::
-* Floating Point Values::
-* Boolean Values::
-* String Values::
-* Comments::
-* Include Directives::
-
-2 Configuration Files
-*********************
-
-Libconfig supports structured, hierarchical configurations.  These
-configurations can be read from and written to files and manipulated in
-memory.
-
-   A "configuration" consists of a group of "settings", which associate
-names with values.  A "value" can be one of the following:
-
-   * A "scalar value": integer, 64-bit integer, floating-point number,
-     boolean, or string
-   * An "array", which is a sequence of scalar values, all of which must
-     have the same type
-   * A "group", which is a collection of settings
-   * A "list", which is a sequence of values of any type, including
-     other lists
-
-   Consider the following configuration file for a hypothetical GUI
-application, which illustrates all of the elements of the configuration
-file grammar.
-
-
-     # Example application configuration file
-
-     version = "1.0";
-
-     application:
-     {
-       window:
-       {
-         title = "My Application";
-         size = { w = 640; h = 480; };
-         pos = { x = 350; y = 250; };
-       };
-
-       list = ( ( "abc", 123, true ), 1.234, ( /* an empty list */) );
-
-       books = ( { title  = "Treasure Island";
-                   author = "Robert Louis Stevenson";
-                   price  = 29.95;
-                   qty    = 5; },
-                 { title  = "Snow Crash";
-                   author = "Neal Stephenson";
-                   price  = 9.99;
-                   qty    = 8; } );
-
-       misc:
-       {
-         pi = 3.141592654;
-         bigint = 9223372036854775807L;
-         columns = [ "Last Name", "First Name", "MI" ];
-         bitmask = 0x1FC3;
-       };
-     };
-
-   Settings can be uniquely identified within the configuration by a
-"path".  The path is a dot-separated sequence of names, beginning at a
-top-level group and ending at the setting itself.  Each name in the path
-is the name of a setting; if the setting has no name because it is an
-element in a list or array, an integer index in square brackets can be
-used as the name.
-
-   For example, in our hypothetical configuration file, the path to the
-'x' setting is 'application.window.pos.x'; the path to the 'version'
-setting is simply 'version'; and the path to the 'title' setting of the
-second book in the 'books' list is 'application.books.[1].title'.
-
-   The datatype of a value is determined from the format of the value
-itself.  If the value is enclosed in double quotes, it is treated as a
-string.  If it looks like an integer or floating point number, it is
-treated as such.  If it is one of the values 'TRUE', 'true', 'FALSE', or
-'false' (or any other mixed-case version of those tokens, e.g., 'True'
-or 'FaLsE'), it is treated as a boolean.  If it consists of a
-comma-separated list of values enclosed in square brackets, it is
-treated as an array.  And if it consists of a comma-separated list of
-values enclosed in parentheses, it is treated as a list.  Any value
-which does not meet any of these criteria is considered invalid and
-results in a parse error.
-
-   All names are case-sensitive.  They may consist only of alphanumeric
-characters, dashes ('-'), underscores ('_'), and asterisks ('*'), and
-must begin with a letter or asterisk.  No other characters are allowed.
-
-   In C and C++, integer, 64-bit integer, floating point, and string
-values are mapped to the types 'int', 'long long', 'double', and 'const
-char *', respectively.  The boolean type is mapped to 'int' in C and
-'bool' in C++.
-
-   The following sections describe the elements of the configuration
-file grammar in additional detail.
-
-\1f
-File: libconfig.info,  Node: Settings,  Next: Groups,  Up: Configuration Files
-
-2.1 Settings
-============
-
-A setting has the form:
-
-   name = value ;
-
-   or:
-
-   name : value ;
-
-   The trailing semicolon is optional.  Whitespace is not significant.
-
-   The value may be a scalar value, an array, a group, or a list.
-
-\1f
-File: libconfig.info,  Node: Groups,  Next: Arrays,  Prev: Settings,  Up: Configuration Files
-
-2.2 Groups
-==========
-
-A group has the form:
-
-   { settings ...  }
-
-   Groups can contain any number of settings, but each setting must have
-a unique name within the group.
-
-\1f
-File: libconfig.info,  Node: Arrays,  Next: Lists,  Prev: Groups,  Up: Configuration Files
-
-2.3 Arrays
-==========
-
-An array has the form:
-
-   [ value, value ...  ]
-
-   An array may have zero or more elements, but the elements must all be
-scalar values of the same type.
-
-\1f
-File: libconfig.info,  Node: Lists,  Next: Integer Values,  Prev: Arrays,  Up: Configuration Files
-
-2.4 Lists
-=========
-
-A list has the form:
-
-   ( value, value ...  )
-
-   A list may have zero or more elements, each of which can be a scalar
-value, an array, a group, or another list.
-
-\1f
-File: libconfig.info,  Node: Integer Values,  Next: 64-bit Integer Values,  Prev: Lists,  Up: Configuration Files
-
-2.5 Integer Values
-==================
-
-Integers can be represented in one of two ways: as a series of one or
-more decimal digits ('0' - '9'), with an optional leading sign character
-('+' or '-'); or as a hexadecimal value consisting of the characters
-'0x' followed by a series of one or more hexadecimal digits ('0' - '9',
-'A' - 'F', 'a' - 'f').
-
-\1f
-File: libconfig.info,  Node: 64-bit Integer Values,  Next: Floating Point Values,  Prev: Integer Values,  Up: Configuration Files
-
-2.6 64-bit Integer Values
-=========================
-
-Long long (64-bit) integers are represented identically to integers,
-except that an 'L' character is appended to indicate a 64-bit value.
-For example, '0L' indicates a 64-bit integer value 0.  As of version 1.5
-of the library, the trailing 'L' is optional; if the integer value
-exceeds the range of a 32-bit integer, it will automatically be
-interpreted as a 64-bit integer.
-
-\1f
-File: libconfig.info,  Node: Floating Point Values,  Next: Boolean Values,  Prev: 64-bit Integer Values,  Up: Configuration Files
-
-2.7 Floating Point Values
-=========================
-
-Floating point values consist of a series of one or more digits, one
-decimal point, an optional leading sign character ('+' or '-'), and an
-optional exponent.  An exponent consists of the letter 'E' or 'e', an
-optional sign character, and a series of one or more digits.
-
-\1f
-File: libconfig.info,  Node: Boolean Values,  Next: String Values,  Prev: Floating Point Values,  Up: Configuration Files
-
-2.8 Boolean Values
-==================
-
-Boolean values may have one of the following values: 'true', 'false', or
-any mixed-case variation thereof.
-
-\1f
-File: libconfig.info,  Node: String Values,  Next: Comments,  Prev: Boolean Values,  Up: Configuration Files
-
-2.9 String Values
-=================
-
-String values consist of arbitrary text delimited by double quotes.
-Literal double quotes can be escaped by preceding them with a backslash:
-'\"'.  The escape sequences '\\', '\f', '\n', '\r', and '\t' are also
-recognized, and have the usual meaning.
-
-   In addition, the '\x' escape sequence is supported; this sequence
-must be followed by exactly two hexadecimal digits, which represent an
-8-bit ASCII value.  For example, '\xFF' represents the character with
-ASCII code 0xFF.
-
-   No other escape sequences are currently supported.
-
-   Adjacent strings are automatically concatenated, as in C/C++ source
-code.  This is useful for formatting very long strings as sequences of
-shorter strings.  For example, the following constructs are equivalent:
-
-   * '"The quick brown fox jumped over the lazy dog."'
-
-   * '"The quick brown fox"'
-     '" jumped over the lazy dog."'
-
-   * '"The quick" /* comment */ " brown fox " // another comment'
-     '"jumped over the lazy dog."'
-
-\1f
-File: libconfig.info,  Node: Comments,  Next: Include Directives,  Prev: String Values,  Up: Configuration Files
-
-2.10 Comments
-=============
-
-Three types of comments are allowed within a configuration:
-
-   * Script-style comments.  All text beginning with a '#' character to
-     the end of the line is ignored.
-
-   * C-style comments.  All text, including line breaks, between a
-     starting '/*' sequence and an ending '*/' sequence is ignored.
-
-   * C++-style comments.  All text beginning with a '//' sequence to the
-     end of the line is ignored.
-
-   As expected, comment delimiters appearing within quoted strings are
-treated as literal text.
-
-   Comments are ignored when the configuration is read in, so they are
-not treated as part of the configuration.  Therefore if the
-configuration is written back out to a stream, any comments that were
-present in the original configuration will be lost.
-
-\1f
-File: libconfig.info,  Node: Include Directives,  Prev: Comments,  Up: Configuration Files
-
-2.11 Include Directives
-=======================
-
-A configuration file may "include" the contents of another file using an
-include directive.  This directive has the effect of inlining the
-contents of the named file at the point of inclusion.
-
-   An include directive must appear on its own line in the input.  It
-has the form:
-
-   @include "filename"
-
-   Any backslashes or double quotes in the filename must be escaped as
-'\\' and '\"', respectively.
-
-   For example, consider the following two configuration files:
-
-     # file: quote.cfg
-     quote = "Criticism may not be agreeable, but it is necessary."
-             " It fulfils the same function as pain in the human"
-             " body. It calls attention to an unhealthy state of"
-             " things.\n"
-             "\t--Winston Churchill";
-
-     # file: test.cfg
-     info: {
-       name = "Winston Churchill";
-       @include "quote.cfg"
-       country = "UK";
-     };
-
-   Include files may be nested to a maximum of 10 levels; exceeding this
-limit results in a parse error.
-
-   Like comments, include directives are not part of the configuration
-file syntax.  They are processed before the configuration itself is
-parsed.  Therefore, they are not preserved when the configuration is
-written back out to a stream.  There is presently no support for
-programmatically inserting include directives into a configuration.
-
-\1f
-File: libconfig.info,  Node: The C API,  Next: The C++ API,  Prev: Configuration Files,  Up: Top
-
-3 The C API
-***********
-
-This chapter describes the C library API. The type config_t represents a
-configuration, and the type config_setting_t represents a configuration
-setting.
-
-   The boolean values 'CONFIG_TRUE' and 'CONFIG_FALSE' are macros
-defined as '(1)' and '(0)', respectively.
-
- -- Function: void config_init (config_t * CONFIG)
- -- Function: void config_destroy (config_t * CONFIG)
-
-     These functions initialize and destroy the configuration object
-     CONFIG.
-
-     'config_init()' initializes the config_t structure pointed to by
-     CONFIG as a new, empty configuration.
-
-     'config_destroy()' destroys the configuration CONFIG, deallocating
-     all memory associated with the configuration, but does not attempt
-     to deallocate the config_t structure itself.
-
- -- Function: int config_read (config_t * CONFIG, FILE * STREAM)
-
-     This function reads and parses a configuration from the given
-     STREAM into the configuration object CONFIG.  It returns
-     'CONFIG_TRUE' on success, or 'CONFIG_FALSE' on failure; the
-     'config_error_text()', 'config_error_file()',
-     'config_error_line()', and 'config_error_type()' functions,
-     described below, can be used to obtain information about the error.
-
- -- Function: int config_read_file (config_t * CONFIG,
-          const char * FILENAME)
-
-     This function reads and parses a configuration from the file named
-     FILENAME into the configuration object CONFIG.  It returns
-     'CONFIG_TRUE' on success, or 'CONFIG_FALSE' on failure; the
-     'config_error_text()' and 'config_error_line()' functions,
-     described below, can be used to obtain information about the error.
-
- -- Function: int config_read_string (config_t * CONFIG,
-          const char * STR)
-
-     This function reads and parses a configuration from the string STR
-     into the configuration object CONFIG.  It returns 'CONFIG_TRUE' on
-     success, or 'CONFIG_FALSE' on failure; the 'config_error_text()'
-     and 'config_error_line()' functions, described below, can be used
-     to obtain information about the error.
-
- -- Function: void config_write (const config_t * CONFIG, FILE * STREAM)
-
-     This function writes the configuration CONFIG to the given STREAM.
-
- -- Function: int config_write_file (config_t * CONFIG,
-          const char * FILENAME)
-
-     This function writes the configuration CONFIG to the file named
-     FILENAME.  It returns 'CONFIG_TRUE' on success, or 'CONFIG_FALSE'
-     on failure.
-
- -- Function: const char * config_error_text (const config_t * CONFIG)
- -- Function: const char * config_error_file (const config_t * CONFIG)
- -- Function: int config_error_line (const config_t * CONFIG)
-
-     These functions, which are implemented as macros, return the text,
-     filename, and line number of the parse error, if one occurred
-     during a call to 'config_read()', 'config_read_string()', or
-     'config_read_file()'.  Storage for the strings returned by
-     'config_error_text()' and 'config_error_file()' are managed by the
-     library and released automatically when the configuration is
-     destroyed; these strings must not be freed by the caller.  If the
-     error occurred in text that was read from a string or stream,
-     'config_error_file()' will return NULL.
-
- -- Function: config_error_t config_error_type (const config_t * CONFIG)
-     This function, which is implemented as a macro, returns the type of
-     error that occurred during the last call to one of the read or
-     write functions.  The CONFIG_ERROR_T type is an enumeration with
-     the following values: 'CONFIG_ERR_NONE', 'CONFIG_ERR_FILE_IO',
-     'CONFIG_ERR_PARSE'.  These represent success, a file I/O error, and
-     a parsing error, respectively.
-
- -- Function: void config_set_include_dir (config_t *CONFIG,
-          const char *INCLUDE_DIR)
- -- Function: const char * config_get_include_dir
-          (const config_t *CONFIG)
-
-     'config_set_include_dir()' specifies the include directory,
-     INCLUDE_DIR, relative to which the files specified in '@include'
-     directives will be located for the configuration CONFIG.  By
-     default, there is no include directory, and all include files are
-     expected to be relative to the current working directory.  If
-     INCLUDE_DIR is 'NULL', the default behavior is reinstated.
-
-     For example, if the include directory is set to '/usr/local/etc',
-     the include directive '@include "configs/extra.cfg"' would include
-     the file '/usr/local/etc/configs/extra.cfg'.
-
-     'config_get_include_dir()' returns the current include directory
-     for the configuration CONFIG, or 'NULL' if none is set.
-
- -- Function: void config_set_options (config_t *CONFIG, int OPTIONS)
- -- Function: int config_get_options (config_t *CONFIG)
-
-     These functions set and get the options for the configuration
-     CONFIG.  The options affect how configurations are read and
-     written.  The following options are defined:
-
-     'CONFIG_OPTION_AUTOCONVERT'
-          Turning this option on enables number auto-conversion for the
-          configuration.  When this feature is enabled, an attempt to
-          retrieve a floating point setting's value into an integer (or
-          vice versa), or store an integer to a floating point setting's
-          value (or vice versa) will cause the library to silently
-          perform the necessary conversion (possibly leading to loss of
-          data), rather than reporting failure.  By default this option
-          is turned off.
-
-     'CONFIG_OPTION_SEMICOLON_SEPARATORS'
-          This option controls whether a semicolon (';') is output after
-          each setting when the configuration is written to a file or
-          stream.  (The semicolon separators are optional in the
-          configuration syntax.)  By default this option is turned on.
-
-     'CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS'
-          This option controls whether a colon (':') is output between
-          each group setting's name and its value when the configuration
-          is written to a file or stream.  If the option is turned off,
-          an equals sign ('=') is output instead.  (These tokens are
-          interchangeable in the configuration syntax.)  By default this
-          option is turned on.
-
-     'CONFIG_OPTION_COLON_ASSIGNMENT_FOR_NON_GROUPS'
-          This option controls whether a colon (':') is output between
-          each non-group setting's name and its value when the
-          configuration is written to a file or stream.  If the option
-          is turned off, an equals sign ('=') is output instead.  (These
-          tokens are interchangeable in the configuration syntax.)  By
-          default this option is turned off.
-
-     'CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE'
-          This option controls whether an open brace ('{') will be
-          written on its own line when the configuration is written to a
-          file or stream.  If the option is turned off, the brace will
-          be written at the end of the previous line.  By default this
-          option is turned on.
-
- -- Function: void config_set_auto_convert (config_t *CONFIG, int FLAG)
- -- Function: int config_get_auto_convert (const config_t *CONFIG)
-
-     These functions get and set the 'CONFIG_OPTION_AUTO_CONVERT'
-     option.  They are obsoleted by the 'config_set_options()' and
-     'config_get_options()' functions described above.
-
- -- Function: void config_set_default_format (config_t * CONFIG,
-          short FORMAT)
- -- Function: short config_get_default_format (config_t * CONFIG)
-
-     These functions, which are implemented as macros, set and get the
-     default external format for settings in the configuration CONFIG.
-     If a non-default format has not been set for a setting with
-     'config_setting_set_format()', this configuration-wide default
-     format will be used instead when that setting is written to a file
-     or stream.
-
- -- Function: void config_set_tab_width (config_t * CONFIG,
-          unsigned short WIDTH)
- -- Function: unsigned short config_get_tab_width
-          (const config_t * CONFIG)
-
-     These functions, which are implemented as macros, set and get the
-     tab width for the configuration CONFIG.  The tab width affects the
-     formatting of the configuration when it is written to a file or
-     stream: each level of nesting is indented by WIDTH spaces, or by a
-     single tab character if WIDTH is 0.  The tab width has no effect on
-     parsing.
-
-     Valid tab widths range from 0 to 15.  The default tab width is 2.
-
- -- Function: int config_lookup_int (const config_t * CONFIG,
-          const char * PATH, int * VALUE)
- -- Function: int config_lookup_int64 (const config_t * CONFIG,
-          const char * PATH, long long * VALUE)
- -- Function: int config_lookup_float (const config_t * CONFIG,
-          const char * PATH, double * VALUE)
- -- Function: int config_lookup_bool (const config_t * CONFIG,
-          const char * PATH, int * VALUE)
- -- Function: int config_lookup_string (const config_t * CONFIG,
-          const char * PATH, const char ** VALUE)
-
-     These functions look up the value of the setting in the
-     configuration CONFIG specified by the path PATH.  They store the
-     value of the setting at VALUE and return 'CONFIG_TRUE' on success.
-     If the setting was not found or if the type of the value did not
-     match the type requested, they leave the data pointed to by VALUE
-     unmodified and return 'CONFIG_FALSE'.
-
-     Storage for the string returned by 'config_lookup_string()' is
-     managed by the library and released automatically when the setting
-     is destroyed or when the setting's value is changed; the string
-     must not be freed by the caller.
-
- -- Function: config_setting_t * config_lookup (const config_t * CONFIG,
-          const char * PATH)
-
-     This function locates the setting in the configuration CONFIG
-     specified by the path PATH.  It returns a pointer to the
-     'config_setting_t' structure on success, or 'NULL' if the setting
-     was not found.
-
- -- Function: config_setting_t * config_setting_lookup
-          (const config_setting_t * SETTING, const char * PATH)
-
-     This function locates a setting by a path PATH relative to the
-     setting SETTING.  It returns a pointer to the 'config_setting_t'
-     structure on success, or 'NULL' if the setting was not found.
-
- -- Function: int config_setting_get_int
-          (const config_setting_t * SETTING)
- -- Function: long long config_setting_get_int64
-          (const config_setting_t * SETTING)
- -- Function: double config_setting_get_float
-          (const config_setting_t * SETTING)
- -- Function: int config_setting_get_bool
-          (const config_setting_t * SETTING)
- -- Function: const char * config_setting_get_string
-          (const config_setting_t * SETTING)
-
-     These functions return the value of the given SETTING.  If the type
-     of the setting does not match the type requested, a 0 or 'NULL'
-     value is returned.  Storage for the string returned by
-     'config_setting_get_string()' is managed by the library and
-     released automatically when the setting is destroyed or when the
-     setting's value is changed; the string must not be freed by the
-     caller.
-
- -- Function: int config_setting_set_int (config_setting_t * SETTING,
-          int VALUE)
- -- Function: int config_setting_set_int64 (config_setting_t * SETTING,
-          long long VALUE)
- -- Function: int config_setting_set_float (config_setting_t * SETTING,
-          double VALUE)
- -- Function: int config_setting_set_bool (config_setting_t * SETTING,
-          int VALUE)
- -- Function: int config_setting_set_string (config_setting_t * SETTING,
-          const char * VALUE)
-
-     These functions set the value of the given SETTING to VALUE.  On
-     success, they return 'CONFIG_TRUE'.  If the setting does not match
-     the type of the value, they return 'CONFIG_FALSE'.
-     'config_setting_set_string()' makes a copy of the passed string
-     VALUE, so it may be subsequently freed or modified by the caller
-     without affecting the value of the setting.
-
- -- Function: int config_setting_lookup_int
-          (const config_setting_t * SETTING, const char * NAME,
-          int * VALUE)
- -- Function: int config_setting_lookup_int64
-          (const config_setting_t * SETTING, const char * NAME,
-          long long * VALUE)
- -- Function: int config_setting_lookup_float
-          (const config_setting_t * SETTING, const char * NAME,
-          double * VALUE)
- -- Function: int config_setting_lookup_bool
-          (const config_setting_t * SETTING, const char * NAME,
-          int * VALUE)
- -- Function: int config_setting_lookup_string
-          (const config_setting_t * SETTING, const char * NAME,
-          const char ** VALUE)
-
-     These functions look up the value of the child setting named NAME
-     of the setting SETTING.  They store the value at VALUE and return
-     'CONFIG_TRUE' on success.  If the setting was not found or if the
-     type of the value did not match the type requested, they leave the
-     data pointed to by VALUE unmodified and return 'CONFIG_FALSE'.
-
-     Storage for the string returned by 'config_setting_lookup_string()'
-     is managed by the library and released automatically when the
-     setting is destroyed or when the setting's value is changed; the
-     string must not be freed by the caller.
-
- -- Function: short config_setting_get_format
-          (config_setting_t * SETTING)
- -- Function: int config_setting_set_format (config_setting_t * SETTING,
-          short FORMAT)
-
-     These functions get and set the external format for the setting
-     SETTING.
-
-     The FORMAT must be one of the constants 'CONFIG_FORMAT_DEFAULT' or
-     'CONFIG_FORMAT_HEX'.  All settings support the
-     'CONFIG_FORMAT_DEFAULT' format.  The 'CONFIG_FORMAT_HEX' format
-     specifies hexadecimal formatting for integer values, and hence only
-     applies to settings of type 'CONFIG_TYPE_INT' and
-     'CONFIG_TYPE_INT64'.  If FORMAT is invalid for the given setting,
-     it is ignored.
-
-     If a non-default format has not been set for the setting,
-     'config_setting_get_format()' returns the default format for the
-     configuration, as set by 'config_set_default_format()'.
-
-     'config_setting_set_format()' returns 'CONFIG_TRUE' on success and
-     'CONFIG_FALSE' on failure.
-
- -- Function: config_setting_t * config_setting_get_member
-          (config_setting_t * SETTING, const char * NAME)
-
-     This function fetches the child setting named NAME from the group
-     SETTING.  It returns the requested setting on success, or 'NULL' if
-     the setting was not found or if SETTING is not a group.
-
- -- Function: config_setting_t * config_setting_get_elem
-          (const config_setting_t * SETTING, unsigned int INDEX)
-
-     This function fetches the element at the given index INDEX in the
-     setting SETTING, which must be an array, list, or group.  It
-     returns the requested setting on success, or 'NULL' if INDEX is out
-     of range or if SETTING is not an array, list, or group.
-
- -- Function: int config_setting_get_int_elem
-          (const config_setting_t * SETTING, int INDEX)
- -- Function: long long config_setting_get_int64_elem
-          (const config_setting_t * SETTING, int INDEX)
- -- Function: double config_setting_get_float_elem
-          (const config_setting_t * SETTING, int INDEX)
- -- Function: int config_setting_get_bool_elem
-          (const config_setting_t * SETTING, int INDEX)
- -- Function: const char * config_setting_get_string_elem
-          (const config_setting_t * SETTING, int INDEX)
-
-     These functions return the value at the specified index INDEX in
-     the setting SETTING.  If the setting is not an array or list, or if
-     the type of the element does not match the type requested, or if
-     INDEX is out of range, they return 0 or 'NULL'.  Storage for the
-     string returned by 'config_setting_get_string_elem()' is managed by
-     the library and released automatically when the setting is
-     destroyed or when its value is changed; the string must not be
-     freed by the caller.
-
- -- Function: config_setting_t * config_setting_set_int_elem
-          (config_setting_t * SETTING, int INDEX, int VALUE)
- -- Function: config_setting_t * config_setting_set_int64_elem
-          (config_setting_t * SETTING, int INDEX, long long VALUE)
- -- Function: config_setting_t * config_setting_set_float_elem
-          (config_setting_t * SETTING, int INDEX, double VALUE)
- -- Function: config_setting_t * config_setting_set_bool_elem
-          (config_setting_t * SETTING, int INDEX, int VALUE)
- -- Function: config_setting_t * config_setting_set_string_elem
-          (config_setting_t * SETTING, int INDEX, const char * VALUE)
-
-     These functions set the value at the specified index INDEX in the
-     setting SETTING to VALUE.  If INDEX is negative, a new element is
-     added to the end of the array or list.  On success, these functions
-     return a pointer to the setting representing the element.  If the
-     setting is not an array or list, or if the setting is an array and
-     the type of the array does not match the type of the value, or if
-     INDEX is out of range, they return 'NULL'.
-     'config_setting_set_string_elem()' makes a copy of the passed
-     string VALUE, so it may be subsequently freed or modified by the
-     caller without affecting the value of the setting.
-
- -- Function: config_setting_t * config_setting_add
-          (config_setting_t * PARENT, const char * NAME, int TYPE)
-
-     This function adds a new child setting or element to the setting
-     PARENT, which must be a group, array, or list.  If PARENT is an
-     array or list, the NAME parameter is ignored and may be 'NULL'.
-
-     The function returns the new setting on success, or 'NULL' if
-     PARENT is not a group, array, or list; or if there is already a
-     child setting of PARENT named NAME; or if TYPE is invalid.  If TYPE
-     is a scalar type, the new setting will have a default value of 0,
-     0.0, 'false', or 'NULL', as appropriate.
-
- -- Function: int config_setting_remove (config_setting_t * PARENT,
-          const char * NAME)
-
-     This function removes and destroys the setting named NAME from the
-     parent setting PARENT, which must be a group.  Any child settings
-     of the setting are recursively destroyed as well.
-
-     The function returns 'CONFIG_TRUE' on success.  If PARENT is not a
-     group, or if it has no setting with the given name, it returns
-     'CONFIG_FALSE'.
-
- -- Function: int config_setting_remove_elem (config_setting_t * PARENT,
-          unsigned int INDEX)
-
-     This function removes the child setting at the given index INDEX
-     from the setting PARENT, which must be a group, list, or array.
-     Any child settings of the removed setting are recursively destroyed
-     as well.
-
-     The function returns 'CONFIG_TRUE' on success.  If PARENT is not a
-     group, list, or array, or if INDEX is out of range, it returns
-     'CONFIG_FALSE'.
-
- -- Function: config_setting_t * config_root_setting
-          (const config_t * CONFIG)
-
-     This function returns the root setting for the configuration
-     CONFIG.  The root setting is a group.
-
- -- Function: const char * config_setting_name
-          (const config_setting_t * SETTING)
-
-     This function returns the name of the given SETTING, or 'NULL' if
-     the setting has no name.  Storage for the returned string is
-     managed by the library and released automatically when the setting
-     is destroyed; the string must not be freed by the caller.
-
- -- Function: config_setting_t * config_setting_parent
-          (const config_setting_t * SETTING)
-
-     This function returns the parent setting of the given SETTING, or
-     'NULL' if SETTING is the root setting.
-
- -- Function: int config_setting_is_root
-          (const config_setting_t * SETTING)
-
-     This function returns 'CONFIG_TRUE' if the given SETTING is the
-     root setting, and 'CONFIG_FALSE' otherwise.
-
- -- Function: int config_setting_index
-          (const config_setting_t * SETTING)
-
-     This function returns the index of the given SETTING within its
-     parent setting.  If SETTING is the root setting, this function
-     returns -1.
-
- -- Function: int config_setting_length
-          (const config_setting_t * SETTING)
-
-     This function returns the number of settings in a group, or the
-     number of elements in a list or array.  For other types of
-     settings, it returns 0.
-
- -- Function: int config_setting_type (const config_setting_t * SETTING)
-
-     This function returns the type of the given SETTING.  The return
-     value is one of the constants 'CONFIG_TYPE_INT',
-     'CONFIG_TYPE_INT64', 'CONFIG_TYPE_FLOAT', 'CONFIG_TYPE_STRING',
-     'CONFIG_TYPE_BOOL', 'CONFIG_TYPE_ARRAY', 'CONFIG_TYPE_LIST', or
-     'CONFIG_TYPE_GROUP'.
-
- -- Function: int config_setting_is_group
-          (const config_setting_t * SETTING)
- -- Function: int config_setting_is_array
-          (const config_setting_t * SETTING)
- -- Function: int config_setting_is_list
-          (const config_setting_t * SETTING)
-
-     These convenience functions, which are implemented as macros, test
-     if the setting SETTING is of a given type.  They return
-     'CONFIG_TRUE' or 'CONFIG_FALSE'.
-
- -- Function: int config_setting_is_aggregate
-          (const config_setting_t * SETTING)
- -- Function: int config_setting_is_scalar
-          (const config_setting_t * SETTING)
- -- Function: int config_setting_is_number
-          (const config_setting_t * SETTING)
-
-     These convenience functions, which are implemented as macros, test
-     if the setting SETTING is of an aggregate type (a group, array, or
-     list), of a scalar type (integer, 64-bit integer, floating point,
-     boolean, or string), and of a number (integer, 64-bit integer, or
-     floating point), respectively.  They return 'CONFIG_TRUE' or
-     'CONFIG_FALSE'.
-
- -- Function: const char * config_setting_source_file
-          (const config_setting_t * SETTING)
-
-     This function returns the name of the file from which the setting
-     SETTING was read, or NULL if the setting was not read from a file.
-     This information is useful for reporting application-level errors.
-     Storage for the returned string is managed by the library and
-     released automatically when the configuration is destroyed; the
-     string must not be freed by the caller.
-
- -- Function: unsigned int config_setting_source_line
-          (const config_setting_t * SETTING)
-
-     This function returns the line number of the configuration file or
-     stream at which the setting SETTING was read, or 0 if no line
-     number is available.  This information is useful for reporting
-     application-level errors.
-
- -- Function: void config_setting_set_hook (config_setting_t * SETTING,
-          void * HOOK)
- -- Function: void * config_setting_get_hook
-          (const config_setting_t * SETTING)
-
-     These functions make it possible to attach arbitrary data to each
-     setting structure, for instance a "wrapper" or "peer" object
-     written in another programming language.  The destructor function,
-     if one has been supplied via a call to 'config_set_destructor()',
-     will be called by the library to dispose of this data when the
-     setting itself is destroyed.  There is no default destructor.
-
- -- Function: void config_set_destructor (config_t * CONFIG,
-          void (* DESTRUCTOR)(void *))
-
-     This function assigns the destructor function DESTRUCTOR for the
-     configuration CONFIG.  This function accepts a single 'void *'
-     argument and has no return value.  See 'config_setting_set_hook()'
-     above for more information.
-
-\1f
-File: libconfig.info,  Node: The C++ API,  Next: Example Programs,  Prev: The C API,  Up: Top
-
-4 The C++ API
-*************
-
-This chapter describes the C++ library API. The class 'Config'
-represents a configuration, and the class 'Setting' represents a
-configuration setting.  Note that by design, neither of these classes
-provides a public copy constructor or assignment operator.  Therefore,
-instances of these classes may only be passed between functions via
-references or pointers.
-
-   The library defines a group of exceptions, all of which extend the
-common base exception 'ConfigException'.
-
-   A 'SettingTypeException' is thrown when the type of a setting's value
-does not match the type requested.
-
- -- Method on SettingTypeException: SettingTypeException
-          (const Setting &SETTING)
- -- Method on SettingTypeException: SettingTypeException
-          (const Setting &SETTING, int INDEX)
- -- Method on SettingTypeException: SettingTypeException
-          (const Setting &SETTING, const char *NAME)
-
-     These methods construct 'SettingTypeException' objects for the
-     given SETTING and/or member INDEX or NAME.
-
-   A 'SettingNotFoundException' is thrown when a setting is not found.
-
- -- Method on SettingNotFoundException: SettingNotFoundException
-          (const Setting &SETTING, int INDEX)
- -- Method on SettingNotFoundException: SettingNotFoundException
-          (const Setting &SETTING, const char *NAME)
- -- Method on SettingNotFoundException: SettingNotFoundException
-          (const char *PATH)
-
-     These methods construct 'SettingTypeException' objects for the
-     given SETTING and member INDEX or NAME, or path PATH.
-
-   A 'SettingNameException' is thrown when an attempt is made to add a
-new setting with a non-unique or invalid name.
-
- -- Method on SettingNameException: SettingNameException
-          (const Setting &SETTING, const char *NAME)
-
-     This method constructs a 'SettingNameExcpetion' object for the
-     given SETTING and member name NAME.
-
-   A 'ParseException' is thrown when a parse error occurs while reading
-a configuration from a stream.
-
- -- Method on ParseException: ParseException (const char *FILE,
-          int LINE, const char *ERROR)
-
-     This method constructs a 'ParseException' object with the given
-     filename FILE, line number LINE, and error message ERROR.
-
-   A 'FileIOException' is thrown when an I/O error occurs while
-reading/writing a configuration from/to a file.
-
-   'SettingTypeException', 'SettingNotFoundException', and
-'SettingNameException' all extend the common base exception
-'SettingException', which provides the following method:
-
- -- Method on SettingException: const char * getPath ()
-
-     Returns the path to the setting associated with the exception, or
-     'NULL' if there is no applicable path.
-
-   The remainder of this chapter describes the methods for manipulating
-configurations and configuration settings.
-
- -- Method on Config: Config ()
- -- Method on Config: ~Config ()
-
-     These methods create and destroy 'Config' objects.
-
- -- Method on Config: void read (FILE * STREAM)
- -- Method on Config: void write (FILE * STREAM)
-
-     The 'read()' method reads and parses a configuration from the given
-     STREAM.  A 'ParseException' is thrown if a parse error occurs.
-
-     The 'write()' method writes the configuration to the given STREAM.
-
- -- Method on Config: void readFile (const char * FILENAME)
- -- Method on Config: void writeFile (const char * FILENAME)
-
-     The 'readFile()' method reads and parses a configuration from the
-     file named FILENAME.  A 'ParseException' is thrown if a parse error
-     occurs.  A 'FileIOException' is thrown if the file cannot be read.
-
-     The 'writeFile()' method writes the configuration to the file named
-     FILENAME.  A 'FileIOException' is thrown if the file cannot be
-     written.
-
- -- Method on Config: void readString (const char * STR)
- -- Method on Config: void readString (const std::string &STR)
-
-     These methods read and parse a configuration from the string STR.
-     A 'ParseException' is thrown if a parse error occurs.
-
- -- Method on ParseException: const char * getError ()
- -- Method on ParseException: const char * getFile ()
- -- Method on ParseException: int getLine ()
-
-     If a call to 'readFile()', 'readString()', or 'read()' resulted in
-     a 'ParseException', these methods can be called on the exception
-     object to obtain the text, filename, and line number of the parse
-     error.  Storage for the strings returned by 'getError()' and
-     'getFile()' are managed by the library; the strings must not be
-     freed by the caller.
-
- -- Method on Config: void setIncludeDir (const char *INCLUDEDIR)
- -- Method on Config: const char * getIncludeDir ()
-
-     'setIncludeDir()' specifies the include directory, INCLUDEDIR,
-     relative to which the files specified in '@include' directives will
-     be located for the configuration.  By default, there is no include
-     directory, and all include files are expected to be relative to the
-     current working directory.  If INCLUDEDIR is 'NULL', the default
-     behavior is reinstated.
-
-     For example, if the include directory is set to '/usr/local/etc',
-     the include directive '@include "configs/extra.cfg"' would include
-     the file '/usr/local/etc/configs/extra.cfg'.
-
-     'getIncludeDir()' returns the current include directory for the
-     configuration, or 'NULL' if none is set.
-
- -- Method on Config: void setOptions (int OPTIONS)
- -- Method on Config: int getOptions ()
-
-     These methods set and get the options for the configuration.  The
-     options affect how configurations are read and written.  The
-     following options are defined:
-
-     'OptionAutoConvert'
-          Turning this option on enables number auto-conversion for the
-          configuration.  When this feature is enabled, an attempt to
-          retrieve a floating point setting's value into an integer (or
-          vice versa), or store an integer to a floating point setting's
-          value (or vice versa) will cause the library to silently
-          perform the necessary conversion (possibly leading to loss of
-          data), rather than reporting failure.  By default this option
-          is turned off.
-
-     'OptionSemicolonSeparators'
-          This option controls whether a semicolon (';') is output after
-          each setting when the configuration is written to a file or
-          stream.  (The semicolon separators are optional in the
-          configuration syntax.)  By default this option is turned on.
-
-     'OptionColonAssignmentForGroups'
-          This option controls whether a colon (':') is output between
-          each group setting's name and its value when the configuration
-          is written to a file or stream.  If the option is turned off,
-          an equals sign ('=') is output instead.  (These tokens are
-          interchangeable in the configuration syntax.)  By default this
-          option is turned on.
-
-     'OptionColonAssignmentForNonGroups'
-          This option controls whether a colon (':') is output between
-          each non-group setting's name and its value when the
-          configuration is written to a file or stream.  If the option
-          is turned off, an equals sign ('=') is output instead.  (These
-          tokens are interchangeable in the configuration syntax.)  By
-          default this option is turned off.
-
-     'OptionOpenBraceOnSeparateLine'
-          This option controls whether an open brace ('{') will be
-          written on its own line when the configuration is written to a
-          file or stream.  If the option is turned off, the brace will
-          be written at the end of the previous line.  By default this
-          option is turned on.
-
- -- Method on Config: void setAutoConvert (bool FLAG)
- -- Method on Config: bool getAutoConvert ()
-
-     These methods get and set the 'OptionAutoConvert' option.  They are
-     obsoleted by the 'setOptions()' and 'getOptions()' methods
-     described above.
-
- -- Method on Config: void setDefaultFormat (Setting::Format FORMAT)
- -- Method on Config: Setting::Format getDefaultFormat ()
-
-     These methods set and get the default external format for settings
-     in the configuration.  If a non-default format has not been set for
-     a setting with 'Setting::setFormat()', this configuration-wide
-     default format will be used instead when that setting is written to
-     a file or stream.
-
- -- Method on Config: void setTabWidth (unsigned short WIDTH)
- -- Method on Config: unsigned short getTabWidth ()
-
-     These methods set and get the tab width for the configuration.  The
-     tab width affects the formatting of the configuration when it is
-     written to a file or stream: each level of nesting is indented by
-     WIDTH spaces, or by a single tab character if WIDTH is 0.  The tab
-     width has no effect on parsing.
-
-     Valid tab widths range from 0 to 15.  The default tab width is 2.
-
- -- Method on Config: Setting & getRoot ()
-
-     This method returns the root setting for the configuration, which
-     is a group.
-
- -- Method on Config: Setting & lookup (const std::string &PATH)
- -- Method on Config: Setting & lookup (const char * PATH)
-
-     These methods locate the setting specified by the path PATH.  If
-     the requested setting is not found, a 'SettingNotFoundException' is
-     thrown.
-
- -- Method on Config: bool exists (const std::string &PATH)
- -- Method on Config: bool exists (const char *PATH)
-
-     These methods test if a setting with the given PATH exists in the
-     configuration.  They return 'true' if the setting exists, and
-     'false' otherwise.  These methods do not throw exceptions.
-
- -- Method on Config: bool lookupValue (const char *PATH, bool &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          bool &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH, int &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          int &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH,
-          unsigned int &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          unsigned int &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH,
-          long long &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          long long &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH, float &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          float &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH, double &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          double &VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH,
-          const char *&VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          const char *&VALUE)
-
- -- Method on Config: bool lookupValue (const char *PATH,
-          std::string &VALUE)
- -- Method on Config: bool lookupValue (const std::string &PATH,
-          std::string &VALUE)
-
-     These are convenience methods for looking up the value of a setting
-     with the given PATH.  If the setting is found and is of an
-     appropriate type, the value is stored in VALUE and the method
-     returns 'true'.  Otherwise, VALUE is left unmodified and the method
-     returns 'false'.  These methods do not throw exceptions.
-
-     Storage for const char * values is managed by the library and
-     released automatically when the setting is destroyed or when its
-     value is changed; the string must not be freed by the caller.  For
-     safety and convenience, always assigning string values to a
-     'std::string' is suggested.
-
-     Since these methods have boolean return values and do not throw
-     exceptions, they can be used within boolean logic expressions.  The
-     following example presents a concise way to look up three values at
-     once and perform error handling if any of them are not found or are
-     of the wrong type:
-
-
-          int var1;
-          double var2;
-          const char *var3;
-
-          if(config.lookupValue("values.var1", var1)
-             && config.lookupValue("values.var2", var2)
-             && config.lookupValue("values.var3", var3))
-          {
-            // use var1, var2, var3
-          }
-          else
-          {
-            // error handling here
-          }
-
-     This approach also takes advantage of the short-circuit evaluation
-     rules of C++, e.g., if the first lookup fails (returning 'false'),
-     the remaining lookups are skipped entirely.
-
- -- Method on Setting: operator bool ()
- -- Method on Setting: operator int ()
- -- Method on Setting: operator unsigned int ()
- -- Method on Setting: operator long ()
- -- Method on Setting: operator unsigned long ()
- -- Method on Setting: operator long long ()
- -- Method on Setting: operator unsigned long long ()
- -- Method on Setting: operator float ()
- -- Method on Setting: operator double ()
- -- Method on Setting: operator const char * ()
- -- Method on Setting: operator std::string ()
- -- Method on Setting: const char * c_str ()
-
-     These cast operators allow a 'Setting' object to be assigned to a
-     variable of type bool if it is of type 'TypeBoolean'; int, unsigned
-     int; 'long long' or 'unsigned long long' if it is of type
-     'TypeInt64', float or double if it is of type 'TypeFloat'; or const char *
-     or std::string if it is of type 'TypeString'.
-
-     Values of type 'TypeInt' or 'TypeInt64' may be assigned to
-     variables of type long, or unsigned long, depending on the sizes of
-     those types on the host system.
-
-     Storage for const char * return values is managed by the library
-     and released automatically when the setting is destroyed or when
-     its value is changed; the string must not be freed by the caller.
-     For safety and convenience, always assigning string return values
-     to a 'std::string' is suggested.
-
-     The following examples demonstrate this usage:
-
-          long width = config.lookup("application.window.size.w");
-
-          bool splashScreen = config.lookup("application.splash_screen");
-
-          std::string title = config.lookup("application.window.title");
-
-     Note that certain conversions can lead to loss of precision or
-     clipping of values, e.g., assigning a negative value to an unsigned
-     int (in which case the value will be treated as 0), or a
-     double-precision value to a float.  The library does not treat
-     these lossy conversions as errors.
-
-     Perhaps surprisingly, the following code in particular will cause a
-     compiler error:
-
-          std::string title;
-          .
-          .
-          .
-          title = config.lookup("application.window.title");
-
-     This is because the assignment operator of 'std::string' is being
-     invoked with a 'Setting &' as an argument.  The compiler is unable
-     to make an implicit conversion because both the 'const char *' and
-     the 'std::string' cast operators of 'Setting' are equally
-     appropriate.  This is not a bug in libconfig; providing only the
-     'const char *' cast operator would resolve this particular
-     ambiguity, but would cause assignments to 'std::string' like the
-     one in the previous example to produce a compiler error.  (To
-     understand why, see section 11.4.1 of The C++ Programming
-     Language.)
-
-     The solution to this problem is to use an explicit conversion that
-     avoids the construction of an intermediate 'std::string' object, as
-     follows:
-
-          std::string title;
-          .
-          .
-          .
-          title = (const char *)config.lookup("application.window.title");
-
-     Or, alternatively, use the 'c_str()' method, which has the same
-     effect:
-
-          std::string title;
-          .
-          .
-          .
-          title = config.lookup("application.window.title").c_str();
-
-     If the assignment is invalid due to a type mismatch, a
-     'SettingTypeException' is thrown.
-
- -- Method on Setting: Setting & operator= (bool VALUE)
- -- Method on Setting: Setting & operator= (int VALUE)
- -- Method on Setting: Setting & operator= (long VALUE)
- -- Method on Setting: Setting & operator= (const long long &VALUE)
- -- Method on Setting: Setting & operator= (float VALUE)
- -- Method on Setting: Setting & operator= (const double &VALUE)
- -- Method on Setting: Setting & operator= (const char *VALUE)
- -- Method on Setting: Setting & operator= (const std::string &VALUE)
-
-     These assignment operators allow values of type bool, int, long,
-     long long, float, double, const char *, and std::string to be
-     assigned to a setting.  In the case of strings, the library makes a
-     copy of the passed string VALUE, so it may be subsequently freed or
-     modified by the caller without affecting the value of the setting.
-
-     The following example code looks up a (presumably) integer setting
-     and changes its value:
-
-          Setting &setting = config.lookup("application.window.size.w");
-          setting = 1024;
-
-     If the assignment is invalid due to a type mismatch, a
-     'SettingTypeException' is thrown.
-
- -- Method on Setting: Setting & operator[] (int INDEX)
- -- Method on Setting: Setting & operator[] (const std::string &NAME)
- -- Method on Setting: Setting & operator[] (const char *NAME)
-
-     A 'Setting' object may be subscripted with an integer index INDEX
-     if it is an array or list, or with either a string NAME or an
-     integer index INDEX if it is a group.  For example, the following
-     code would produce the string 'Last Name' when applied to the
-     example configuration in *note Configuration Files::.
-
-          Setting& setting = config.lookup("application.misc");
-          const char *s = setting["columns"][0];
-
-     If the setting is not an array, list, or group, a
-     'SettingTypeException' is thrown.  If the subscript (INDEX or NAME)
-     does not refer to a valid element, a 'SettingNotFoundException' is
-     thrown.
-
-     Iterating over a group's child settings with an integer index will
-     return the settings in the same order that they appear in the
-     configuration.
-
- -- Method on Setting: Setting & lookup (const char * PATH)
- -- Method on Setting: Setting & lookup (const std::string &PATH)
-
-     This function locates a setting by a path PATH relative to this
-     setting.  If requested setting is not found, a
-     'SettingNotFoundException' is thrown.
-
- -- Method on Setting: bool lookupValue (const char *NAME, bool &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          bool &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME, int &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          int &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          unsigned int &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          unsigned int &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          long long &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          long long &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          unsigned long long &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          unsigned long long &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME, float &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          float &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          double &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          double &VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          const char *&VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          const char *&VALUE)
-
- -- Method on Setting: bool lookupValue (const char *NAME,
-          std::string &VALUE)
- -- Method on Setting: bool lookupValue (const std::string &NAME,
-          std::string &VALUE)
-
-     These are convenience methods for looking up the value of a child
-     setting with the given NAME.  If the setting is found and is of an
-     appropriate type, the value is stored in VALUE and the method
-     returns 'true'.  Otherwise, VALUE is left unmodified and the method
-     returns 'false'.  These methods do not throw exceptions.
-
-     Storage for const char * values is managed by the library and
-     released automatically when the setting is destroyed or when its
-     value is changed; the string must not be freed by the caller.  For
-     safety and convenience, always assigning string values to a
-     'std::string' is suggested.
-
-     Since these methods have boolean return values and do not throw
-     exceptions, they can be used within boolean logic expressions.  The
-     following example presents a concise way to look up three values at
-     once and perform error handling if any of them are not found or are
-     of the wrong type:
-
-
-          int var1;
-          double var2;
-          const char *var3;
-
-          if(setting.lookupValue("var1", var1)
-             && setting.lookupValue("var2", var2)
-             && setting.lookupValue("var3", var3))
-          {
-            // use var1, var2, var3
-          }
-          else
-          {
-            // error handling here
-          }
-
-     This approach also takes advantage of the short-circuit evaluation
-     rules of C++, e.g., if the first lookup fails (returning 'false'),
-     the remaining lookups are skipped entirely.
-
- -- Method on Setting: Setting & add (const std::string &NAME,
-          Setting::Type TYPE)
- -- Method on Setting: Setting & add (const char *NAME,
-          Setting::Type TYPE)
-
-     These methods add a new child setting with the given NAME and TYPE
-     to the setting, which must be a group.  They return a reference to
-     the new setting.  If the setting already has a child setting with
-     the given name, or if the name is invalid, a 'SettingNameException'
-     is thrown.  If the setting is not a group, a 'SettingTypeException'
-     is thrown.
-
-     Once a setting has been created, neither its name nor type can be
-     changed.
-
- -- Method on Setting: Setting & add (Setting::Type TYPE)
-
-     This method adds a new element to the setting, which must be of
-     type 'TypeArray' or 'TypeList'.  If the setting is an array which
-     currently has zero elements, the TYPE parameter (which must be
-     'TypeInt', 'TypeInt64', 'TypeFloat', 'TypeBool', or 'TypeString')
-     determines the type for the array; otherwise it must match the type
-     of the existing elements in the array.
-
-     The method returns the new setting on success.  If TYPE is a scalar
-     type, the new setting will have a default value of 0, 0.0, 'false',
-     or 'NULL', as appropriate.
-
-     The method throws a 'SettingTypeException' if the setting is not an
-     array or list, or if TYPE is invalid.
-
- -- Method on Setting: void remove (const std::string &NAME)
- -- Method on Setting: void remove (const char *NAME)
-
-     These methods remove the child setting with the given NAME from the
-     setting, which must be a group.  Any child settings of the removed
-     setting are recursively destroyed as well.
-
-     If the setting is not a group, a 'SettingTypeException' is thrown.
-     If the setting does not have a child setting with the given name, a
-     'SettingNotFoundException' is thrown.
-
- -- Method on Setting: void remove (unsigned int INDEX)
-
-     This method removes the child setting at the given index INDEX from
-     the setting, which must be a group, list, or array.  Any child
-     settings of the removed setting are recursively destroyed as well.
-
-     If the setting is not a group, list, or array, a
-     'SettingTypeException' is thrown.  If INDEX is out of range, a
-     'SettingNotFoundException' is thrown.
-
- -- Method on Setting: const char * getName ()
-
-     This method returns the name of the setting, or 'NULL' if the
-     setting has no name.  Storage for the returned string is managed by
-     the library and released automatically when the setting is
-     destroyed; the string must not be freed by the caller.  For safety
-     and convenience, consider assigning the return value to a
-     'std::string'.
-
- -- Method on Setting: std::string getPath ()
-
-     This method returns the complete dot-separated path to the setting.
-     Settings which do not have a name (list and array elements) are
-     represented by their index in square brackets.
-
- -- Method on Setting: Setting & getParent ()
-
-     This method returns the parent setting of the setting.  If the
-     setting is the root setting, a 'SettingNotFoundException' is
-     thrown.
-
- -- Method on Setting: bool isRoot ()
-
-     This method returns 'true' if the setting is the root setting, and
-     'false' otherwise.
-
- -- Method on Setting: int getIndex ()
-
-     This method returns the index of the setting within its parent
-     setting.  When applied to the root setting, this method returns -1.
-
- -- Method on Setting: Setting::Type getType ()
-
-     This method returns the type of the setting.  The 'Setting::Type'
-     enumeration consists of the following constants: 'TypeInt',
-     'TypeInt64', 'TypeFloat', 'TypeString', 'TypeBoolean', 'TypeArray',
-     'TypeList', and 'TypeGroup'.
-
- -- Method on Setting: Setting::Format getFormat ()
- -- Method on Setting: void setFormat (Setting::Format FORMAT)
-
-     These methods get and set the external format for the setting.
-
-     The SETTING::FORMAT enumeration consists of the following
-     constants: 'FormatDefault' and 'FormatHex'.  All settings support
-     the 'FormatDefault' format.  The 'FormatHex' format specifies
-     hexadecimal formatting for integer values, and hence only applies
-     to settings of type 'TypeInt' and 'TypeInt64'.  If FORMAT is
-     invalid for the given setting, it is ignored.
-
- -- Method on Setting: bool exists (const std::string &NAME)
- -- Method on Setting: bool exists (const char *NAME)
-
-     These methods test if the setting has a child setting with the
-     given NAME.  They return 'true' if the setting exists, and 'false'
-     otherwise.  These methods do not throw exceptions.
-
- -- Method on Setting: iterator begin ()
- -- Method on Setting: iterator end ()
- -- Method on Setting: const_iterator begin ()
- -- Method on Setting: const_iterator end ()
-
-     These methods return STL-style iterators that can be used to
-     enumerate the child settings of a given setting.  If the setting is
-     not an array, list, or group, they throw a 'SettingTypeException'.
-
- -- Method on Setting: int getLength ()
-
-     This method returns the number of settings in a group, or the
-     number of elements in a list or array.  For other types of
-     settings, it returns 0.
-
- -- Method on Setting: bool isGroup ()
- -- Method on Setting: bool isArray ()
- -- Method on Setting: bool isList ()
-
-     These convenience methods test if a setting is of a given type.
-
- -- Method on Setting: bool isAggregate ()
- -- Method on Setting: bool isScalar ()
- -- Method on Setting: bool isNumber ()
-
-     These convenience methods test if a setting is of an aggregate type
-     (a group, array, or list), of a scalar type (integer, 64-bit
-     integer, floating point, boolean, or string), and of a number
-     (integer, 64-bit integer, or floating point), respectively.
-
- -- Method on Setting: const char * getSourceFile ()
-
-     This function returns the name of the file from which the setting
-     was read, or NULL if the setting was not read from a file.  This
-     information is useful for reporting application-level errors.
-     Storage for the returned string is managed by the library and
-     released automatically when the configuration is destroyed; the
-     string must not be freed by the caller.
-
- -- Method on Setting: unsigned int getSourceLine ()
-
-     This function returns the line number of the configuration file or
-     stream at which the setting SETTING was read, or 0 if no line
-     number is available.  This information is useful for reporting
-     application-level errors.
-
-\1f
-File: libconfig.info,  Node: Example Programs,  Next: Configuration File Grammar,  Prev: The C++ API,  Up: Top
-
-5 Example Programs
-******************
-
-Practical example programs that illustrate how to use libconfig from
-both C and C++ are included in the 'examples' subdirectory of the
-distribution.  These examples include:
-
-'examples/c/example1.c'
-     An example C program that reads a configuration from an existing
-     file 'example.cfg' (also located in 'examples/c') and displays some
-     of its contents.
-
-'examples/c++/example1.cpp'
-     The C++ equivalent of 'example1.c'.
-
-'examples/c/example2.c'
-     An example C program that reads a configuration from an existing
-     file 'example.cfg' (also located in 'examples/c'), adds new
-     settings to the configuration, and writes the updated configuration
-     to another file.
-
-'examples/c++/example2.cpp'
-     The C++ equivalent of 'example2.c'
-
-'examples/c/example3.c'
-     An example C program that constructs a new configuration in memory
-     and writes it to a file.
-
-'examples/c++/example3.cpp'
-     The C++ equivalent of 'example3.c'
-
-\1f
-File: libconfig.info,  Node: Configuration File Grammar,  Next: License,  Prev: Example Programs,  Up: Top
-
-6 Configuration File Grammar
-****************************
-
-Below is the BNF grammar for configuration files.  Comments and include
-directives are not part of the grammar, so they are not included here.
-
-
-     configuration = setting-list | empty
-
-     setting-list = setting | setting-list setting
-
-     setting = name (":" | "=") value (";" | "," | empty)
-
-     value = scalar-value | array | list | group
-
-     value-list = value | value-list "," value
-
-     scalar-value = boolean | integer | integer64 | hex | hex64 | float
-                    | string
-
-     scalar-value-list = scalar-value | scalar-value-list "," scalar-value
-
-     array = "[" (scalar-value-list | empty) "]"
-
-     list = "(" (value-list | empty) ")"
-
-     group = "{" (setting-list | empty) "}"
-
-     empty =
-
-
-
-   Terminals are defined below as regular expressions:
-
-'boolean'      '([Tt][Rr][Uu][Ee])|([Ff][Aa][Ll][Ss][Ee])'
-'string'       '\"([^\"\\]|\\.)*\"'
-'name'         '[A-Za-z\*][-A-Za-z0-9_\*]*'
-'integer'      '[-+]?[0-9]+'
-'integer64'    '[-+]?[0-9]+L(L)?'
-'hex'          '0[Xx][0-9A-Fa-f]+'
-'hex64'        '0[Xx][0-9A-Fa-f]+(L(L)?)?'
-'float'        '([-+]?([0-9]*)?\.[0-9]*([eE][-+]?[0-9]+)?)|([-+]([0-9]+)(\.[0-9]*)?[eE][-+]?[0-9]+)'
-
-\1f
-File: libconfig.info,  Node: License,  Next: Function Index,  Prev: Configuration File Grammar,  Up: Top
-
-Appendix A License
-******************
-
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
-
-   Copyright (C) 1991, 1999 Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-   Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
-
-   [This is the first released version of the Lesser GPL. It also counts
-as the successor of the GNU Library Public License, version 2, hence the
-version number 2.1.]
-
-
-                               Preamble
-
-   The licenses for most software are designed to take away your freedom
-to share and change it.  By contrast, the GNU General Public Licenses
-are intended to guarantee your freedom to share and change free
-software-to make sure the software is free for all its users.
-
-   This license, the Lesser General Public License, applies to some
-specially designated software packages-typically libraries-of the Free
-Software Foundation and other authors who decide to use it.  You can use
-it too, but we suggest you first think carefully about whether this
-license or the ordinary General Public License is the better strategy to
-use in any particular case, based on the explanations below.
-
-   When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of it
-in new free programs; and that you are informed that you can do these
-things.
-
-   To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-   For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling it.
-And you must show them these terms so they know their rights.
-
-   We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-   To protect each distributor, we want to make it very clear that there
-is no warranty for the free library.  Also, if the library is modified
-by someone else and passed on, the recipients should know that what they
-have is not the original version, so that the original author's
-reputation will not be affected by problems that might be introduced by
-others.
-
-   Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that any
-patent license obtained for a version of the library must be consistent
-with the full freedom of use specified in this license.
-
-   Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and is
-quite different from the ordinary General Public License.  We use this
-license for certain libraries in order to permit linking those libraries
-into non-free programs.
-
-   When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the entire
-combination fits its criteria of freedom.  The Lesser General Public
-License permits more lax criteria for linking other code with the
-library.
-
-   We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General Public
-License.  It also provides other free software developers Less of an
-advantage over competing non-free programs.  These disadvantages are the
-reason we use the ordinary General Public License for many libraries.
-However, the Lesser license provides advantages in certain special
-circumstances.
-
-   For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free library
-does the same job as widely used non-free libraries.  In this case,
-there is little to gain by limiting the free library to free software
-only, so we use the Lesser General Public License.
-
-   In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of free
-software.  For example, permission to use the GNU C Library in non-free
-programs enables many more people to use the whole GNU operating system,
-as well as its variant, the GNU/Linux operating system.
-
-   Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is linked
-with the Library has the freedom and the wherewithal to run that program
-using a modified version of the Library.
-
-   The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                   GNU LESSER GENERAL PUBLIC LICENSE
-    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-
-  0. This License Agreement applies to any software library or other
-     program which contains a notice placed by the copyright holder or
-     other authorized party saying it may be distributed under the terms
-     of this Lesser General Public License (also called "this License").
-     Each licensee is addressed as "you".
-
-     A "library" means a collection of software functions and/or data
-     prepared so as to be conveniently linked with application programs
-     (which use some of those functions and data) to form executables.
-
-     The "Library", below, refers to any such software library or work
-     which has been distributed under these terms.  A "work based on the
-     Library" means either the Library or any derivative work under
-     copyright law: that is to say, a work containing the Library or a
-     portion of it, either verbatim or with modifications and/or
-     translated straightforwardly into another language.  (Hereinafter,
-     translation is included without limitation in the term
-     "modification".)
-
-     "Source code" for a work means the preferred form of the work for
-     making modifications to it.  For a library, complete source code
-     means all the source code for all modules it contains, plus any
-     associated interface definition files, plus the scripts used to
-     control compilation and installation of the library.
-
-     Activities other than copying, distribution and modification are
-     not covered by this License; they are outside its scope.  The act
-     of running a program using the Library is not restricted, and
-     output from such a program is covered only if its contents
-     constitute a work based on the Library (independent of the use of
-     the Library in a tool for writing it).  Whether that is true
-     depends on what the Library does and what the program that uses the
-     Library does.
-
-
-  1. You may copy and distribute verbatim copies of the Library's
-     complete source code as you receive it, in any medium, provided
-     that you conspicuously and appropriately publish on each copy an
-     appropriate copyright notice and disclaimer of warranty; keep
-     intact all the notices that refer to this License and to the
-     absence of any warranty; and distribute a copy of this License
-     along with the Library.
-
-     You may charge a fee for the physical act of transferring a copy,
-     and you may at your option offer warranty protection in exchange
-     for a fee.
-
-
-  2. You may modify your copy or copies of the Library or any portion of
-     it, thus forming a work based on the Library, and copy and
-     distribute such modifications or work under the terms of Section 1
-     above, provided that you also meet all of these conditions:
-
-       a. The modified work must itself be a software library.
-
-
-       b. You must cause the files modified to carry prominent notices
-          stating that you changed the files and the date of any change.
-
-
-       c. You must cause the whole of the work to be licensed at no
-          charge to all third parties under the terms of this License.
-
-
-       d. If a facility in the modified Library refers to a function or
-          a table of data to be supplied by an application program that
-          uses the facility, other than as an argument passed when the
-          facility is invoked, then you must make a good faith effort to
-          ensure that, in the event an application does not supply such
-          function or table, the facility still operates, and performs
-          whatever part of its purpose remains meaningful.
-
-          (For example, a function in a library to compute square roots
-          has a purpose that is entirely well-defined independent of the
-          application.  Therefore, Subsection 2d requires that any
-          application-supplied function or table used by this function
-          must be optional: if the application does not supply it, the
-          square root function must still compute square roots.)
-
-     These requirements apply to the modified work as a whole.  If
-     identifiable sections of that work are not derived from the
-     Library, and can be reasonably considered independent and separate
-     works in themselves, then this License, and its terms, do not apply
-     to those sections when you distribute them as separate works.  But
-     when you distribute the same sections as part of a whole which is a
-     work based on the Library, the distribution of the whole must be on
-     the terms of this License, whose permissions for other licensees
-     extend to the entire whole, and thus to each and every part
-     regardless of who wrote it.
-
-     Thus, it is not the intent of this section to claim rights or
-     contest your rights to work written entirely by you; rather, the
-     intent is to exercise the right to control the distribution of
-     derivative or collective works based on the Library.
-
-     In addition, mere aggregation of another work not based on the
-     Library with the Library (or with a work based on the Library) on a
-     volume of a storage or distribution medium does not bring the other
-     work under the scope of this License.
-
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-     License instead of this License to a given copy of the Library.  To
-     do this, you must alter all the notices that refer to this License,
-     so that they refer to the ordinary GNU General Public License,
-     version 2, instead of to this License.  (If a newer version than
-     version 2 of the ordinary GNU General Public License has appeared,
-     then you can specify that version instead if you wish.)  Do not
-     make any other change in these notices.
-
-     Once this change is made in a given copy, it is irreversible for
-     that copy, so the ordinary GNU General Public License applies to
-     all subsequent copies and derivative works made from that copy.
-
-     This option is useful when you wish to copy part of the code of the
-     Library into a program that is not a library.
-
-
-  4. You may copy and distribute the Library (or a portion or derivative
-     of it, under Section 2) in object code or executable form under the
-     terms of Sections 1 and 2 above provided that you accompany it with
-     the complete corresponding machine-readable source code, which must
-     be distributed under the terms of Sections 1 and 2 above on a
-     medium customarily used for software interchange.
-
-     If distribution of object code is made by offering access to copy
-     from a designated place, then offering equivalent access to copy
-     the source code from the same place satisfies the requirement to
-     distribute the source code, even though third parties are not
-     compelled to copy the source along with the object code.
-
-
-  5. A program that contains no derivative of any portion of the
-     Library, but is designed to work with the Library by being compiled
-     or linked with it, is called a "work that uses the Library".  Such
-     a work, in isolation, is not a derivative work of the Library, and
-     therefore falls outside the scope of this License.
-
-     However, linking a "work that uses the Library" with the Library
-     creates an executable that is a derivative of the Library (because
-     it contains portions of the Library), rather than a "work that uses
-     the library".  The executable is therefore covered by this License.
-     Section 6 states terms for distribution of such executables.
-
-     When a "work that uses the Library" uses material from a header
-     file that is part of the Library, the object code for the work may
-     be a derivative work of the Library even though the source code is
-     not.  Whether this is true is especially significant if the work
-     can be linked without the Library, or if the work is itself a
-     library.  The threshold for this to be true is not precisely
-     defined by law.
-
-     If such an object file uses only numerical parameters, data
-     structure layouts and accessors, and small macros and small inline
-     functions (ten lines or less in length), then the use of the object
-     file is unrestricted, regardless of whether it is legally a
-     derivative work.  (Executables containing this object code plus
-     portions of the Library will still fall under Section 6.)
-
-     Otherwise, if the work is a derivative of the Library, you may
-     distribute the object code for the work under the terms of Section
-     6.  Any executables containing that work also fall under Section 6,
-     whether or not they are linked directly with the Library itself.
-
-
-  6. As an exception to the Sections above, you may also combine or link
-     a "work that uses the Library" with the Library to produce a work
-     containing portions of the Library, and distribute that work under
-     terms of your choice, provided that the terms permit modification
-     of the work for the customer's own use and reverse engineering for
-     debugging such modifications.
-
-     You must give prominent notice with each copy of the work that the
-     Library is used in it and that the Library and its use are covered
-     by this License.  You must supply a copy of this License.  If the
-     work during execution displays copyright notices, you must include
-     the copyright notice for the Library among them, as well as a
-     reference directing the user to the copy of this License.  Also,
-     you must do one of these things:
-
-
-       a. Accompany the work with the complete corresponding
-          machine-readable source code for the Library including
-          whatever changes were used in the work (which must be
-          distributed under Sections 1 and 2 above); and, if the work is
-          an executable linked with the Library, with the complete
-          machine-readable "work that uses the Library", as object code
-          and/or source code, so that the user can modify the Library
-          and then relink to produce a modified executable containing
-          the modified Library.  (It is understood that the user who
-          changes the contents of definitions files in the Library will
-          not necessarily be able to recompile the application to use
-          the modified definitions.)
-
-
-       b. Use a suitable shared library mechanism for linking with the
-          Library.  A suitable mechanism is one that (1) uses at run
-          time a copy of the library already present on the user's
-          computer system, rather than copying library functions into
-          the executable, and (2) will operate properly with a modified
-          version of the library, if the user installs one, as long as
-          the modified version is interface-compatible with the version
-          that the work was made with.
-
-
-       c. Accompany the work with a written offer, valid for at least
-          three years, to give the same user the materials specified in
-          Subsection 6a, above, for a charge no more than the cost of
-          performing this distribution.
-
-
-       d. If distribution of the work is made by offering access to copy
-          from a designated place, offer equivalent access to copy the
-          above specified materials from the same place.
-
-
-       e. Verify that the user has already received a copy of these
-          materials or that you have already sent this user a copy.
-
-     For an executable, the required form of the "work that uses the
-     Library" must include any data and utility programs needed for
-     reproducing the executable from it.  However, as a special
-     exception, the materials to be distributed need not include
-     anything that is normally distributed (in either source or binary
-     form) with the major components (compiler, kernel, and so on) of
-     the operating system on which the executable runs, unless that
-     component itself accompanies the executable.
-
-     It may happen that this requirement contradicts the license
-     restrictions of other proprietary libraries that do not normally
-     accompany the operating system.  Such a contradiction means you
-     cannot use both them and the Library together in an executable that
-     you distribute.
-
-
-  7. You may place library facilities that are a work based on the
-     Library side-by-side in a single library together with other
-     library facilities not covered by this License, and distribute such
-     a combined library, provided that the separate distribution of the
-     work based on the Library and of the other library facilities is
-     otherwise permitted, and provided that you do these two things:
-
-
-       a. Accompany the combined library with a copy of the same work
-          based on the Library, uncombined with any other library
-          facilities.  This must be distributed under the terms of the
-          Sections above.
-
-
-       b. Give prominent notice with the combined library of the fact
-          that part of it is a work based on the Library, and explaining
-          where to find the accompanying uncombined form of the same
-          work.
-
-
-  8. You may not copy, modify, sublicense, link with, or distribute the
-     Library except as expressly provided under this License.  Any
-     attempt otherwise to copy, modify, sublicense, link with, or
-     distribute the Library is void, and will automatically terminate
-     your rights under this License.  However, parties who have received
-     copies, or rights, from you under this License will not have their
-     licenses terminated so long as such parties remain in full
-     compliance.
-
-
-  9. You are not required to accept this License, since you have not
-     signed it.  However, nothing else grants you permission to modify
-     or distribute the Library or its derivative works.  These actions
-     are prohibited by law if you do not accept this License.
-     Therefore, by modifying or distributing the Library (or any work
-     based on the Library), you indicate your acceptance of this License
-     to do so, and all its terms and conditions for copying,
-     distributing or modifying the Library or works based on it.
-
-
-  10. Each time you redistribute the Library (or any work based on the
-     Library), the recipient automatically receives a license from the
-     original licensor to copy, distribute, link with or modify the
-     Library subject to these terms and conditions.  You may not impose
-     any further restrictions on the recipients' exercise of the rights
-     granted herein.  You are not responsible for enforcing compliance
-     by third parties with this License.
-
-
-  11. If, as a consequence of a court judgment or allegation of patent
-     infringement or for any other reason (not limited to patent
-     issues), conditions are imposed on you (whether by court order,
-     agreement or otherwise) that contradict the conditions of this
-     License, they do not excuse you from the conditions of this
-     License.  If you cannot distribute so as to satisfy simultaneously
-     your obligations under this License and any other pertinent
-     obligations, then as a consequence you may not distribute the
-     Library at all.  For example, if a patent license would not permit
-     royalty-free redistribution of the Library by all those who receive
-     copies directly or indirectly through you, then the only way you
-     could satisfy both it and this License would be to refrain entirely
-     from distribution of the Library.
-
-     If any portion of this section is held invalid or unenforceable
-     under any particular circumstance, the balance of the section is
-     intended to apply, and the section as a whole is intended to apply
-     in other circumstances.
-
-     It is not the purpose of this section to induce you to infringe any
-     patents or other property right claims or to contest validity of
-     any such claims; this section has the sole purpose of protecting
-     the integrity of the free software distribution system which is
-     implemented by public license practices.  Many people have made
-     generous contributions to the wide range of software distributed
-     through that system in reliance on consistent application of that
-     system; it is up to the author/donor to decide if he or she is
-     willing to distribute software through any other system and a
-     licensee cannot impose that choice.
-
-     This section is intended to make thoroughly clear what is believed
-     to be a consequence of the rest of this License.
-
-
-  12. If the distribution and/or use of the Library is restricted in
-     certain countries either by patents or by copyrighted interfaces,
-     the original copyright holder who places the Library under this
-     License may add an explicit geographical distribution limitation
-     excluding those countries, so that distribution is permitted only
-     in or among countries not thus excluded.  In such case, this
-     License incorporates the limitation as if written in the body of
-     this License.
-
-
-  13. The Free Software Foundation may publish revised and/or new
-     versions of the Lesser General Public License from time to time.
-     Such new versions will be similar in spirit to the present version,
-     but may differ in detail to address new problems or concerns.
-
-     Each version is given a distinguishing version number.  If the
-     Library specifies a version number of this License which applies to
-     it and "any later version", you have the option of following the
-     terms and conditions either of that version or of any later version
-     published by the Free Software Foundation.  If the Library does not
-     specify a license version number, you may choose any version ever
-     published by the Free Software Foundation.
-
-
-  14. If you wish to incorporate parts of the Library into other free
-     programs whose distribution conditions are incompatible with these,
-     write to the author to ask for permission.  For software which is
-     copyrighted by the Free Software Foundation, write to the Free
-     Software Foundation; we sometimes make exceptions for this.  Our
-     decision will be guided by the two goals of preserving the free
-     status of all derivatives of our free software and of promoting the
-     sharing and reuse of software generally.
-
-
-                              NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-     WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
-     LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
-     AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY
-     OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-     FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-     PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE
-     DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
-     OR CORRECTION.
-
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
-     MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
-     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
-     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-     INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
-     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
-     OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
-     OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
-     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-
-                      END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Libraries
-
-   If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of
-the ordinary General Public License).
-
-   To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should have
-at least the "copyright" line and a pointer to where the full notice is
-found.
-
-
-<one line to give the library's name and a brief idea of what it does.>
-Copyright (C) <year>  <name of author>
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
-
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the library,
-if necessary.  Here is a sample; alter the names:
-
-
-Yoyodyne, Inc., hereby disclaims all copyright interest in the
-library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-<signature of Ty Coon>, 1 April 1990
-Ty Coon, President of Vice
-
-
-   That's all there is to it!
-
-\1f
-File: libconfig.info,  Node: Function Index,  Next: Type Index,  Prev: License,  Up: Top
-
-Function Index
-**************
-
-\0\b[index\0\b]
-* Menu:
-
-* ~Config on Config:                     The C++ API.         (line  75)
-* add on Setting:                        The C++ API.         (line 516)
-* add on Setting <1>:                    The C++ API.         (line 518)
-* add on Setting <2>:                    The C++ API.         (line 531)
-* begin on Setting:                      The C++ API.         (line 625)
-* begin on Setting <1>:                  The C++ API.         (line 627)
-* Config on Config:                      The C++ API.         (line  74)
-* config_destroy:                        The C API.           (line  14)
-* config_error_file:                     The C API.           (line  65)
-* config_error_line:                     The C API.           (line  66)
-* config_error_text:                     The C API.           (line  64)
-* config_error_type:                     The C API.           (line  78)
-* config_get_auto_convert:               The C API.           (line 152)
-* config_get_default_format:             The C API.           (line 160)
-* config_get_include_dir:                The C API.           (line  88)
-* config_get_options:                    The C API.           (line 106)
-* config_get_tab_width:                  The C API.           (line 171)
-* config_init:                           The C API.           (line  13)
-* config_lookup:                         The C API.           (line 206)
-* config_lookup_bool:                    The C API.           (line 189)
-* config_lookup_float:                   The C API.           (line 187)
-* config_lookup_int:                     The C API.           (line 183)
-* config_lookup_int64:                   The C API.           (line 185)
-* config_lookup_string:                  The C API.           (line 191)
-* config_read:                           The C API.           (line  26)
-* config_read_file:                      The C API.           (line  35)
-* config_read_string:                    The C API.           (line  44)
-* config_root_setting:                   The C API.           (line 405)
-* config_setting_add:                    The C API.           (line 368)
-* config_setting_get_bool:               The C API.           (line 228)
-* config_setting_get_bool_elem:          The C API.           (line 332)
-* config_setting_get_elem:               The C API.           (line 318)
-* config_setting_get_float:              The C API.           (line 226)
-* config_setting_get_float_elem:         The C API.           (line 330)
-* config_setting_get_format:             The C API.           (line 287)
-* config_setting_get_hook:               The C API.           (line 498)
-* config_setting_get_int:                The C API.           (line 222)
-* config_setting_get_int64:              The C API.           (line 224)
-* config_setting_get_int64_elem:         The C API.           (line 328)
-* config_setting_get_int_elem:           The C API.           (line 326)
-* config_setting_get_member:             The C API.           (line 311)
-* config_setting_get_string:             The C API.           (line 230)
-* config_setting_get_string_elem:        The C API.           (line 334)
-* config_setting_index:                  The C API.           (line 431)
-* config_setting_is_aggregate:           The C API.           (line 464)
-* config_setting_is_array:               The C API.           (line 455)
-* config_setting_is_group:               The C API.           (line 453)
-* config_setting_is_list:                The C API.           (line 457)
-* config_setting_is_number:              The C API.           (line 468)
-* config_setting_is_root:                The C API.           (line 425)
-* config_setting_is_scalar:              The C API.           (line 466)
-* config_setting_length:                 The C API.           (line 438)
-* config_setting_lookup:                 The C API.           (line 215)
-* config_setting_lookup_bool:            The C API.           (line 269)
-* config_setting_lookup_float:           The C API.           (line 266)
-* config_setting_lookup_int:             The C API.           (line 260)
-* config_setting_lookup_int64:           The C API.           (line 263)
-* config_setting_lookup_string:          The C API.           (line 272)
-* config_setting_name:                   The C API.           (line 411)
-* config_setting_parent:                 The C API.           (line 419)
-* config_setting_remove:                 The C API.           (line 381)
-* config_setting_remove_elem:            The C API.           (line 392)
-* config_setting_set_bool:               The C API.           (line 247)
-* config_setting_set_bool_elem:          The C API.           (line 352)
-* config_setting_set_float:              The C API.           (line 245)
-* config_setting_set_float_elem:         The C API.           (line 350)
-* config_setting_set_format:             The C API.           (line 289)
-* config_setting_set_hook:               The C API.           (line 496)
-* config_setting_set_int:                The C API.           (line 241)
-* config_setting_set_int64:              The C API.           (line 243)
-* config_setting_set_int64_elem:         The C API.           (line 348)
-* config_setting_set_int_elem:           The C API.           (line 346)
-* config_setting_set_string:             The C API.           (line 249)
-* config_setting_set_string_elem:        The C API.           (line 354)
-* config_setting_source_file:            The C API.           (line 478)
-* config_setting_source_line:            The C API.           (line 488)
-* config_setting_type:                   The C API.           (line 445)
-* config_set_auto_convert:               The C API.           (line 151)
-* config_set_default_format:             The C API.           (line 158)
-* config_set_destructor:                 The C API.           (line 508)
-* config_set_include_dir:                The C API.           (line  86)
-* config_set_options:                    The C API.           (line 105)
-* config_set_tab_width:                  The C API.           (line 169)
-* config_write:                          The C API.           (line  53)
-* config_write_file:                     The C API.           (line  57)
-* c_str on Setting:                      The C++ API.         (line 309)
-* end on Setting:                        The C++ API.         (line 626)
-* end on Setting <1>:                    The C++ API.         (line 628)
-* exists on Config:                      The C++ API.         (line 217)
-* exists on Config <1>:                  The C++ API.         (line 218)
-* exists on Setting:                     The C++ API.         (line 618)
-* exists on Setting <1>:                 The C++ API.         (line 619)
-* getAutoConvert on Config:              The C++ API.         (line 179)
-* getDefaultFormat on Config:            The C++ API.         (line 186)
-* getError on ParseException:            The C++ API.         (line 104)
-* getFile on ParseException:             The C++ API.         (line 105)
-* getFormat on Setting:                  The C++ API.         (line 606)
-* getIncludeDir on Config:               The C++ API.         (line 116)
-* getIndex on Setting:                   The C++ API.         (line 594)
-* getLength on Setting:                  The C++ API.         (line 634)
-* getLine on ParseException:             The C++ API.         (line 106)
-* getName on Setting:                    The C++ API.         (line 568)
-* getOptions on Config:                  The C++ API.         (line 133)
-* getParent on Setting:                  The C++ API.         (line 583)
-* getPath on Setting:                    The C++ API.         (line 577)
-* getPath on SettingException:           The C++ API.         (line  66)
-* getRoot on Config:                     The C++ API.         (line 205)
-* getSourceFile on Setting:              The C++ API.         (line 655)
-* getSourceLine on Setting:              The C++ API.         (line 664)
-* getTabWidth on Config:                 The C++ API.         (line 195)
-* getType on Setting:                    The C++ API.         (line 599)
-* isAggregate on Setting:                The C++ API.         (line 646)
-* isArray on Setting:                    The C++ API.         (line 641)
-* isGroup on Setting:                    The C++ API.         (line 640)
-* isList on Setting:                     The C++ API.         (line 642)
-* isNumber on Setting:                   The C++ API.         (line 648)
-* isRoot on Setting:                     The C++ API.         (line 589)
-* isScalar on Setting:                   The C++ API.         (line 647)
-* LIBCONFIGXX_VER_MAJOR:                 Version Test Macros. (line  27)
-* LIBCONFIGXX_VER_MINOR:                 Version Test Macros. (line  28)
-* LIBCONFIGXX_VER_REVISION:              Version Test Macros. (line  29)
-* LIBCONFIG_VER_MAJOR:                   Version Test Macros. (line   8)
-* LIBCONFIG_VER_MINOR:                   Version Test Macros. (line   9)
-* LIBCONFIG_VER_REVISION:                Version Test Macros. (line  10)
-* lookup on Config:                      The C++ API.         (line 210)
-* lookup on Config <1>:                  The C++ API.         (line 211)
-* lookup on Setting:                     The C++ API.         (line 429)
-* lookup on Setting <1>:                 The C++ API.         (line 430)
-* lookupValue on Config:                 The C++ API.         (line 224)
-* lookupValue on Config <1>:             The C++ API.         (line 225)
-* lookupValue on Config <2>:             The C++ API.         (line 228)
-* lookupValue on Config <3>:             The C++ API.         (line 229)
-* lookupValue on Config <4>:             The C++ API.         (line 232)
-* lookupValue on Config <5>:             The C++ API.         (line 234)
-* lookupValue on Config <6>:             The C++ API.         (line 237)
-* lookupValue on Config <7>:             The C++ API.         (line 239)
-* lookupValue on Config <8>:             The C++ API.         (line 242)
-* lookupValue on Config <9>:             The C++ API.         (line 243)
-* lookupValue on Config <10>:            The C++ API.         (line 246)
-* lookupValue on Config <11>:            The C++ API.         (line 247)
-* lookupValue on Config <12>:            The C++ API.         (line 250)
-* lookupValue on Config <13>:            The C++ API.         (line 252)
-* lookupValue on Config <14>:            The C++ API.         (line 255)
-* lookupValue on Config <15>:            The C++ API.         (line 257)
-* lookupValue on Setting:                The C++ API.         (line 436)
-* lookupValue on Setting <1>:            The C++ API.         (line 437)
-* lookupValue on Setting <2>:            The C++ API.         (line 440)
-* lookupValue on Setting <3>:            The C++ API.         (line 441)
-* lookupValue on Setting <4>:            The C++ API.         (line 444)
-* lookupValue on Setting <5>:            The C++ API.         (line 446)
-* lookupValue on Setting <6>:            The C++ API.         (line 449)
-* lookupValue on Setting <7>:            The C++ API.         (line 451)
-* lookupValue on Setting <8>:            The C++ API.         (line 454)
-* lookupValue on Setting <9>:            The C++ API.         (line 456)
-* lookupValue on Setting <10>:           The C++ API.         (line 459)
-* lookupValue on Setting <11>:           The C++ API.         (line 460)
-* lookupValue on Setting <12>:           The C++ API.         (line 463)
-* lookupValue on Setting <13>:           The C++ API.         (line 465)
-* lookupValue on Setting <14>:           The C++ API.         (line 468)
-* lookupValue on Setting <15>:           The C++ API.         (line 470)
-* lookupValue on Setting <16>:           The C++ API.         (line 473)
-* lookupValue on Setting <17>:           The C++ API.         (line 475)
-* operator bool () on Setting:           The C++ API.         (line 298)
-* operator const char * () on Setting:   The C++ API.         (line 307)
-* operator double () on Setting:         The C++ API.         (line 306)
-* operator float () on Setting:          The C++ API.         (line 305)
-* operator int () on Setting:            The C++ API.         (line 299)
-* operator long () on Setting:           The C++ API.         (line 301)
-* operator long long () on Setting:      The C++ API.         (line 303)
-* operator std::string () on Setting:    The C++ API.         (line 308)
-* operator unsigned int () on Setting:   The C++ API.         (line 300)
-* operator unsigned long () on Setting:  The C++ API.         (line 302)
-* operator unsigned long long () on Setting: The C++ API.     (line 304)
-* operator= on Setting:                  The C++ API.         (line 383)
-* operator= on Setting <1>:              The C++ API.         (line 384)
-* operator= on Setting <2>:              The C++ API.         (line 385)
-* operator= on Setting <3>:              The C++ API.         (line 386)
-* operator= on Setting <4>:              The C++ API.         (line 387)
-* operator= on Setting <5>:              The C++ API.         (line 388)
-* operator= on Setting <6>:              The C++ API.         (line 389)
-* operator= on Setting <7>:              The C++ API.         (line 390)
-* operator[] on Setting:                 The C++ API.         (line 407)
-* operator[] on Setting <1>:             The C++ API.         (line 408)
-* operator[] on Setting <2>:             The C++ API.         (line 409)
-* ParseException on ParseException:      The C++ API.         (line  53)
-* read on Config:                        The C++ API.         (line  79)
-* readFile on Config:                    The C++ API.         (line  87)
-* readString on Config:                  The C++ API.         (line  98)
-* readString on Config <1>:              The C++ API.         (line  99)
-* remove on Setting:                     The C++ API.         (line 547)
-* remove on Setting <1>:                 The C++ API.         (line 548)
-* remove on Setting <2>:                 The C++ API.         (line 558)
-* setAutoConvert on Config:              The C++ API.         (line 178)
-* setDefaultFormat on Config:            The C++ API.         (line 185)
-* setFormat on Setting:                  The C++ API.         (line 607)
-* setIncludeDir on Config:               The C++ API.         (line 115)
-* setOptions on Config:                  The C++ API.         (line 132)
-* setTabWidth on Config:                 The C++ API.         (line 194)
-* SettingNameException on SettingNameException: The C++ API.  (line  44)
-* SettingNotFoundException on SettingNotFoundException: The C++ API.
-                                                              (line  31)
-* SettingNotFoundException on SettingNotFoundException <1>: The C++ API.
-                                                              (line  33)
-* SettingNotFoundException on SettingNotFoundException <2>: The C++ API.
-                                                              (line  35)
-* SettingTypeException on SettingTypeException: The C++ API.  (line  19)
-* SettingTypeException on SettingTypeException <1>: The C++ API.
-                                                              (line  21)
-* SettingTypeException on SettingTypeException <2>: The C++ API.
-                                                              (line  23)
-* write on Config:                       The C++ API.         (line  80)
-* writeFile on Config:                   The C++ API.         (line  88)
-
-\1f
-File: libconfig.info,  Node: Type Index,  Next: Concept Index,  Prev: Function Index,  Up: Top
-
-Type Index
-**********
-
-\0\b[index\0\b]
-* Menu:
-
-* Config:                                The C++ API.         (line   6)
-* ConfigException:                       The C++ API.         (line  13)
-* config_error_t:                        The C API.           (line  79)
-* config_setting_t:                      The C API.           (line   6)
-* config_t:                              The C API.           (line   6)
-* FileIOException:                       The C++ API.         (line  59)
-* ParseException:                        The C++ API.         (line  50)
-* Setting:                               The C++ API.         (line   6)
-* Setting::Format:                       The C++ API.         (line 611)
-* Setting::Type:                         The C++ API.         (line 601)
-* SettingException:                      The C++ API.         (line  62)
-* SettingFormat:                         The C API.           (line 296)
-* SettingNameException:                  The C++ API.         (line  41)
-* SettingNotFoundException:              The C++ API.         (line  29)
-* SettingTypeException:                  The C++ API.         (line  16)
-
-\1f
-File: libconfig.info,  Node: Concept Index,  Prev: Type Index,  Up: Top
-
-Concept Index
-*************
-
-\0\b[index\0\b]
-* Menu:
-
-* aggregate value:                       The C API.           (line 471)
-* array:                                 Configuration Files. (line  24)
-* comment:                               Comments.            (line   6)
-* configuration:                         Configuration Files. (line  24)
-* escape sequence:                       String Values.       (line   6)
-* format:                                The C API.           (line 296)
-* group:                                 Configuration Files. (line  24)
-* include directive:                     Include Directives.  (line   6)
-* list:                                  Configuration Files. (line  24)
-* locale:                                Internationalization Issues.
-                                                              (line  14)
-* path:                                  Configuration Files. (line  73)
-* scalar value:                          Configuration Files. (line  24)
-* setting:                               Configuration Files. (line  24)
-* Unicode:                               Internationalization Issues.
-                                                              (line   6)
-* UTF-8:                                 Internationalization Issues.
-                                                              (line   6)
-* value:                                 Configuration Files. (line  24)
-
-
-\1f
-Tag Table:
-Node: Top\7f244
-Node: Introduction\7f531
-Node: Why Another Configuration File Library?\7f1368
-Node: Using the Library from a C Program\7f2446
-Node: Using the Library from a C++ Program\7f2913
-Node: Multithreading Issues\7f3575
-Node: Internationalization Issues\7f5149
-Node: Compiling Using pkg-config\7f6677
-Node: Version Test Macros\7f8209
-Node: Configuration Files\7f9398
-Node: Settings\7f13256
-Node: Groups\7f13575
-Node: Arrays\7f13846
-Node: Lists\7f14119
-Node: Integer Values\7f14406
-Node: 64-bit Integer Values\7f14870
-Node: Floating Point Values\7f15432
-Node: Boolean Values\7f15890
-Node: String Values\7f16162
-Node: Comments\7f17285
-Node: Include Directives\7f18195
-Node: The C API\7f19673
-Node: The C++ API\7f43565
-Node: Example Programs\7f71785
-Node: Configuration File Grammar\7f72893
-Node: License\7f74228
-Node: Function Index\7f102290
-Node: Type Index\7f117891
-Node: Concept Index\7f119129
-\1f
-End Tag Table
index 99d295a..7db70ce 100644 (file)
@@ -6,8 +6,8 @@
 @setfilename libconfig.info
 @settitle libconfig
 
-@set edition 1.5
-@set update-date 16 May 2015
+@set edition 1.6
+@set update-date 31 Dec 2015
 @set subtitle-text A Library For Processing Structured Configuration Files
 @set author-text Mark A.@: Lindner
 
@@ -468,9 +468,9 @@ The value may be a scalar value, an array, a group, or a list.
 
 A group has the form:
 
-@b{@{}
+@b{lbracechar}
    @i{settings ...}
-@b{@}}
+@b{rbracechar}
 
 Groups can contain any number of settings, but each setting must have
 a unique name within the group.
index 5242fcb..29b4dc7 100644 (file)
@@ -1,10 +1,4 @@
 
-lib_LTLIBRARIES = libconfig.la
-
-if BUILDCXX
-lib_LTLIBRARIES += libconfig++.la
-endif
-
 # Versioning rules ( C:R:A )
 #
 # Perform EACH step that applies.
@@ -24,13 +18,15 @@ endif
 #
 # For more info see section 6.3 of the GNU Libtool Manual.
 
-VERINFO = -version-info 11:0:2
+VERINFO = -version-info 11:1:3
 
+## Flex
 PARSER_PREFIX = libconfig_yy
+AM_LFLAGS = --header-file=scanner.h --prefix=$(PARSER_PREFIX)
 
-libconfig_la_LDFLAGS = $(VERINFO) -no-undefined
+## Bison
+AM_YFLAGS = -d -p $(PARSER_PREFIX)
 
-libconfig___la_LDFLAGS = $(VERINFO) -no-undefined
 
 libsrc = libconfig.c scanner.l grammar.y parsectx.h wincompat.h \
        scanctx.c scanctx.h strbuf.c strbuf.h
@@ -41,10 +37,21 @@ libinc_cpp =  libconfig.h++
 
 BUILT_SOURCES = scanner.c scanner.h grammar.c grammar.h
 
+
+
+## Build mode: C-only or C & C++
+lib_LTLIBRARIES = libconfig.la
+
+if BUILDCXX
+lib_LTLIBRARIES += libconfig++.la
+endif
+
+
 libconfig_la_SOURCES = $(libsrc)
 
 libconfig___la_SOURCES = $(libsrc_cpp)
 
+
 libcppflags = -D_REENTRANT
 libcppxxflags = -D_REENTRANT
 
@@ -59,12 +66,15 @@ libconfig___la_CPPFLAGS = -DPARSER_PREFIX=\"$(PARSER_PREFIX)\" $(libcppxxflags)
 include_HEADERS = $(libinc)
 
 if BUILDCXX
-include_HEADERS += $(libinc_cpp)
+  include_HEADERS += $(libinc_cpp)
 endif
 
-AM_YFLAGS = -d -p $(PARSER_PREFIX)
 
-AM_LFLAGS = --header-file=scanner.h --prefix=$(PARSER_PREFIX)
+libconfig_la_LDFLAGS = $(VERINFO) -no-undefined
+
+libconfig___la_LDFLAGS = $(VERINFO) -no-undefined
+
+
 
 EXTRA_DIST = \
        $(BUILT_SOURCES) \
index a43b470..46c43a0 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- mode: C -*- */
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index c65c8fa..47920ec 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 23c2ad6..d2e4154 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 3c47b53..643fa65 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 37fa052..8fe5b81 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A structured configuration file parsing library
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
  
    This file is part of libconfig.
     
index 7c5fd74..cdc4ffc 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 515a041..88368b8 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A structured configuration file parsing library
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
  
    This file is part of libconfig.
     
index 0c1b2e7..60b8ae3 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 682e61b..b14b266 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 436423c..81ae352 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- mode: C -*- */
 /* --------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index fe5f5bc..ff5dff3 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2014  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.
 
index 7826a09..afb3af2 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
    libconfig - A library for processing structured configuration files
-   Copyright (C) 2005-2010  Mark A Lindner
+   Copyright (C) 2005-2015  Mark A Lindner
 
    This file is part of libconfig.