Outils pour utilisateurs

Outils du site


autotools:configure.ac

Manuel 2.69, 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

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