2 # Autoconf script for Elektra
4 # Markus Raab <elektra@markus-raab.org>
5 # Yannick Lecaillez <sizon5@gmail.com>
9 AC_REVISION([$Revision$])
11 m4_define(VERSION_MAJOR, [0])
12 m4_define(VERSION_MINOR, [7])
13 m4_define(VERSION_MICRO, [0])
15 AC_INIT(elektra, VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO, http://bugs.libelektra.org)
17 AC_SUBST(KDB_VERSION, "VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO")
18 AC_SUBST(KDB_VERSION_MAJORMINOR, "VERSION_MAJOR.VERSION_MINOR")
19 AC_SUBST(KDB_VERSION_MAJOR, "VERSION_MAJOR")
20 AC_SUBST(KDB_VERSION_MINOR, "VERSION_MINOR")
21 AC_SUBST(KDB_VERSION_MICRO, "VERSION_MICRO")
22 AC_SUBST(PACKAGE_URL, [http://www.libelektra.org/])
24 AC_SUBST(ELEKTRA_VERSION_API, [3:0:0])
25 AC_SUBST(ELEKTRATOOLS_VERSION_API, [2:0:0])
26 AC_SUBST(BACKEND_VERSION_API, [0:0:0])
37 # get host_os variable
41 dnl workaround an incompatible install on solaris
42 INSTALL='\$(install_sh)'
45 AC_CONFIG_SRCDIR([src/libelektra/kdb.c])
47 AC_CONFIG_HEADER([src/include/config.h])
49 dnl select POSIX extensions, useful on solaris, for example
50 gl_USE_SYSTEM_EXTENSIONS
52 #Check whether we are compiling for win32
55 # If compiling for windows we need HAVE_WIN32 defined
56 AC_DEFINE(HAVE_WIN32, 1, [Define if you are compiling for win32])
59 # Disable libtool static lib
75 # Compile and test specific flags.
78 dnl this macro is used to get the arguments supplied
79 dnl to the configure script (./configure --enable-debug)
80 dnl Check if we have enabled debug support.
81 AC_MSG_CHECKING(whether to enable debugging and take control over compiler flags)
82 AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],
83 [turn on debug symbols and enable debug messages @<:@default=no@:>@])])
85 if test "x$enable_debug" = "xyes";
89 dnl remove the optimization flag
90 dnl gcc has -g -O2 as default (if none given)
91 CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*[ ]*//g'`
92 CXXFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*[ ]*//g'`
94 CFLAGS=`echo "$CFLAGS" | sed -e 's/-g[ ]*//g'`
95 CXXFLAGS=`echo "$CFLAGS" | sed -e 's/-g[ ]*//g'`
97 dnl STD flags will only be included where no POSIX is required
98 CSTDFLAGS="-std=c99 -ansi -pedantic"
102 CXXSTDFLAGS="-std=c++98 -ansi -pedantic"
104 CXXDBGFLAGS="-g -ggdb"
106 AC_DEFINE([DEBUG], 1,[enables debug output messages])
107 AC_DEFINE([VERBOSE], 0,[change here to be very verbose])
111 AC_DEFINE([DEBUG], 0,[disable debug output messages])
112 AC_DEFINE([VERBOSE], 0,[disable verbose output messages])
114 #take control over FLAGS
115 #AM_CONDITIONAL (USE_FLAGS, [test "x$enable_debug" = "xyes" ])
116 AM_CONDITIONAL(DEBUG, test x$enable_debug = xyes)
119 # Enable compilation of experimental things (unfinished
120 # backends at this time)
121 AC_ARG_ENABLE(experimental,
122 [AC_HELP_STRING([--enable-experimental],
123 [Specify to compile or not experimental parts (could cause compilation failure) @<:@default=no@:>@])],
124 [elektra_experimental=$enableval],
125 [elektra_experimental=no])
126 # for the c++ binding
127 AM_CONDITIONAL(EXPERIMENTAL, [ test "x$elektra_experimental" = "xyes" ])
130 # Run self-tests under valgrind?
131 AC_MSG_CHECKING([whether self tests are run under valgrind])
132 AC_ARG_ENABLE(valgrind-tests,
133 AS_HELP_STRING([--enable-valgrind-tests],
134 [run self tests under valgrind @<:@default=no@:>@]))
135 if test "x$enable_valgrind_tests" = "xyes";
138 AC_CHECK_PROGS(VALGRIND, valgrind)
142 AM_CONDITIONAL(VALGRINDTESTS, [ test "x$VALGRIND" != "x" ])
145 dnl thanks to the wine project, author: Aaron Arvey
146 dnl Check for --enable-gcov and add appropriate flags for gcc
147 dnl Note that these extra switches are NOT applied to the loader
148 AC_MSG_CHECKING(whether to enable gcov)
149 AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],
150 [turn on code coverage analysis tools @<:@default=no@:>@]))
151 if test "x$enable_gcov" = "xyes";
154 AC_CHECK_PROGS(LCOV, lcov, false)
155 AC_CHECK_PROGS(GENHTML, genhtml, false)
157 CDBGFLAGS="$CDBGFLAGS -fprofile-arcs -ftest-coverage"
158 CXXDBGFLAGS="$CXXDBGFLAGS -fprofile-arcs -ftest-coverage"
160 LDFLAGS="$LDFLAGS -lgcov"
162 dnl Turn off optimization so code coverage tool
163 dnl can get accurate line numbers
164 CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*[ ]*//g'`
165 CXXFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*[ ]*//g'`
176 AC_SUBST(CXXSTDFLAGS)
177 AC_SUBST(CXXOPTFLAGS)
178 AC_SUBST(CXXDBGFLAGS)
189 # set some custom path
194 echo "LIBDIR=$libdir"
197 [AC_HELP_STRING([--with-ulibdir=ULIBDIR>],
198 [Set the path for usr lib.])],
200 [ulibdir='${prefix}/'`basename $libdir`]
204 # backend dlopended libraries path
205 AC_ARG_WITH(backenddir,
206 [AC_HELP_STRING([--with-backenddir=<path where backend libraries are>],
207 [Set the path for backend libraries. @<:@LIBDIR/elektra@@:>@])],
208 [backenddir=$withval],
209 [backenddir='${libdir}/elektra']
213 # high level backend dlopended libraries path
214 AC_ARG_WITH(hlvlbackenddir,
215 [AC_HELP_STRING([--with-hlvl-backenddir=<path where high level backend libraries are>],
216 [Set the path for high level backend libraries. @<:@ULIBDIR/elektra@:>@])],
217 [hlvlbackenddir=$withval],
218 [hlvlbackenddir='${ulibdir}']
220 AC_SUBST(hlvlbackenddir)
222 # /usr/share/doc path
224 [AC_HELP_STRING([--with-docdir=<path where doc will be installed>],
225 [Set the path for documentation. @<:@DATADIR/doc/elektra@:>@])],
227 [docdir='${datadir}/doc/elektra']
231 # /usr/share/doc/elektra-api
232 AC_ARG_WITH(develdocdir,
233 [AC_HELP_STRING([--with-develdocdir=<path where elektra-api doc will be installed>],
234 [Set the path for elektra api documentation. @<:@DATADIR/doc/elektra-devel@:>@])],
235 [develdocdir=$withval],
236 [develdocdir='${datadir}/doc/elektra-devel']
238 AC_SUBST(develdocdir)
242 [AC_HELP_STRING([--with-docbook=<path to docbook.xsl>],
243 [Set path to docbook.xsl used for generate manpage. @<:@/usr/share/sgml/docbook/xsl-stylesheets@:>@])],
244 [default_docbook=$withval],
245 [default_docbook=/usr/share/sgml/docbook/xsl-stylesheets]
247 AC_SUBST(default_docbook)
249 # sgml/elektra-<VERSION>
250 AC_ARG_WITH(kdbschema,
251 [AC_HELP_STRING([--with-kdbschemadir=<relative path to kdb schema>],
252 [Set the path for elektra.xsd. DATADIR will be prefixed. @<:@/sgml/elektra-$PACKAGE_VERSION@:>@])],
253 [kdbschemadir=$withval],
254 [kdbschemadir="/sgml/elektra-$PACKAGE_VERSION"]
256 AC_DEFINE_UNQUOTED([KDB_SCHEMA_PATH], DATADIR "${kdbschemadir}", path for elektra.xsd)
259 # Default backend selection (Set to 'filesys' as default)
261 [AC_HELP_STRING([--with-default-backend=<backend>],
262 [Set backend elektra will be linked to. @<:@filesys@:>@])],
263 [default_backend=$withval],
264 [default_backend=filesys]
266 AC_SUBST(default_backend)
268 # Default daemon backend selection (Set to 'berkeleydb' as default)
269 AC_ARG_WITH(dbackend,
270 [AC_HELP_STRING([--with-default-dbackend=<daemon backend>],
271 [Set the default backend for the kdbd daemon to use. @<:@berkeleydb@:>@])],
272 [default_dbackend=$withval],
273 [default_dbackend=berkeleydb]
275 AC_SUBST(default_dbackend)
284 # Checks for needed programs.
294 AC_CHECK_PROG(NM, nm, nm, nm-is-missing)
299 # Check needed programs for generate doc
302 AC_PATH_PROG(xsltproc, xsltproc, "no")
303 # Check if have style-sheet too
304 if test "x$default_docbook" != "xno"; then
305 AC_CHECK_FILE([$default_docbook/manpages/docbook.xsl],
306 [dbroot=$default_docbook],
308 if test "x$default_docbook" != "xno"; then
309 AC_CHECK_FILE([$default_docbook/template/titlepage.xsl],
310 [dbroot=$default_docbook],
318 AM_CONDITIONAL(HAVE_XSL, test x$xsltproc != xno -a x$dbroot != xno)
321 AC_PATH_PROG(man2html, man2html, "no")
322 AM_CONDITIONAL(HAVE_MAN2HTML, test x$man2html != xno)
325 AC_PATH_PROG(doxygen, doxygen, "no")
326 AM_CONDITIONAL(HAVE_DOXYGEN, test x$doxygen != xno)
335 # Checks for header files.
339 AC_CHECK_HEADERS([ ctype.h stdlib.h unistd.h errno.h time.h stdio.h ])
340 AC_CHECK_HEADERS([ langinfo.h locale.h ])
344 AC_CHECK_HEADERS([ inttypes.h limits.h ])
347 #posix files and functions (needed by filesys and libhelper)
349 AC_CHECK_HEADERS([ fcntl.h ])
360 #copied out from libsox
363 AC_HELP_STRING([--without-libltdl],
364 [Don't try to use libltdl for external dynamic library support]))
367 if test "$with_libltdl" != "no"; then
368 dnl Disable libltdl support when building only static libraries
369 if test "$enable_shared" != "no"; then
373 dnl Force off when building on w32, we have specific code for that
381 dnl Force off using libltdl on targets that are know to have
390 if test "$using_libltdl" != "no"; then
391 AC_LIBLTDL_INSTALLABLE
395 AC_SUBST(LIBTOOL_DEPS)
396 AC_CONFIG_SUBDIRS(libltdl)
397 if test "$using_libltdl" != "no"; then
400 AC_CHECK_HEADERS(ltdl.h, AC_DEFINE([HAVE_LIBLTDL], 1, [Define to 1 if you have libltdl]), [using_libltdl=no])
402 AM_CONDITIONAL(HAVE_LIBLTDL, test x$using_libltdl = xyes)
412 # Checks for libraries.
417 # If iconv usage is enabled we need to check for iconv.
418 # This may also result in linking against libiconv,
419 # if the system requires this for a working iconv function.
420 dnl Check if the user wants to enable iconv support and
421 dnl hence enable charset conversions.
422 dnl Default: dont enable it
423 AC_MSG_CHECKING(whether to enable iconv)
425 [AC_HELP_STRING([--enable-iconv],
426 [turns on automatic UTF-8 conversions. @<:@default=no@:>@])])
428 if test "x$enable_iconv" = "xyes"; then
437 # Check for libxml (Allow compilation of libelektratools)
438 AM_PATH_XML2(, [elektra_have_xml="yes"], [elektra_have_xml="no"])
439 AM_CONDITIONAL(HAVE_XML, [test x$elektra_have_xml = xyes])
440 if test "x$elektra_have_xml" = "xyes"; then
441 elektratools=libelektratools
442 privatelibs=$privatelibs" -lxml2"
445 AC_SUBST(elektratools)
455 # Backends enable and disable logic.
461 # $1 is the backend name
462 # $2 is the check for prerequisite
463 # $3 is the default value YES or NO
464 AC_DEFUN([ALLOW_BACKEND],
466 TESTBACKENDS="$TESTBACKENDS
467 $1 check: $2, default: $3"
468 if test "$3" == YES; then
469 BACKENDS="$BACKENDS $1";
472 AC_HELP_STRING([--enable-$1], [compile $1 backend @<:@default=$3@:>@]),
473 [if test "$enableval" = yes; then
475 BACKENDS="$BACKENDS $1";
477 #thus only default backends are in BACKENDS and
478 #they don't have prerequisites, don't remove
479 AC_MSG_WARN([not building backend $1, prerequisite missing])
482 #removed backend out of BACKENDS list
483 BACKENDS=$(echo "$BACKENDS" | sed 's/[[:space:]]*$1//')
488 ALLOW_BACKEND(filesys, true, YES)
490 ALLOW_BACKEND(hosts, true, YES)
492 ALLOW_BACKEND(ini, true, NO)
495 # Check for libdb (Allow compilation of libelektra-berkeley.so)
496 AC_CHECK_HEADERS([db.h],[
497 AC_CHECK_LIB([db], [db_create], [elektra_have_db="yes"])
499 ALLOW_BACKEND(berkeleydb, [test x$elektra_have_db = xyes], NO)
502 # Check for libGconf (Allow compilation of libelektra-gconf.so)
503 PKG_CHECK_MODULES(gconf, gconf-2.0, [elektra_have_gconf="yes"], [elektra_have_gconf="no"])
504 ALLOW_BACKEND(gconf, [test x$elektra_have_gconf = xyes], NO)
506 elektra_glibc_mntent=no
507 AC_CHECK_HEADERS([mntent.h],[
508 AC_TRY_LINK([#include <stdio.h>
509 #include <mntent.h> ],
513 char *fsname, *dir, *type, *opts;
515 f=setmntent("/etc/fstab", "r");
517 fsname=m->mnt_fsname;
522 passno=m->mnt_passno;
524 dnl DEFINE is not used in the code
525 [ AC_DEFINE(GETMNTENT_GLIBC, 1,
526 [Define this if mntent follows glibc conventions])
527 elektra_glibc_mntent=yes],
532 AC_MSG_CHECKING([if mntent follows the glibc conventions])
533 if test x$elektra_glibc_mntent = xyes; then
538 ALLOW_BACKEND(fstab, [test x$elektra_glibc_mntent = xyes], NO)
540 AC_CHECK_HEADERS([pwd.h],
541 [ AC_DEFINE(HAVE_PWD_H, 1,
542 [Define this if pwd.h is present on your system])
545 ALLOW_BACKEND(passwd, [test x$elektra_pwd_h = xyes], NO)
547 # daemon depends on struct ucred in ipc.c
549 AC_CHECK_MEMBERS([struct ucred.pid], [elektra_ucred=yes], [elektra_ucred=no],
550 [#include <sys/socket.h>])
551 ALLOW_BACKEND(daemon, [test x$elektra_ucred = xyes], NO)
556 for backend in $BACKENDS; do
557 backend_static_libs="$backend_static_libs ../backends/${backend}/libelektra-${backend}.a"
560 AC_SUBST(privatelibs)
561 AC_SUBST(backend_static_libs)
570 # Bindings enable and disable logic.
575 # $1 is the binding name
576 # $2 is the check for prerequisite
577 # $3 is the default value YES or NO
578 AC_DEFUN([ALLOW_BINDING],
580 if test "$3" == YES; then
581 BINDINGS="$BINDINGS $1";
584 AC_HELP_STRING([--enable-$1], [compile $1 binding @<:@default=$3@:>@]),
585 [if test "$enableval" = yes; then
587 BINDINGS="$BINDINGS $1";
589 #thus only default bindings are in BINDINGS and
590 #they don't have prerequisites, don't remove
591 AC_MSG_WARN([not building binding $1, prerequisite missing])
594 #removed bindings out of BINDINGS list
595 BINDINGS=$(echo "$BINDINGS" | sed 's/[[:space:]]*$1//')
600 ALLOW_BINDING(cpp, true, YES)
602 #AC_CHECK_PROGS(SCHEME, scheme, false)
603 #ALLOW_BINDING(scheme, [test "x$SCHEME" = xscheme], NO)
605 AC_CHECK_PROGS(PYTHON, python, false)
606 ALLOW_BINDING(python, [test "x$PYTHON" = xpython], NO)
610 # inspired from daemontools
611 AC_CHECK_HEADERS([signal.h],[
612 AC_TRY_LINK([#include <signal.h>],
617 sigaddset(&ss,SIGCHLD);
618 sigprocmask(SIG_SETMASK,&ss,(sigset_t *) 0);
620 [AC_DEFINE([HASSIGPROCMASK],[],[POSIX signal available])])
621 AC_TRY_LINK([#include <signal.h>],
624 struct sigaction sa;;
627 sigemptyset(&sa.sa_mask);
628 sigaction(sig,&sa,(struct sigaction *) 0);
630 [AC_DEFINE([HASSIGACTION],[],[sigaction available])])
641 # Checks for typedefs, structures, and compiler characteristics.
646 AC_CHECK_TYPE(gid_t, int)
647 AC_CHECK_TYPE(time_t, unsigned long)
654 AC_MSG_CHECKING([For a working getopt])
655 AC_TRY_LINK([#include <unistd.h>],
659 opt=getopt(1,myargv,"a");
660 if (optind == 2) {opt = 3;};
663 AC_DEFINE([HASGETOPT],[],[Working getopt])
678 # Checks for library functions.
685 AC_FUNC_CLOSEDIR_VOID
693 AC_CHECK_FUNCS([memset nl_langinfo setenv setlocale strcasecmp strchr strrchr index rindex strtol ctime_r getuid getgid sigprocmask sigaction])
695 AC_CHECK_FUNCS([clearenv setenv])
696 #generated by autoscan, TODO. merge together
697 AC_CHECK_FUNCS([ftruncate getmntent gettimeofday memmove memset mkdir nl_langinfo putenv rmdir setenv setlocale socket strcasecmp strchr strndup strrchr strstr strtol])
708 AC_CONFIG_FILES([Makefile])
709 AC_CONFIG_FILES([elektra.spec])
710 AC_OUTPUT([src/Makefile
712 src/libhelper/Makefile
713 src/libloader/Makefile
715 src/libelektra/Makefile
716 src/libelektra/exportobjects.sh
718 src/libelektratools/Makefile
723 src/backends/Makefile
724 src/backends/berkeleydb/Makefile
725 src/backends/filesys/Makefile
726 src/backends/fstab/Makefile
727 src/backends/passwd/Makefile
728 src/backends/hosts/Makefile
729 src/backends/gconf/Makefile
730 src/backends/template/Makefile
731 src/backends/ini/Makefile
732 src/backends/daemon/Makefile
734 src/bindings/Makefile
735 src/bindings/cpp/Makefile
736 src/bindings/cpp/tests/Makefile
737 src/bindings/python/Makefile
743 doc/standards/Makefile
758 echo "--------------------------------"
760 echo "--------------------------------"
762 echo "Test backends: $TESTBACKENDS"
764 echo "Compile backends: $BACKENDS"
765 echo "Compile bindings: $BINDINGS"
766 echo -n "Compile libelektratools: "
767 if test "x$elektra_have_xml" = "xyes"; then
773 echo "type: make && make install"