| # -*- Autoconf -*- | |
| # Process this file with autoconf to produce a configure script. | |
| AC_INIT(cpplib, [ ], https://gcc.gnu.org/bugs/, cpplib) | |
| AC_CONFIG_SRCDIR(ucnid.h) | |
| AC_CONFIG_MACRO_DIR(../config) | |
| AC_CANONICAL_TARGET | |
| # Checks for programs. | |
| AC_PROG_MAKE_SET | |
| AC_PROG_INSTALL | |
| AC_PROG_CC | |
| AC_PROG_CXX | |
| AC_PROG_RANLIB | |
| AC_CHECK_TOOL(AR, ar) | |
| AC_USE_SYSTEM_EXTENSIONS | |
| AC_SYS_LARGEFILE | |
| MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing | |
| AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal]) | |
| AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf]) | |
| AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader]) | |
| if test -z "$ETAGS"; then | |
| ETAGS=etags | |
| fi | |
| AC_SUBST([ETAGS]) | |
| # Figure out what compiler warnings we can enable. | |
| # See config/warnings.m4 for details. | |
| ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wno-narrowing -Wwrite-strings \ | |
| -Wmissing-format-attribute], [warn]) | |
| ACX_PROG_CC_WARNING_OPTS([-Wstrict-prototypes -Wmissing-prototypes \ | |
| -Wold-style-definition -Wc++-compat], [c_warn]) | |
| ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long]) | |
| # Disable exceptions and RTTI if building with g++ | |
| ACX_PROG_CC_WARNING_OPTS( | |
| m4_quote(m4_do([-fno-exceptions -fno-rtti])), [noexception_flags]) | |
| # Only enable with --enable-werror-always until existing warnings are | |
| # corrected. | |
| ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual]) | |
| # Dependency checking. | |
| ZW_CREATE_DEPDIR | |
| AC_LANG_PUSH([C++]) | |
| AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [], | |
| [AC_MSG_ERROR([C++ compiler missing or inoperational])]) | |
| AC_LANG_POP([C++]) | |
| ZW_PROG_COMPILER_DEPENDENCIES([CXX]) | |
| # Checks for header files. | |
| AC_HEADER_TIME | |
| ACX_HEADER_STRING | |
| AC_CHECK_HEADERS(locale.h fcntl.h limits.h stddef.h \ | |
| stdlib.h strings.h string.h sys/file.h unistd.h) | |
| # Checks for typedefs, structures, and compiler characteristics. | |
| AC_C_BIGENDIAN | |
| AC_C_CONST | |
| AC_C_INLINE | |
| AC_FUNC_OBSTACK | |
| AC_TYPE_OFF_T | |
| AC_TYPE_SIZE_T | |
| AC_TYPE_SSIZE_T | |
| AC_TYPE_UINTPTR_T | |
| AC_CHECK_TYPE(ptrdiff_t, int) | |
| AC_TYPE_UINT64_T | |
| if test x"$ac_cv_c_uint64_t" = x"no"; then | |
| AC_MSG_ERROR([uint64_t not found]) | |
| fi | |
| AC_STRUCT_TM | |
| AC_CHECK_SIZEOF(int) | |
| AC_CHECK_SIZEOF(long) | |
| define(libcpp_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl | |
| ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl | |
| fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl | |
| fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl | |
| putchar_unlocked putc_unlocked) | |
| AC_CHECK_FUNCS(libcpp_UNLOCKED_FUNCS setlocale) | |
| AC_CHECK_DECLS([abort, asprintf, basename(char *), errno, getopt, vasprintf]) | |
| AC_CHECK_DECLS(m4_split(m4_normalize(libcpp_UNLOCKED_FUNCS))) | |
| # Checks for library functions. | |
| AC_FUNC_ALLOCA | |
| AC_HEADER_STDC | |
| AM_LANGINFO_CODESET | |
| ZW_GNU_GETTEXT_SISTER_DIR | |
| AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar, | |
| [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ | |
| #include <sys/types.h> | |
| ]], | |
| [[if ((uchar *)0) return 0; | |
| if (sizeof(uchar)) return 0;]])], | |
| ac_cv_type_uchar=yes, ac_cv_type_uchar=no)]) | |
| if test $ac_cv_type_uchar = yes; then | |
| AC_DEFINE(HAVE_UCHAR, 1, | |
| [Define if <sys/types.h> defines \`uchar'.]) | |
| fi | |
| AC_CHECK_SIZEOF(ino_t) | |
| AC_CHECK_SIZEOF(dev_t) | |
| # g++ on Solaris 10+ defines _XOPEN_SOURCE=600, which exposes a different | |
| # iconv() prototype. | |
| AC_LANG_PUSH([C++]) | |
| AM_ICONV | |
| AC_LANG_POP([C++]) | |
| # More defines and substitutions. | |
| PACKAGE="$PACKAGE_TARNAME" | |
| AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define to the name of this package.]) | |
| AC_SUBST(PACKAGE) | |
| if test "x$enable_nls" != xno; then | |
| USED_CATALOGS='$(CATALOGS)' | |
| else | |
| USED_CATALOGS= | |
| fi | |
| AC_SUBST(USED_CATALOGS) | |
| AC_ARG_ENABLE(maintainer-mode, | |
| [ --enable-maintainer-mode enable rules only needed by maintainers],, | |
| enable_maintainer_mode=no) | |
| if test "x$enable_maintainer_mode" = xno; then | |
| MAINT='#' | |
| else | |
| MAINT= | |
| fi | |
| AC_SUBST(MAINT) | |
| # Enable expensive internal checks | |
| is_release= | |
| if test -f $srcdir/../gcc/DEV-PHASE \ | |
| && test x"`cat $srcdir/../gcc/DEV-PHASE`" != xexperimental; then | |
| is_release=yes | |
| fi | |
| AC_ARG_ENABLE(checking, | |
| [AS_HELP_STRING([[--enable-checking[=LIST]]], | |
| [enable expensive run-time checks. With LIST, | |
| enable only specific categories of checks. | |
| Categories are: yes,no,all,none,release. | |
| Flags are: misc,valgrind or other strings])], | |
| [ac_checking_flags="${enableval}"],[ | |
| # Determine the default checks. | |
| if test x$is_release = x ; then | |
| ac_checking_flags=yes | |
| else | |
| ac_checking_flags=release | |
| fi]) | |
| IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS," | |
| for check in release $ac_checking_flags | |
| do | |
| case $check in | |
| # these set all the flags to specific states | |
| yes|all) ac_checking=1 ; ac_assert_checking=1 ; ac_valgrind_checking= ;; | |
| no|none) ac_checking= ; ac_assert_checking= ; ac_valgrind_checking= ;; | |
| release) ac_checking= ; ac_assert_checking=1 ; ac_valgrind_checking= ;; | |
| # these enable particular checks | |
| assert) ac_assert_checking=1 ;; | |
| misc) ac_checking=1 ;; | |
| valgrind) ac_valgrind_checking=1 ;; | |
| # accept | |
| *) ;; | |
| esac | |
| done | |
| IFS="$ac_save_IFS" | |
| if test x$ac_checking != x ; then | |
| AC_DEFINE(CHECKING_P, 1, | |
| [Define to 1 if you want more run-time sanity checks.]) | |
| else | |
| AC_DEFINE(CHECKING_P, 0) | |
| fi | |
| if test x$ac_assert_checking != x ; then | |
| AC_DEFINE(ENABLE_ASSERT_CHECKING, 1, | |
| [Define if you want assertions enabled. This is a cheap check.]) | |
| fi | |
| AC_ARG_ENABLE(canonical-system-headers, | |
| [ --enable-canonical-system-headers | |
| enable or disable system headers canonicalization], | |
| [], | |
| enable_canonical_system_headers=yes) | |
| if test $enable_canonical_system_headers != no; then | |
| AC_DEFINE(ENABLE_CANONICAL_SYSTEM_HEADERS, | |
| 1, [Define to enable system headers canonicalization.]) | |
| fi | |
| case $target in | |
| i?86-* | x86_64-*) | |
| AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm ("pshufb %xmm0, %xmm1")]])], | |
| [AC_DEFINE([HAVE_SSSE3], [1], | |
| [Define to 1 if you can assemble SSSE3 insns.])]) | |
| esac | |
| # The AArch64 SVE2 lexer needs a compiler that understands arm_sve.h and the | |
| # +sve2 target attribute, an assembler that accepts SVE2 insns, and a way to | |
| # ask the kernel whether the CPU has them. The test compiles only on an | |
| # AArch64 host, so it needs no separate host check. | |
| AC_CACHE_CHECK([whether the AArch64 SVE2 lexer can be built], | |
| [libcpp_cv_have_sve2], | |
| [AC_LINK_IFELSE([AC_LANG_PROGRAM( | |
| [[#include <arm_sve.h> | |
| #include <sys/auxv.h> | |
| static __attribute__ ((target ("+sve2"))) int | |
| f (const unsigned char *p) | |
| { | |
| svbool_t pg = svwhilele_b8_u64 ((unsigned long) p, (unsigned long) p); | |
| svuint8_t v = svld1_u8 (pg, p); | |
| svbool_t m = svmatch_u8 (pg, v, svreinterpret_u8_u32 (svdup_n_u32 (10))); | |
| return svcntp_b8 (pg, svbrkb_b_z (pg, m)) + svcntb (); | |
| }]], | |
| [[return getauxval (AT_HWCAP2) ? f ((const unsigned char *) "") : 0;]])], | |
| [libcpp_cv_have_sve2=yes], [libcpp_cv_have_sve2=no])]) | |
| if test $libcpp_cv_have_sve2 = yes; then | |
| AC_DEFINE([HAVE_SVE2], [1], | |
| [Define to 1 if the AArch64 SVE2 lexer can be built.]) | |
| fi | |
| # Enable --enable-host-shared. | |
| AC_ARG_ENABLE(host-shared, | |
| [AS_HELP_STRING([--enable-host-shared], | |
| [build host code as shared libraries])]) | |
| AC_SUBST(enable_host_shared) | |
| # Enable --enable-host-pie. | |
| AC_ARG_ENABLE(host-pie, | |
| [AS_HELP_STRING([--enable-host-pie], | |
| [build host code as PIE])]) | |
| AC_SUBST(enable_host_pie) | |
| if test x$enable_host_shared = xyes; then | |
| PICFLAG=-fPIC | |
| elif test x$enable_host_pie = xyes; then | |
| PICFLAG=-fPIE | |
| else | |
| PICFLAG= | |
| fi | |
| AC_SUBST(PICFLAG) | |
| # Enable Intel CET on Intel CET enabled host if jit is enabled. | |
| GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) | |
| case x$enable_languages in | |
| *jit*) | |
| ;; | |
| *) | |
| CET_HOST_FLAGS= | |
| ;; | |
| esac | |
| AC_SUBST(CET_HOST_FLAGS) | |
| AC_ARG_ENABLE(valgrind-annotations, | |
| [AS_HELP_STRING([--enable-valgrind-annotations], | |
| [enable valgrind runtime interaction])], [], | |
| [enable_valgrind_annotations=no]) | |
| if test x$enable_valgrind_annotations != xno \ | |
| || test x$ac_valgrind_checking != x; then | |
| AC_DEFINE(ENABLE_VALGRIND_WORKAROUNDS, 1, | |
| [Define if you want to workaround Valgrind warnings about | |
| possible memory leaks because of libcpp use of interior pointers.]) | |
| fi | |
| # Output. | |
| AC_CONFIG_HEADERS(config.h:config.in, [echo timestamp > stamp-h1]) | |
| AC_CONFIG_FILES(Makefile) | |
| AC_OUTPUT |