autotools:configure.ac
Table des matières
Détection des options de compilation compatible avec CXX
Défini le langage du compilateur : g++ donc le compilateur défini par CXX
.
Activation automatique des -Wwarnings
supportés.
AC_LANG(C++) for NEW_FLAG in \ -Wall \ -Wcast-align do AC_MSG_CHECKING([if $CXX accepts $NEW_FLAG]) OLD_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $NEW_FLAG -Werror" #AC_COMPILE_IFELSE utilise CXXFLAGS pas AM_CXXFLAGS AC_COMPILE_IFELSE([AC_LANG_SOURCE( [void foo(void); void foo(void) { }])], [ AM_CXXFLAGS="$AM_CXXFLAGS $NEW_FLAG" AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) CXXFLAGS="$OLD_CXXFLAGS" done
warnings.m4, Archive : gcc ne crée pas d'avertissement dans le cas de -Wno-*
non supporté. Il est donc nécessaire de tester la version -W*
.
Activation automatique des -Wno-warnings
supportés. On teste les -Warnings
mais on ajoute -Wno-warnings
AC_LANG(C++) for NEW_FLAG in \ c++98-compat \ c++98-compat-pedantic do AC_MSG_CHECKING([if $CXX accepts -Wno-$NEW_FLAG]) OLD_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -W$NEW_FLAG -Werror -Wno-unused-macros" AC_COMPILE_IFELSE([AC_LANG_SOURCE( [void foo(void); void foo(void) { }])], [ AM_CXXFLAGS="$AM_CXXFLAGS -Wno-$NEW_FLAG" AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) CXXFLAGS="$OLD_CXXFLAGS" done
Le cas clang
clang préfère avoir -fno-use-cxa-atexit
pour éviter des erreurs de type “hidden symbol `atexit'.
Il suffit d'ajouter la fonction suivante :
AC_TRY_LINK([ #include <stdio.h> ], [ #ifndef __clang__ This is not clang! #endif ], [AM_CXXFLAGS="$AM_CXXFLAGS -fno-use-cxa-atexit"], [])
Forcer du code dans le config.h
AH_BOTTOM([ #ifdef _MSC_VER #define CHK _Check_return_ #ifndef ssize_t #include <BaseTsd.h> typedef SSIZE_T ssize_t; #endif // !ssize_t #else // !_MSC_VER #define CHK __attribute__ ((__warn_unused_result__)) #endif #if defined(_MSC_VER) #define SSCANF sscanf_s #define DllExport __declspec(dllexport) #else #define SSCANF sscanf #define DllExport #endif ])
Ajout d'une option --with-…
# Vérification de la possibilité de compiler la documentation via doxygen AC_ARG_WITH(doc, AS_HELP_STRING([--with-doc], [build with doc support])) if test "$with_doc" != "yes"; then withdoc=false else withdoc=true fi AC_MSG_RESULT([with-doc $withdoc]) AC_CHECK_PROGS([DOXYGEN], [doxygen]) if test -z "$DOXYGEN"; then AC_MSG_WARN([Doxygen introuvable - documentation non compilable]) fi AM_CONDITIONAL(HAVE_DOXYGEN, test x$withdoc = xtrue && test -n "$DOXYGEN") if test x$withdoc = xtrue; then AC_DEFINE(ENABLE_DOC, 1, [Défini si la doc doit être générée]) fi
autotools/configure.ac.txt · Dernière modification : 2020/04/27 07:56 de root