diff options
-rwxr-xr-x | configure | 99 | ||||
-rw-r--r-- | configure.ac | 51 | ||||
-rw-r--r-- | m4/sudo.m4 | 56 |
3 files changed, 118 insertions, 88 deletions
@@ -8776,6 +8776,38 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + if test X"$enable_pvs_studio" = X"yes"; then + # Determine preprocessor type + case "$CC" in + *clang*) preprocessor=clang;; + *gcc*) preprocessor=gcc;; + *) case `$CC --version 2>&1` in + *clang*) preprocessor=clang;; + *gcc*) preprocessor=gcc;; + *) as_fn_error $? "Compiler must be gcc or clang for PVS-Studio." "$LINENO" 5;; + esac + ;; + esac + + # Determine platform (currently linux or macos) + case "$host" in + x86_64-*-linux*) pvs_platform=linux64;; + *86-*-linux*) pvs_platform=linux32;; + *-*-darwin*) pvs_platform=macos;; + *) as_fn_error $? "PVS-Studio does not support $host." "$LINENO" 5;; + esac + + # Create a basic PVS-Studio.cfg file + cat > PVS-Studio.cfg <<-EOF + preprocessor = $preprocessor + platform = $pvs_platform + analysis-mode = 4 + language = C + EOF + fi + + case "$host_os" in aix4.[23]|aix4.[23].*|aix[5-9]*) @@ -18574,37 +18606,6 @@ fi ;; esac -if test X"$enable_pvs_studio" = X"yes"; then - # Determine preprocessor type - case "$CC" in - *clang*) preprocessor=clang;; - *gcc*) preprocessor=gcc;; - *) - case `$CC --version 2>&1` in - *clang*) preprocessor=clang;; - *gcc*) preprocessor=gcc;; - *) as_fn_error $? "Compiler must be gcc or clang for PVS-Studio." "$LINENO" 5;; - esac - ;; - esac - - # Determine platform (currently linux or macos) - case "$host" in - x86_64-*-linux*) pvs_platform=linux64;; - *86-*-linux*) pvs_platform=linux32;; - *-*-darwin*) pvs_platform=macos;; - *) as_fn_error $? "PVS-Studio does not support $host." "$LINENO" 5;; - esac - - # create basic PVS-Studio.cfg file - cat > PVS-Studio.cfg <<-EOF - preprocessor = $preprocessor - platform = $pvs_platform - analysis-mode = 4 - language = C -EOF -fi - if test X"$enable_intercept" = X"no"; then intercept_file=disabled fi @@ -18905,9 +18906,15 @@ printf "%s\n" "#define volatile /**/" >>confdefs.h fi -if test X"$ac_cv_build_prog_cc_c99" = X"no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variadic macro support in cpp" >&5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variadic macro support in cpp" >&5 printf %s "checking for variadic macro support in cpp... " >&6; } +if test ${sudo_cv_cpp_variadic_macros+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + sudo_cv_cpp_variadic_macros=yes + if test X"$ac_cv_build_prog_cc_c99" = X"no"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -18920,21 +18927,30 @@ int main (void) { sudo_fprintf(stderr, "a %s", "test"); + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + e) sudo_cv_cpp_variadic_macros=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_cpp_variadic_macros" >&5 +printf "%s\n" "$sudo_cv_cpp_variadic_macros" >&6; } + if test X"$sudo_cv_cpp_variadic_macros" = X"no"; then printf "%s\n" "#define NO_VARIADIC_MACROS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: your C preprocessor doesn't support variadic macros, debugging support will be limited" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: your C preprocessor doesn't support variadic macros, debugging support will be limited" >&5 printf "%s\n" "$as_me: WARNING: your C preprocessor doesn't support variadic macros, debugging support will be limited" >&2;} for _sym in sudo_debug_printf_nvm_v1; do @@ -18942,11 +18958,8 @@ printf "%s\n" "$as_me: WARNING: your C preprocessor doesn't support variadic mac " done - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi + fi + for ac_prog in gawk mawk nawk awk do diff --git a/configure.ac b/configure.ac index e37fe6027..d2b39c428 100644 --- a/configure.ac +++ b/configure.ac @@ -1646,6 +1646,11 @@ AC_CANONICAL_HOST AC_CONFIG_MACRO_DIR([m4]) dnl +dnl Relies on CC host being set +dnl +SUDO_PVS_STUDIO_CFG + +dnl dnl On AIX we need to force libtool to install .so files for the plugins dnl instead of a .a file that contains the .so. We do this by enabling dnl runtime linking (where the .so file is installed). This must happen @@ -2303,37 +2308,6 @@ case "$host" in ;; esac -if test X"$enable_pvs_studio" = X"yes"; then - # Determine preprocessor type - case "$CC" in - *clang*) preprocessor=clang;; - *gcc*) preprocessor=gcc;; - *) - case `$CC --version 2>&1` in - *clang*) preprocessor=clang;; - *gcc*) preprocessor=gcc;; - *) AC_MSG_ERROR([Compiler must be gcc or clang for PVS-Studio.]);; - esac - ;; - esac - - # Determine platform (currently linux or macos) - case "$host" in - x86_64-*-linux*) pvs_platform=linux64;; - *86-*-linux*) pvs_platform=linux32;; - *-*-darwin*) pvs_platform=macos;; - *) AC_MSG_ERROR([PVS-Studio does not support $host.]);; - esac - - # create basic PVS-Studio.cfg file - cat > PVS-Studio.cfg <<-EOF - preprocessor = $preprocessor - platform = $pvs_platform - analysis-mode = 4 - language = C -EOF -fi - dnl dnl Library preloading to support NOEXEC dnl @@ -2404,20 +2378,7 @@ dnl AC_C_CONST AC_C_INLINE AC_C_VOLATILE -if test X"$ac_cv_prog_cc_c99" = X"no"; then - AC_MSG_CHECKING([for variadic macro support in cpp]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT -#if defined(__GNUC__) && __GNUC__ == 2 -# define sudo_fprintf(fp, fmt...) fprintf((fp), (fmt)) -#else -# define sudo_fprintf(fp, ...) fprintf((fp), __VA_ARGS__) -#endif], [sudo_fprintf(stderr, "a %s", "test");])], [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - AC_DEFINE([NO_VARIADIC_MACROS], [1], [Define if your C preprocessor does not support variadic macros.]) - AC_MSG_WARN([your C preprocessor doesn't support variadic macros, debugging support will be limited]) - SUDO_APPEND_COMPAT_EXP(sudo_debug_printf_nvm_v1) - ]) -fi +SUDO_CPP_VARIADIC_MACROS dnl dnl Program checks diff --git a/m4/sudo.m4 b/m4/sudo.m4 index 4bed2a2cb..6812b0a6c 100644 --- a/m4/sudo.m4 +++ b/m4/sudo.m4 @@ -549,6 +549,62 @@ fi ]) dnl +dnl Create PVS-Studio.cfg for supported platforms or throw an error. +dnl +AC_DEFUN([SUDO_PVS_STUDIO_CFG], [ + if test X"$enable_pvs_studio" = X"yes"; then + # Determine preprocessor type + case "$CC" in + *clang*) preprocessor=clang;; + *gcc*) preprocessor=gcc;; + *) case `$CC --version 2>&1` in + *clang*) preprocessor=clang;; + *gcc*) preprocessor=gcc;; + *) AC_MSG_ERROR([Compiler must be gcc or clang for PVS-Studio.]);; + esac + ;; + esac + + # Determine platform (currently linux or macos) + case "$host" in + x86_64-*-linux*) pvs_platform=linux64;; + *86-*-linux*) pvs_platform=linux32;; + *-*-darwin*) pvs_platform=macos;; + *) AC_MSG_ERROR([PVS-Studio does not support $host.]);; + esac + + # Create a basic PVS-Studio.cfg file + cat > PVS-Studio.cfg <<-EOF + preprocessor = $preprocessor + platform = $pvs_platform + analysis-mode = 4 + language = C + EOF + fi +]) + +AC_DEFUN([SUDO_CPP_VARIADIC_MACROS], +[AC_CACHE_CHECK([for variadic macro support in cpp], +[sudo_cv_cpp_variadic_macros], [ + sudo_cv_cpp_variadic_macros=yes + if test X"$ac_cv_prog_cc_c99" = X"no"; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT +#if defined(__GNUC__) && __GNUC__ == 2 +# define sudo_fprintf(fp, fmt...) fprintf((fp), (fmt)) +#else +# define sudo_fprintf(fp, ...) fprintf((fp), __VA_ARGS__) +#endif], [sudo_fprintf(stderr, "a %s", "test"); + ])], [], [sudo_cv_cpp_variadic_macros=no]) + fi + ]) + if test X"$sudo_cv_cpp_variadic_macros" = X"no"; then + AC_DEFINE([NO_VARIADIC_MACROS], [1], [Define if your C preprocessor does not support variadic macros.]) + AC_MSG_WARN([your C preprocessor doesn't support variadic macros, debugging support will be limited]) + SUDO_APPEND_COMPAT_EXP(sudo_debug_printf_nvm_v1) + fi +]) + +dnl dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support dnl tracing that we use to define paths for pathnames.h so autoheader doesn't dnl put them in config.h.in. An awful hack. |