[[https://www.gnu.org/software/autoconf/manual/autoconf.pdf|Manuel 2.69]], {{ :autotools:configure.ac:autoconf_2_69.pdf |Archive}} ====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 [[https://github.com/gcc-mirror/gcc/blob/master/config/warnings.m4|warnings.m4]], {{:autotools:configure.ac: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 ], [ #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 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