Merge lp:~stewart/percona-playback/migrate-to-pandora-build into lp:~percona-dev/percona-playback/light

Proposed by Stewart Smith
Status: Merged
Merged at revision: 124
Proposed branch: lp:~stewart/percona-playback/migrate-to-pandora-build
Merge into: lp:~percona-dev/percona-playback/light
Diff against target: 13247 lines (+12633/-62)
106 files modified
.quickly (+5/-0)
AUTHORS (+1/-0)
Makefile (+0/-57)
Makefile.am (+90/-0)
config/autorun.sh (+126/-0)
config/config.rpath (+666/-0)
config/lcov.am (+42/-0)
config/pandora-plugin (+719/-0)
config/pandora-plugin.ini (+5/-0)
config/uncrustify.cfg (+1112/-0)
configure.ac (+93/-0)
docs/Doxyfile (+1514/-0)
docs/header.html.in (+6/-0)
m4/acx_pthread.m4 (+271/-0)
m4/iconv.m4 (+214/-0)
m4/lib-ld.m4 (+110/-0)
m4/lib-link.m4 (+767/-0)
m4/lib-prefix.m4 (+221/-0)
m4/pandora_64bit.m4 (+60/-0)
m4/pandora_bison.m4 (+33/-0)
m4/pandora_canonical.m4 (+417/-0)
m4/pandora_check_compiler_version.m4 (+37/-0)
m4/pandora_check_cxx_standard.m4 (+23/-0)
m4/pandora_cinttypes.m4 (+34/-0)
m4/pandora_clock_gettime.m4 (+15/-0)
m4/pandora_compile_stdcxx_0x.m4 (+103/-0)
m4/pandora_cstdint.m4 (+33/-0)
m4/pandora_cxx_demangle.m4 (+27/-0)
m4/pandora_drizzle_build.m4 (+77/-0)
m4/pandora_enable_dtrace.m4 (+60/-0)
m4/pandora_ensure_gcc_version.m4 (+62/-0)
m4/pandora_extensions.m4 (+16/-0)
m4/pandora_fdatasync.m4 (+25/-0)
m4/pandora_flex.m4 (+33/-0)
m4/pandora_have_better_malloc.m4 (+66/-0)
m4/pandora_have_boost.m4 (+93/-0)
m4/pandora_have_gcc_atomics.m4 (+37/-0)
m4/pandora_have_libavahi.m4 (+41/-0)
m4/pandora_have_libbdb.m4 (+40/-0)
m4/pandora_have_libboost_date_time.m4 (+46/-0)
m4/pandora_have_libboost_filesystem.m4 (+45/-0)
m4/pandora_have_libboost_iostreams.m4 (+49/-0)
m4/pandora_have_libboost_options.m4 (+47/-0)
m4/pandora_have_libboost_regex.m4 (+54/-0)
m4/pandora_have_libboost_thread.m4 (+54/-0)
m4/pandora_have_libcassandra.m4 (+44/-0)
m4/pandora_have_libcurl.m4 (+62/-0)
m4/pandora_have_libdl.m4 (+51/-0)
m4/pandora_have_libdrizzle.m4 (+61/-0)
m4/pandora_have_libevent.m4 (+66/-0)
m4/pandora_have_libgearman.m4 (+41/-0)
m4/pandora_have_libgtest.m4 (+47/-0)
m4/pandora_have_libhaildb.m4 (+43/-0)
m4/pandora_have_libhashkit.m4 (+42/-0)
m4/pandora_have_libldap.m4 (+73/-0)
m4/pandora_have_libmemcached.m4 (+106/-0)
m4/pandora_have_libmysqlclient.m4 (+88/-0)
m4/pandora_have_libndbclient.m4 (+80/-0)
m4/pandora_have_libpcre.m4 (+73/-0)
m4/pandora_have_libpq.m4 (+46/-0)
m4/pandora_have_libpqxx.m4 (+44/-0)
m4/pandora_have_libreadline.m4 (+242/-0)
m4/pandora_have_libsqlite3.m4 (+42/-0)
m4/pandora_have_libtokyocabinet.m4 (+54/-0)
m4/pandora_have_libuuid.m4 (+55/-0)
m4/pandora_have_libvbucket.m4 (+40/-0)
m4/pandora_have_libxml2.m4 (+52/-0)
m4/pandora_have_libz.m4 (+51/-0)
m4/pandora_have_protobuf.m4 (+82/-0)
m4/pandora_have_sasl.m4 (+133/-0)
m4/pandora_have_thrift.m4 (+45/-0)
m4/pandora_header_assert.m4 (+23/-0)
m4/pandora_header_stdcxx_98.m4 (+83/-0)
m4/pandora_intltool.m4 (+225/-0)
m4/pandora_libtool.m4 (+25/-0)
m4/pandora_optimize.m4 (+75/-0)
m4/pandora_platform.m4 (+117/-0)
m4/pandora_plugins.m4 (+62/-0)
m4/pandora_print_callstack.m4 (+61/-0)
m4/pandora_pthread.m4 (+258/-0)
m4/pandora_python3_devel.m4 (+236/-0)
m4/pandora_run_cpplint.m4 (+8/-0)
m4/pandora_sasl.m4 (+133/-0)
m4/pandora_shared_ptr.m4 (+59/-0)
m4/pandora_stl_hash.m4 (+89/-0)
m4/pandora_swig.m4 (+39/-0)
m4/pandora_use_pipe.m4 (+36/-0)
m4/pandora_vc_build.m4 (+142/-0)
m4/pandora_version.m4 (+11/-0)
m4/pandora_visibility.m4 (+65/-0)
m4/pandora_warnings.m4 (+440/-0)
m4/pandora_with_lua.m4 (+55/-0)
m4/pandora_with_memcached.m4 (+41/-0)
m4/pandora_with_perl.m4 (+81/-0)
m4/pandora_with_php.m4 (+56/-0)
m4/pandora_with_python.m4 (+37/-0)
m4/pandora_with_python3.m4 (+44/-0)
m4/pandora_with_r.m4 (+33/-0)
m4/pandora_with_ruby.m4 (+79/-0)
m4/po.m4 (+449/-0)
m4/progtest.m4 (+92/-0)
src/include.am (+54/-0)
src/options.cc (+2/-1)
src/query.cc (+1/-4)
test_run.sh (+55/-0)
valgrind.suppressions (+15/-0)
To merge this branch: bzr merge lp:~stewart/percona-playback/migrate-to-pandora-build
Reviewer Review Type Date Requested Status
Percona developers Pending
Review via email: mp+77236@code.launchpad.net

Description of the change

Move from CMAKE to pandora-build (fixing a few configure bugs in the process, enabling a lot of compiler warnings too).

Also fix up a few build issues, add correct license headers to source files.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '.quickly'
2--- .quickly 1970-01-01 00:00:00 +0000
3+++ .quickly 2011-09-27 21:12:27 +0000
4@@ -0,0 +1,5 @@
5+project = percona-playback
6+version = 11.04
7+template = pandora-build
8+project-type = application
9+pandora-version = 0.171
10
11=== added file 'AUTHORS'
12--- AUTHORS 1970-01-01 00:00:00 +0000
13+++ AUTHORS 2011-09-27 21:12:27 +0000
14@@ -0,0 +1,1 @@
15+Copyright (C) 2010-2011 Percona Inc.
16
17=== removed file 'Makefile'
18--- Makefile 2011-07-11 14:40:01 +0000
19+++ Makefile 1970-01-01 00:00:00 +0000
20@@ -1,57 +0,0 @@
21-WITH_GPROF ?= 0
22-CMAKE=cmake -DWITH_GPROF=$(WITH_GPROF) -G "Unix Makefiles"
23-all: test
24-
25-generate: generate_release generate_debug
26-
27-build: build_release build_debug
28-
29-test: build
30- $(MAKE) test_release
31- $(MAKE) test_debug
32-
33-clean: clean_release clean_debug
34- @rm -rf bin/
35-
36-generate_release:
37- @echo "Generating release Makefile"
38- @mkdir -p release
39- @(cd release; $(CMAKE) -DCMAKE_BUILD_TYPE=Release ../)
40-generate_debug:
41- @echo "Generating debug Makefile"
42- @mkdir -p debug
43- @(cd debug; $(CMAKE) -DCMAKE_BUILD_TYPE=Debug ../)
44-
45-build_release: generate_release
46- @echo "Building release"
47- @(cd release; $(MAKE))
48- mkdir -p bin
49- rm -f bin/ppb.release
50- cp release/src/ppb bin/ppb.release
51-
52-build_debug: generate_debug
53- @echo "Building debug"
54- @(cd debug; $(MAKE))
55- mkdir -p bin
56- rm -f bin/ppb.debug
57- cp debug/src/ppb bin/ppb.debug
58-
59-test_release: build_release
60- @echo "Testing release"
61- @(cd release; $(MAKE) test-bt)
62-
63-test_debug: build_debug
64- @echo "Testing debug"
65- @(cd debug; $(MAKE) test-bt)
66-
67-clean_release:
68- @echo "Cleaning release"
69- @rm -rf release
70- @rm -f bin/ppb.release
71-
72-clean_debug:
73- @echo "Cleaning debug"
74- @rm -rf debug
75- @rm -f bin/ppb.debug
76-
77-.DEFAULT_GOAL := build
78
79=== added file 'Makefile.am'
80--- Makefile.am 1970-01-01 00:00:00 +0000
81+++ Makefile.am 2011-09-27 21:12:27 +0000
82@@ -0,0 +1,90 @@
83+#
84+# Percona Playback
85+#
86+### BEGIN LICENSE
87+# Copyright (C) 2011 Stewart Smith <stewart@flamingspork.com>
88+# This program is free software: you can redistribute it and/or modify it
89+# under the terms of the GNU General Public License version 3, as published
90+# by the Free Software Foundation.
91+#
92+# This program is distributed in the hope that it will be useful, but
93+# WITHOUT ANY WARRANTY; without even the implied warranties of
94+# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
95+# PURPOSE. See the GNU General Public License for more details.
96+#
97+# You should have received a copy of the GNU General Public License along
98+# with this program. If not, see <http://www.gnu.org/licenses/>.
99+### END LICENSE
100+
101+ACLOCAL_AMFLAGS = -I m4
102+LDADD =
103+AM_DEFAULT_SOURCE_EXT = .cc
104+
105+
106+bin_PROGRAMS =
107+check_PROGRAMS =
108+noinst_PROGRAMS =
109+lib_LTLIBRARIES =
110+noinst_LTLIBRARIES =
111+nobase_include_HEADERS =
112+noinst_HEADERS =
113+nobase_nodist_include_HEADERS =
114+nobase_dist_include_HEADERS =
115+dist_include_HEADERS =
116+nobase_nodist_pkginclude_HEADERS =
117+nobase_dist_pkginclude_HEADERS =
118+pkgplugin_LTLIBRARIES =
119+CLEANFILES =
120+DISTCLEANFILES = \
121+ config/top.h
122+EXTRA_DIST = \
123+ docs/Doxyfile \
124+ docs/header.html.in \
125+ test_run.sh
126+
127+CFLAGS+= -I.
128+CXXFLAGS+= -I.
129+
130+include src/include.am
131+
132+include config/pandora-plugin.am
133+
134+TESTS = $(check_PROGRAMS)
135+
136+TESTS_ENVIRONMENT = ${top_srcdir}/test_run.sh
137+
138+check-verbose:
139+ @PERCONA_PLAYBACK_TEST_ARGS="v" make check
140+
141+check-debug:
142+ @PERCONA_PLAYBACK_TEST_ARGS="vvv" make check
143+
144+check-valgrind:
145+ @PERCONA_PLAYBACK_TEST_PREFIX="valgrind -q --leak-check=full --show-reachable=yes --suppressions=valgrind.suppressions" make check
146+
147+check-valgrind-debug:
148+ @PERCONA_PLAYBACK_TEST_PREFIX="valgrind -q --leak-check=full --show-reachable=yes --suppressions=valgrind.suppressions" PERCONA_PLAYBACK_TEST_ARGS="vvv" make check
149+
150+check-gdb:
151+ @PERCONA_PLAYBACK_TEST_PREFIX="gdb -q" make check
152+
153+check-time:
154+ @PERCONA_PLAYBACK_TEST_PREFIX="/usr/bin/time" make check
155+
156+check-strace:
157+ @PERCONA_PLAYBACK_TEST_PREFIX="strace -c" make check
158+
159+check-truss:
160+ @PERCONA_PLAYBACK_TEST_PREFIX="truss -c" make check
161+
162+docs: all
163+ @echo "/**" > docs/mainpage.h
164+ @echo "@mainpage README" >> docs/mainpage.h
165+ @echo "<pre>" >> docs/mainpage.h
166+ @cat ${top_srcdir}/README >> docs/mainpage.h
167+ @echo "</pre>" >> docs/mainpage.h
168+ @echo "*/" >> docs/mainpage.h
169+ ${DOXYGEN} ${top_srcdir}/docs/Doxyfile
170+ @rm docs/mainpage.h
171+
172+include config/lcov.am
173
174=== added directory 'config'
175=== added file 'config/autorun.sh'
176--- config/autorun.sh 1970-01-01 00:00:00 +0000
177+++ config/autorun.sh 2011-09-27 21:12:27 +0000
178@@ -0,0 +1,126 @@
179+#!/bin/sh
180+#
181+# Copyright (C) 2006 Jan Kneschke
182+# Copyright (C) 2009 Sun Microsystems, Inc.
183+# All rights reserved.
184+#
185+# Redistribution and use in source and binary forms, with or without
186+# modification, are permitted provided that the following conditions are met:
187+#
188+# 1. Redistributions of source code must retain the above copyright
189+# notice, this list of conditions and the following disclaimer.
190+# 2. Redistributions in binary form must reproduce the above copyright
191+# notice, this list of conditions and the following disclaimer in the
192+# documentation and/or other materials provided with the distribution.
193+# 3. The name of the author may not be used to endorse or promote products
194+# derived from this software without specific prior written permission.
195+#
196+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
197+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
198+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
200+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
201+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
202+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
203+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
204+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
205+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
206+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
207+#
208+# Run this to generate all the initial makefiles, etc.
209+
210+die() { echo "$@"; exit 1; }
211+
212+# --force means overwrite ltmain.sh script if it already exists
213+LIBTOOLIZE_FLAGS=" --automake --copy --force"
214+# --add-missing instructs automake to install missing auxiliary files
215+# and --force to overwrite them if they already exist
216+AUTOMAKE_FLAGS="--add-missing --copy --force --foreign"
217+ACLOCAL_FLAGS="-I m4"
218+
219+ARGV0=$0
220+ARGS="$@"
221+
222+run() {
223+ echo "$ARGV0: running \`$@' $ARGS"
224+ $@ $ARGS
225+}
226+
227+# Try to locate a program by using which, and verify that the file is an
228+# executable
229+locate_binary() {
230+ for f in $@
231+ do
232+ file=`which $f 2>/dev/null | grep -v '^no '`
233+ if test -n "$file" -a -x "$file"; then
234+ echo $file
235+ return 0
236+ fi
237+ done
238+
239+ echo ""
240+ return 1
241+}
242+
243+
244+if test -f config/pre_hook.sh
245+then
246+ . config/pre_hook.sh
247+fi
248+
249+# Try to detect the supported binaries if the user didn't
250+# override that by pushing the environment variable
251+if test x$LIBTOOLIZE = x; then
252+ LIBTOOLIZE=`locate_binary glibtoolize libtoolize-1.5 libtoolize`
253+ if test x$LIBTOOLIZE = x; then
254+ die "Did not find a supported libtoolize"
255+ fi
256+fi
257+
258+if test x$ACLOCAL = x; then
259+ ACLOCAL=`locate_binary aclocal-1.11 aclocal-1.10 aclocal-1.9 aclocal19 aclocal`
260+ if test x$ACLOCAL = x; then
261+ die "Did not find a supported aclocal"
262+ fi
263+fi
264+
265+if test x$AUTOMAKE = x; then
266+ AUTOMAKE=`locate_binary automake-1.11 automake-1.10 automake-1.9 automake19 automake`
267+ if test x$AUTOMAKE = x; then
268+ die "Did not find a supported automake"
269+ fi
270+fi
271+
272+if test x$AUTOCONF = x; then
273+ AUTOCONF=`locate_binary autoconf-2.59 autoconf259 autoconf`
274+ if test x$AUTOCONF = x; then
275+ die "Did not find a supported autoconf"
276+ fi
277+fi
278+
279+if test x$AUTOHEADER = x; then
280+ AUTOHEADER=`locate_binary autoheader-2.59 autoheader259 autoheader`
281+ if test x$AUTOHEADER = x; then
282+ die "Did not find a supported autoheader"
283+ fi
284+fi
285+
286+run $LIBTOOLIZE $LIBTOOLIZE_FLAGS || die "Can't execute libtoolize"
287+run $ACLOCAL $ACLOCAL_FLAGS || die "Can't execute aclocal"
288+run $AUTOHEADER || die "Can't execute autoheader"
289+run $AUTOMAKE $AUTOMAKE_FLAGS || die "Can't execute automake"
290+run $AUTOCONF || die "Can't execute autoconf"
291+
292+if test -f config/post_hook.sh
293+then
294+ . config/post_hook.sh
295+fi
296+
297+echo "---"
298+echo "Configured with the following tools:"
299+echo " * `$LIBTOOLIZE --version | head -1`"
300+echo " * `$ACLOCAL --version | head -1`"
301+echo " * `$AUTOHEADER --version | head -1`"
302+echo " * `$AUTOMAKE --version | head -1`"
303+echo " * `$AUTOCONF --version | head -1`"
304+echo "---"
305
306=== added file 'config/config.rpath'
307--- config/config.rpath 1970-01-01 00:00:00 +0000
308+++ config/config.rpath 2011-09-27 21:12:27 +0000
309@@ -0,0 +1,666 @@
310+#! /bin/sh
311+# Output a system dependent set of variables, describing how to set the
312+# run time search path of shared libraries in an executable.
313+#
314+# Copyright 1996-2007 Free Software Foundation, Inc.
315+# Taken from GNU libtool, 2001
316+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
317+#
318+# This file is free software; the Free Software Foundation gives
319+# unlimited permission to copy and/or distribute it, with or without
320+# modifications, as long as this notice is preserved.
321+#
322+# The first argument passed to this file is the canonical host specification,
323+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
324+# or
325+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
326+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
327+# should be set by the caller.
328+#
329+# The set of defined variables is at the end of this script.
330+
331+# Known limitations:
332+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
333+# than 256 bytes, otherwise the compiler driver will dump core. The only
334+# known workaround is to choose shorter directory names for the build
335+# directory and/or the installation directory.
336+
337+# All known linkers require a `.a' archive for static linking (except MSVC,
338+# which needs '.lib').
339+libext=a
340+shrext=.so
341+
342+host="$1"
343+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
344+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
345+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
346+
347+# Code taken from libtool.m4's _LT_CC_BASENAME.
348+
349+for cc_temp in $CC""; do
350+ case $cc_temp in
351+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
352+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
353+ \-*) ;;
354+ *) break;;
355+ esac
356+done
357+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
358+
359+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
360+
361+wl=
362+if test "$GCC" = yes; then
363+ wl='-Wl,'
364+else
365+ case "$host_os" in
366+ aix*)
367+ wl='-Wl,'
368+ ;;
369+ darwin*)
370+ case $cc_basename in
371+ xlc*)
372+ wl='-Wl,'
373+ ;;
374+ esac
375+ ;;
376+ mingw* | cygwin* | pw32* | os2*)
377+ ;;
378+ hpux9* | hpux10* | hpux11*)
379+ wl='-Wl,'
380+ ;;
381+ irix5* | irix6* | nonstopux*)
382+ wl='-Wl,'
383+ ;;
384+ newsos6)
385+ ;;
386+ linux* | k*bsd*-gnu)
387+ case $cc_basename in
388+ icc* | ecc*)
389+ wl='-Wl,'
390+ ;;
391+ pgcc | pgf77 | pgf90)
392+ wl='-Wl,'
393+ ;;
394+ ccc*)
395+ wl='-Wl,'
396+ ;;
397+ como)
398+ wl='-lopt='
399+ ;;
400+ *)
401+ case `$CC -V 2>&1 | sed 5q` in
402+ *Sun\ C*)
403+ wl='-Wl,'
404+ ;;
405+ esac
406+ ;;
407+ esac
408+ ;;
409+ osf3* | osf4* | osf5*)
410+ wl='-Wl,'
411+ ;;
412+ rdos*)
413+ ;;
414+ solaris*)
415+ wl='-Wl,'
416+ ;;
417+ sunos4*)
418+ wl='-Qoption ld '
419+ ;;
420+ sysv4 | sysv4.2uw2* | sysv4.3*)
421+ wl='-Wl,'
422+ ;;
423+ sysv4*MP*)
424+ ;;
425+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
426+ wl='-Wl,'
427+ ;;
428+ unicos*)
429+ wl='-Wl,'
430+ ;;
431+ uts4*)
432+ ;;
433+ esac
434+fi
435+
436+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
437+
438+hardcode_libdir_flag_spec=
439+hardcode_libdir_separator=
440+hardcode_direct=no
441+hardcode_minus_L=no
442+
443+case "$host_os" in
444+ cygwin* | mingw* | pw32*)
445+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
446+ # When not using gcc, we currently assume that we are using
447+ # Microsoft Visual C++.
448+ if test "$GCC" != yes; then
449+ with_gnu_ld=no
450+ fi
451+ ;;
452+ interix*)
453+ # we just hope/assume this is gcc and not c89 (= MSVC++)
454+ with_gnu_ld=yes
455+ ;;
456+ openbsd*)
457+ with_gnu_ld=no
458+ ;;
459+esac
460+
461+ld_shlibs=yes
462+if test "$with_gnu_ld" = yes; then
463+ # Set some defaults for GNU ld with shared library support. These
464+ # are reset later if shared libraries are not supported. Putting them
465+ # here allows them to be overridden if necessary.
466+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
467+ # option of GNU ld is called -rpath, not --rpath.
468+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
469+ case "$host_os" in
470+ aix3* | aix4* | aix5*)
471+ # On AIX/PPC, the GNU linker is very broken
472+ if test "$host_cpu" != ia64; then
473+ ld_shlibs=no
474+ fi
475+ ;;
476+ amigaos*)
477+ hardcode_libdir_flag_spec='-L$libdir'
478+ hardcode_minus_L=yes
479+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
480+ # that the semantics of dynamic libraries on AmigaOS, at least up
481+ # to version 4, is to share data among multiple programs linked
482+ # with the same dynamic library. Since this doesn't match the
483+ # behavior of shared libraries on other platforms, we cannot use
484+ # them.
485+ ld_shlibs=no
486+ ;;
487+ beos*)
488+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
489+ :
490+ else
491+ ld_shlibs=no
492+ fi
493+ ;;
494+ cygwin* | mingw* | pw32*)
495+ # hardcode_libdir_flag_spec is actually meaningless, as there is
496+ # no search path for DLLs.
497+ hardcode_libdir_flag_spec='-L$libdir'
498+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
499+ :
500+ else
501+ ld_shlibs=no
502+ fi
503+ ;;
504+ interix[3-9]*)
505+ hardcode_direct=no
506+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
507+ ;;
508+ gnu* | linux* | k*bsd*-gnu)
509+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
510+ :
511+ else
512+ ld_shlibs=no
513+ fi
514+ ;;
515+ netbsd*)
516+ ;;
517+ solaris*)
518+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
519+ ld_shlibs=no
520+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
521+ :
522+ else
523+ ld_shlibs=no
524+ fi
525+ ;;
526+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
527+ case `$LD -v 2>&1` in
528+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
529+ ld_shlibs=no
530+ ;;
531+ *)
532+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
533+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
534+ else
535+ ld_shlibs=no
536+ fi
537+ ;;
538+ esac
539+ ;;
540+ sunos4*)
541+ hardcode_direct=yes
542+ ;;
543+ *)
544+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
545+ :
546+ else
547+ ld_shlibs=no
548+ fi
549+ ;;
550+ esac
551+ if test "$ld_shlibs" = no; then
552+ hardcode_libdir_flag_spec=
553+ fi
554+else
555+ case "$host_os" in
556+ aix3*)
557+ # Note: this linker hardcodes the directories in LIBPATH if there
558+ # are no directories specified by -L.
559+ hardcode_minus_L=yes
560+ if test "$GCC" = yes; then
561+ # Neither direct hardcoding nor static linking is supported with a
562+ # broken collect2.
563+ hardcode_direct=unsupported
564+ fi
565+ ;;
566+ aix4* | aix5*)
567+ if test "$host_cpu" = ia64; then
568+ # On IA64, the linker does run time linking by default, so we don't
569+ # have to do anything special.
570+ aix_use_runtimelinking=no
571+ else
572+ aix_use_runtimelinking=no
573+ # Test if we are trying to use run time linking or normal
574+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
575+ # need to do runtime linking.
576+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
577+ for ld_flag in $LDFLAGS; do
578+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
579+ aix_use_runtimelinking=yes
580+ break
581+ fi
582+ done
583+ ;;
584+ esac
585+ fi
586+ hardcode_direct=yes
587+ hardcode_libdir_separator=':'
588+ if test "$GCC" = yes; then
589+ case $host_os in aix4.[012]|aix4.[012].*)
590+ collect2name=`${CC} -print-prog-name=collect2`
591+ if test -f "$collect2name" && \
592+ strings "$collect2name" | grep resolve_lib_name >/dev/null
593+ then
594+ # We have reworked collect2
595+ :
596+ else
597+ # We have old collect2
598+ hardcode_direct=unsupported
599+ hardcode_minus_L=yes
600+ hardcode_libdir_flag_spec='-L$libdir'
601+ hardcode_libdir_separator=
602+ fi
603+ ;;
604+ esac
605+ fi
606+ # Begin _LT_AC_SYS_LIBPATH_AIX.
607+ echo 'int main () { return 0; }' > conftest.c
608+ ${CC} ${LDFLAGS} conftest.c -o conftest
609+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
610+}'`
611+ if test -z "$aix_libpath"; then
612+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
613+}'`
614+ fi
615+ if test -z "$aix_libpath"; then
616+ aix_libpath="/usr/lib:/lib"
617+ fi
618+ rm -f conftest.c conftest
619+ # End _LT_AC_SYS_LIBPATH_AIX.
620+ if test "$aix_use_runtimelinking" = yes; then
621+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
622+ else
623+ if test "$host_cpu" = ia64; then
624+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
625+ else
626+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
627+ fi
628+ fi
629+ ;;
630+ amigaos*)
631+ hardcode_libdir_flag_spec='-L$libdir'
632+ hardcode_minus_L=yes
633+ # see comment about different semantics on the GNU ld section
634+ ld_shlibs=no
635+ ;;
636+ bsdi[45]*)
637+ ;;
638+ cygwin* | mingw* | pw32*)
639+ # When not using gcc, we currently assume that we are using
640+ # Microsoft Visual C++.
641+ # hardcode_libdir_flag_spec is actually meaningless, as there is
642+ # no search path for DLLs.
643+ hardcode_libdir_flag_spec=' '
644+ libext=lib
645+ ;;
646+ darwin* | rhapsody*)
647+ hardcode_direct=no
648+ if test "$GCC" = yes ; then
649+ :
650+ else
651+ case $cc_basename in
652+ xlc*)
653+ ;;
654+ *)
655+ ld_shlibs=no
656+ ;;
657+ esac
658+ fi
659+ ;;
660+ dgux*)
661+ hardcode_libdir_flag_spec='-L$libdir'
662+ ;;
663+ freebsd1*)
664+ ld_shlibs=no
665+ ;;
666+ freebsd2.2*)
667+ hardcode_libdir_flag_spec='-R$libdir'
668+ hardcode_direct=yes
669+ ;;
670+ freebsd2*)
671+ hardcode_direct=yes
672+ hardcode_minus_L=yes
673+ ;;
674+ freebsd* | dragonfly*)
675+ hardcode_libdir_flag_spec='-R$libdir'
676+ hardcode_direct=yes
677+ ;;
678+ hpux9*)
679+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
680+ hardcode_libdir_separator=:
681+ hardcode_direct=yes
682+ # hardcode_minus_L: Not really in the search PATH,
683+ # but as the default location of the library.
684+ hardcode_minus_L=yes
685+ ;;
686+ hpux10*)
687+ if test "$with_gnu_ld" = no; then
688+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
689+ hardcode_libdir_separator=:
690+ hardcode_direct=yes
691+ # hardcode_minus_L: Not really in the search PATH,
692+ # but as the default location of the library.
693+ hardcode_minus_L=yes
694+ fi
695+ ;;
696+ hpux11*)
697+ if test "$with_gnu_ld" = no; then
698+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
699+ hardcode_libdir_separator=:
700+ case $host_cpu in
701+ hppa*64*|ia64*)
702+ hardcode_direct=no
703+ ;;
704+ *)
705+ hardcode_direct=yes
706+ # hardcode_minus_L: Not really in the search PATH,
707+ # but as the default location of the library.
708+ hardcode_minus_L=yes
709+ ;;
710+ esac
711+ fi
712+ ;;
713+ irix5* | irix6* | nonstopux*)
714+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
715+ hardcode_libdir_separator=:
716+ ;;
717+ netbsd*)
718+ hardcode_libdir_flag_spec='-R$libdir'
719+ hardcode_direct=yes
720+ ;;
721+ newsos6)
722+ hardcode_direct=yes
723+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
724+ hardcode_libdir_separator=:
725+ ;;
726+ openbsd*)
727+ if test -f /usr/libexec/ld.so; then
728+ hardcode_direct=yes
729+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
730+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
731+ else
732+ case "$host_os" in
733+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
734+ hardcode_libdir_flag_spec='-R$libdir'
735+ ;;
736+ *)
737+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
738+ ;;
739+ esac
740+ fi
741+ else
742+ ld_shlibs=no
743+ fi
744+ ;;
745+ os2*)
746+ hardcode_libdir_flag_spec='-L$libdir'
747+ hardcode_minus_L=yes
748+ ;;
749+ osf3*)
750+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
751+ hardcode_libdir_separator=:
752+ ;;
753+ osf4* | osf5*)
754+ if test "$GCC" = yes; then
755+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
756+ else
757+ # Both cc and cxx compiler support -rpath directly
758+ hardcode_libdir_flag_spec='-rpath $libdir'
759+ fi
760+ hardcode_libdir_separator=:
761+ ;;
762+ solaris*)
763+ hardcode_libdir_flag_spec='-R$libdir'
764+ ;;
765+ sunos4*)
766+ hardcode_libdir_flag_spec='-L$libdir'
767+ hardcode_direct=yes
768+ hardcode_minus_L=yes
769+ ;;
770+ sysv4)
771+ case $host_vendor in
772+ sni)
773+ hardcode_direct=yes # is this really true???
774+ ;;
775+ siemens)
776+ hardcode_direct=no
777+ ;;
778+ motorola)
779+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
780+ ;;
781+ esac
782+ ;;
783+ sysv4.3*)
784+ ;;
785+ sysv4*MP*)
786+ if test -d /usr/nec; then
787+ ld_shlibs=yes
788+ fi
789+ ;;
790+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
791+ ;;
792+ sysv5* | sco3.2v5* | sco5v6*)
793+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
794+ hardcode_libdir_separator=':'
795+ ;;
796+ uts4*)
797+ hardcode_libdir_flag_spec='-L$libdir'
798+ ;;
799+ *)
800+ ld_shlibs=no
801+ ;;
802+ esac
803+fi
804+
805+# Check dynamic linker characteristics
806+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
807+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
808+# only about the one the linker finds when passed -lNAME. This is the last
809+# element of library_names_spec in libtool.m4, or possibly two of them if the
810+# linker has special search rules.
811+library_names_spec= # the last element of library_names_spec in libtool.m4
812+libname_spec='lib$name'
813+case "$host_os" in
814+ aix3*)
815+ library_names_spec='$libname.a'
816+ ;;
817+ aix4* | aix5*)
818+ library_names_spec='$libname$shrext'
819+ ;;
820+ amigaos*)
821+ library_names_spec='$libname.a'
822+ ;;
823+ beos*)
824+ library_names_spec='$libname$shrext'
825+ ;;
826+ bsdi[45]*)
827+ library_names_spec='$libname$shrext'
828+ ;;
829+ cygwin* | mingw* | pw32*)
830+ shrext=.dll
831+ library_names_spec='$libname.dll.a $libname.lib'
832+ ;;
833+ darwin* | rhapsody*)
834+ shrext=.dylib
835+ library_names_spec='$libname$shrext'
836+ ;;
837+ dgux*)
838+ library_names_spec='$libname$shrext'
839+ ;;
840+ freebsd1*)
841+ ;;
842+ freebsd* | dragonfly*)
843+ case "$host_os" in
844+ freebsd[123]*)
845+ library_names_spec='$libname$shrext$versuffix' ;;
846+ *)
847+ library_names_spec='$libname$shrext' ;;
848+ esac
849+ ;;
850+ gnu*)
851+ library_names_spec='$libname$shrext'
852+ ;;
853+ hpux9* | hpux10* | hpux11*)
854+ case $host_cpu in
855+ ia64*)
856+ shrext=.so
857+ ;;
858+ hppa*64*)
859+ shrext=.sl
860+ ;;
861+ *)
862+ shrext=.sl
863+ ;;
864+ esac
865+ library_names_spec='$libname$shrext'
866+ ;;
867+ interix[3-9]*)
868+ library_names_spec='$libname$shrext'
869+ ;;
870+ irix5* | irix6* | nonstopux*)
871+ library_names_spec='$libname$shrext'
872+ case "$host_os" in
873+ irix5* | nonstopux*)
874+ libsuff= shlibsuff=
875+ ;;
876+ *)
877+ case $LD in
878+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
879+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
880+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
881+ *) libsuff= shlibsuff= ;;
882+ esac
883+ ;;
884+ esac
885+ ;;
886+ linux*oldld* | linux*aout* | linux*coff*)
887+ ;;
888+ linux* | k*bsd*-gnu)
889+ library_names_spec='$libname$shrext'
890+ ;;
891+ knetbsd*-gnu)
892+ library_names_spec='$libname$shrext'
893+ ;;
894+ netbsd*)
895+ library_names_spec='$libname$shrext'
896+ ;;
897+ newsos6)
898+ library_names_spec='$libname$shrext'
899+ ;;
900+ nto-qnx*)
901+ library_names_spec='$libname$shrext'
902+ ;;
903+ openbsd*)
904+ library_names_spec='$libname$shrext$versuffix'
905+ ;;
906+ os2*)
907+ libname_spec='$name'
908+ shrext=.dll
909+ library_names_spec='$libname.a'
910+ ;;
911+ osf3* | osf4* | osf5*)
912+ library_names_spec='$libname$shrext'
913+ ;;
914+ rdos*)
915+ ;;
916+ solaris*)
917+ library_names_spec='$libname$shrext'
918+ ;;
919+ sunos4*)
920+ library_names_spec='$libname$shrext$versuffix'
921+ ;;
922+ sysv4 | sysv4.3*)
923+ library_names_spec='$libname$shrext'
924+ ;;
925+ sysv4*MP*)
926+ library_names_spec='$libname$shrext'
927+ ;;
928+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
929+ library_names_spec='$libname$shrext'
930+ ;;
931+ uts4*)
932+ library_names_spec='$libname$shrext'
933+ ;;
934+esac
935+
936+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
937+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
938+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
939+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
940+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
941+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
942+
943+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
944+
945+# How to pass a linker flag through the compiler.
946+wl="$escaped_wl"
947+
948+# Static library suffix (normally "a").
949+libext="$libext"
950+
951+# Shared library suffix (normally "so").
952+shlibext="$shlibext"
953+
954+# Format of library name prefix.
955+libname_spec="$escaped_libname_spec"
956+
957+# Library names that the linker finds when passed -lNAME.
958+library_names_spec="$escaped_library_names_spec"
959+
960+# Flag to hardcode \$libdir into a binary during linking.
961+# This must work even if \$libdir does not exist.
962+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
963+
964+# Whether we need a single -rpath flag with a separated argument.
965+hardcode_libdir_separator="$hardcode_libdir_separator"
966+
967+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
968+# resulting binary.
969+hardcode_direct="$hardcode_direct"
970+
971+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
972+# resulting binary.
973+hardcode_minus_L="$hardcode_minus_L"
974+
975+EOF
976
977=== added file 'config/lcov.am'
978--- config/lcov.am 1970-01-01 00:00:00 +0000
979+++ config/lcov.am 2011-09-27 21:12:27 +0000
980@@ -0,0 +1,42 @@
981+# Copyright (C) 2010 Hartmut Holzgraefe
982+#
983+# This program is free software; you can redistribute it and/or modify
984+# it under the terms of the GNU General Public License as published by
985+# the Free Software Foundation; version 2 of the License.
986+#
987+# This program is distributed in the hope that it will be useful,
988+# but WITHOUT ANY WARRANTY; without even the implied warranty of
989+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
990+# GNU General Public License for more details.
991+#
992+# You should have received a copy of the GNU General Public License
993+# along with this program; if not, write to the Free Software
994+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
995+
996+LCOV = lcov
997+LCOV_GENHTML = genhtml
998+
999+lcov: lcov-html
1000+
1001+lcov-test: lcov-clean-data test
1002+
1003+drizzle_lcov.info: lcov-test
1004+ @echo "Generating $@"
1005+ $(LCOV) --directory . --capture --base-directory . --output-file $@
1006+ $(LCOV) --remove $@ '/usr/include/*' --output-file $@
1007+ $(LCOV) --remove $@ '/usr/local/include/*' --output-file $@
1008+ @echo
1009+
1010+lcov-html: drizzle_lcov.info
1011+ @echo "Generating lcov HTML"
1012+ @$(LCOV_GENHTML) --legend --output-directory lcov_html/ --title "Drizzle Code Coverage" $<
1013+
1014+lcov-clean:
1015+ rm -f drizzle_lcov.info
1016+ rm -rf lcov_data/
1017+ rm -rf lcov_html/
1018+
1019+lcov-clean-data:
1020+ @find . -name \*.gcda -o -name \*.da -o -name \*.bbg? | xargs rm -f
1021+
1022+
1023
1024=== added file 'config/pandora-plugin'
1025--- config/pandora-plugin 1970-01-01 00:00:00 +0000
1026+++ config/pandora-plugin 2011-09-27 21:12:27 +0000
1027@@ -0,0 +1,719 @@
1028+#!/usr/bin/python
1029+
1030+# Copyright (C) 2009 Sun Microsystems, Inc.
1031+#
1032+# This program is free software; you can redistribute it and/or modify
1033+# it under the terms of the GNU General Public License as published by
1034+# the Free Software Foundation; version 2 of the License.
1035+#
1036+# This program is distributed in the hope that it will be useful,
1037+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1038+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1039+# GNU General Public License for more details.
1040+#
1041+# You should have received a copy of the GNU General Public License
1042+# along with this program; if not, write to the Free Software
1043+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1044+
1045+pandora_plugin_file = 'config/pandora-plugin.ini'
1046+
1047+# Find plugins in the tree and add them to the build system
1048+
1049+import ConfigParser, os, sys
1050+import datetime, time
1051+import subprocess
1052+
1053+plugin_am_file=None
1054+plugin_ac_file=None
1055+plugin_doc_index=None
1056+
1057+class ChangeProtectedFile(object):
1058+
1059+ def __init__(self, fname):
1060+ self.bogus_file= False
1061+ self.real_fname= fname
1062+ self.new_fname= "%s.new" % fname
1063+ try:
1064+ self.new_file= open(self.new_fname,'w+')
1065+ except IOError:
1066+ self.bogus_file= True
1067+
1068+ def write(self, text):
1069+ if not self.bogus_file:
1070+ self.new_file.write(text)
1071+
1072+ # We've written all of this out into .new files, now we only copy them
1073+ # over the old ones if they are different, so that we don't cause
1074+ # unnecessary recompiles
1075+ def close(self):
1076+ """Return True if the file had changed."""
1077+ if self.bogus_file:
1078+ return
1079+ self.new_file.seek(0)
1080+ new_content = self.new_file.read()
1081+ self.new_file.close()
1082+ try:
1083+ old_file = file(self.real_fname, 'r')
1084+ old_content = old_file.read()
1085+ old_file.close()
1086+ except IOError:
1087+ old_content = None
1088+ if new_content != old_content:
1089+ if old_content != None:
1090+ os.unlink(self.real_fname)
1091+ os.rename(self.new_fname, self.real_fname)
1092+ return True
1093+ else:
1094+ try:
1095+ os.unlink(self.new_fname)
1096+ except:
1097+ pass
1098+
1099+
1100+def write_external_configure(plugin, plugin_file):
1101+ """Write the initial bits of the configure.ac file"""
1102+ if not os.path.exists('m4'):
1103+ os.mkdir('m4')
1104+ plugin_file.write("""
1105+AC_PREREQ(2.59)dnl Minimum Autoconf version required.
1106+AC_INIT([%(name)s],[%(version)s],[%(url)s])
1107+AC_CONFIG_SRCDIR([%(main_source)s])
1108+AC_CONFIG_AUX_DIR(config)
1109+
1110+PANDORA_CANONICAL_TARGET(less-warnings, warnings-always-on, require-cxx, force-gcc42,skip-visibility)
1111+
1112+PANDORA_REQUIRE_LIBPROTOBUF
1113+PANDORA_PROTOBUF_REQUIRE_VERSION([2.1.0])
1114+PANDORA_REQUIRE_PROTOC
1115+
1116+AC_LANG_PUSH(C++)
1117+PANDORA_REQUIRE_PTHREAD
1118+PANDORA_REQUIRE_LIBDL
1119+AC_LANG_POP
1120+
1121+PANDORA_USE_BETTER_MALLOC
1122+
1123+PANDORA_DRIZZLE_BUILD
1124+""" % plugin)
1125+
1126+ write_plugin_ac(plugin, plugin_file)
1127+
1128+ plugin_file.write("""
1129+AC_CONFIG_FILES(Makefile)
1130+
1131+AC_OUTPUT
1132+
1133+echo "---"
1134+echo "Configuration summary for $PACKAGE_NAME version $VERSION $PANDORA_RELEASE_COMMENT"
1135+echo ""
1136+echo " * Installation prefix: $prefix"
1137+echo " * System type: $host_vendor-$host_os"
1138+echo " * Host CPU: $host_cpu"
1139+echo " * C Compiler: $CC_VERSION"
1140+echo " * C++ Compiler: $CXX_VERSION"
1141+echo " * Debug enabled: $with_debug"
1142+echo " * Warnings as failure: $ac_cv_warnings_as_errors"
1143+echo " * C++ cstdint location: $ac_cv_cxx_cstdint"
1144+echo " * C++ hash_map location: $ac_cv_cxx_hash_map"
1145+echo " * C++ hash namespace: $ac_cv_cxx_hash_namespace"
1146+echo " * C++ shared_ptr namespace: $ac_cv_shared_ptr_namespace"
1147+echo ""
1148+echo "---"
1149+
1150+ """ % plugin)
1151+
1152+def write_external_makefile(plugin, plugin_file):
1153+
1154+ plugin_file.write("""
1155+ACLOCAL_AMFLAGS = -I m4 --force
1156+VERSION=$(PANDORA_RELEASE_VERSION)
1157+
1158+pkgplugindir=%(pkgplugindir)s
1159+EXTRA_DIST = plugin.ini
1160+
1161+noinst_HEADERS=
1162+nobase_include_HEADERS=
1163+check_PROGRAMS=
1164+noinst_LTLIBRARIES=
1165+bin_PROGRAMS=
1166+
1167+
1168+""" % plugin)
1169+ if plugin['headers'] != "":
1170+ plugin_file.write("noinst_HEADERS += %(headers)s\n" % plugin)
1171+ if plugin['install_headers'] != "":
1172+ plugin_file.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
1173+ if plugin['testsuite']:
1174+ if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
1175+ plugin_file.write("EXTRA_DIST += %(testsuitedir)s\n" % plugin)
1176+ plugin_file.write("""
1177+pkgplugin_LTLIBRARIES=%(libname)s.la
1178+%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
1179+%(libname)s_la_LIBADD=%(libs)s
1180+%(libname)s_la_DEPENDENCIES=%(libs)s
1181+%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
1182+%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
1183+%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
1184+%(libname)s_la_SOURCES=%(sources)s
1185+check_PROGRAMS += %(tests)s
1186+""" % plugin)
1187+ plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
1188+ if os.path.exists(plugin_am_file):
1189+ plugin_file.write('include %s\n' % plugin_am_file)
1190+
1191+def write_external_plugin():
1192+ """Return True if the plugin had changed."""
1193+ plugin = read_plugin_ini('.')
1194+ expand_plugin_ini(plugin)
1195+ plugin_file = ChangeProtectedFile('configure.ac')
1196+ write_external_configure(plugin, plugin_file)
1197+ result = plugin_file.close()
1198+ plugin_file = ChangeProtectedFile('Makefile.am')
1199+ write_external_makefile(plugin, plugin_file)
1200+ # Write some stub configure.ac and Makefile.am files that include the above
1201+ result = plugin_file.close() or result
1202+ return result
1203+
1204+def write_plugin(plugin, plugin_ini_list):
1205+ # Since this function is recursive, make sure we're not already in it.
1206+ if plugin.has_key('writing_status'):
1207+ if plugin['writing_status'] == 'done':
1208+ return
1209+ else:
1210+ print "Dependency loop detected with %s" % plugin['name']
1211+ exit(1)
1212+
1213+ plugin['writing_status'] = 'dependencies'
1214+
1215+ # Write all dependencies first to get around annoying automake bug
1216+ for dependency in plugin['dependency_list']:
1217+ found = False
1218+ for find_plugin in plugin_ini_list:
1219+ if find_plugin['module_name'] == dependency:
1220+ found = True
1221+ write_plugin(find_plugin, plugin_ini_list)
1222+ break
1223+ if found is False:
1224+ print "Could not find dependency %s: %s" % (plugin['name'], dependency)
1225+ exit(1)
1226+
1227+ write_plugin_ac(plugin, plugin_ac_file)
1228+ write_plugin_am(plugin, plugin_am_file)
1229+ write_plugin_docs(plugin, plugin_doc_index)
1230+ plugin['writing_status'] = 'done'
1231+
1232+def write_plugin_docs(plugin, doc_index):
1233+ if plugin['docs'] is not None and os.path.isdir("docs/plugins"):
1234+ if not os.path.exists(os.path.join("docs/plugins",plugin["name"])):
1235+ os.symlink(os.path.abspath(plugin["docs"]), os.path.join("docs/plugins",plugin["name"]))
1236+ doc_index.write("""
1237+ %(name)s/index""" % plugin)
1238+
1239+def write_plugin_ac(plugin, plugin_ac):
1240+ #
1241+ # Write plugin config instructions into plugin.ac file.
1242+ #
1243+ plugin_ac_file=os.path.join(plugin['rel_path'],'plugin.ac')
1244+ plugin_m4_dir=os.path.join(plugin['rel_path'],'m4')
1245+ plugin_m4_files=[]
1246+ if os.path.exists(plugin_m4_dir) and os.path.isdir(plugin_m4_dir):
1247+ for m4_file in os.listdir(plugin_m4_dir):
1248+ if os.path.splitext(m4_file)[-1] == '.m4':
1249+ plugin_m4_files.append(os.path.join(plugin['rel_path'], m4_file))
1250+ plugin_ac.write("""
1251+dnl Config for %(title)s
1252+""" % plugin)
1253+ for m4_file in plugin_m4_files:
1254+ plugin_ac.write('m4_sinclude([%s])\n' % m4_file)
1255+ plugin['plugin_dep_libs']=" ".join(["\${top_builddir}/%s" % f for f in plugin['libs'].split()])
1256+
1257+ plugin_ac.write("""
1258+AC_ARG_WITH([%(name_with_dashes)s-plugin],[
1259+dnl indented wierd to make the help output correct
1260+AS_HELP_STRING([--with-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(enabled)s@:>@])
1261+AS_HELP_STRING([--without-%(name_with_dashes)s-plugin],[Disable building %(title)s])
1262+ ],[
1263+ with_%(name)s_plugin="$withval"
1264+ AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[
1265+ requested_%(name)s_plugin="yes"
1266+ ],[
1267+ requested_%(name)s_plugin="no"
1268+ ])
1269+ ],[
1270+ with_%(name)s_plugin="%(enabled)s"
1271+ requested_%(name)s_plugin="no"
1272+ ])
1273+AC_ARG_ENABLE([%(name_with_dashes)s-plugin],[
1274+dnl indented wierd to make the help output correct
1275+AS_HELP_STRING([--enable-%(name_with_dashes)s-plugin],[Enable loading %(title)s by default. @<:@default=%(default_yesno)s@:>@])
1276+AS_HELP_STRING([--disable-%(name_with_dashes)s-plugin],[Disable loading %(title)s by default.])
1277+ ],
1278+ [enable_%(name)s_plugin="$enableval"],
1279+ [enable_%(name)s_plugin=%(default_yesno)s])
1280+
1281+""" % plugin)
1282+ if os.path.exists(plugin_ac_file):
1283+ plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)
1284+ # The plugin author has specified some check to make to determine
1285+ # if the plugin can be built. If the plugin is turned on and this
1286+ # check fails, then configure should error out. If the plugin is not
1287+ # turned on, then the normal conditional build stuff should just let
1288+ # it silently not build
1289+ if plugin['has_build_conditional']:
1290+ plugin_ac.write("""
1291+AS_IF([test %(build_conditional)s],
1292+ [], dnl build_conditional can only negate
1293+ [
1294+ AS_IF([test "x${requested_%(name)s_plugin}" = "xyes"],
1295+ [AC_MSG_ERROR([Plugin %(name)s was explicitly requested, yet failed build dependency checks. Aborting!])])
1296+ with_%(name)s_plugin=no
1297+ ])
1298+
1299+""" % plugin)
1300+ if not plugin['unconditional']:
1301+ plugin_ac.write("""
1302+AM_CONDITIONAL([%(build_conditional_tag)s],
1303+ [test %(build_conditional)s])
1304+ """ % plugin)
1305+
1306+ plugin_ac.write("""
1307+AS_IF([test "x$with_%(name)s_plugin" = "xyes"],
1308+ [
1309+""" % plugin)
1310+ if plugin['testsuite']:
1311+ plugin_ac.write("""
1312+ pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
1313+ """ % plugin)
1314+ if plugin['static']:
1315+ plugin_ac.write("""
1316+ AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
1317+ pandora_builtin_load_list="%(module_name)s,${pandora_builtin_load_list}"
1318+ pandora_builtin_load_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_load_symbols_list}"
1319+ PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"
1320+ ])
1321+ pandora_builtin_list="%(module_name)s,${pandora_builtin_list}"
1322+ pandora_builtin_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_symbols_list}"
1323+ pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(libname)s.la"
1324+ """ % plugin)
1325+
1326+ else:
1327+ plugin_ac.write("""
1328+ AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
1329+ pandora_default_plugin_list="%(name)s,${pandora_default_plugin_list}"
1330+ ])
1331+ """ % plugin)
1332+ plugin_ac.write(" ])\n")
1333+
1334+def fix_file_paths(plugin, files):
1335+ # TODO: determine path to plugin dir relative to top_srcdir... append it to
1336+ # source files if they don't already have it
1337+ new_files=""
1338+ if plugin['plugin_dir'] != ".":
1339+ for file in files.split():
1340+ if not file.startswith(plugin['rel_path']):
1341+ file= os.path.join(plugin['rel_path'], file)
1342+ new_files= "%s %s" % (new_files, file)
1343+ else:
1344+ new_files= " ".join(plugin['sources'].split())
1345+ if new_files != "":
1346+ return new_files
1347+ return files
1348+
1349+def expand_plugin_ini(plugin):
1350+ if plugin['name'] == "**OUT-OF-TREE**":
1351+ print "Out of tree plugins require the name field to be specified in plugin.ini"
1352+ sys.exit(1)
1353+
1354+ if plugin['plugin_dir'] == ".":
1355+ plugin['rel_path']= plugin['plugin_dir']
1356+ plugin['unconditional']=True
1357+ else:
1358+ plugin['rel_path']= plugin['plugin_dir'][len(config['top_srcdir'])+len(os.path.sep):]
1359+ plugin['unconditional']=False
1360+
1361+ plugin['sources']= fix_file_paths(plugin, plugin['sources'])
1362+ plugin['main_source']= plugin['sources'].split()[0]
1363+ plugin['headers']= fix_file_paths(plugin, plugin['headers'])
1364+ plugin['install_headers']= fix_file_paths(plugin, plugin['install_headers'])
1365+ plugin['tests']= fix_file_paths(plugin, plugin['tests'])
1366+
1367+ # Make a yes/no version for autoconf help messages
1368+ if plugin['load_by_default']:
1369+ plugin['default_yesno']="yes"
1370+ else:
1371+ plugin['default_yesno']="no"
1372+
1373+ if plugin.has_key('extra_dist'):
1374+ plugin['extra_dist']=" ".join([os.path.join(plugin['rel_path'],f) for f in plugin['extra_dist'].split()])
1375+
1376+
1377+ plugin['build_conditional_tag']= "BUILD_%s_PLUGIN" % plugin['name'].upper()
1378+ plugin['name_with_dashes']= plugin['name'].replace('_','-')
1379+ if plugin.has_key('build_conditional'):
1380+ plugin['has_build_conditional']=True
1381+ plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes" -a %(build_conditional)s' % plugin
1382+ else:
1383+ plugin['has_build_conditional']=False
1384+ plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes"' %plugin
1385+
1386+ if plugin['install']:
1387+ plugin['library_type']= 'pkgplugin'
1388+ else:
1389+ plugin['library_type']= 'noinst'
1390+
1391+def find_testsuite(plugin_dir):
1392+ for testdir in ['drizzle-tests','tests']:
1393+ if os.path.isdir(os.path.join(plugin_dir,testdir)):
1394+ return testdir
1395+ if os.path.isdir(os.path.join('tests','suite',os.path.basename(plugin_dir))):
1396+ return ""
1397+ return None
1398+
1399+def find_docs(plugin_dir):
1400+ if os.path.isfile(os.path.join(plugin_dir, "docs", "index.rst")):
1401+ return os.path.join(plugin_dir, "docs")
1402+
1403+def read_plugin_ini(plugin_dir):
1404+ sources_default=""
1405+ if plugin_dir == ".":
1406+ plugin_name="**OUT-OF-TREE**"
1407+ module_name="**OUT-OF-TREE**"
1408+ else:
1409+ sources_default="%s.cc" % os.path.basename(plugin_dir)
1410+ plugin_name = plugin_dir[plugin_dir.index(config['root_plugin_dir']) + len(config['root_plugin_dir']) + 1:]
1411+ module_name = plugin_name.replace("/", config['module_name_separator']).replace("\\", config['module_name_separator'])
1412+ plugin_name = plugin_name.replace("/", config['plugin_name_separator']).replace("\\", config['plugin_name_separator'])
1413+
1414+
1415+ plugin_file= os.path.join(plugin_dir,config['plugin_ini_fname'])
1416+ plugin_defaults= dict(sources=sources_default,
1417+ headers="",
1418+ install_headers="",
1419+ cflags="",
1420+ cppflags="",
1421+ cxxflags="",
1422+ libs="",
1423+ ldflags="",
1424+ author="",
1425+ title="",
1426+ description="",
1427+ license="PLUGIN_LICENSE_GPL",
1428+ name=plugin_name,
1429+ module_name=module_name,
1430+ load_by_default=config['default_load_by_default'],
1431+ disabled="False",
1432+ static="False",
1433+ dependencies="",
1434+ dependency_aliases="",
1435+ tests="",
1436+ install=config['default_install'])
1437+ parser=ConfigParser.ConfigParser(defaults= plugin_defaults)
1438+ parser.read(plugin_file)
1439+ plugin=dict(parser.items('plugin'))
1440+ plugin['plugin_dir'] = plugin_dir
1441+ if plugin_dir == '.':
1442+ if not plugin.has_key('url'):
1443+ print "External Plugins are required to specifiy a url"
1444+ plugin['url']= 'http://launchpad.net/%(name)s' % plugin
1445+ sys.exit(1)
1446+ if plugin_dir == '.' and not plugin.has_key('version'):
1447+ print "External Plugins are required to specifiy a version"
1448+ sys.exit(1)
1449+ if not plugin.has_key('version'):
1450+ plugin['version'] = config['default_plugin_version']
1451+ if plugin.has_key('load_by_default'):
1452+ plugin['load_by_default']=parser.getboolean('plugin','load_by_default')
1453+ if plugin.has_key('disabled'):
1454+ plugin['disabled']=parser.getboolean('plugin','disabled')
1455+ if plugin['disabled']:
1456+ plugin['enabled']="no"
1457+ else:
1458+ plugin['enabled']="yes"
1459+ if plugin.has_key('static'):
1460+ try:
1461+ plugin['static']= parser.getboolean('plugin','static')
1462+ except:
1463+ if plugin['static'][:5] == os.sys.platform[:5]:
1464+ plugin['static']= True
1465+ else:
1466+ plugin['static']= False
1467+ if plugin.has_key('install'):
1468+ plugin['install']= parser.getboolean('plugin','install')
1469+ if plugin.has_key('testsuite'):
1470+ if plugin['testsuite'] == 'disable':
1471+ plugin['testsuite']= False
1472+ plugin['dist_testsuite']= find_testsuite(plugin_dir)
1473+ else:
1474+ plugin_testsuite= find_testsuite(plugin_dir)
1475+ plugin['testsuitedir']=plugin_testsuite
1476+ if plugin_testsuite is not None:
1477+ plugin['testsuite']=True
1478+ else:
1479+ plugin['testsuite']=False
1480+ plugin['docs']= find_docs(plugin_dir)
1481+
1482+ plugin['cflags']+= ' ' + config['extra_cflags']
1483+ plugin['cppflags']+= ' ' + config['extra_cppflags']
1484+ plugin['cxxflags']+= ' ' + config['extra_cxxflags']
1485+
1486+ plugin['libname']= "lib%s%s%s" % (config['plugin_prefix'],
1487+ plugin['name'],
1488+ config['plugin_suffix'])
1489+ if config['force_lowercase_libname']:
1490+ plugin['libname']= plugin['libname'].lower()
1491+
1492+ plugin['root_plugin_dir']= config['root_plugin_dir']
1493+ plugin['plugin_prefix']= config['plugin_prefix']
1494+ plugin['plugin_suffix']= config['plugin_suffix']
1495+ plugin['pkgplugindir']= config['pkgplugindir']
1496+
1497+ # Dependencies must have a module but dependency aliases are simply added
1498+ # to the variable passed during compile.
1499+ plugin['dependency_list'] = plugin['dependencies'].split()
1500+ dependency_aliases = plugin['dependency_aliases'].split()
1501+ plugin['dependencies'] = ','.join(plugin['dependency_list'] +
1502+ plugin['dependency_aliases'].split())
1503+ dependency_libs = ["%s/lib%s%s.la" % (config['root_plugin_dir'],
1504+ dependency.lower().replace('::', '_'),
1505+ config['plugin_suffix'])
1506+ for dependency in plugin['dependency_list']]
1507+ plugin['libs'] = " ".join(plugin['libs'].split() + dependency_libs);
1508+
1509+# Libtool is going to expand:
1510+# -DPANDORA_MODULE_AUTHOR='"Padraig O'"'"'Sullivan"'
1511+# to:
1512+# "-DPANDORA_MODULE_AUTHOR=\"Padraig O'Sullivan\""
1513+# So we have to replace internal ''s to '"'"'
1514+ for key in ('author','title','description','version'):
1515+ plugin[key]=plugin[key].replace('"','\\"')
1516+ plugin[key]=plugin[key].replace("'","'\"'\"'")
1517+ return plugin
1518+
1519+
1520+def write_plugin_am(plugin, plugin_am):
1521+ """Write an automake fragment for this plugin.
1522+
1523+ :param plugin: The plugin dict.
1524+ :param plugin_am: The file to write to.
1525+ """
1526+ # The .plugin.ini.stamp avoids changing the datestamp on plugin.ini which can
1527+ # confuse VCS systems.
1528+ plugin_am.write("""
1529+EXTRA_DIST += %(rel_path)s/plugin.ini
1530+
1531+# Prevent errors when a plugin dir is removed
1532+%(rel_path)s/plugin.ini:
1533+
1534+""" % plugin)
1535+ if plugin.has_key('extra_dist') and plugin['extra_dist'] != "":
1536+ plugin_am.write("EXTRA_DIST += %(extra_dist)s\n" % plugin)
1537+ if plugin['headers'] != "":
1538+ plugin_am.write("noinst_HEADERS += %(headers)s\n" % plugin)
1539+ if plugin['install_headers'] != "":
1540+ plugin_am.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
1541+ if plugin['testsuite']:
1542+ if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
1543+ plugin_am.write("EXTRA_DIST += %(rel_path)s/%(testsuitedir)s\n" % plugin)
1544+ if plugin.has_key('dist_testsuite') and plugin['dist_testsuite'] != "":
1545+ plugin_am.write("EXTRA_DIST += %(rel_path)s/%(dist_testsuite)s\n" % plugin)
1546+ if plugin['docs'] is not None:
1547+ plugin_am.write("EXTRA_DIST += ${top_srcdir}/%(rel_path)s/docs/*.rst\n" % plugin)
1548+ if plugin['static']:
1549+ plugin_am.write("""
1550+%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
1551+EXTRA_DIST += %(rel_path)s/plugin.ini
1552+if %(build_conditional_tag)s
1553+ noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
1554+ %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
1555+ %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
1556+ %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
1557+ %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='"%(dependencies)s"' %(cppflags)s
1558+ %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
1559+ %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
1560+ %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
1561+ check_PROGRAMS += %(tests)s
1562+ PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(libname)s.la
1563+endif
1564+""" % plugin)
1565+ else:
1566+ plugin_am.write("""
1567+%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
1568+EXTRA_DIST += %(rel_path)s/plugin.ini
1569+if %(build_conditional_tag)s
1570+ %(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
1571+ %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
1572+ %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
1573+ %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
1574+ %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='"%(dependencies)s"' %(cppflags)s
1575+ %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
1576+ %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
1577+ %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
1578+ check_PROGRAMS += %(tests)s
1579+endif
1580+""" % plugin)
1581+ plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
1582+ if os.path.exists(plugin_am_file):
1583+ plugin_am.write('include %s\n' % plugin_am_file)
1584+
1585+#
1586+# MAIN STARTS HERE:
1587+#
1588+
1589+# Parse the pandora-plugin config file
1590+
1591+config_defaults= dict(
1592+ top_srcdir='.',
1593+ top_builddir='.',
1594+ plugin_ini_fname='plugin.ini',
1595+ plugin_prefix='',
1596+ plugin_suffix='',
1597+ extra_cflags='',
1598+ extra_cppflags='',
1599+ extra_cxxflags='',
1600+ root_plugin_dir='',
1601+ pkgplugindir='',
1602+ default_install='True',
1603+ default_plugin_version='',
1604+ default_load_by_default='False',
1605+ force_lowercase_libname='True',
1606+ plugin_name_separator='_',
1607+ module_name_separator='::'
1608+)
1609+
1610+config_parser = ConfigParser.ConfigParser(defaults=config_defaults)
1611+config_parser.read(pandora_plugin_file)
1612+config = dict(config_parser.items('pandora-plugin'))
1613+config['force_lowercase_libname']=config_parser.getboolean('pandora-plugin','force_lowercase_libname')
1614+
1615+# I'm 3 seconds away from writing a comprehensive build solution
1616+if not os.path.exists('config/pandora_vc_revinfo'):
1617+ if os.path.exists('.bzr'):
1618+ bzr_revno= subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0].strip()
1619+ rev_date= datetime.date.fromtimestamp(time.time())
1620+ config['default_plugin_version'] = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)
1621+ else:
1622+ config['default_plugin_version']=datetime.date.fromtimestamp(time.time()).isoformat()
1623+else:
1624+ # need to read config/pandora_vc_revno
1625+ pandora_vc_revno=open('config/pandora_vc_revinfo','r').read().split()
1626+ rev_date=""
1627+ bzr_revno=""
1628+ for revno_line in pandora_vc_revno:
1629+ (revno_key,revno_val)= revno_line.split("=")
1630+ if revno_key == 'PANDORA_VC_REVNO':
1631+ bzr_revno=revno_val.strip()
1632+ elif revno_key == 'PANDORA_RELEASE_DATE':
1633+ rev_date=revno_val.strip()
1634+
1635+ config['default_plugin_version'] = "%s.%s" % (rev_date, bzr_revno)
1636+
1637+actions=[]
1638+for arg in sys.argv:
1639+ if arg.startswith('--top_srcdir='):
1640+ config['top_srcdir']=arg[12:]
1641+ elif arg.startswith('--top_builddir='):
1642+ config['top_builddir']=arg[14:]
1643+ elif arg == "--force-all":
1644+ actions=['plugin-list','pandora-plugin.am','write']
1645+ break
1646+ else:
1647+ actions.append(arg)
1648+if len(actions) == 0:
1649+ actions.append('write')
1650+
1651+plugin_list=[]
1652+
1653+def accumulate_plugins(arg, dirname, fnames):
1654+ # plugin_ini_fname is a name in dirname indicating dirname is a plugin.
1655+ if config['plugin_ini_fname'] in fnames:
1656+ arg.append(dirname)
1657+
1658+os.path.walk(os.path.join(config['top_srcdir'],
1659+ config['root_plugin_dir']),
1660+ accumulate_plugins,
1661+ plugin_list)
1662+
1663+if not os.path.exists("config/pandora-plugin.am") or "write" in actions:
1664+ plugin_am_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.am'))
1665+ plugin_am_file.write("""
1666+# always the current list, generated every build so keep this lean.
1667+# pandora-plugin.list: datestamp preserved list
1668+${srcdir}/config/pandora-plugin.list: .plugin.scan
1669+.plugin.scan:
1670+ @cd ${top_srcdir} && python config/pandora-plugin plugin-list
1671+
1672+# Plugins affect configure; so to prevent configure running twice in a tarball
1673+# build (once up front, once with the right list of plugins, we ship the
1674+# generated list of plugins and the housekeeping material for that list so it
1675+# is likewise not updated.
1676+EXTRA_DIST += \
1677+ config/pandora-plugin.am \
1678+ config/pandora-plugin.ac \
1679+ config/pandora-plugin \
1680+ config/pandora-plugin.ini
1681+
1682+
1683+# Seed the list of plugin LDADDS which plugins may extend.
1684+PANDORA_DYNAMIC_LDADDS=
1685+
1686+# plugin.stamp: graph dominator for creating all per pandora-plugin.ac/am
1687+# files. This is invoked when the code to generate such files has altered.""")
1688+
1689+if not os.path.exists("config/pandora-plugin.ac") or "write" in actions:
1690+ plugin_ac_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.ac'))
1691+ plugin_ac_file.write("dnl Generated file, run make to rebuild\n")
1692+
1693+if os.path.exists("docs/plugins"):
1694+ if not os.path.exists("docs/plugins/list.rst") or "write" in actions:
1695+ plugin_doc_index = ChangeProtectedFile("docs/plugins/list.rst")
1696+ plugin_doc_index.write("""
1697+Plugin Documentation
1698+====================
1699+
1700+.. toctree::
1701+ :maxdepth: 2
1702+""")
1703+
1704+
1705+if os.path.exists('plugin.ini'):
1706+ # Are we in a plugin dir which wants to have a self-sufficient build system?
1707+ plugin_list=['.']
1708+
1709+ write_external_plugin()
1710+else:
1711+ plugin_list_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.list'))
1712+ for p in plugin_list:
1713+ plugin_list_file.write(p)
1714+ plugin_list_file.write("\n")
1715+ plugin_list.sort()
1716+ plugin_list_file.close()
1717+
1718+if not os.path.exists("config/pandora-plugin.am") or 'write' in actions:
1719+ plugin_am_file.write("\n${top_srcdir}/config/pandora-plugin.am: ${top_srcdir}/config/pandora-plugin.list ${top_srcdir}/config/pandora-plugin ")
1720+ for plugin_dir in plugin_list:
1721+ plugin_am_file.write("\\\n\t%s/plugin.ini " % plugin_dir)
1722+ plugin_am_file.write("\n\tcd ${top_srcdir} && python config/pandora-plugin write\n")
1723+ plugin_ini_list=[]
1724+
1725+ # Load all plugin.ini files first so we can do dependency tracking.
1726+ for plugin_dir in plugin_list:
1727+ plugin = read_plugin_ini(plugin_dir)
1728+ expand_plugin_ini(plugin)
1729+ plugin_ini_list.append(plugin)
1730+
1731+ # Check for duplicates
1732+ plugin_name_list = [plugin['libname'] for plugin in plugin_ini_list]
1733+ for plugin in plugin_ini_list:
1734+ if plugin_name_list.count(plugin['libname']) != 1:
1735+ print "Duplicate module name %s" % plugin['libname']
1736+ exit(1)
1737+
1738+ for plugin in plugin_ini_list:
1739+ write_plugin(plugin, plugin_ini_list)
1740+
1741+if plugin_am_file is not None:
1742+ plugin_am_file.close()
1743+if plugin_ac_file is not None:
1744+ plugin_ac_file.close()
1745+if plugin_doc_index is not None:
1746+ plugin_doc_index.close()
1747
1748=== added file 'config/pandora-plugin.ini'
1749--- config/pandora-plugin.ini 1970-01-01 00:00:00 +0000
1750+++ config/pandora-plugin.ini 2011-09-27 21:12:27 +0000
1751@@ -0,0 +1,5 @@
1752+[pandora-plugin]
1753+root_plugin_dir=percona_playback
1754+plugin_suffix=_module
1755+extra_cxxflags=-DBUILDING_PERCONA_PLAYBACK
1756+default_load_by_default=True
1757
1758=== added file 'config/uncrustify.cfg'
1759--- config/uncrustify.cfg 1970-01-01 00:00:00 +0000
1760+++ config/uncrustify.cfg 2011-09-27 21:12:27 +0000
1761@@ -0,0 +1,1112 @@
1762+#
1763+# Uncrustify options (with comments) for Pandora Projects
1764+#
1765+
1766+nl_after_brace_close = TRUE
1767+
1768+# The type of line endings
1769+newlines = lf # auto/lf/crlf/cr
1770+
1771+# The original size of tabs in the input
1772+input_tab_size = 8 # number
1773+
1774+# The size of tabs in the output (only used if align_with_tabs=true)
1775+output_tab_size = 3 # number
1776+
1777+# The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn)
1778+string_escape_char = 92 # number
1779+
1780+# Alternate string escape char for Pawn. Only works right before the quote char.
1781+string_escape_char2 = 0 # number
1782+
1783+#
1784+# Indenting
1785+#
1786+
1787+# The number of columns to indent per level.
1788+# Usually 2, 3, 4, or 8.
1789+indent_columns = 2 # number
1790+
1791+# How to use tabs when indenting code
1792+# 0=spaces only
1793+# 1=indent with tabs, align with spaces
1794+# 2=indent and align with tabs
1795+indent_with_tabs = 0 # number
1796+
1797+# Whether to indent strings broken by '\' so that they line up
1798+indent_align_string = true # false/true
1799+
1800+# The number of spaces to indent multi-line XML strings.
1801+# Requires indent_align_string=True
1802+indent_xml_string = 0 # number
1803+
1804+# Spaces to indent '{' from level
1805+indent_brace = 0 # number
1806+
1807+# Whether braces are indented to the body level
1808+indent_braces = false # false/true
1809+
1810+# Disabled indenting function braces if indent_braces is true
1811+indent_braces_no_func = false # false/true
1812+
1813+# Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc.
1814+indent_brace_parent = false # false/true
1815+
1816+# Whether the 'namespace' body is indented
1817+indent_namespace = false # false/true
1818+
1819+# Whether the 'extern "C"' body is indented
1820+indent_extern = false # false/true
1821+
1822+# Whether the 'class' body is indented
1823+indent_class = true # false/true
1824+
1825+# Whether to indent the stuff after a leading class colon
1826+indent_class_colon = true # false/true
1827+
1828+# False=treat 'else\nif' as 'else if' for indenting purposes
1829+# True=indent the 'if' one level
1830+indent_else_if = false # false/true
1831+
1832+# True: indent continued function call parameters one indent level
1833+# False: align parameters under the open paren
1834+indent_func_call_param = false # false/true
1835+
1836+# Same as indent_func_call_param, but for function defs
1837+indent_func_def_param = false # false/true
1838+
1839+# Same as indent_func_call_param, but for function protos
1840+indent_func_proto_param = false # false/true
1841+
1842+# Same as indent_func_call_param, but for class declarations
1843+indent_func_class_param = false # false/true
1844+
1845+# Same as indent_func_call_param, but for class variable constructors
1846+indent_func_ctor_var_param = false # false/true
1847+
1848+# Same as indent_func_call_param, but for templates
1849+indent_template_param = false # false/true
1850+
1851+# Double the indent for indent_func_xxx_param options
1852+indent_func_param_double = false # false/true
1853+
1854+# Indentation column for standalone 'const' function decl/proto qualifier
1855+indent_func_const = 0 # number
1856+
1857+# Indentation column for standalone 'throw' function decl/proto qualifier
1858+indent_func_throw = 0 # number
1859+
1860+# The number of spaces to indent a continued '->' or '.'
1861+# Usually set to 0, 1, or indent_columns.
1862+indent_member = 3 # number
1863+
1864+# Spaces to indent single line ('//') comments on lines before code
1865+indent_sing_line_comments = 0 # number
1866+
1867+# If set, will indent trailing single line ('//') comments relative
1868+# to the code instead of trying to keep the same absolute column
1869+indent_relative_single_line_comments = false # false/true
1870+
1871+# Spaces to indent 'case' from 'switch'
1872+# Usually 0 or indent_columns.
1873+indent_switch_case = 0 # number
1874+
1875+# Spaces to shift the 'case' line, without affecting any other lines
1876+# Usually 0.
1877+indent_case_shift = 0 # number
1878+
1879+# Spaces to indent '{' from 'case'.
1880+# By default, the brace will appear under the 'c' in case.
1881+# Usually set to 0 or indent_columns.
1882+indent_case_brace = 0 # number
1883+
1884+# Whether to indent comments found in first column
1885+indent_col1_comment = false # false/true
1886+
1887+# How to indent goto labels
1888+# >0 : absolute column where 1 is the leftmost column
1889+# <=0 : subtract from brace indent
1890+indent_label = 1 # number
1891+
1892+# Same as indent_label, but for access specifiers that are followed by a colon
1893+indent_access_spec = 1 # number
1894+
1895+# Indent the code after an access specifier by one level.
1896+# If set, this option forces 'indent_access_spec=0'
1897+indent_access_spec_body = false # false/true
1898+
1899+# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)
1900+indent_paren_nl = false # false/true
1901+
1902+# Controls the indent of a close paren after a newline.
1903+# 0: Indent to body level
1904+# 1: Align under the open paren
1905+# 2: Indent to the brace level
1906+indent_paren_close = 0 # number
1907+
1908+# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren
1909+indent_comma_paren = false # false/true
1910+
1911+# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren
1912+indent_bool_paren = false # false/true
1913+
1914+# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)
1915+indent_square_nl = false # false/true
1916+
1917+# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies
1918+indent_preserve_sql = false # false/true
1919+
1920+#
1921+# Spacing options
1922+#
1923+
1924+# Add or remove space around arithmetic operator '+', '-', '/', '*', etc
1925+sp_arith = force # ignore/add/remove/force
1926+
1927+# Add or remove space before assignment operator '=', '+=', etc
1928+sp_before_assign = remove # ignore/add/remove/force
1929+
1930+# Add or remove space after assignment operator '=', '+=', etc
1931+sp_after_assign = force # ignore/add/remove/force
1932+
1933+# Add or remove space around assignment '=' in enum
1934+sp_enum_assign = ignore # ignore/add/remove/force
1935+
1936+# Add or remove space around boolean operators '&&' and '||'
1937+sp_bool = force # ignore/add/remove/force
1938+
1939+# Add or remove space around compare operator '<', '>', '==', etc
1940+sp_compare = force # ignore/add/remove/force
1941+
1942+# Add or remove space inside '(' and ')'
1943+sp_inside_paren = remove # ignore/add/remove/force
1944+
1945+# Add or remove space between nested parens
1946+sp_paren_paren = remove # ignore/add/remove/force
1947+
1948+# Whether to balance spaces inside nested parens
1949+sp_balance_nested_parens = false # false/true
1950+
1951+# Add or remove space between ')' and '{'
1952+sp_paren_brace = ignore # ignore/add/remove/force
1953+
1954+# Add or remove space before pointer star '*'
1955+sp_before_ptr_star = force # ignore/add/remove/force
1956+
1957+# Add or remove space before pointer star '*' that isn't followed by a variable name
1958+# If set to 'ignore', sp_before_ptr_star is used instead.
1959+sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force
1960+
1961+# Add or remove space between pointer stars '*'
1962+sp_between_ptr_star = remove # ignore/add/remove/force
1963+
1964+# Add or remove space after pointer star '*', if followed by a word.
1965+sp_after_ptr_star = remove # ignore/add/remove/force
1966+
1967+# Add or remove space after a pointer star '*', if followed by a func proto/def.
1968+sp_after_ptr_star_func = ignore # ignore/add/remove/force
1969+
1970+# Add or remove space before a pointer star '*', if followed by a func proto/def.
1971+sp_before_ptr_star_func = ignore # ignore/add/remove/force
1972+
1973+# Add or remove space before a reference sign '&'
1974+sp_before_byref = remove # ignore/add/remove/force
1975+
1976+# Add or remove space before a reference sign '&' that isn't followed by a variable name
1977+# If set to 'ignore', sp_before_byref is used instead.
1978+sp_before_unnamed_byref = ignore # ignore/add/remove/force
1979+
1980+# Add or remove space after reference sign '&', if followed by a word.
1981+sp_after_byref = force # ignore/add/remove/force
1982+
1983+# Add or remove space after a reference sign '&', if followed by a func proto/def.
1984+sp_after_byref_func = ignore # ignore/add/remove/force
1985+
1986+# Add or remove space before a reference sign '&', if followed by a func proto/def.
1987+sp_before_byref_func = ignore # ignore/add/remove/force
1988+
1989+# Add or remove space between type and word
1990+sp_after_type = force # ignore/add/remove/force
1991+
1992+# Add or remove space in 'template <' vs 'template<'.
1993+# If set to ignore, sp_before_angle is used.
1994+sp_template_angle = ignore # ignore/add/remove/force
1995+
1996+# Add or remove space before '<>'
1997+sp_before_angle = remove # ignore/add/remove/force
1998+
1999+# Add or remove space inside '<' and '>'
2000+sp_inside_angle = remove # ignore/add/remove/force
2001+
2002+# Add or remove space after '<>'
2003+sp_after_angle = force # ignore/add/remove/force
2004+
2005+# Add or remove space between '<>' and '(' as found in 'new List<byte>();'
2006+sp_angle_paren = ignore # ignore/add/remove/force
2007+
2008+# Add or remove space between '<>' and a word as in 'List<byte> m;'
2009+sp_angle_word = ignore # ignore/add/remove/force
2010+
2011+# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
2012+sp_before_sparen = force # ignore/add/remove/force
2013+
2014+# Add or remove space inside if-condition '(' and ')'
2015+sp_inside_sparen = remove # ignore/add/remove/force
2016+
2017+# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
2018+sp_after_sparen = force # ignore/add/remove/force
2019+
2020+# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
2021+sp_sparen_brace = add # ignore/add/remove/force
2022+
2023+# Add or remove space before empty statement ';' on 'if', 'for' and 'while'
2024+sp_special_semi = ignore # ignore/add/remove/force
2025+
2026+# Add or remove space before ';'
2027+sp_before_semi = remove # ignore/add/remove/force
2028+
2029+# Add or remove space before ';' in non-empty 'for' statements
2030+sp_before_semi_for = ignore # ignore/add/remove/force
2031+
2032+# Add or remove space before a semicolon of an empty part of a for statment.
2033+sp_before_semi_for_empty = force # ignore/add/remove/force
2034+
2035+# Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; <here> ).
2036+sp_after_semi_for_empty = ignore # ignore/add/remove/force
2037+
2038+# Add or remove space before '[' (except '[]')
2039+sp_before_square = ignore # ignore/add/remove/force
2040+
2041+# Add or remove space before '[]'
2042+sp_before_squares = ignore # ignore/add/remove/force
2043+
2044+# Add or remove space inside '[' and ']'
2045+sp_inside_square = remove # ignore/add/remove/force
2046+
2047+# Add or remove space after ','
2048+sp_after_comma = force # ignore/add/remove/force
2049+
2050+# Add or remove space before ','
2051+sp_before_comma = remove # ignore/add/remove/force
2052+
2053+# Add or remove space after class ':'
2054+sp_after_class_colon = ignore # ignore/add/remove/force
2055+
2056+# Add or remove space before class ':'
2057+sp_before_class_colon = ignore # ignore/add/remove/force
2058+
2059+# Add or remove space between 'operator' and operator sign
2060+sp_after_operator = ignore # ignore/add/remove/force
2061+
2062+# Add or remove space between the operator symbol and the open paren, as in 'operator ++('
2063+sp_after_operator_sym = ignore # ignore/add/remove/force
2064+
2065+# Add or remove space after C/D cast, ie 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
2066+sp_after_cast = remove # ignore/add/remove/force
2067+
2068+# Add or remove spaces inside cast parens
2069+sp_inside_paren_cast = remove # ignore/add/remove/force
2070+
2071+# Add or remove space between the type and open paren in a C++ cast, ie 'int(exp)' vs 'int (exp)'
2072+sp_cpp_cast_paren = remove # ignore/add/remove/force
2073+
2074+# Add or remove space between 'sizeof' and '('
2075+sp_sizeof_paren = remove # ignore/add/remove/force
2076+
2077+# Add or remove space after the tag keyword (Pawn)
2078+sp_after_tag = ignore # ignore/add/remove/force
2079+
2080+# Add or remove space inside enum '{' and '}'
2081+sp_inside_braces_enum = force # ignore/add/remove/force
2082+
2083+# Add or remove space inside struct/union '{' and '}'
2084+sp_inside_braces_struct = force # ignore/add/remove/force
2085+
2086+# Add or remove space inside '{' and '}'
2087+sp_inside_braces = force # ignore/add/remove/force
2088+
2089+# Add or remove space inside '{}'
2090+sp_inside_braces_empty = ignore # ignore/add/remove/force
2091+
2092+# Add or remove space between return type and function name
2093+# A minimum of 1 is forced except for pointer return types.
2094+sp_type_func = force # ignore/add/remove/force
2095+
2096+# Add or remove space between function name and '(' on function declaration
2097+sp_func_proto_paren = remove # ignore/add/remove/force
2098+
2099+# Add or remove space between function name and '(' on function definition
2100+sp_func_def_paren = remove # ignore/add/remove/force
2101+
2102+# Add or remove space inside empty function '()'
2103+sp_inside_fparens = ignore # ignore/add/remove/force
2104+
2105+# Add or remove space inside function '(' and ')'
2106+sp_inside_fparen = remove # ignore/add/remove/force
2107+
2108+# Add or remove space between ']' and '(' when part of a function call.
2109+sp_square_fparen = ignore # ignore/add/remove/force
2110+
2111+# Add or remove space between ')' and '{' of function
2112+sp_fparen_brace = add # ignore/add/remove/force
2113+
2114+# Add or remove space between function name and '(' on function calls
2115+sp_func_call_paren = remove # ignore/add/remove/force
2116+
2117+# Add or remove space between the user function name and '(' on function calls
2118+# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
2119+sp_func_call_user_paren = ignore # ignore/add/remove/force
2120+
2121+# Add or remove space between a constructor/destructor and the open paren
2122+sp_func_class_paren = remove # ignore/add/remove/force
2123+
2124+# Add or remove space between 'return' and '('
2125+sp_return_paren = remove # ignore/add/remove/force
2126+
2127+# Add or remove space between '__attribute__' and '('
2128+sp_attribute_paren = remove # ignore/add/remove/force
2129+
2130+# Add or remove space between 'defined' and '(' in '#if defined (FOO)'
2131+sp_defined_paren = remove # ignore/add/remove/force
2132+
2133+# Add or remove space between 'throw' and '(' in 'throw (something)'
2134+sp_throw_paren = ignore # ignore/add/remove/force
2135+
2136+# Add or remove space between macro and value
2137+sp_macro = ignore # ignore/add/remove/force
2138+
2139+# Add or remove space between macro function ')' and value
2140+sp_macro_func = ignore # ignore/add/remove/force
2141+
2142+# Add or remove space between 'else' and '{' if on the same line
2143+sp_else_brace = ignore # ignore/add/remove/force
2144+
2145+# Add or remove space between '}' and 'else' if on the same line
2146+sp_brace_else = ignore # ignore/add/remove/force
2147+
2148+# Add or remove space between '}' and the name of a typedef on the same line
2149+sp_brace_typedef = force # ignore/add/remove/force
2150+
2151+# Add or remove space between 'catch' and '{' if on the same line
2152+sp_catch_brace = ignore # ignore/add/remove/force
2153+
2154+# Add or remove space between '}' and 'catch' if on the same line
2155+sp_brace_catch = ignore # ignore/add/remove/force
2156+
2157+# Add or remove space between 'finally' and '{' if on the same line
2158+sp_finally_brace = ignore # ignore/add/remove/force
2159+
2160+# Add or remove space between '}' and 'finally' if on the same line
2161+sp_brace_finally = ignore # ignore/add/remove/force
2162+
2163+# Add or remove space between 'try' and '{' if on the same line
2164+sp_try_brace = ignore # ignore/add/remove/force
2165+
2166+# Add or remove space between get/set and '{' if on the same line
2167+sp_getset_brace = ignore # ignore/add/remove/force
2168+
2169+# Add or remove space before the '::' operator
2170+sp_before_dc = remove # ignore/add/remove/force
2171+
2172+# Add or remove space after the '::' operator
2173+sp_after_dc = remove # ignore/add/remove/force
2174+
2175+# Add or remove around the D named array initializer ':' operator
2176+sp_d_array_colon = ignore # ignore/add/remove/force
2177+
2178+# Add or remove space after the '!' (not) operator.
2179+sp_not = force # ignore/add/remove/force
2180+
2181+# Add or remove space after the '~' (invert) operator.
2182+sp_inv = remove # ignore/add/remove/force
2183+
2184+# Add or remove space after the '&' (address-of) operator.
2185+# This does not affect the spacing after a '&' that is part of a type.
2186+sp_addr = remove # ignore/add/remove/force
2187+
2188+# Add or remove space around the '.' or '->' operators
2189+sp_member = remove # ignore/add/remove/force
2190+
2191+# Add or remove space after the '*' (dereference) operator.
2192+# This does not affect the spacing after a '*' that is part of a type.
2193+sp_deref = remove # ignore/add/remove/force
2194+
2195+# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'
2196+sp_sign = remove # ignore/add/remove/force
2197+
2198+# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'
2199+sp_incdec = remove # ignore/add/remove/force
2200+
2201+# Add or remove space before a backslash-newline at the end of a line
2202+sp_before_nl_cont = add # ignore/add/remove/force
2203+
2204+# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
2205+sp_after_oc_scope = ignore # ignore/add/remove/force
2206+
2207+# Add or remove space after the colon in message specs
2208+# '-(int) f:(int) x;' vs '-(int) f: (int) x;'
2209+sp_after_oc_colon = ignore # ignore/add/remove/force
2210+
2211+# Add or remove space before the colon in message specs
2212+# '-(int) f: (int) x;' vs '-(int) f : (int) x;'
2213+sp_before_oc_colon = ignore # ignore/add/remove/force
2214+
2215+# Add or remove space after the colon in message specs
2216+# '[object setValue:1];' vs '[object setValue: 1];'
2217+sp_after_send_oc_colon = ignore # ignore/add/remove/force
2218+
2219+# Add or remove space before the colon in message specs
2220+# '[object setValue:1];' vs '[object setValue :1];'
2221+sp_before_send_oc_colon = ignore # ignore/add/remove/force
2222+
2223+# Add or remove space after the (type) in message specs
2224+# '-(int) f: (int) x;' vs '-(int) f: (int)x;'
2225+sp_after_oc_type = ignore # ignore/add/remove/force
2226+
2227+# Add or remove space around the ':' in 'b ? t : f'
2228+sp_cond_colon = ignore # ignore/add/remove/force
2229+
2230+# Add or remove space around the '?' in 'b ? t : f'
2231+sp_cond_question = ignore # ignore/add/remove/force
2232+
2233+# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
2234+sp_case_label = remove # ignore/add/remove/force
2235+
2236+#
2237+# Code alignment (not left column spaces/tabs)
2238+#
2239+
2240+# Whether to keep non-indenting tabs
2241+align_keep_tabs = false # false/true
2242+
2243+# Whether to use tabs for alinging
2244+align_with_tabs = false # false/true
2245+
2246+# Whether to bump out to the next tab when aligning
2247+align_on_tabstop = false # false/true
2248+
2249+# Whether to left-align numbers
2250+align_number_left = false # false/true
2251+
2252+# Align variable definitions in prototypes and functions
2253+align_func_params = false # false/true
2254+
2255+# Align parameters in single-line functions that have the same name.
2256+# The function names must already be aligned with each other.
2257+align_same_func_call_params = false # false/true
2258+
2259+# The span for aligning variable definitions (0=don't align)
2260+align_var_def_span = 1 # number
2261+
2262+# How to align the star in variable definitions.
2263+# 0=Part of the type 'void * foo;'
2264+# 1=Part of the variable 'void *foo;'
2265+# 2=Dangling 'void *foo;'
2266+align_var_def_star_style = 1 # number
2267+
2268+# How to align the '&' in variable definitions.
2269+# 0=Part of the type
2270+# 1=Part of the variable
2271+# 2=Dangling
2272+align_var_def_amp_style = 0 # number
2273+
2274+# The threshold for aligning variable definitions (0=no limit)
2275+align_var_def_thresh = 1 # number
2276+
2277+# The gap for aligning variable definitions
2278+align_var_def_gap = 0 # number
2279+
2280+# Whether to align the colon in struct bit fields
2281+align_var_def_colon = false # false/true
2282+
2283+# Whether to align inline struct/enum/union variable definitions
2284+align_var_def_inline = false # false/true
2285+
2286+# The span for aligning on '=' in assignments (0=don't align)
2287+align_assign_span = 0 # number
2288+
2289+# The threshold for aligning on '=' in assignments (0=no limit)
2290+align_assign_thresh = 12 # number
2291+
2292+# The span for aligning on '=' in enums (0=don't align)
2293+align_enum_equ_span = 0 # number
2294+
2295+# The threshold for aligning on '=' in enums (0=no limit)
2296+align_enum_equ_thresh = 0 # number
2297+
2298+# The span for aligning struct/union (0=don't align)
2299+align_var_struct_span = 0 # number
2300+
2301+# The threshold for aligning struct/union member definitions (0=no limit)
2302+align_var_struct_thresh = 0 # number
2303+
2304+# The gap for aligning struct/union member definitions
2305+align_var_struct_gap = 0 # number
2306+
2307+# The span for aligning struct initializer values (0=don't align)
2308+align_struct_init_span = 3 # number
2309+
2310+# The minimum space between the type and the synonym of a typedef
2311+align_typedef_gap = 3 # number
2312+
2313+# The span for aligning single-line typedefs (0=don't align)
2314+align_typedef_span = 5 # number
2315+
2316+# How to align typedef'd functions with other typedefs
2317+# 0: Don't mix them at all
2318+# 1: align the open paren with the types
2319+# 2: align the function type name with the other type names
2320+align_typedef_func = 0 # number
2321+
2322+# Controls the positioning of the '*' in typedefs. Just try it.
2323+# 0: Align on typdef type, ignore '*'
2324+# 1: The '*' is part of type name: typedef int *pint;
2325+# 2: The '*' is part of the type, but dangling: typedef int *pint;
2326+align_typedef_star_style = 0 # number
2327+
2328+# Controls the positioning of the '&' in typedefs. Just try it.
2329+# 0: Align on typdef type, ignore '&'
2330+# 1: The '&' is part of type name: typedef int &pint;
2331+# 2: The '&' is part of the type, but dangling: typedef int &pint;
2332+align_typedef_amp_style = 0 # number
2333+
2334+# The span for aligning comments that end lines (0=don't align)
2335+align_right_cmt_span = 3 # number
2336+
2337+# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment
2338+align_right_cmt_mix = false # false/true
2339+
2340+# If a trailing comment is more than this number of columns away from the text it follows,
2341+# it will qualify for being aligned.
2342+align_right_cmt_gap = 0 # number
2343+
2344+# The span for aligning function prototypes (0=don't align)
2345+align_func_proto_span = 0 # number
2346+
2347+# Minimum gap between the return type and the function name.
2348+align_func_proto_gap = 0 # number
2349+
2350+# Whether to mix aligning prototype and variable declarations.
2351+# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.
2352+align_mix_var_proto = false # false/true
2353+
2354+# Align single-line functions with function prototypes, uses align_func_proto_span
2355+align_single_line_func = false # false/true
2356+
2357+# Aligning the open brace of single-line functions.
2358+# Requires align_single_line_func=true, uses align_func_proto_span
2359+align_single_line_brace = false # false/true
2360+
2361+# Gap for align_single_line_brace.
2362+align_single_line_brace_gap = 0 # number
2363+
2364+# The span for aligning ObjC msg spec (0=don't align)
2365+align_oc_msg_spec_span = 0 # number
2366+
2367+# Whether to align macros wrapped with a backslash and a newline.
2368+# This will not work right if the macro contains a multi-line comment.
2369+align_nl_cont = true # false/true
2370+
2371+# The minimum space between label and value of a preprocessor define
2372+align_pp_define_gap = 4 # number
2373+
2374+# The span for aligning on '#define' bodies (0=don't align)
2375+align_pp_define_span = 3 # number
2376+
2377+# Align lines that start with '<<' with previous '<<'. Default=true
2378+align_left_shift = true # false/true
2379+
2380+#
2381+# Newline adding and removing options
2382+#
2383+
2384+# Whether to collapse empty blocks between '{' and '}'
2385+nl_collapse_empty_body = true # false/true
2386+
2387+# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'
2388+nl_assign_leave_one_liners = false # false/true
2389+
2390+# Don't split one-line braced statements inside a class xx { } body
2391+nl_class_leave_one_liners = false # false/true
2392+
2393+# Don't split one-line enums: 'enum foo { BAR = 15 };'
2394+nl_enum_leave_one_liners = false # false/true
2395+
2396+# Don't split one-line get or set functions
2397+nl_getset_leave_one_liners = false # false/true
2398+
2399+# Don't split one-line function definitions - 'int foo() { return 0; }'
2400+nl_func_leave_one_liners = false # false/true
2401+
2402+# Don't split one-line if/else statements - 'if(a) b++;'
2403+nl_if_leave_one_liners = false # false/true
2404+
2405+# Add or remove newlines at the start of the file
2406+nl_start_of_file = remove # ignore/add/remove/force
2407+
2408+# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'
2409+nl_start_of_file_min = 0 # number
2410+
2411+# Add or remove newline at the end of the file
2412+nl_end_of_file = force # ignore/add/remove/force
2413+
2414+# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')
2415+nl_end_of_file_min = 1 # number
2416+
2417+# Add or remove newline between '=' and '{'
2418+nl_assign_brace = force # ignore/add/remove/force
2419+
2420+# Add or remove newline between '=' and '[' (D only)
2421+nl_assign_square = force # ignore/add/remove/force
2422+
2423+# Add or remove newline after '= [' (D only). Will also affect the newline before the ']'
2424+nl_after_square_assign = force # ignore/add/remove/force
2425+
2426+# The number of newlines after a block of variable definitions
2427+nl_func_var_def_blk = 1 # number
2428+
2429+# Add or remove newline between a function call's ')' and '{', as in:
2430+# list_for_each(item, &list) { }
2431+nl_fcall_brace = force # ignore/add/remove/force
2432+
2433+# Add or remove newline between 'enum' and '{'
2434+nl_enum_brace = force # ignore/add/remove/force
2435+
2436+# Add or remove newline between 'struct and '{'
2437+nl_struct_brace = force # ignore/add/remove/force
2438+
2439+# Add or remove newline between 'union' and '{'
2440+nl_union_brace = force # ignore/add/remove/force
2441+
2442+# Add or remove newline between 'if' and '{'
2443+nl_if_brace = force # ignore/add/remove/force
2444+
2445+# Add or remove newline between '}' and 'else'
2446+nl_brace_else = force # ignore/add/remove/force
2447+
2448+# Add or remove newline between 'else if' and '{'
2449+# If set to ignore, nl_if_brace is used instead
2450+nl_elseif_brace = force # ignore/add/remove/force
2451+
2452+# Add or remove newline between 'else' and '{'
2453+nl_else_brace = force # ignore/add/remove/force
2454+
2455+# Add or remove newline between 'else' and 'if'
2456+nl_else_if = remove # ignore/add/remove/force
2457+
2458+# Add or remove newline between '}' and 'finally'
2459+nl_brace_finally = force # ignore/add/remove/force
2460+
2461+# Add or remove newline between 'finally' and '{'
2462+nl_finally_brace = force # ignore/add/remove/force
2463+
2464+# Add or remove newline between 'try' and '{'
2465+nl_try_brace = force # ignore/add/remove/force
2466+
2467+# Add or remove newline between get/set and '{'
2468+nl_getset_brace = force # ignore/add/remove/force
2469+
2470+# Add or remove newline between 'for' and '{'
2471+nl_for_brace = force # ignore/add/remove/force
2472+
2473+# Add or remove newline between 'catch' and '{'
2474+nl_catch_brace = force # ignore/add/remove/force
2475+
2476+# Add or remove newline between '}' and 'catch'
2477+nl_brace_catch = force # ignore/add/remove/force
2478+
2479+# Add or remove newline between 'while' and '{'
2480+nl_while_brace = force # ignore/add/remove/force
2481+
2482+# Add or remove newline between 'do' and '{'
2483+nl_do_brace = force # ignore/add/remove/force
2484+
2485+# Add or remove newline between '}' and 'while' of 'do' statement
2486+nl_brace_while = force # ignore/add/remove/force
2487+
2488+# Add or remove newline between 'switch' and '{'
2489+nl_switch_brace = force # ignore/add/remove/force
2490+
2491+# Add or remove newline when condition spans two or more lines
2492+nl_multi_line_cond = false # false/true
2493+
2494+# Force a newline in a define after the macro name for multi-line defines.
2495+nl_multi_line_define = true # false/true
2496+
2497+# Whether to put a newline before 'case' statement
2498+nl_before_case = true # false/true
2499+
2500+# Add or remove newline between ')' and 'throw'
2501+nl_before_throw = ignore # ignore/add/remove/force
2502+
2503+# Whether to put a newline after 'case' statement
2504+nl_after_case = true # false/true
2505+
2506+# Newline between namespace and {
2507+nl_namespace_brace = add # ignore/add/remove/force
2508+
2509+# Add or remove newline between 'template<>' and whatever follows.
2510+nl_template_class = add # ignore/add/remove/force
2511+
2512+# Add or remove newline between 'class' and '{'
2513+nl_class_brace = add # ignore/add/remove/force
2514+
2515+# Add or remove newline after each ',' in the constructor member initialization
2516+nl_class_init_args = force # ignore/add/remove/force
2517+
2518+# Add or remove newline between return type and function name in definition
2519+nl_func_type_name = ignore # ignore/add/remove/force
2520+
2521+# Add or remove newline between return type and function name in a prototype
2522+nl_func_proto_type_name = remove # ignore/add/remove/force
2523+
2524+# Add or remove newline between a function name and the opening '('
2525+nl_func_paren = remove # ignore/add/remove/force
2526+
2527+# Add or remove newline after '(' in a function declaration
2528+nl_func_decl_start = remove # ignore/add/remove/force
2529+
2530+# Add or remove newline after each ',' in a function declaration
2531+nl_func_decl_args = remove # ignore/add/remove/force
2532+
2533+# Add or remove newline before the ')' in a function declaration
2534+nl_func_decl_end = remove # ignore/add/remove/force
2535+
2536+# Add or remove newline between function signature and '{'
2537+nl_fdef_brace = add # ignore/add/remove/force
2538+
2539+# Whether to put a newline after 'return' statement
2540+nl_after_return = true # false/true
2541+
2542+# Add or remove a newline between the return keyword and return expression.
2543+nl_return_expr = remove # ignore/add/remove/force
2544+
2545+# Whether to put a newline after semicolons, except in 'for' statements
2546+nl_after_semicolon = true # false/true
2547+
2548+# Whether to put a newline after brace open.
2549+# This also adds a newline before the matching brace close.
2550+nl_after_brace_open = true # false/true
2551+
2552+# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is
2553+# placed between the open brace and a trailing single-line comment.
2554+nl_after_brace_open_cmt = false # false/true
2555+
2556+# Whether to put a newline after a virtual brace open.
2557+# These occur in un-braced if/while/do/for statement bodies.
2558+nl_after_vbrace_open = true # false/true
2559+
2560+# Whether to alter newlines in '#define' macros
2561+nl_define_macro = true # false/true
2562+
2563+# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
2564+nl_squeeze_ifdef = false # false/true
2565+
2566+# Add or remove newline before 'if'
2567+nl_before_if = ignore # ignore/add/remove/force
2568+
2569+# Add or remove newline after 'if'
2570+nl_after_if = ignore # ignore/add/remove/force
2571+
2572+# Add or remove newline before 'for'
2573+nl_before_for = ignore # ignore/add/remove/force
2574+
2575+# Add or remove newline after 'for'
2576+nl_after_for = ignore # ignore/add/remove/force
2577+
2578+# Add or remove newline before 'while'
2579+nl_before_while = ignore # ignore/add/remove/force
2580+
2581+# Add or remove newline after 'while'
2582+nl_after_while = ignore # ignore/add/remove/force
2583+
2584+# Add or remove newline before 'switch'
2585+nl_before_switch = force # ignore/add/remove/force
2586+
2587+# Add or remove newline after 'switch'
2588+nl_after_switch = force # ignore/add/remove/force
2589+
2590+# Add or remove newline before 'do'
2591+nl_before_do = ignore # ignore/add/remove/force
2592+
2593+# Add or remove newline after 'do'
2594+nl_after_do = ignore # ignore/add/remove/force
2595+
2596+# Whether to double-space commented-entries in struct/enum
2597+nl_ds_struct_enum_cmt = false # false/true
2598+
2599+# Whether to double-space before the close brace of a struct/union/enum
2600+nl_ds_struct_enum_close_brace = false # false/true
2601+
2602+# Add or remove a newline around a class colon.
2603+# Related to pos_class_colon, nl_class_init_args, and pos_comma.
2604+nl_class_colon = ignore # ignore/add/remove/force
2605+
2606+# Change simple unbraced if statements into a one-liner
2607+# 'if(b)\n i++;' => 'if(b) i++;'
2608+nl_create_if_one_liner = false # false/true
2609+
2610+# Change simple unbraced for statements into a one-liner
2611+# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'
2612+nl_create_for_one_liner = false # false/true
2613+
2614+# Change simple unbraced while statements into a one-liner
2615+# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);'
2616+nl_create_while_one_liner = false # false/true
2617+
2618+#
2619+# Positioning options
2620+#
2621+
2622+# The position of arithmetic operators in wrapped expressions
2623+pos_arith = lead # ignore/lead/trail
2624+
2625+# The position of assignment in wrapped expressions
2626+pos_assign = trail # ignore/lead/trail
2627+
2628+# The position of boolean operators in wrapped expressions
2629+pos_bool = lead # ignore/lead/trail
2630+
2631+# The position of the comma in wrapped expressions
2632+pos_comma = trail # ignore/lead/trail
2633+
2634+# The position of the comma in the constructor initialization list
2635+pos_class_comma = trail # ignore/lead/trail
2636+
2637+# The position of colons between constructor and member initialization
2638+pos_class_colon = lead # ignore/lead/trail
2639+
2640+#
2641+# Line Splitting options
2642+#
2643+
2644+# Try to limit code width to N number of columns
2645+code_width = 76 # number
2646+
2647+# Whether to fully split long 'for' statements at semi-colons
2648+ls_for_split_full = true # false/true
2649+
2650+# Whether to fully split long function protos/calls at commas
2651+ls_func_split_full = true # false/true
2652+
2653+#
2654+# Blank line options
2655+#
2656+
2657+# The maximum consecutive newlines
2658+nl_max = 4 # number
2659+
2660+# The number of newlines after a function prototype, if followed by another function prototype
2661+nl_after_func_proto = 0 # number
2662+
2663+# The number of newlines after a function prototype, if not followed by another function prototype
2664+nl_after_func_proto_group = 3 # number
2665+
2666+# The number of newlines after '}' of a multi-line function body
2667+nl_after_func_body = 3 # number
2668+
2669+# The number of newlines after '}' of a single line function body
2670+nl_after_func_body_one_liner = 1 # number
2671+
2672+# The minimum number of newlines before a multi-line comment.
2673+# Doesn't apply if after a brace open or another multi-line comment.
2674+nl_before_block_comment = 2 # number
2675+
2676+# The minimum number of newlines before a single-line C comment.
2677+# Doesn't apply if after a brace open or other single-line C comments.
2678+nl_before_c_comment = 1 # number
2679+
2680+# The minimum number of newlines before a CPP comment.
2681+# Doesn't apply if after a brace open or other CPP comments.
2682+nl_before_cpp_comment = 0 # number
2683+
2684+# Whether to force a newline after a mulit-line comment.
2685+nl_after_multiline_comment = false # false/true
2686+
2687+# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
2688+# Will not change the newline count if after a brace open.
2689+# 0 = No change.
2690+nl_before_access_spec = 1 # number
2691+
2692+# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
2693+# 0 = No change.
2694+nl_after_access_spec = 1 # number
2695+
2696+# The number of newlines between a function def and the function comment.
2697+# 0 = No change.
2698+nl_comment_func_def = 0 # number
2699+
2700+# Whether to remove blank lines after '{'
2701+eat_blanks_after_open_brace = true # false/true
2702+
2703+# Whether to remove blank lines before '}'
2704+eat_blanks_before_close_brace = true # false/true
2705+
2706+#
2707+# Code modifying options (non-whitespace)
2708+#
2709+
2710+# Add or remove braces on single-line 'do' statement
2711+mod_full_brace_do = add # ignore/add/remove/force
2712+
2713+# Add or remove braces on single-line 'for' statement
2714+mod_full_brace_for = add # ignore/add/remove/force
2715+
2716+# Add or remove braces on single-line function defintions. (Pawn)
2717+mod_full_brace_function = ignore # ignore/add/remove/force
2718+
2719+# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
2720+mod_full_brace_if = ignore # ignore/add/remove/force
2721+
2722+# Don't remove braces around statements that span N newlines
2723+mod_full_brace_nl = 0 # number
2724+
2725+# Add or remove braces on single-line 'while' statement
2726+mod_full_brace_while = add # ignore/add/remove/force
2727+
2728+# Add or remove unnecessary paren on 'return' statement
2729+mod_paren_on_return = remove # ignore/add/remove/force
2730+
2731+# Whether to change optional semicolons to real semicolons
2732+mod_pawn_semicolon = false # false/true
2733+
2734+# Add parens on 'while' and 'if' statement around bools
2735+mod_full_paren_if_bool = true # false/true
2736+
2737+# Whether to remove superfluous semicolons
2738+mod_remove_extra_semicolon = true # false/true
2739+
2740+# If a function body exceeds the specified number of newlines and doesn't have a comment after
2741+# the close brace, a comment will be added.
2742+mod_add_long_function_closebrace_comment = 5 # number
2743+
2744+# If a switch body exceeds the specified number of newlines and doesn't have a comment after
2745+# the close brace, a comment will be added.
2746+mod_add_long_switch_closebrace_comment = 5 # number
2747+
2748+# If TRUE, will sort consecutive single-line 'import' statements [Java, D]
2749+mod_sort_import = false # false/true
2750+
2751+# If TRUE, will sort consecutive single-line 'using' statements [C#]
2752+mod_sort_using = false # false/true
2753+
2754+# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
2755+# This is generally a bad idea, as it may break your code.
2756+mod_sort_include = false # false/true
2757+
2758+# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
2759+mod_move_case_break = false # false/true
2760+
2761+# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
2762+mod_remove_empty_return = true # false/true
2763+
2764+#
2765+# Comment modifications
2766+#
2767+
2768+# Try to wrap comments at cmt_width columns
2769+cmt_width = 0 # number
2770+
2771+# If false, disable all multi-line comment changes, including cmt_width and leading chars.
2772+# Default is true.
2773+cmt_indent_multi = true # false/true
2774+
2775+# Whether to group c-comments that look like they are in a block
2776+cmt_c_group = false # false/true
2777+
2778+# Whether to put an empty '/*' on the first line of the combined c-comment
2779+cmt_c_nl_start = false # false/true
2780+
2781+# Whether to put a newline before the closing '*/' of the combined c-comment
2782+cmt_c_nl_end = false # false/true
2783+
2784+# Whether to group cpp-comments that look like they are in a block
2785+cmt_cpp_group = false # false/true
2786+
2787+# Whether to put an empty '/*' on the first line of the combined cpp-comment
2788+cmt_cpp_nl_start = false # false/true
2789+
2790+# Whether to put a newline before the closing '*/' of the combined cpp-comment
2791+cmt_cpp_nl_end = false # false/true
2792+
2793+# Whether to change cpp-comments into c-comments
2794+cmt_cpp_to_c = false # false/true
2795+
2796+# Whether to put a star on subsequent comment lines
2797+cmt_star_cont = true # false/true
2798+
2799+# The number of spaces to insert at the start of subsequent comment lines
2800+cmt_sp_before_star_cont = 0 # number
2801+
2802+# The number of spaces to insert after the star on subsequent comment lines
2803+cmt_sp_after_star_cont = 1 # number
2804+
2805+# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
2806+# the comment are the same length. Default=True
2807+cmt_multi_check_last = true # false/true
2808+
2809+# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.
2810+# Will substitue $(filename) with the current file's name.
2811+cmt_insert_file_header = "" # string
2812+
2813+# The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment.
2814+# Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.
2815+# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }
2816+cmt_insert_func_header = "" # string
2817+
2818+# The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment.
2819+# Will substitue $(class) with the class name.
2820+cmt_insert_class_header = "" # string
2821+
2822+# If a preprocessor is encountered when stepping backwards from a function name, then
2823+# this option decides whether the comment should be inserted.
2824+# Affects cmt_insert_func_header and cmt_insert_class_header.
2825+cmt_insert_before_preproc = false # false/true
2826+
2827+#
2828+# Preprocessor options
2829+#
2830+
2831+# Control indent of preprocessors inside #if blocks at brace level 0
2832+pp_indent = remove # ignore/add/remove/force
2833+
2834+# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
2835+pp_indent_at_level = false # false/true
2836+
2837+# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.
2838+pp_indent_count = 1 # number
2839+
2840+# Add or remove space after # based on pp_level of #if blocks
2841+pp_space = add # ignore/add/remove/force
2842+
2843+# Sets the number of spaces added with pp_space
2844+pp_space_count = 1 # number
2845+
2846+# The indent for #region and #endregion in C# and '#pragma region' in C/C++
2847+pp_indent_region = 0 # number
2848+
2849+# Whether to indent the code between #region and #endregion
2850+pp_region_indent_code = false # false/true
2851+
2852+# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level
2853+pp_indent_if = 0 # number
2854+
2855+# Control whether to indent the code between #if, #else and #endif when not at file-level
2856+pp_if_indent_code = false # false/true
2857+
2858+# Whether to indent '#define' at the brace level (true) or from column 1 (false)
2859+pp_define_at_level = false # false/true
2860+
2861+# You can force a token to be a type with the 'type' option.
2862+# Example:
2863+# type myfoo1 myfoo2
2864+#
2865+# You can create custom macro-based indentation using macro-open,
2866+# macro-else and macro-close.
2867+# Example:
2868+# macro-open BEGIN_TEMPLATE_MESSAGE_MAP
2869+# macro-open BEGIN_MESSAGE_MAP
2870+# macro-close END_MESSAGE_MAP
2871+#
2872+# You can assign any keyword to any type with the set option.
2873+# set func_call_user _ N_
2874
2875=== added file 'configure.ac'
2876--- configure.ac 1970-01-01 00:00:00 +0000
2877+++ configure.ac 2011-09-27 21:12:27 +0000
2878@@ -0,0 +1,93 @@
2879+#
2880+# Percona Playback
2881+#
2882+# Copyright (C) 2010-2011 Percona Inc.
2883+# Portions build system:
2884+# Copyright (C) 2009-2010 Monty Taylor, Eric Day
2885+# All rights reserved.
2886+#
2887+# Use and distribution licensed under the BSD license. See
2888+# the COPYING file in this directory for full text.
2889+#
2890+
2891+AC_INIT([percona_playback],[0.1],[https://bugs.launchpad.net/percona_playback])
2892+AC_CONFIG_SRCDIR([src/ppb.h])
2893+AC_CONFIG_AUX_DIR(config)
2894+AC_CONFIG_MACRO_DIR([m4])
2895+
2896+PANDORA_CANONICAL_TARGET(require-cxx, warnings-always-on)
2897+
2898+# Increment if interfaces have been added, removed, or changed.
2899+LIBPERCONA_PLAYBACK_VERSION_CURRENT=0
2900+
2901+# Increment if source code has changed, set to zero if current is incremented.
2902+LIBPERCONA_PLAYBACK_VERSION_REVISION=0
2903+
2904+# Increment if interfaces have been added, set to zero if interfaces have been
2905+# removed or changed.
2906+LIBPERCONA_PLAYBACK_VERSION_AGE=0
2907+
2908+AC_SUBST(LIBPERCONA_PLAYBACK_VERSION_CURRENT)
2909+AC_SUBST(LIBPERCONA_PLAYBACK_VERSION_REVISION)
2910+AC_SUBST(LIBPERCONA_PLAYBACK_VERSION_AGE)
2911+
2912+AC_DEFINE_UNQUOTED([LIBPERCONA_PLAYBACK_VERSION_CURRENT],
2913+ [$LIBPERCONA_PLAYBACK_VERSION_CURRENT],
2914+ [Current portion of libpercona_playback version])
2915+AC_DEFINE_UNQUOTED([LIBPERCONA_PLAYBACK_VERSION_REVISION],
2916+ [$LIBPERCONA_PLAYBACK_VERSION_REVISION],
2917+ [Revision portion of libpercona_playback version])
2918+AC_DEFINE_UNQUOTED([LIBPERCONA_PLAYBACK_VERSION_AGE],
2919+ [$LIBPERCONA_PLAYBACK_VERSION_AGE],
2920+ [Age portion of libpercona_playback version])
2921+
2922+LIBPERCONA_PLAYBACK_VERSION=$LIBPERCONA_PLAYBACK_VERSION_CURRENT:$LIBPERCONA_PLAYBACK_VERSION_REVISION:$LIBPERCONA_PLAYBACK_VERSION_AGE
2923+
2924+AC_SUBST(LIBPERCONA_PLAYBACK_VERSION)
2925+
2926+AC_LANG_PUSH(C++)
2927+PANDORA_REQUIRE_PTHREAD
2928+PANDORA_REQUIRE_LIBDL
2929+AC_LANG_POP
2930+
2931+PANDORA_WITH_MYSQL
2932+PANDORA_REQUIRE_LIBMYSQLCLIENT
2933+PANDORA_HAVE_BOOST
2934+PANDORA_REQUIRE_BOOST
2935+PANDORA_REQUIRE_BOOST_PROGRAM_OPTIONS
2936+
2937+PANDORA_PLUGINS
2938+
2939+AC_DEFINE_UNQUOTED([PERCONA_PLAYBACK_MODULE_EXT], ["$acl_cv_shlibext"],
2940+ [Extension to use for modules.])
2941+
2942+
2943+AM_CFLAGS="${AM_CFLAGS} ${NO_WERROR}"
2944+AM_CXXFLAGS="${AM_CXXFLAGS} ${NO_WERROR}"
2945+
2946+AC_CONFIG_FILES(Makefile docs/header.html)
2947+
2948+AC_OUTPUT
2949+
2950+echo "---"
2951+echo "Configuration summary for $PACKAGE_NAME version $VERSION"
2952+echo ""
2953+echo " * Installation prefix: $prefix"
2954+echo " * System type: $host_vendor-$host_os"
2955+echo " * Host CPU: $host_cpu"
2956+echo " * C Compiler: $CC_VERSION"
2957+echo " * Assertions enabled: $ac_cv_assert"
2958+echo " * Debug enabled: $with_debug"
2959+echo " * Profiling enabled: $ac_profiling"
2960+echo " * Coverage enabled: $ac_coverage"
2961+echo " * Warnings as errors: $ac_cv_warnings_as_errors"
2962+echo " * Configured modules:"
2963+echo ""
2964+
2965+for module in `echo $PANDORA_PLUGIN_LIST | sed 's/_/::/g' | tr ',' '\n' | sort`
2966+do
2967+ echo " - $module"
2968+done
2969+
2970+echo ""
2971+echo "---"
2972
2973=== added directory 'docs'
2974=== added file 'docs/Doxyfile'
2975--- docs/Doxyfile 1970-01-01 00:00:00 +0000
2976+++ docs/Doxyfile 2011-09-27 21:12:27 +0000
2977@@ -0,0 +1,1514 @@
2978+# Doxyfile 1.6.1
2979+
2980+# This file describes the settings to be used by the documentation system
2981+# doxygen (www.doxygen.org) for a project
2982+#
2983+# All text after a hash (#) is considered a comment and will be ignored
2984+# The format is:
2985+# TAG = value [value, ...]
2986+# For lists items can also be appended using:
2987+# TAG += value [value, ...]
2988+# Values that contain spaces should be placed between quotes (" ")
2989+
2990+#---------------------------------------------------------------------------
2991+# Project related configuration options
2992+#---------------------------------------------------------------------------
2993+
2994+# This tag specifies the encoding used for all characters in the config file
2995+# that follow. The default is UTF-8 which is also the encoding used for all
2996+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
2997+# iconv built into libc) for the transcoding. See
2998+# http://www.gnu.org/software/libiconv for the list of possible encodings.
2999+
3000+DOXYFILE_ENCODING = UTF-8
3001+
3002+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
3003+# by quotes) that should identify the project.
3004+
3005+PROJECT_NAME = percona_playback
3006+
3007+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
3008+# This could be handy for archiving the generated documentation or
3009+# if some version control system is used.
3010+
3011+PROJECT_NUMBER =
3012+
3013+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
3014+# base path where the generated documentation will be put.
3015+# If a relative path is entered, it will be relative to the location
3016+# where doxygen was started. If left blank the current directory will be used.
3017+
3018+OUTPUT_DIRECTORY = docs
3019+
3020+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
3021+# 4096 sub-directories (in 2 levels) under the output directory of each output
3022+# format and will distribute the generated files over these directories.
3023+# Enabling this option can be useful when feeding doxygen a huge amount of
3024+# source files, where putting all generated files in the same directory would
3025+# otherwise cause performance problems for the file system.
3026+
3027+CREATE_SUBDIRS = NO
3028+
3029+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
3030+# documentation generated by doxygen is written. Doxygen will use this
3031+# information to generate all constant output in the proper language.
3032+# The default language is English, other supported languages are:
3033+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
3034+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
3035+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
3036+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
3037+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
3038+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
3039+
3040+OUTPUT_LANGUAGE = English
3041+
3042+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
3043+# include brief member descriptions after the members that are listed in
3044+# the file and class documentation (similar to JavaDoc).
3045+# Set to NO to disable this.
3046+
3047+BRIEF_MEMBER_DESC = YES
3048+
3049+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
3050+# the brief description of a member or function before the detailed description.
3051+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
3052+# brief descriptions will be completely suppressed.
3053+
3054+REPEAT_BRIEF = YES
3055+
3056+# This tag implements a quasi-intelligent brief description abbreviator
3057+# that is used to form the text in various listings. Each string
3058+# in this list, if found as the leading text of the brief description, will be
3059+# stripped from the text and the result after processing the whole list, is
3060+# used as the annotated text. Otherwise, the brief description is used as-is.
3061+# If left blank, the following values are used ("$name" is automatically
3062+# replaced with the name of the entity): "The $name class" "The $name widget"
3063+# "The $name file" "is" "provides" "specifies" "contains"
3064+# "represents" "a" "an" "the"
3065+
3066+ABBREVIATE_BRIEF =
3067+
3068+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
3069+# Doxygen will generate a detailed section even if there is only a brief
3070+# description.
3071+
3072+ALWAYS_DETAILED_SEC = YES
3073+
3074+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
3075+# inherited members of a class in the documentation of that class as if those
3076+# members were ordinary class members. Constructors, destructors and assignment
3077+# operators of the base classes will not be shown.
3078+
3079+INLINE_INHERITED_MEMB = NO
3080+
3081+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
3082+# path before files name in the file list and in the header files. If set
3083+# to NO the shortest path that makes the file name unique will be used.
3084+
3085+FULL_PATH_NAMES = YES
3086+
3087+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
3088+# can be used to strip a user-defined part of the path. Stripping is
3089+# only done if one of the specified strings matches the left-hand part of
3090+# the path. The tag can be used to show relative paths in the file list.
3091+# If left blank the directory from which doxygen is run is used as the
3092+# path to strip.
3093+
3094+STRIP_FROM_PATH =
3095+
3096+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
3097+# the path mentioned in the documentation of a class, which tells
3098+# the reader which header file to include in order to use a class.
3099+# If left blank only the name of the header file containing the class
3100+# definition is used. Otherwise one should specify the include paths that
3101+# are normally passed to the compiler using the -I flag.
3102+
3103+STRIP_FROM_INC_PATH =
3104+
3105+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
3106+# (but less readable) file names. This can be useful is your file systems
3107+# doesn't support long names like on DOS, Mac, or CD-ROM.
3108+
3109+SHORT_NAMES = NO
3110+
3111+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
3112+# will interpret the first line (until the first dot) of a JavaDoc-style
3113+# comment as the brief description. If set to NO, the JavaDoc
3114+# comments will behave just like regular Qt-style comments
3115+# (thus requiring an explicit @brief command for a brief description.)
3116+
3117+JAVADOC_AUTOBRIEF = NO
3118+
3119+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
3120+# interpret the first line (until the first dot) of a Qt-style
3121+# comment as the brief description. If set to NO, the comments
3122+# will behave just like regular Qt-style comments (thus requiring
3123+# an explicit \brief command for a brief description.)
3124+
3125+QT_AUTOBRIEF = NO
3126+
3127+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
3128+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
3129+# comments) as a brief description. This used to be the default behaviour.
3130+# The new default is to treat a multi-line C++ comment block as a detailed
3131+# description. Set this tag to YES if you prefer the old behaviour instead.
3132+
3133+MULTILINE_CPP_IS_BRIEF = NO
3134+
3135+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
3136+# member inherits the documentation from any documented member that it
3137+# re-implements.
3138+
3139+INHERIT_DOCS = YES
3140+
3141+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
3142+# a new page for each member. If set to NO, the documentation of a member will
3143+# be part of the file/class/namespace that contains it.
3144+
3145+SEPARATE_MEMBER_PAGES = NO
3146+
3147+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
3148+# Doxygen uses this value to replace tabs by spaces in code fragments.
3149+
3150+TAB_SIZE = 8
3151+
3152+# This tag can be used to specify a number of aliases that acts
3153+# as commands in the documentation. An alias has the form "name=value".
3154+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
3155+# put the command \sideeffect (or @sideeffect) in the documentation, which
3156+# will result in a user-defined paragraph with heading "Side Effects:".
3157+# You can put \n's in the value part of an alias to insert newlines.
3158+
3159+ALIASES =
3160+
3161+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
3162+# sources only. Doxygen will then generate output that is more tailored for C.
3163+# For instance, some of the names that are used will be different. The list
3164+# of all members will be omitted, etc.
3165+
3166+OPTIMIZE_OUTPUT_FOR_C = YES
3167+
3168+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
3169+# sources only. Doxygen will then generate output that is more tailored for
3170+# Java. For instance, namespaces will be presented as packages, qualified
3171+# scopes will look different, etc.
3172+
3173+OPTIMIZE_OUTPUT_JAVA = NO
3174+
3175+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
3176+# sources only. Doxygen will then generate output that is more tailored for
3177+# Fortran.
3178+
3179+OPTIMIZE_FOR_FORTRAN = NO
3180+
3181+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
3182+# sources. Doxygen will then generate output that is tailored for
3183+# VHDL.
3184+
3185+OPTIMIZE_OUTPUT_VHDL = NO
3186+
3187+# Doxygen selects the parser to use depending on the extension of the files it parses.
3188+# With this tag you can assign which parser to use for a given extension.
3189+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
3190+# The format is ext=language, where ext is a file extension, and language is one of
3191+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
3192+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
3193+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
3194+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
3195+
3196+EXTENSION_MAPPING =
3197+
3198+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
3199+# to include (a tag file for) the STL sources as input, then you should
3200+# set this tag to YES in order to let doxygen match functions declarations and
3201+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
3202+# func(std::string) {}). This also make the inheritance and collaboration
3203+# diagrams that involve STL classes more complete and accurate.
3204+
3205+BUILTIN_STL_SUPPORT = NO
3206+
3207+# If you use Microsoft's C++/CLI language, you should set this option to YES to
3208+# enable parsing support.
3209+
3210+CPP_CLI_SUPPORT = NO
3211+
3212+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
3213+# Doxygen will parse them like normal C++ but will assume all classes use public
3214+# instead of private inheritance when no explicit protection keyword is present.
3215+
3216+SIP_SUPPORT = NO
3217+
3218+# For Microsoft's IDL there are propget and propput attributes to indicate getter
3219+# and setter methods for a property. Setting this option to YES (the default)
3220+# will make doxygen to replace the get and set methods by a property in the
3221+# documentation. This will only work if the methods are indeed getting or
3222+# setting a simple type. If this is not the case, or you want to show the
3223+# methods anyway, you should set this option to NO.
3224+
3225+IDL_PROPERTY_SUPPORT = YES
3226+
3227+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
3228+# tag is set to YES, then doxygen will reuse the documentation of the first
3229+# member in the group (if any) for the other members of the group. By default
3230+# all members of a group must be documented explicitly.
3231+
3232+DISTRIBUTE_GROUP_DOC = NO
3233+
3234+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
3235+# the same type (for instance a group of public functions) to be put as a
3236+# subgroup of that type (e.g. under the Public Functions section). Set it to
3237+# NO to prevent subgrouping. Alternatively, this can be done per class using
3238+# the \nosubgrouping command.
3239+
3240+SUBGROUPING = YES
3241+
3242+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
3243+# is documented as struct, union, or enum with the name of the typedef. So
3244+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
3245+# with name TypeT. When disabled the typedef will appear as a member of a file,
3246+# namespace, or class. And the struct will be named TypeS. This can typically
3247+# be useful for C code in case the coding convention dictates that all compound
3248+# types are typedef'ed and only the typedef is referenced, never the tag name.
3249+
3250+TYPEDEF_HIDES_STRUCT = NO
3251+
3252+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
3253+# determine which symbols to keep in memory and which to flush to disk.
3254+# When the cache is full, less often used symbols will be written to disk.
3255+# For small to medium size projects (<1000 input files) the default value is
3256+# probably good enough. For larger projects a too small cache size can cause
3257+# doxygen to be busy swapping symbols to and from disk most of the time
3258+# causing a significant performance penality.
3259+# If the system has enough physical memory increasing the cache will improve the
3260+# performance by keeping more symbols in memory. Note that the value works on
3261+# a logarithmic scale so increasing the size by one will rougly double the
3262+# memory usage. The cache size is given by this formula:
3263+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
3264+# corresponding to a cache size of 2^16 = 65536 symbols
3265+
3266+SYMBOL_CACHE_SIZE = 0
3267+
3268+#---------------------------------------------------------------------------
3269+# Build related configuration options
3270+#---------------------------------------------------------------------------
3271+
3272+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
3273+# documentation are documented, even if no documentation was available.
3274+# Private class members and static file members will be hidden unless
3275+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
3276+
3277+EXTRACT_ALL = YES
3278+
3279+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
3280+# will be included in the documentation.
3281+
3282+EXTRACT_PRIVATE = YES
3283+
3284+# If the EXTRACT_STATIC tag is set to YES all static members of a file
3285+# will be included in the documentation.
3286+
3287+EXTRACT_STATIC = YES
3288+
3289+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
3290+# defined locally in source files will be included in the documentation.
3291+# If set to NO only classes defined in header files are included.
3292+
3293+EXTRACT_LOCAL_CLASSES = YES
3294+
3295+# This flag is only useful for Objective-C code. When set to YES local
3296+# methods, which are defined in the implementation section but not in
3297+# the interface are included in the documentation.
3298+# If set to NO (the default) only methods in the interface are included.
3299+
3300+EXTRACT_LOCAL_METHODS = NO
3301+
3302+# If this flag is set to YES, the members of anonymous namespaces will be
3303+# extracted and appear in the documentation as a namespace called
3304+# 'anonymous_namespace{file}', where file will be replaced with the base
3305+# name of the file that contains the anonymous namespace. By default
3306+# anonymous namespace are hidden.
3307+
3308+EXTRACT_ANON_NSPACES = NO
3309+
3310+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
3311+# undocumented members of documented classes, files or namespaces.
3312+# If set to NO (the default) these members will be included in the
3313+# various overviews, but no documentation section is generated.
3314+# This option has no effect if EXTRACT_ALL is enabled.
3315+
3316+HIDE_UNDOC_MEMBERS = NO
3317+
3318+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
3319+# undocumented classes that are normally visible in the class hierarchy.
3320+# If set to NO (the default) these classes will be included in the various
3321+# overviews. This option has no effect if EXTRACT_ALL is enabled.
3322+
3323+HIDE_UNDOC_CLASSES = NO
3324+
3325+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
3326+# friend (class|struct|union) declarations.
3327+# If set to NO (the default) these declarations will be included in the
3328+# documentation.
3329+
3330+HIDE_FRIEND_COMPOUNDS = NO
3331+
3332+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
3333+# documentation blocks found inside the body of a function.
3334+# If set to NO (the default) these blocks will be appended to the
3335+# function's detailed documentation block.
3336+
3337+HIDE_IN_BODY_DOCS = NO
3338+
3339+# The INTERNAL_DOCS tag determines if documentation
3340+# that is typed after a \internal command is included. If the tag is set
3341+# to NO (the default) then the documentation will be excluded.
3342+# Set it to YES to include the internal documentation.
3343+
3344+INTERNAL_DOCS = NO
3345+
3346+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
3347+# file names in lower-case letters. If set to YES upper-case letters are also
3348+# allowed. This is useful if you have classes or files whose names only differ
3349+# in case and if your file system supports case sensitive file names. Windows
3350+# and Mac users are advised to set this option to NO.
3351+
3352+CASE_SENSE_NAMES = YES
3353+
3354+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
3355+# will show members with their full class and namespace scopes in the
3356+# documentation. If set to YES the scope will be hidden.
3357+
3358+HIDE_SCOPE_NAMES = NO
3359+
3360+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
3361+# will put a list of the files that are included by a file in the documentation
3362+# of that file.
3363+
3364+SHOW_INCLUDE_FILES = YES
3365+
3366+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
3367+# is inserted in the documentation for inline members.
3368+
3369+INLINE_INFO = YES
3370+
3371+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
3372+# will sort the (detailed) documentation of file and class members
3373+# alphabetically by member name. If set to NO the members will appear in
3374+# declaration order.
3375+
3376+SORT_MEMBER_DOCS = NO
3377+
3378+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
3379+# brief documentation of file, namespace and class members alphabetically
3380+# by member name. If set to NO (the default) the members will appear in
3381+# declaration order.
3382+
3383+SORT_BRIEF_DOCS = NO
3384+
3385+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
3386+
3387+SORT_MEMBERS_CTORS_1ST = NO
3388+
3389+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
3390+# hierarchy of group names into alphabetical order. If set to NO (the default)
3391+# the group names will appear in their defined order.
3392+
3393+SORT_GROUP_NAMES = NO
3394+
3395+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
3396+# sorted by fully-qualified names, including namespaces. If set to
3397+# NO (the default), the class list will be sorted only by class name,
3398+# not including the namespace part.
3399+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
3400+# Note: This option applies only to the class list, not to the
3401+# alphabetical list.
3402+
3403+SORT_BY_SCOPE_NAME = YES
3404+
3405+# The GENERATE_TODOLIST tag can be used to enable (YES) or
3406+# disable (NO) the todo list. This list is created by putting \todo
3407+# commands in the documentation.
3408+
3409+GENERATE_TODOLIST = YES
3410+
3411+# The GENERATE_TESTLIST tag can be used to enable (YES) or
3412+# disable (NO) the test list. This list is created by putting \test
3413+# commands in the documentation.
3414+
3415+GENERATE_TESTLIST = YES
3416+
3417+# The GENERATE_BUGLIST tag can be used to enable (YES) or
3418+# disable (NO) the bug list. This list is created by putting \bug
3419+# commands in the documentation.
3420+
3421+GENERATE_BUGLIST = YES
3422+
3423+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
3424+# disable (NO) the deprecated list. This list is created by putting
3425+# \deprecated commands in the documentation.
3426+
3427+GENERATE_DEPRECATEDLIST= YES
3428+
3429+# The ENABLED_SECTIONS tag can be used to enable conditional
3430+# documentation sections, marked by \if sectionname ... \endif.
3431+
3432+ENABLED_SECTIONS =
3433+
3434+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
3435+# the initial value of a variable or define consists of for it to appear in
3436+# the documentation. If the initializer consists of more lines than specified
3437+# here it will be hidden. Use a value of 0 to hide initializers completely.
3438+# The appearance of the initializer of individual variables and defines in the
3439+# documentation can be controlled using \showinitializer or \hideinitializer
3440+# command in the documentation regardless of this setting.
3441+
3442+MAX_INITIALIZER_LINES = 30
3443+
3444+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
3445+# at the bottom of the documentation of classes and structs. If set to YES the
3446+# list will mention the files that were used to generate the documentation.
3447+
3448+SHOW_USED_FILES = YES
3449+
3450+# If the sources in your project are distributed over multiple directories
3451+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
3452+# in the documentation. The default is NO.
3453+
3454+SHOW_DIRECTORIES = NO
3455+
3456+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
3457+# This will remove the Files entry from the Quick Index and from the
3458+# Folder Tree View (if specified). The default is YES.
3459+
3460+SHOW_FILES = YES
3461+
3462+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
3463+# Namespaces page.
3464+# This will remove the Namespaces entry from the Quick Index
3465+# and from the Folder Tree View (if specified). The default is YES.
3466+
3467+SHOW_NAMESPACES = YES
3468+
3469+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
3470+# doxygen should invoke to get the current version for each file (typically from
3471+# the version control system). Doxygen will invoke the program by executing (via
3472+# popen()) the command <command> <input-file>, where <command> is the value of
3473+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
3474+# provided by doxygen. Whatever the program writes to standard output
3475+# is used as the file version. See the manual for examples.
3476+
3477+FILE_VERSION_FILTER =
3478+
3479+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
3480+# doxygen. The layout file controls the global structure of the generated output files
3481+# in an output format independent way. The create the layout file that represents
3482+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
3483+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
3484+# of the layout file.
3485+
3486+LAYOUT_FILE =
3487+
3488+#---------------------------------------------------------------------------
3489+# configuration options related to warning and progress messages
3490+#---------------------------------------------------------------------------
3491+
3492+# The QUIET tag can be used to turn on/off the messages that are generated
3493+# by doxygen. Possible values are YES and NO. If left blank NO is used.
3494+
3495+QUIET = NO
3496+
3497+# The WARNINGS tag can be used to turn on/off the warning messages that are
3498+# generated by doxygen. Possible values are YES and NO. If left blank
3499+# NO is used.
3500+
3501+WARNINGS = YES
3502+
3503+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
3504+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
3505+# automatically be disabled.
3506+
3507+WARN_IF_UNDOCUMENTED = NO
3508+
3509+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
3510+# potential errors in the documentation, such as not documenting some
3511+# parameters in a documented function, or documenting parameters that
3512+# don't exist or using markup commands wrongly.
3513+
3514+WARN_IF_DOC_ERROR = YES
3515+
3516+# This WARN_NO_PARAMDOC option can be abled to get warnings for
3517+# functions that are documented, but have no documentation for their parameters
3518+# or return value. If set to NO (the default) doxygen will only warn about
3519+# wrong or incomplete parameter documentation, but not about the absence of
3520+# documentation.
3521+
3522+WARN_NO_PARAMDOC = NO
3523+
3524+# The WARN_FORMAT tag determines the format of the warning messages that
3525+# doxygen can produce. The string should contain the $file, $line, and $text
3526+# tags, which will be replaced by the file and line number from which the
3527+# warning originated and the warning text. Optionally the format may contain
3528+# $version, which will be replaced by the version of the file (if it could
3529+# be obtained via FILE_VERSION_FILTER)
3530+
3531+WARN_FORMAT = "$file:$line: $text"
3532+
3533+# The WARN_LOGFILE tag can be used to specify a file to which warning
3534+# and error messages should be written. If left blank the output is written
3535+# to stderr.
3536+
3537+WARN_LOGFILE =
3538+
3539+#---------------------------------------------------------------------------
3540+# configuration options related to the input files
3541+#---------------------------------------------------------------------------
3542+
3543+# The INPUT tag can be used to specify the files and/or directories that contain
3544+# documented source files. You may enter file names like "myfile.cpp" or
3545+# directories like "/usr/src/myproject". Separate the files or directories
3546+# with spaces.
3547+
3548+INPUT = docs ScaleStack
3549+
3550+# This tag can be used to specify the character encoding of the source files
3551+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
3552+# also the default input encoding. Doxygen uses libiconv (or the iconv built
3553+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
3554+# the list of possible encodings.
3555+
3556+INPUT_ENCODING = UTF-8
3557+
3558+# If the value of the INPUT tag contains directories, you can use the
3559+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
3560+# and *.h) to filter out the source-files in the directories. If left
3561+# blank the following patterns are tested:
3562+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
3563+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
3564+
3565+FILE_PATTERNS = *.h *.cc
3566+
3567+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
3568+# should be searched for input files as well. Possible values are YES and NO.
3569+# If left blank NO is used.
3570+
3571+RECURSIVE = YES
3572+
3573+# The EXCLUDE tag can be used to specify files and/or directories that should
3574+# excluded from the INPUT source files. This way you can easily exclude a
3575+# subdirectory from a directory tree whose root is specified with the INPUT tag.
3576+
3577+EXCLUDE =
3578+
3579+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
3580+# directories that are symbolic links (a Unix filesystem feature) are excluded
3581+# from the input.
3582+
3583+EXCLUDE_SYMLINKS = NO
3584+
3585+# If the value of the INPUT tag contains directories, you can use the
3586+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
3587+# certain files from those directories. Note that the wildcards are matched
3588+# against the file with absolute path, so to exclude all test directories
3589+# for example use the pattern */test/*
3590+
3591+EXCLUDE_PATTERNS =
3592+
3593+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
3594+# (namespaces, classes, functions, etc.) that should be excluded from the
3595+# output. The symbol name can be a fully qualified name, a word, or if the
3596+# wildcard * is used, a substring. Examples: ANamespace, AClass,
3597+# AClass::ANamespace, ANamespace::*Test
3598+
3599+EXCLUDE_SYMBOLS =
3600+
3601+# The EXAMPLE_PATH tag can be used to specify one or more files or
3602+# directories that contain example code fragments that are included (see
3603+# the \include command).
3604+
3605+EXAMPLE_PATH =
3606+
3607+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
3608+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
3609+# and *.h) to filter out the source-files in the directories. If left
3610+# blank all files are included.
3611+
3612+EXAMPLE_PATTERNS =
3613+
3614+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
3615+# searched for input files to be used with the \include or \dontinclude
3616+# commands irrespective of the value of the RECURSIVE tag.
3617+# Possible values are YES and NO. If left blank NO is used.
3618+
3619+EXAMPLE_RECURSIVE = NO
3620+
3621+# The IMAGE_PATH tag can be used to specify one or more files or
3622+# directories that contain image that are included in the documentation (see
3623+# the \image command).
3624+
3625+IMAGE_PATH =
3626+
3627+# The INPUT_FILTER tag can be used to specify a program that doxygen should
3628+# invoke to filter for each input file. Doxygen will invoke the filter program
3629+# by executing (via popen()) the command <filter> <input-file>, where <filter>
3630+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
3631+# input file. Doxygen will then use the output that the filter program writes
3632+# to standard output.
3633+# If FILTER_PATTERNS is specified, this tag will be
3634+# ignored.
3635+
3636+INPUT_FILTER =
3637+
3638+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
3639+# basis.
3640+# Doxygen will compare the file name with each pattern and apply the
3641+# filter if there is a match.
3642+# The filters are a list of the form:
3643+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
3644+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
3645+# is applied to all files.
3646+
3647+FILTER_PATTERNS =
3648+
3649+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
3650+# INPUT_FILTER) will be used to filter the input files when producing source
3651+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
3652+
3653+FILTER_SOURCE_FILES = NO
3654+
3655+#---------------------------------------------------------------------------
3656+# configuration options related to source browsing
3657+#---------------------------------------------------------------------------
3658+
3659+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
3660+# be generated. Documented entities will be cross-referenced with these sources.
3661+# Note: To get rid of all source code in the generated output, make sure also
3662+# VERBATIM_HEADERS is set to NO.
3663+
3664+SOURCE_BROWSER = YES
3665+
3666+# Setting the INLINE_SOURCES tag to YES will include the body
3667+# of functions and classes directly in the documentation.
3668+
3669+INLINE_SOURCES = NO
3670+
3671+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
3672+# doxygen to hide any special comment blocks from generated source code
3673+# fragments. Normal C and C++ comments will always remain visible.
3674+
3675+STRIP_CODE_COMMENTS = YES
3676+
3677+# If the REFERENCED_BY_RELATION tag is set to YES
3678+# then for each documented function all documented
3679+# functions referencing it will be listed.
3680+
3681+REFERENCED_BY_RELATION = NO
3682+
3683+# If the REFERENCES_RELATION tag is set to YES
3684+# then for each documented function all documented entities
3685+# called/used by that function will be listed.
3686+
3687+REFERENCES_RELATION = NO
3688+
3689+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
3690+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
3691+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
3692+# link to the source code.
3693+# Otherwise they will link to the documentation.
3694+
3695+REFERENCES_LINK_SOURCE = YES
3696+
3697+# If the USE_HTAGS tag is set to YES then the references to source code
3698+# will point to the HTML generated by the htags(1) tool instead of doxygen
3699+# built-in source browser. The htags tool is part of GNU's global source
3700+# tagging system (see http://www.gnu.org/software/global/global.html). You
3701+# will need version 4.8.6 or higher.
3702+
3703+USE_HTAGS = NO
3704+
3705+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
3706+# will generate a verbatim copy of the header file for each class for
3707+# which an include is specified. Set to NO to disable this.
3708+
3709+VERBATIM_HEADERS = YES
3710+
3711+#---------------------------------------------------------------------------
3712+# configuration options related to the alphabetical class index
3713+#---------------------------------------------------------------------------
3714+
3715+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
3716+# of all compounds will be generated. Enable this if the project
3717+# contains a lot of classes, structs, unions or interfaces.
3718+
3719+ALPHABETICAL_INDEX = NO
3720+
3721+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
3722+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
3723+# in which this list will be split (can be a number in the range [1..20])
3724+
3725+COLS_IN_ALPHA_INDEX = 5
3726+
3727+# In case all classes in a project start with a common prefix, all
3728+# classes will be put under the same header in the alphabetical index.
3729+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
3730+# should be ignored while generating the index headers.
3731+
3732+IGNORE_PREFIX =
3733+
3734+#---------------------------------------------------------------------------
3735+# configuration options related to the HTML output
3736+#---------------------------------------------------------------------------
3737+
3738+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
3739+# generate HTML output.
3740+
3741+GENERATE_HTML = YES
3742+
3743+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
3744+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3745+# put in front of it. If left blank `html' will be used as the default path.
3746+
3747+HTML_OUTPUT = html
3748+
3749+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
3750+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
3751+# doxygen will generate files with .html extension.
3752+
3753+HTML_FILE_EXTENSION = .html
3754+
3755+# The HTML_HEADER tag can be used to specify a personal HTML header for
3756+# each generated HTML page. If it is left blank doxygen will generate a
3757+# standard header.
3758+
3759+HTML_HEADER = docs/header.html
3760+
3761+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
3762+# each generated HTML page. If it is left blank doxygen will generate a
3763+# standard footer.
3764+
3765+HTML_FOOTER =
3766+
3767+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
3768+# style sheet that is used by each HTML page. It can be used to
3769+# fine-tune the look of the HTML output. If the tag is left blank doxygen
3770+# will generate a default style sheet. Note that doxygen will try to copy
3771+# the style sheet file to the HTML output directory, so don't put your own
3772+# stylesheet in the HTML output directory as well, or it will be erased!
3773+
3774+HTML_STYLESHEET =
3775+
3776+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
3777+# files or namespaces will be aligned in HTML using tables. If set to
3778+# NO a bullet list will be used.
3779+
3780+HTML_ALIGN_MEMBERS = YES
3781+
3782+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
3783+# documentation will contain sections that can be hidden and shown after the
3784+# page has loaded. For this to work a browser that supports
3785+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
3786+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
3787+
3788+HTML_DYNAMIC_SECTIONS = NO
3789+
3790+# If the GENERATE_DOCSET tag is set to YES, additional index files
3791+# will be generated that can be used as input for Apple's Xcode 3
3792+# integrated development environment, introduced with OSX 10.5 (Leopard).
3793+# To create a documentation set, doxygen will generate a Makefile in the
3794+# HTML output directory. Running make will produce the docset in that
3795+# directory and running "make install" will install the docset in
3796+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
3797+# it at startup.
3798+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
3799+
3800+GENERATE_DOCSET = NO
3801+
3802+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
3803+# feed. A documentation feed provides an umbrella under which multiple
3804+# documentation sets from a single provider (such as a company or product suite)
3805+# can be grouped.
3806+
3807+DOCSET_FEEDNAME = "Doxygen generated docs"
3808+
3809+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
3810+# should uniquely identify the documentation set bundle. This should be a
3811+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
3812+# will append .docset to the name.
3813+
3814+DOCSET_BUNDLE_ID = org.doxygen.Project
3815+
3816+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
3817+# will be generated that can be used as input for tools like the
3818+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
3819+# of the generated HTML documentation.
3820+
3821+GENERATE_HTMLHELP = NO
3822+
3823+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
3824+# be used to specify the file name of the resulting .chm file. You
3825+# can add a path in front of the file if the result should not be
3826+# written to the html output directory.
3827+
3828+CHM_FILE =
3829+
3830+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
3831+# be used to specify the location (absolute path including file name) of
3832+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
3833+# the HTML help compiler on the generated index.hhp.
3834+
3835+HHC_LOCATION =
3836+
3837+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
3838+# controls if a separate .chi index file is generated (YES) or that
3839+# it should be included in the master .chm file (NO).
3840+
3841+GENERATE_CHI = NO
3842+
3843+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
3844+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
3845+# content.
3846+
3847+CHM_INDEX_ENCODING =
3848+
3849+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
3850+# controls whether a binary table of contents is generated (YES) or a
3851+# normal table of contents (NO) in the .chm file.
3852+
3853+BINARY_TOC = NO
3854+
3855+# The TOC_EXPAND flag can be set to YES to add extra items for group members
3856+# to the contents of the HTML help documentation and to the tree view.
3857+
3858+TOC_EXPAND = NO
3859+
3860+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
3861+# are set, an additional index file will be generated that can be used as input for
3862+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
3863+# HTML documentation.
3864+
3865+GENERATE_QHP = NO
3866+
3867+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
3868+# be used to specify the file name of the resulting .qch file.
3869+# The path specified is relative to the HTML output folder.
3870+
3871+QCH_FILE =
3872+
3873+# The QHP_NAMESPACE tag specifies the namespace to use when generating
3874+# Qt Help Project output. For more information please see
3875+# http://doc.trolltech.com/qthelpproject.html#namespace
3876+
3877+QHP_NAMESPACE =
3878+
3879+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
3880+# Qt Help Project output. For more information please see
3881+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
3882+
3883+QHP_VIRTUAL_FOLDER = doc
3884+
3885+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
3886+# For more information please see
3887+# http://doc.trolltech.com/qthelpproject.html#custom-filters
3888+
3889+QHP_CUST_FILTER_NAME =
3890+
3891+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
3892+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
3893+
3894+QHP_CUST_FILTER_ATTRS =
3895+
3896+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
3897+# filter section matches.
3898+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
3899+
3900+QHP_SECT_FILTER_ATTRS =
3901+
3902+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
3903+# be used to specify the location of Qt's qhelpgenerator.
3904+# If non-empty doxygen will try to run qhelpgenerator on the generated
3905+# .qhp file.
3906+
3907+QHG_LOCATION =
3908+
3909+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
3910+# top of each HTML page. The value NO (the default) enables the index and
3911+# the value YES disables it.
3912+
3913+DISABLE_INDEX = NO
3914+
3915+# This tag can be used to set the number of enum values (range [1..20])
3916+# that doxygen will group on one line in the generated HTML documentation.
3917+
3918+ENUM_VALUES_PER_LINE = 4
3919+
3920+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
3921+# structure should be generated to display hierarchical information.
3922+# If the tag value is set to YES, a side panel will be generated
3923+# containing a tree-like index structure (just like the one that
3924+# is generated for HTML Help). For this to work a browser that supports
3925+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
3926+# Windows users are probably better off using the HTML help feature.
3927+
3928+GENERATE_TREEVIEW = NO
3929+
3930+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
3931+# and Class Hierarchy pages using a tree view instead of an ordered list.
3932+
3933+USE_INLINE_TREES = NO
3934+
3935+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
3936+# used to set the initial width (in pixels) of the frame in which the tree
3937+# is shown.
3938+
3939+TREEVIEW_WIDTH = 250
3940+
3941+# Use this tag to change the font size of Latex formulas included
3942+# as images in the HTML documentation. The default is 10. Note that
3943+# when you change the font size after a successful doxygen run you need
3944+# to manually remove any form_*.png images from the HTML output directory
3945+# to force them to be regenerated.
3946+
3947+FORMULA_FONTSIZE = 10
3948+
3949+# When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
3950+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP)
3951+# there is already a search function so this one should typically
3952+# be disabled.
3953+
3954+SEARCHENGINE = NO
3955+
3956+#---------------------------------------------------------------------------
3957+# configuration options related to the LaTeX output
3958+#---------------------------------------------------------------------------
3959+
3960+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
3961+# generate Latex output.
3962+
3963+GENERATE_LATEX = NO
3964+
3965+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
3966+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
3967+# put in front of it. If left blank `latex' will be used as the default path.
3968+
3969+LATEX_OUTPUT = latex
3970+
3971+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
3972+# invoked. If left blank `latex' will be used as the default command name.
3973+
3974+LATEX_CMD_NAME = latex
3975+
3976+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
3977+# generate index for LaTeX. If left blank `makeindex' will be used as the
3978+# default command name.
3979+
3980+MAKEINDEX_CMD_NAME = makeindex
3981+
3982+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
3983+# LaTeX documents. This may be useful for small projects and may help to
3984+# save some trees in general.
3985+
3986+COMPACT_LATEX = NO
3987+
3988+# The PAPER_TYPE tag can be used to set the paper type that is used
3989+# by the printer. Possible values are: a4, a4wide, letter, legal and
3990+# executive. If left blank a4wide will be used.
3991+
3992+PAPER_TYPE = a4wide
3993+
3994+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
3995+# packages that should be included in the LaTeX output.
3996+
3997+EXTRA_PACKAGES =
3998+
3999+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
4000+# the generated latex document. The header should contain everything until
4001+# the first chapter. If it is left blank doxygen will generate a
4002+# standard header. Notice: only use this tag if you know what you are doing!
4003+
4004+LATEX_HEADER =
4005+
4006+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
4007+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
4008+# contain links (just like the HTML output) instead of page references
4009+# This makes the output suitable for online browsing using a pdf viewer.
4010+
4011+PDF_HYPERLINKS = YES
4012+
4013+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
4014+# plain latex in the generated Makefile. Set this option to YES to get a
4015+# higher quality PDF documentation.
4016+
4017+USE_PDFLATEX = YES
4018+
4019+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
4020+# command to the generated LaTeX files. This will instruct LaTeX to keep
4021+# running if errors occur, instead of asking the user for help.
4022+# This option is also used when generating formulas in HTML.
4023+
4024+LATEX_BATCHMODE = NO
4025+
4026+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
4027+# include the index chapters (such as File Index, Compound Index, etc.)
4028+# in the output.
4029+
4030+LATEX_HIDE_INDICES = NO
4031+
4032+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
4033+
4034+LATEX_SOURCE_CODE = NO
4035+
4036+#---------------------------------------------------------------------------
4037+# configuration options related to the RTF output
4038+#---------------------------------------------------------------------------
4039+
4040+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
4041+# The RTF output is optimized for Word 97 and may not look very pretty with
4042+# other RTF readers or editors.
4043+
4044+GENERATE_RTF = NO
4045+
4046+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
4047+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
4048+# put in front of it. If left blank `rtf' will be used as the default path.
4049+
4050+RTF_OUTPUT = rtf
4051+
4052+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
4053+# RTF documents. This may be useful for small projects and may help to
4054+# save some trees in general.
4055+
4056+COMPACT_RTF = NO
4057+
4058+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
4059+# will contain hyperlink fields. The RTF file will
4060+# contain links (just like the HTML output) instead of page references.
4061+# This makes the output suitable for online browsing using WORD or other
4062+# programs which support those fields.
4063+# Note: wordpad (write) and others do not support links.
4064+
4065+RTF_HYPERLINKS = NO
4066+
4067+# Load stylesheet definitions from file. Syntax is similar to doxygen's
4068+# config file, i.e. a series of assignments. You only have to provide
4069+# replacements, missing definitions are set to their default value.
4070+
4071+RTF_STYLESHEET_FILE =
4072+
4073+# Set optional variables used in the generation of an rtf document.
4074+# Syntax is similar to doxygen's config file.
4075+
4076+RTF_EXTENSIONS_FILE =
4077+
4078+#---------------------------------------------------------------------------
4079+# configuration options related to the man page output
4080+#---------------------------------------------------------------------------
4081+
4082+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
4083+# generate man pages
4084+
4085+GENERATE_MAN = NO
4086+
4087+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
4088+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
4089+# put in front of it. If left blank `man' will be used as the default path.
4090+
4091+MAN_OUTPUT = man
4092+
4093+# The MAN_EXTENSION tag determines the extension that is added to
4094+# the generated man pages (default is the subroutine's section .3)
4095+
4096+MAN_EXTENSION = .3
4097+
4098+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
4099+# then it will generate one additional man file for each entity
4100+# documented in the real man page(s). These additional files
4101+# only source the real man page, but without them the man command
4102+# would be unable to find the correct page. The default is NO.
4103+
4104+MAN_LINKS = NO
4105+
4106+#---------------------------------------------------------------------------
4107+# configuration options related to the XML output
4108+#---------------------------------------------------------------------------
4109+
4110+# If the GENERATE_XML tag is set to YES Doxygen will
4111+# generate an XML file that captures the structure of
4112+# the code including all documentation.
4113+
4114+GENERATE_XML = NO
4115+
4116+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
4117+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
4118+# put in front of it. If left blank `xml' will be used as the default path.
4119+
4120+XML_OUTPUT = xml
4121+
4122+# The XML_SCHEMA tag can be used to specify an XML schema,
4123+# which can be used by a validating XML parser to check the
4124+# syntax of the XML files.
4125+
4126+XML_SCHEMA =
4127+
4128+# The XML_DTD tag can be used to specify an XML DTD,
4129+# which can be used by a validating XML parser to check the
4130+# syntax of the XML files.
4131+
4132+XML_DTD =
4133+
4134+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
4135+# dump the program listings (including syntax highlighting
4136+# and cross-referencing information) to the XML output. Note that
4137+# enabling this will significantly increase the size of the XML output.
4138+
4139+XML_PROGRAMLISTING = YES
4140+
4141+#---------------------------------------------------------------------------
4142+# configuration options for the AutoGen Definitions output
4143+#---------------------------------------------------------------------------
4144+
4145+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
4146+# generate an AutoGen Definitions (see autogen.sf.net) file
4147+# that captures the structure of the code including all
4148+# documentation. Note that this feature is still experimental
4149+# and incomplete at the moment.
4150+
4151+GENERATE_AUTOGEN_DEF = NO
4152+
4153+#---------------------------------------------------------------------------
4154+# configuration options related to the Perl module output
4155+#---------------------------------------------------------------------------
4156+
4157+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
4158+# generate a Perl module file that captures the structure of
4159+# the code including all documentation. Note that this
4160+# feature is still experimental and incomplete at the
4161+# moment.
4162+
4163+GENERATE_PERLMOD = NO
4164+
4165+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
4166+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
4167+# to generate PDF and DVI output from the Perl module output.
4168+
4169+PERLMOD_LATEX = NO
4170+
4171+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
4172+# nicely formatted so it can be parsed by a human reader.
4173+# This is useful
4174+# if you want to understand what is going on.
4175+# On the other hand, if this
4176+# tag is set to NO the size of the Perl module output will be much smaller
4177+# and Perl will parse it just the same.
4178+
4179+PERLMOD_PRETTY = YES
4180+
4181+# The names of the make variables in the generated doxyrules.make file
4182+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
4183+# This is useful so different doxyrules.make files included by the same
4184+# Makefile don't overwrite each other's variables.
4185+
4186+PERLMOD_MAKEVAR_PREFIX =
4187+
4188+#---------------------------------------------------------------------------
4189+# Configuration options related to the preprocessor
4190+#---------------------------------------------------------------------------
4191+
4192+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
4193+# evaluate all C-preprocessor directives found in the sources and include
4194+# files.
4195+
4196+ENABLE_PREPROCESSING = YES
4197+
4198+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
4199+# names in the source code. If set to NO (the default) only conditional
4200+# compilation will be performed. Macro expansion can be done in a controlled
4201+# way by setting EXPAND_ONLY_PREDEF to YES.
4202+
4203+MACRO_EXPANSION = YES
4204+
4205+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
4206+# then the macro expansion is limited to the macros specified with the
4207+# PREDEFINED and EXPAND_AS_DEFINED tags.
4208+
4209+EXPAND_ONLY_PREDEF = YES
4210+
4211+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
4212+# in the INCLUDE_PATH (see below) will be search if a #include is found.
4213+
4214+SEARCH_INCLUDES = YES
4215+
4216+# The INCLUDE_PATH tag can be used to specify one or more directories that
4217+# contain include files that are not input files but should be processed by
4218+# the preprocessor.
4219+
4220+INCLUDE_PATH =
4221+
4222+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
4223+# patterns (like *.h and *.hpp) to filter out the header-files in the
4224+# directories. If left blank, the patterns specified with FILE_PATTERNS will
4225+# be used.
4226+
4227+INCLUDE_FILE_PATTERNS =
4228+
4229+# The PREDEFINED tag can be used to specify one or more macro names that
4230+# are defined before the preprocessor is started (similar to the -D option of
4231+# gcc). The argument of the tag is a list of macros of the form: name
4232+# or name=definition (no spaces). If the definition and the = are
4233+# omitted =1 is assumed. To prevent a macro definition from being
4234+# undefined via #undef or recursively expanded use the := operator
4235+# instead of the = operator.
4236+
4237+PREDEFINED = SCALESTACK_API= SCALESTACK_LOCAL=
4238+
4239+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
4240+# this tag can be used to specify a list of macro names that should be expanded.
4241+# The macro definition that is found in the sources will be used.
4242+# Use the PREDEFINED tag if you want to use a different macro definition.
4243+
4244+EXPAND_AS_DEFINED =
4245+
4246+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
4247+# doxygen's preprocessor will remove all function-like macros that are alone
4248+# on a line, have an all uppercase name, and do not end with a semicolon. Such
4249+# function macros are typically used for boiler-plate code, and will confuse
4250+# the parser if not removed.
4251+
4252+SKIP_FUNCTION_MACROS = YES
4253+
4254+#---------------------------------------------------------------------------
4255+# Configuration::additions related to external references
4256+#---------------------------------------------------------------------------
4257+
4258+# The TAGFILES option can be used to specify one or more tagfiles.
4259+# Optionally an initial location of the external documentation
4260+# can be added for each tagfile. The format of a tag file without
4261+# this location is as follows:
4262+#
4263+# TAGFILES = file1 file2 ...
4264+# Adding location for the tag files is done as follows:
4265+#
4266+# TAGFILES = file1=loc1 "file2 = loc2" ...
4267+# where "loc1" and "loc2" can be relative or absolute paths or
4268+# URLs. If a location is present for each tag, the installdox tool
4269+# does not have to be run to correct the links.
4270+# Note that each tag file must have a unique name
4271+# (where the name does NOT include the path)
4272+# If a tag file is not located in the directory in which doxygen
4273+# is run, you must also specify the path to the tagfile here.
4274+
4275+TAGFILES =
4276+
4277+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
4278+# a tag file that is based on the input files it reads.
4279+
4280+GENERATE_TAGFILE =
4281+
4282+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
4283+# in the class index. If set to NO only the inherited external classes
4284+# will be listed.
4285+
4286+ALLEXTERNALS = NO
4287+
4288+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
4289+# in the modules index. If set to NO, only the current project's groups will
4290+# be listed.
4291+
4292+EXTERNAL_GROUPS = YES
4293+
4294+# The PERL_PATH should be the absolute path and name of the perl script
4295+# interpreter (i.e. the result of `which perl').
4296+
4297+PERL_PATH = /usr/bin/perl
4298+
4299+#---------------------------------------------------------------------------
4300+# Configuration options related to the dot tool
4301+#---------------------------------------------------------------------------
4302+
4303+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
4304+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
4305+# or super classes. Setting the tag to NO turns the diagrams off. Note that
4306+# this option is superseded by the HAVE_DOT option below. This is only a
4307+# fallback. It is recommended to install and use dot, since it yields more
4308+# powerful graphs.
4309+
4310+CLASS_DIAGRAMS = YES
4311+
4312+# You can define message sequence charts within doxygen comments using the \msc
4313+# command. Doxygen will then run the mscgen tool (see
4314+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
4315+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
4316+# the mscgen tool resides. If left empty the tool is assumed to be found in the
4317+# default search path.
4318+
4319+MSCGEN_PATH =
4320+
4321+# If set to YES, the inheritance and collaboration graphs will hide
4322+# inheritance and usage relations if the target is undocumented
4323+# or is not a class.
4324+
4325+HIDE_UNDOC_RELATIONS = YES
4326+
4327+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
4328+# available from the path. This tool is part of Graphviz, a graph visualization
4329+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
4330+# have no effect if this option is set to NO (the default)
4331+
4332+HAVE_DOT = NO
4333+
4334+# By default doxygen will write a font called FreeSans.ttf to the output
4335+# directory and reference it in all dot files that doxygen generates. This
4336+# font does not include all possible unicode characters however, so when you need
4337+# these (or just want a differently looking font) you can specify the font name
4338+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
4339+# which can be done by putting it in a standard location or by setting the
4340+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
4341+# containing the font.
4342+
4343+DOT_FONTNAME = FreeSans
4344+
4345+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
4346+# The default size is 10pt.
4347+
4348+DOT_FONTSIZE = 10
4349+
4350+# By default doxygen will tell dot to use the output directory to look for the
4351+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
4352+# different font using DOT_FONTNAME you can set the path where dot
4353+# can find it using this tag.
4354+
4355+DOT_FONTPATH =
4356+
4357+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
4358+# will generate a graph for each documented class showing the direct and
4359+# indirect inheritance relations. Setting this tag to YES will force the
4360+# the CLASS_DIAGRAMS tag to NO.
4361+
4362+CLASS_GRAPH = YES
4363+
4364+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
4365+# will generate a graph for each documented class showing the direct and
4366+# indirect implementation dependencies (inheritance, containment, and
4367+# class references variables) of the class with other documented classes.
4368+
4369+COLLABORATION_GRAPH = YES
4370+
4371+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
4372+# will generate a graph for groups, showing the direct groups dependencies
4373+
4374+GROUP_GRAPHS = YES
4375+
4376+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
4377+# collaboration diagrams in a style similar to the OMG's Unified Modeling
4378+# Language.
4379+
4380+UML_LOOK = NO
4381+
4382+# If set to YES, the inheritance and collaboration graphs will show the
4383+# relations between templates and their instances.
4384+
4385+TEMPLATE_RELATIONS = NO
4386+
4387+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
4388+# tags are set to YES then doxygen will generate a graph for each documented
4389+# file showing the direct and indirect include dependencies of the file with
4390+# other documented files.
4391+
4392+INCLUDE_GRAPH = YES
4393+
4394+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
4395+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
4396+# documented header file showing the documented files that directly or
4397+# indirectly include this file.
4398+
4399+INCLUDED_BY_GRAPH = YES
4400+
4401+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
4402+# doxygen will generate a call dependency graph for every global function
4403+# or class method. Note that enabling this option will significantly increase
4404+# the time of a run. So in most cases it will be better to enable call graphs
4405+# for selected functions only using the \callgraph command.
4406+
4407+CALL_GRAPH = NO
4408+
4409+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
4410+# doxygen will generate a caller dependency graph for every global function
4411+# or class method. Note that enabling this option will significantly increase
4412+# the time of a run. So in most cases it will be better to enable caller
4413+# graphs for selected functions only using the \callergraph command.
4414+
4415+CALLER_GRAPH = NO
4416+
4417+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
4418+# will graphical hierarchy of all classes instead of a textual one.
4419+
4420+GRAPHICAL_HIERARCHY = YES
4421+
4422+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
4423+# then doxygen will show the dependencies a directory has on other directories
4424+# in a graphical way. The dependency relations are determined by the #include
4425+# relations between the files in the directories.
4426+
4427+DIRECTORY_GRAPH = YES
4428+
4429+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
4430+# generated by dot. Possible values are png, jpg, or gif
4431+# If left blank png will be used.
4432+
4433+DOT_IMAGE_FORMAT = png
4434+
4435+# The tag DOT_PATH can be used to specify the path where the dot tool can be
4436+# found. If left blank, it is assumed the dot tool can be found in the path.
4437+
4438+DOT_PATH =
4439+
4440+# The DOTFILE_DIRS tag can be used to specify one or more directories that
4441+# contain dot files that are included in the documentation (see the
4442+# \dotfile command).
4443+
4444+DOTFILE_DIRS =
4445+
4446+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
4447+# nodes that will be shown in the graph. If the number of nodes in a graph
4448+# becomes larger than this value, doxygen will truncate the graph, which is
4449+# visualized by representing a node as a red box. Note that doxygen if the
4450+# number of direct children of the root node in a graph is already larger than
4451+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
4452+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
4453+
4454+DOT_GRAPH_MAX_NODES = 50
4455+
4456+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
4457+# graphs generated by dot. A depth value of 3 means that only nodes reachable
4458+# from the root by following a path via at most 3 edges will be shown. Nodes
4459+# that lay further from the root node will be omitted. Note that setting this
4460+# option to 1 or 2 may greatly reduce the computation time needed for large
4461+# code bases. Also note that the size of a graph can be further restricted by
4462+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
4463+
4464+MAX_DOT_GRAPH_DEPTH = 0
4465+
4466+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
4467+# background. This is disabled by default, because dot on Windows does not
4468+# seem to support this out of the box. Warning: Depending on the platform used,
4469+# enabling this option may lead to badly anti-aliased labels on the edges of
4470+# a graph (i.e. they become hard to read).
4471+
4472+DOT_TRANSPARENT = NO
4473+
4474+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
4475+# files in one run (i.e. multiple -o and -T options on the command line). This
4476+# makes dot run faster, but since only newer versions of dot (>1.8.10)
4477+# support this, this feature is disabled by default.
4478+
4479+DOT_MULTI_TARGETS = YES
4480+
4481+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
4482+# generate a legend page explaining the meaning of the various boxes and
4483+# arrows in the dot generated graphs.
4484+
4485+GENERATE_LEGEND = YES
4486+
4487+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
4488+# remove the intermediate dot files that are used to generate
4489+# the various graphs.
4490+
4491+DOT_CLEANUP = YES
4492
4493=== added file 'docs/header.html.in'
4494--- docs/header.html.in 1970-01-01 00:00:00 +0000
4495+++ docs/header.html.in 2011-09-27 21:12:27 +0000
4496@@ -0,0 +1,6 @@
4497+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4498+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
4499+<title>@PACKAGE@ @PACKAGE_VERSION@ - $title</title>
4500+<link href="$relpath$doxygen.css" rel="stylesheet" type="text/css">
4501+<link href="$relpath$tabs.css" rel="stylesheet" type="text/css">
4502+</head><body><h1>@PACKAGE@ @PACKAGE_VERSION@ Developer Documentation</h1>
4503
4504=== added directory 'm4'
4505=== added file 'm4/acx_pthread.m4'
4506--- m4/acx_pthread.m4 1970-01-01 00:00:00 +0000
4507+++ m4/acx_pthread.m4 2011-09-27 21:12:27 +0000
4508@@ -0,0 +1,271 @@
4509+# ===========================================================================
4510+# http://autoconf-archive.cryp.to/acx_pthread.html
4511+# ===========================================================================
4512+#
4513+# SYNOPSIS
4514+#
4515+# ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
4516+#
4517+# DESCRIPTION
4518+#
4519+# This macro figures out how to build C programs using POSIX threads. It
4520+# sets the PTHREAD_LIBS output variable to the threads library and linker
4521+# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
4522+# flags that are needed. (The user can also force certain compiler
4523+# flags/libs to be tested by setting these environment variables.)
4524+#
4525+# Also sets PTHREAD_CC to any special C compiler that is needed for
4526+# multi-threaded programs (defaults to the value of CC otherwise). (This
4527+# is necessary on AIX to use the special cc_r compiler alias.)
4528+#
4529+# NOTE: You are assumed to not only compile your program with these flags,
4530+# but also link it with them as well. e.g. you should link with
4531+# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
4532+#
4533+# If you are only building threads programs, you may wish to use these
4534+# variables in your default LIBS, CFLAGS, and CC:
4535+#
4536+# LIBS="$PTHREAD_LIBS $LIBS"
4537+# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
4538+# CC="$PTHREAD_CC"
4539+#
4540+# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
4541+# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
4542+# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
4543+#
4544+# ACTION-IF-FOUND is a list of shell commands to run if a threads library
4545+# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
4546+# is not found. If ACTION-IF-FOUND is not specified, the default action
4547+# will define HAVE_PTHREAD.
4548+#
4549+# Please let the authors know if this macro fails on any platform, or if
4550+# you have any other suggestions or comments. This macro was based on work
4551+# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
4552+# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
4553+# Alejandro Forero Cuervo to the autoconf macro repository. We are also
4554+# grateful for the helpful feedback of numerous users.
4555+#
4556+# LICENSE
4557+#
4558+# Copyright (C) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
4559+#
4560+# This program is free software: you can redistribute it and/or modify it
4561+# under the terms of the GNU General Public License as published by the
4562+# Free Software Foundation, either version 3 of the License, or (at your
4563+# option) any later version.
4564+#
4565+# This program is distributed in the hope that it will be useful, but
4566+# WITHOUT ANY WARRANTY; without even the implied warranty of
4567+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
4568+# Public License for more details.
4569+#
4570+# You should have received a copy of the GNU General Public License along
4571+# with this program. If not, see <http://www.gnu.org/licenses/>.
4572+#
4573+# As a special exception, the respective Autoconf Macro's copyright owner
4574+# gives unlimited permission to copy, distribute and modify the configure
4575+# scripts that are the output of Autoconf when processing the Macro. You
4576+# need not follow the terms of the GNU General Public License when using
4577+# or distributing such scripts, even though portions of the text of the
4578+# Macro appear in them. The GNU General Public License (GPL) does govern
4579+# all other use of the material that constitutes the Autoconf Macro.
4580+#
4581+# This special exception to the GPL applies to versions of the Autoconf
4582+# Macro released by the Autoconf Archive. When you make and distribute a
4583+# modified version of the Autoconf Macro, you may extend this special
4584+# exception to the GPL to apply to your modified version as well.
4585+
4586+AC_DEFUN([ACX_PTHREAD], [
4587+AC_REQUIRE([AC_CANONICAL_HOST])
4588+AC_LANG_SAVE
4589+AC_LANG_C
4590+acx_pthread_ok=no
4591+
4592+# We used to check for pthread.h first, but this fails if pthread.h
4593+# requires special compiler flags (e.g. on True64 or Sequent).
4594+# It gets checked for in the link test anyway.
4595+
4596+# First of all, check if the user has set any of the PTHREAD_LIBS,
4597+# etcetera environment variables, and if threads linking works using
4598+# them:
4599+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
4600+ save_CFLAGS="$CFLAGS"
4601+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
4602+ save_LIBS="$LIBS"
4603+ LIBS="$PTHREAD_LIBS $LIBS"
4604+ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
4605+ AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
4606+ AC_MSG_RESULT($acx_pthread_ok)
4607+ if test x"$acx_pthread_ok" = xno; then
4608+ PTHREAD_LIBS=""
4609+ PTHREAD_CFLAGS=""
4610+ fi
4611+ LIBS="$save_LIBS"
4612+ CFLAGS="$save_CFLAGS"
4613+fi
4614+
4615+# We must check for the threads library under a number of different
4616+# names; the ordering is very important because some systems
4617+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
4618+# libraries is broken (non-POSIX).
4619+
4620+# Create a list of thread flags to try. Items starting with a "-" are
4621+# C compiler flags, and other items are library names, except for "none"
4622+# which indicates that we try without any flags at all, and "pthread-config"
4623+# which is a program returning the flags for the Pth emulation library.
4624+
4625+acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
4626+
4627+# The ordering *is* (sometimes) important. Some notes on the
4628+# individual items follow:
4629+
4630+# pthreads: AIX (must check this before -lpthread)
4631+# none: in case threads are in libc; should be tried before -Kthread and
4632+# other compiler flags to prevent continual compiler warnings
4633+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
4634+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
4635+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
4636+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
4637+# -pthreads: Solaris/gcc
4638+# -mthreads: Mingw32/gcc, Lynx/gcc
4639+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
4640+# doesn't hurt to check since this sometimes defines pthreads too;
4641+# also defines -D_REENTRANT)
4642+# ... -mt is also the pthreads flag for HP/aCC
4643+# pthread: Linux, etcetera
4644+# --thread-safe: KAI C++
4645+# pthread-config: use pthread-config program (for GNU Pth library)
4646+
4647+case "${host_cpu}-${host_os}" in
4648+ *solaris*)
4649+
4650+ # On Solaris (at least, for some versions), libc contains stubbed
4651+ # (non-functional) versions of the pthreads routines, so link-based
4652+ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
4653+ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
4654+ # a function called by this macro, so we could check for that, but
4655+ # who knows whether they'll stub that too in a future libc.) So,
4656+ # we'll just look for -pthreads and -lpthread first:
4657+
4658+ acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
4659+ ;;
4660+esac
4661+
4662+if test x"$acx_pthread_ok" = xno; then
4663+for flag in $acx_pthread_flags; do
4664+
4665+ case $flag in
4666+ none)
4667+ AC_MSG_CHECKING([whether pthreads work without any flags])
4668+ ;;
4669+
4670+ -*)
4671+ AC_MSG_CHECKING([whether pthreads work with $flag])
4672+ PTHREAD_CFLAGS="$flag"
4673+ ;;
4674+
4675+ pthread-config)
4676+ AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
4677+ if test x"$acx_pthread_config" = xno; then continue; fi
4678+ PTHREAD_CFLAGS="`pthread-config --cflags`"
4679+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
4680+ ;;
4681+
4682+ *)
4683+ AC_MSG_CHECKING([for the pthreads library -l$flag])
4684+ PTHREAD_LIBS="-l$flag"
4685+ ;;
4686+ esac
4687+
4688+ save_LIBS="$LIBS"
4689+ save_CFLAGS="$CFLAGS"
4690+ LIBS="$PTHREAD_LIBS $LIBS"
4691+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
4692+
4693+ # Check for various functions. We must include pthread.h,
4694+ # since some functions may be macros. (On the Sequent, we
4695+ # need a special flag -Kthread to make this header compile.)
4696+ # We check for pthread_join because it is in -lpthread on IRIX
4697+ # while pthread_create is in libc. We check for pthread_attr_init
4698+ # due to DEC craziness with -lpthreads. We check for
4699+ # pthread_cleanup_push because it is one of the few pthread
4700+ # functions on Solaris that doesn't have a non-functional libc stub.
4701+ # We try pthread_create on general principles.
4702+ AC_TRY_LINK([#include <pthread.h>],
4703+ [pthread_t th; pthread_join(th, 0);
4704+ pthread_attr_init(0); pthread_cleanup_push(0, 0);
4705+ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
4706+ [acx_pthread_ok=yes])
4707+
4708+ LIBS="$save_LIBS"
4709+ CFLAGS="$save_CFLAGS"
4710+
4711+ AC_MSG_RESULT($acx_pthread_ok)
4712+ if test "x$acx_pthread_ok" = xyes; then
4713+ break;
4714+ fi
4715+
4716+ PTHREAD_LIBS=""
4717+ PTHREAD_CFLAGS=""
4718+done
4719+fi
4720+
4721+# Various other checks:
4722+if test "x$acx_pthread_ok" = xyes; then
4723+ save_LIBS="$LIBS"
4724+ LIBS="$PTHREAD_LIBS $LIBS"
4725+ save_CFLAGS="$CFLAGS"
4726+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
4727+
4728+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
4729+ AC_MSG_CHECKING([for joinable pthread attribute])
4730+ attr_name=unknown
4731+ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
4732+ AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
4733+ [attr_name=$attr; break])
4734+ done
4735+ AC_MSG_RESULT($attr_name)
4736+ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
4737+ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
4738+ [Define to necessary symbol if this constant
4739+ uses a non-standard name on your system.])
4740+ fi
4741+
4742+ AC_MSG_CHECKING([if more special flags are required for pthreads])
4743+ flag=no
4744+ case "${host_cpu}-${host_os}" in
4745+ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
4746+ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
4747+ esac
4748+ AC_MSG_RESULT(${flag})
4749+ if test "x$flag" != xno; then
4750+ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
4751+ fi
4752+
4753+ LIBS="$save_LIBS"
4754+ CFLAGS="$save_CFLAGS"
4755+
4756+ # More AIX lossage: must compile with xlc_r or cc_r
4757+ if test x"$GCC" != xyes; then
4758+ AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
4759+ else
4760+ PTHREAD_CC=$CC
4761+ fi
4762+else
4763+ PTHREAD_CC="$CC"
4764+fi
4765+
4766+AC_SUBST(PTHREAD_LIBS)
4767+AC_SUBST(PTHREAD_CFLAGS)
4768+AC_SUBST(PTHREAD_CC)
4769+
4770+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
4771+if test x"$acx_pthread_ok" = xyes; then
4772+ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
4773+ :
4774+else
4775+ acx_pthread_ok=no
4776+ $2
4777+fi
4778+AC_LANG_RESTORE
4779+])dnl ACX_PTHREAD
4780
4781=== added file 'm4/iconv.m4'
4782--- m4/iconv.m4 1970-01-01 00:00:00 +0000
4783+++ m4/iconv.m4 2011-09-27 21:12:27 +0000
4784@@ -0,0 +1,214 @@
4785+# iconv.m4 serial 11 (gettext-0.18.1)
4786+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
4787+dnl This file is free software; the Free Software Foundation
4788+dnl gives unlimited permission to copy and/or distribute it,
4789+dnl with or without modifications, as long as this notice is preserved.
4790+
4791+dnl From Bruno Haible.
4792+
4793+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
4794+[
4795+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
4796+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
4797+ AC_REQUIRE([AC_LIB_RPATH])
4798+
4799+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
4800+ dnl accordingly.
4801+ AC_LIB_LINKFLAGS_BODY([iconv])
4802+])
4803+
4804+AC_DEFUN([AM_ICONV_LINK],
4805+[
4806+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
4807+ dnl those with the standalone portable GNU libiconv installed).
4808+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
4809+
4810+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
4811+ dnl accordingly.
4812+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
4813+
4814+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
4815+ dnl because if the user has installed libiconv and not disabled its use
4816+ dnl via --without-libiconv-prefix, he wants to use it. The first
4817+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
4818+ am_save_CPPFLAGS="$CPPFLAGS"
4819+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
4820+
4821+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
4822+ am_cv_func_iconv="no, consider installing GNU libiconv"
4823+ am_cv_lib_iconv=no
4824+ AC_TRY_LINK([#include <stdlib.h>
4825+#include <iconv.h>],
4826+ [iconv_t cd = iconv_open("","");
4827+ iconv(cd,NULL,NULL,NULL,NULL);
4828+ iconv_close(cd);],
4829+ [am_cv_func_iconv=yes])
4830+ if test "$am_cv_func_iconv" != yes; then
4831+ am_save_LIBS="$LIBS"
4832+ LIBS="$LIBS $LIBICONV"
4833+ AC_TRY_LINK([#include <stdlib.h>
4834+#include <iconv.h>],
4835+ [iconv_t cd = iconv_open("","");
4836+ iconv(cd,NULL,NULL,NULL,NULL);
4837+ iconv_close(cd);],
4838+ [am_cv_lib_iconv=yes]
4839+ [am_cv_func_iconv=yes])
4840+ LIBS="$am_save_LIBS"
4841+ fi
4842+ ])
4843+ if test "$am_cv_func_iconv" = yes; then
4844+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
4845+ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
4846+ am_save_LIBS="$LIBS"
4847+ if test $am_cv_lib_iconv = yes; then
4848+ LIBS="$LIBS $LIBICONV"
4849+ fi
4850+ AC_TRY_RUN([
4851+#include <iconv.h>
4852+#include <string.h>
4853+int main ()
4854+{
4855+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
4856+ returns. */
4857+ {
4858+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
4859+ if (cd_utf8_to_88591 != (iconv_t)(-1))
4860+ {
4861+ static const char input[] = "\342\202\254"; /* EURO SIGN */
4862+ char buf[10];
4863+ const char *inptr = input;
4864+ size_t inbytesleft = strlen (input);
4865+ char *outptr = buf;
4866+ size_t outbytesleft = sizeof (buf);
4867+ size_t res = iconv (cd_utf8_to_88591,
4868+ (char **) &inptr, &inbytesleft,
4869+ &outptr, &outbytesleft);
4870+ if (res == 0)
4871+ return 1;
4872+ }
4873+ }
4874+ /* Test against Solaris 10 bug: Failures are not distinguishable from
4875+ successful returns. */
4876+ {
4877+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
4878+ if (cd_ascii_to_88591 != (iconv_t)(-1))
4879+ {
4880+ static const char input[] = "\263";
4881+ char buf[10];
4882+ const char *inptr = input;
4883+ size_t inbytesleft = strlen (input);
4884+ char *outptr = buf;
4885+ size_t outbytesleft = sizeof (buf);
4886+ size_t res = iconv (cd_ascii_to_88591,
4887+ (char **) &inptr, &inbytesleft,
4888+ &outptr, &outbytesleft);
4889+ if (res == 0)
4890+ return 1;
4891+ }
4892+ }
4893+#if 0 /* This bug could be worked around by the caller. */
4894+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
4895+ {
4896+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
4897+ if (cd_88591_to_utf8 != (iconv_t)(-1))
4898+ {
4899+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
4900+ char buf[50];
4901+ const char *inptr = input;
4902+ size_t inbytesleft = strlen (input);
4903+ char *outptr = buf;
4904+ size_t outbytesleft = sizeof (buf);
4905+ size_t res = iconv (cd_88591_to_utf8,
4906+ (char **) &inptr, &inbytesleft,
4907+ &outptr, &outbytesleft);
4908+ if ((int)res > 0)
4909+ return 1;
4910+ }
4911+ }
4912+#endif
4913+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
4914+ provided. */
4915+ if (/* Try standardized names. */
4916+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
4917+ /* Try IRIX, OSF/1 names. */
4918+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
4919+ /* Try AIX names. */
4920+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
4921+ /* Try HP-UX names. */
4922+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
4923+ return 1;
4924+ return 0;
4925+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
4926+ [case "$host_os" in
4927+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
4928+ *) am_cv_func_iconv_works="guessing yes" ;;
4929+ esac])
4930+ LIBS="$am_save_LIBS"
4931+ ])
4932+ case "$am_cv_func_iconv_works" in
4933+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
4934+ *) am_func_iconv=yes ;;
4935+ esac
4936+ else
4937+ am_func_iconv=no am_cv_lib_iconv=no
4938+ fi
4939+ if test "$am_func_iconv" = yes; then
4940+ AC_DEFINE([HAVE_ICONV], [1],
4941+ [Define if you have the iconv() function and it works.])
4942+ fi
4943+ if test "$am_cv_lib_iconv" = yes; then
4944+ AC_MSG_CHECKING([how to link with libiconv])
4945+ AC_MSG_RESULT([$LIBICONV])
4946+ else
4947+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
4948+ dnl either.
4949+ CPPFLAGS="$am_save_CPPFLAGS"
4950+ LIBICONV=
4951+ LTLIBICONV=
4952+ fi
4953+ AC_SUBST([LIBICONV])
4954+ AC_SUBST([LTLIBICONV])
4955+])
4956+
4957+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
4958+dnl avoid warnings like
4959+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
4960+dnl This is tricky because of the way 'aclocal' is implemented:
4961+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
4962+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
4963+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
4964+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
4965+dnl warnings.
4966+m4_define([gl_iconv_AC_DEFUN],
4967+ m4_version_prereq([2.64],
4968+ [[AC_DEFUN_ONCE(
4969+ [$1], [$2])]],
4970+ [[AC_DEFUN(
4971+ [$1], [$2])]]))
4972+gl_iconv_AC_DEFUN([AM_ICONV],
4973+[
4974+ AM_ICONV_LINK
4975+ if test "$am_cv_func_iconv" = yes; then
4976+ AC_MSG_CHECKING([for iconv declaration])
4977+ AC_CACHE_VAL([am_cv_proto_iconv], [
4978+ AC_TRY_COMPILE([
4979+#include <stdlib.h>
4980+#include <iconv.h>
4981+extern
4982+#ifdef __cplusplus
4983+"C"
4984+#endif
4985+#if defined(__STDC__) || defined(__cplusplus)
4986+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
4987+#else
4988+size_t iconv();
4989+#endif
4990+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
4991+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
4992+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
4993+ AC_MSG_RESULT([
4994+ $am_cv_proto_iconv])
4995+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
4996+ [Define as const if the declaration of iconv() needs const.])
4997+ fi
4998+])
4999
5000=== added file 'm4/lib-ld.m4'
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches