From e009ba4e7659ed0fa14e36935d43e0f7d137c9a8 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Wed, 12 Jun 2019 17:25:45 -0700 Subject: [PATCH] configure: Set language to C++ globally As of commit dd941df19d92e4122aec035e03c5c7a63cd7459b, we no longer build any plain C, except within AM_PROG_AR. Signed-off-by: Anders Kaseorg --- configure.ac | 40 +++++++--------------------- scripts/wrap-compiler-for-flag-check | 2 +- 2 files changed, 10 insertions(+), 32 deletions(-) diff --git a/configure.ac b/configure.ac index 8f9273d..80deb51 100644 --- a/configure.ac +++ b/configure.ac @@ -8,6 +8,7 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_CONFIG_SRCDIR([src/frontend/mosh-client.cc]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) +AC_LANG([C++]) # Checks for programs. AC_PROG_CC([cc gcc clang]) @@ -47,7 +48,6 @@ AC_ARG_ENABLE([compile-warnings], distcheck) WARNING_CXXFLAGS="-Wall -Werror" PICKY_CXXFLAGS="-Wextra -pedantic -Wno-long-long -Weffc++ -Wmissing-declarations" - AC_LANG_PUSH(C++) AX_CHECK_COMPILE_FLAG([-Wno-error=unused-parameter], [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=unused-parameter"], [], [-Werror]) AX_CHECK_COMPILE_FLAG([-Wno-error=c++11-extensions], @@ -56,7 +56,6 @@ AC_ARG_ENABLE([compile-warnings], [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=deprecated-declarations"], [], [-Werror]) AX_CHECK_COMPILE_FLAG([-Wno-error=nested-anon-types], [PICKY_CXXFLAGS="$PICKY_CXXFLAGS -Wno-error=nested-anon-types"], [], [-Werror]) - AC_LANG_POP(C++) ;; *) AC_MSG_ERROR([Unknown argument '$enableval' to --enable-compile-warnings]) @@ -70,26 +69,16 @@ AC_SUBST([PICKY_CXXFLAGS]) # clang's "argument unused" warning fatal. So we invoke the compiler through a # wrapper script that greps for this message. -saved_CC="$CC" saved_CXX="$CXX" saved_LD="$LD" flag_wrap="$srcdir/scripts/wrap-compiler-for-flag-check" -CC="$flag_wrap $CC" CXX="$flag_wrap $CXX" LD="$flag_wrap $LD" -# We use the same hardening flags for C and C++. We must check that each flag -# is supported by both compilers. -AC_DEFUN([check_cc_cxx_flag], - [AC_LANG_PUSH(C) - AX_CHECK_COMPILE_FLAG([$1], - [AC_LANG_PUSH(C++) - AX_CHECK_COMPILE_FLAG([$1], [$2], [$3], [-Werror $4]) - AC_LANG_POP(C++)], - [$3], [-Werror $4]) - AC_LANG_POP(C)]) +AC_DEFUN([check_cxx_flag], + [AX_CHECK_COMPILE_FLAG([$1], [$2], [$3], [-Werror $4])]) AC_DEFUN([check_link_flag], - [AX_CHECK_LINK_FLAG([$1], [$2], [$3], [-Werror $4])]) + [AX_CHECK_LINK_FLAG([$1], [$2], [$3], [-Werror $4])]) AC_ARG_ENABLE([hardening], [AS_HELP_STRING([--enable-hardening], @@ -100,19 +89,19 @@ AC_ARG_ENABLE([hardening], HARDEN_CFLAGS="" HARDEN_LDFLAGS="" AS_IF([test x"$hardening" != x"no"], [ - check_cc_cxx_flag([-fno-strict-overflow], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fno-strict-overflow"]) + check_cxx_flag([-fno-strict-overflow], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fno-strict-overflow"]) # This one will likely succeed, even on platforms where it does nothing. - check_cc_cxx_flag([-D_FORTIFY_SOURCE=2], [HARDEN_CFLAGS="$HARDEN_CFLAGS -D_FORTIFY_SOURCE=2"]) + check_cxx_flag([-D_FORTIFY_SOURCE=2], [HARDEN_CFLAGS="$HARDEN_CFLAGS -D_FORTIFY_SOURCE=2"]) check_link_flag([-fstack-protector-all], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fstack-protector-all" - check_cc_cxx_flag([-Wstack-protector], [HARDEN_CFLAGS="$HARDEN_CFLAGS -Wstack-protector"], + check_cxx_flag([-Wstack-protector], [HARDEN_CFLAGS="$HARDEN_CFLAGS -Wstack-protector"], [], [-fstack-protector-all]) - check_cc_cxx_flag([--param ssp-buffer-size=1], [HARDEN_CFLAGS="$HARDEN_CFLAGS --param ssp-buffer-size=1"], + check_cxx_flag([--param ssp-buffer-size=1], [HARDEN_CFLAGS="$HARDEN_CFLAGS --param ssp-buffer-size=1"], [], [-fstack-protector-all])]) - check_cc_cxx_flag([-fPIE], + check_cxx_flag([-fPIE], [check_link_flag([-fPIE -pie], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fPIE" HARDEN_LDFLAGS="$HARDEN_LDFLAGS -pie"], @@ -128,16 +117,13 @@ AC_SUBST([HARDEN_LDFLAGS]) # Also check for a few non-hardening-related flags. MISC_CXXFLAGS="" -AC_LANG_PUSH(C++) AX_CHECK_COMPILE_FLAG([-fno-default-inline], [MISC_CXXFLAGS="$MISC_CXXFLAGS -fno-default-inline"], [], [-Werror]) AX_CHECK_COMPILE_FLAG([-pipe], [MISC_CXXFLAGS="$MISC_CXXFLAGS -pipe"], [], [-Werror]) -AC_LANG_POP(C++) AC_SUBST([MISC_CXXFLAGS]) # End of flag tests. -CC="$saved_CC" CXX="$saved_CXX" LD="$saved_LD" @@ -260,9 +246,7 @@ AC_CHECK_HEADERS([endian.h sys/endian.h]) AC_CHECK_HEADERS([utmpx.h]) AC_CHECK_HEADERS([termio.h]) AC_CHECK_HEADERS([sys/uio.h]) -AC_LANG_PUSH(C++) AC_CHECK_HEADERS([memory tr1/memory]) -AC_LANG_POP(C++) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL @@ -427,7 +411,6 @@ int pipefd[2]; [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether FD_ISSET() argument is const]) -AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include class T { public: @@ -438,10 +421,8 @@ public: [Define if FD_ISSET() fd_set argument is const.]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) -AC_LANG_POP(C++) AC_MSG_CHECKING([whether std::shared_ptr is available]) -AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include class T { public: @@ -451,10 +432,8 @@ public: [Define if std::shared_ptr is available.]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) -AC_LANG_POP(C++) AC_MSG_CHECKING([whether std::tr1::shared_ptr is available]) -AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include class T { public: @@ -464,7 +443,6 @@ public: [Define if std::tr1::shared_ptr is available.]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) -AC_LANG_POP(C++) AC_MSG_CHECKING([whether clock_gettime() is supported]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include diff --git a/scripts/wrap-compiler-for-flag-check b/scripts/wrap-compiler-for-flag-check index d2e9dd8..7d074d7 100755 --- a/scripts/wrap-compiler-for-flag-check +++ b/scripts/wrap-compiler-for-flag-check @@ -1,7 +1,7 @@ #!/bin/sh # There is no way to make clang's "argument unused" warning fatal. So when -# configure checks for supported flags, it runs $CC, $CXX, $LD via this +# configure checks for supported flags, it runs $CXX and $LD via this # wrapper. # # Ideally the search string would also include 'clang: ' but this output might