## -*- autoconf -*- dnl This file is part of the KDE libraries/packages dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu) dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org) dnl This file is free software; you can redistribute it and/or dnl modify it under the terms of the GNU Library General Public dnl License as published by the Free Software Foundation; either dnl version 2 of the License, or (at your option) any later version. dnl This library is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl Library General Public License for more details. dnl You should have received a copy of the GNU Library General Public License dnl along with this library; see the file COPYING.LIB. If not, write to dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, dnl Boston, MA 02111-1307, USA. AC_DEFUN(KDE_CHECK_COMPILER_FLAG, [ AC_MSG_CHECKING(whether $CXX supports -$1) kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'` AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache, [ AC_LANG_SAVE AC_LANG_CPLUSPLUS save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -$1" AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], []) CXXFLAGS="$save_CXXFLAGS" AC_LANG_RESTORE ]) if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then AC_MSG_RESULT(yes) : $2 else AC_MSG_RESULT(no) : $3 fi ]) dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever]) dnl it's all white-space separated AC_DEFUN(AC_REMOVE_FORBIDDEN, [ __val=$$1 __forbid=" $2 " if test -n "$__val"; then __new="" ac_save_IFS=$IFS IFS=" " for i in $__val; do case "$__forbid" in *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;; *) # Careful to not add spaces, where there were none, because otherwise # libtool gets confused, if we change e.g. CXX if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;; esac done IFS=$ac_save_IFS $1=$__new fi ]) dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given AC_DEFUN(AC_VALIDIFY_CXXFLAGS, [dnl if test "x$kde_use_qt_emb" != "xyes"; then AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath]) AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath]) else AC_REMOVE_FORBIDDEN(CXX, [-rpath]) AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath]) fi ]) AC_DEFUN(AC_CHECK_COMPILERS, [ AC_ARG_ENABLE(debug,[ --enable-debug[=ARG] enables debug symbols (yes|no|full) [default=no]], [ case $enableval in yes) kde_use_debug_code="yes" kde_use_debug_define=no ;; full) kde_use_debug_code="full" kde_use_debug_define=no ;; *) kde_use_debug_code="no" kde_use_debug_define=yes ;; esac ], [kde_use_debug_code="no" kde_use_debug_define=no ]) dnl Just for configure --help AC_ARG_ENABLE(dummyoption,[ --disable-debug disables debug output and debug symbols [default=no]],[],[]) AC_ARG_ENABLE(strict,[ --enable-strict compiles with strict compiler options (may not work!)], [ if test $enableval = "no"; then kde_use_strict_options="no" else kde_use_strict_options="yes" fi ], [kde_use_strict_options="no"]) AC_ARG_ENABLE(warnings,[ --disable-warnings disables compilation with -Wall and similiar], [ if test $enableval = "no"; then kde_use_warnings="no" else kde_use_warnings="yes" fi ], [kde_use_warnings="yes"]) dnl enable warnings for debug build if test "$kde_use_debug_code" != "no"; then kde_use_warnings="yes" fi AC_ARG_ENABLE(profile,[ --enable-profile creates profiling infos [default=no]], [kde_use_profiling=$enableval], [kde_use_profiling="no"] ) dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS CFLAGS=" $CFLAGS" AC_PROG_CC AC_PROG_CPP if test "$GCC" = "yes"; then if test "$kde_use_debug_code" != "no"; then if test $kde_use_debug_code = "full"; then CFLAGS="-g3 $CFLAGS" else CFLAGS="-g -O1 $CFLAGS" fi else CFLAGS="-O2 $CFLAGS" fi fi if test "$kde_use_debug_define" = "yes"; then CFLAGS="-DNDEBUG $CFLAGS" fi case "$host" in *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";; *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";; esac if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then LDFLAGS="" fi CXXFLAGS=" $CXXFLAGS" AC_PROG_CXX if test "$GXX" = "yes" || test "$CXX" = "KCC"; then if test "$kde_use_debug_code" != "no"; then if test "$CXX" = "KCC"; then CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings $CXXFLAGS" else if test "$kde_use_debug_code" = "full"; then CXXFLAGS="-g3 $CXXFLAGS" else CXXFLAGS="-g -O1 $CXXFLAGS" fi fi KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"]) KDE_CHECK_COMPILER_FLAG(fno-nonansi-builtins,[CXXFLAGS="-fno-nonansi-builtins $CXXFLAGS"]) dnl convenience compiler flags KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""]) AC_SUBST(WOVERLOADED_VIRTUAL) else if test "$CXX" = "KCC"; then CXXFLAGS="+K3 $CXXFLAGS" else CXXFLAGS="-O2 $CXXFLAGS" fi fi fi if test "$kde_use_debug_define" = "yes"; then CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS" fi if test "$kde_use_profiling" = "yes"; then KDE_CHECK_COMPILER_FLAG(pg, [ CFLAGS="-pg $CFLAGS" CXXFLAGS="-pg $CXXFLAGS" ]) fi if test "$kde_use_warnings" = "yes"; then if test "$GCC" = "yes"; then case $host in *-*-linux-gnu) CFLAGS="-ansi -W -Wall -pedantic -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS" CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts $CXXFLAGS" KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"; CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"]) ;; esac CXXFLAGS="-Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS" KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"]) KDE_CHECK_COMPILER_FLAG(Wnon-virtual-dtor,[CXXFLAGS="-Wnon-virtual-dtor $CXXFLAGS"]) KDE_CHECK_COMPILER_FLAG(Wold-style-cast,[CXXFLAGS="-Wold-style-cast $CXXFLAGS"]) fi fi if test "$GCC" = "yes" && test "$kde_use_strict_options" = "yes"; then CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS" KDE_CHECK_COMPILER_FLAG(Weffc++,[CXXFLAGS="-Weffc++ $CXXFLAGS"]) fi if test "$GXX" = "yes"; then KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"]) KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"]) KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= ) fi if test "$CXX" = "KCC"; then dnl unfortunately we currently cannot disable exception support in KCC dnl because doing so is binary incompatible and Qt by default links with exceptions :-( dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"]) dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= ) AC_ARG_ENABLE(pch,[ --enable-pch enables precompiled header support (currently only KCC) [default=no]], [ kde_use_pch=$enableval ],[kde_use_pch=no]) if test "$kde_use_pch" = "yes"; then dnl TODO: support --pch-dir! KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"]) dnl the below works (but the dir must exist), but it's dnl useless for a whole package. dnl The are precompiled headers for each source file, so when compiling dnl from scratch, it doesn't make a difference, and they take up dnl around ~5Mb _per_ sourcefile. dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp, dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"]) fi dnl this flag controls inlining. by default KCC inlines in optimisation mode dnl all implementations that are defined inside the class {} declaration. dnl because of templates-compatibility with broken gcc compilers, this dnl can cause excessive inlining. This flag limits it to a sane level KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"]) KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"]) KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"]) KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"]) dnl Some source files are shared between multiple executables dnl (or libraries) and some of those need template instantiations. dnl In that case KCC needs to compile those sources with dnl --one_instantiation_per_object. To make it easy for us we compile dnl _all_ objects with that flag (--one_per is a shorthand). KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"]) fi AC_SUBST(USE_EXCEPTIONS) dnl obsolete macro - provided to keep things going USE_RTTI= AC_SUBST(USE_RTTI) case "$host" in *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;; *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";; *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";; *-*-solaris*) if test "$GXX" = yes; then libstdcpp=`$CXX -print-file-name=libstdc++.so` if test ! -f $libstdcpp; then AC_MSG_WARN([You've compiled gcc without --enable-shared. This might not work with wv2.]) fi fi ;; esac AC_VALIDIFY_CXXFLAGS AC_PROG_CXXCPP if test "$GCC" = yes; then NOOPT_CXXFLAGS=-O0 NOOPT_CFLAGS=-O0 fi AC_SUBST(NOOPT_CXXFLAGS) AC_SUBST(NOOPT_CFLAGS) ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), []) ]) AC_DEFUN(KDE_ADD_DEPENDENCIES, [ [A]M_DEPENDENCIES(CC) [A]M_DEPENDENCIES(CXX) ]) pushdef([AC_PROG_INSTALL], [ dnl our own version, testing for a -p flag popdef([AC_PROG_INSTALL]) dnl as AC_PROG_INSTALL works as it works we first have dnl to save if the user didn't specify INSTALL, as the dnl autoconf one overwrites INSTALL and we have no chance to find dnl out afterwards test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT AC_PROG_INSTALL if test -z "$kde_save_INSTALL_given" ; then # OK, user hasn't given any INSTALL, autoconf found one for us # now we test, if it supports the -p flag AC_MSG_CHECKING(for -p flag to install) rm -f confinst.$$.* > /dev/null 2>&1 echo "Testtest" > confinst.$$.orig ac_res=no if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then if test -f confinst.$$.new ; then # OK, -p seems to do no harm to install INSTALL="${INSTALL} -p" ac_res=yes fi fi rm -f confinst.$$.* AC_MSG_RESULT($ac_res) fi dnl the following tries to resolve some signs and wonders coming up dnl with different autoconf/automake versions dnl e.g.: dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS) dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the dnl install-@DIR@PROGRAMS targets to explicitly use that flag dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as dnl INSTALL_SCRIPT, which breaks with automake <= 1.4 dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from dnl automake (due to broken Makefile.am or whatever) to install programs, dnl and so does not see the -s flag in automake > 1.4 dnl to clean up that mess we: dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG dnl which cleans KDE's program with automake > 1.4; dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems dnl with automake<=1.4 dnl note that dues to this sometimes two '-s' flags are used (if KDE dnl properly uses install-@DIR@PROGRAMS, but I don't care dnl dnl And to all this comes, that I even can't write in comments variable dnl names used by automake, because it is so stupid to think I wanted to dnl _use_ them, therefor I have written A_M_... instead of AM_ dnl hmm, I wanted to say something ... ahh yes: Arghhh. if test -z "$kde_save_INSTALL_PROGRAM_given" ; then INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)' fi if test -z "$kde_save_INSTALL_SCRIPT_given" ; then INSTALL_SCRIPT='${INSTALL}' fi ]) dnl ########################################################################## dnl This last check is copied from kdenonbeta/gsf/configure.in.in dnl ########################################################################## dnl KDE_PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page dnl also defines GSTUFF_PKG_ERRORS on error AC_DEFUN(KDE_PKG_CHECK_MODULES, [ succeeded=no if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi if test "$PKG_CONFIG" = "no" ; then echo "*** The pkg-config script could not be found. Make sure it is" echo "*** in your path, or set the PKG_CONFIG environment variable" echo "*** to the full path to pkg-config." echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." else PKG_CONFIG_MIN_VERSION=0.9.0 if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then AC_MSG_CHECKING(for $2) if $PKG_CONFIG --exists "$2" ; then AC_MSG_RESULT(yes) succeeded=yes AC_MSG_CHECKING($1_CFLAGS) $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` AC_MSG_RESULT($$1_CFLAGS) AC_MSG_CHECKING($1_LIBS) $1_LIBS=`$PKG_CONFIG --libs "$2"` AC_MSG_RESULT($$1_LIBS) else $1_CFLAGS="" $1_LIBS="" ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` ifelse([$4], ,echo $$1_PKG_ERRORS,) fi AC_SUBST($1_CFLAGS) AC_SUBST($1_LIBS) else echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." echo "*** See http://www.freedesktop.org/software/pkgconfig" fi fi if test $succeeded = yes; then ifelse([$3], , :, [$3]) else ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) fi ])