# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # Use AM_MAINTANER_MODE somewhere in this file once reconfigurations settle down. AC_PREREQ([2.69]) AC_INIT([mingw-w64-runtime],[4.0b],[mingw-w64-public@lists.sourceforge.net]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_SRCDIR([ChangeLog]) AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE([1.14 foreign subdir-objects]) AM_MAINTAINER_MODE AC_CANONICAL_HOST AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot=DIR], [Search for headers within DIR/include (default: prefix)])], [], [AS_VAR_SET([with_sysroot],[yes])]) AS_CASE([$with_sysroot], [no],[], [yes],[AS_VAR_SET([with_sysroot],[$prefix])], []) AC_MSG_RESULT([$with_sysroot]) AS_VAR_IF([with_sysroot],[no],[],[AS_VAR_SET([TARGET_SYSTEM_ROOT],[$with_sysroot])]) AC_SUBST([TARGET_SYSTEM_ROOT]) AM_CONDITIONAL([WITHSYSROOT],[AS_VAR_TEST_SET([TARGET_SYSTEM_ROOT])]) # Checks for programs. # Checks for headers, libs, etc need to utilize the sysroot... no idea how AC_NO_EXECUTABLES AC_PROG_SED AC_PROG_AWK AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_TOOL([DLLTOOL], [dlltool], [:]) AM_PROG_AR AM_PROG_AS dnl Remove this once automake fixes the bug where AS is not defined according to $host AC_CHECK_TOOL([AS], [as], [:]) dnl --- AM_PROG_CC_C_O AC_MSG_CHECKING([whether to build a w32api package for Cygwin]) AC_ARG_ENABLE([w32api], [AS_HELP_STRING([--enable-w32api], [Enable building a w32api package for Cygwin])], [], [AS_VAR_SET([enable_w32api],[no])]) AC_MSG_RESULT([$enable_w32api]) AS_CASE([$enable_w32api], [no],[], [yes],[AS_VAR_SET([W32API]) AS_VAR_SET([includedir],[${prefix}/include/w32api])], [AC_MSG_ERROR([invalid argument. Must be either yes or no.])]) AM_CONDITIONAL([W32API], [AS_VAR_TEST_SET([W32API])]) AC_MSG_CHECKING([whether to build the Win32 libraries]) AC_ARG_ENABLE([lib32], [AS_HELP_STRING([--enable-lib32], [Build the Win32 libraries])], [], [ _save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -m32" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const char test[(sizeof(void*)==4)?0:-1];]],[])], [enable_lib32=yes], [enable_lib32=no]) CFLAGS="$_save_CFLAGS"]) AC_MSG_RESULT([$enable_lib32]) AS_CASE([$enable_lib32], [no],[], [yes],[AS_VAR_SET([LIB32])], [AC_MSG_ERROR([invalid argument. Must be either yes or no.])]) AM_CONDITIONAL([LIB32], [AS_VAR_TEST_SET([LIB32])]) AC_MSG_CHECKING([whether to build the Win64 libraries]) AC_ARG_ENABLE([lib64], [AS_HELP_STRING([--enable-lib64], [Build the Win64 libraries])], [], [ _save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -m64" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[const char test[(sizeof(void*)==8)?0:-1];]],[])], [enable_lib64=yes], [enable_lib64=no]) CFLAGS="$_save_CFLAGS"]) AC_MSG_RESULT([$enable_lib64]) AS_CASE([$enable_lib64], [no],[], [yes],[AS_VAR_SET([LIB64])], [AC_MSG_ERROR([invalid argument. Must be either yes or no.])]) AM_CONDITIONAL([LIB64], [AS_VAR_TEST_SET([LIB64])]) AC_MSG_CHECKING([whether to build the WinARM32 libraries]) AC_ARG_ENABLE([libarm32], [AS_HELP_STRING([--enable-libarm32], [Build the WinARM32 libraries])], [], [AS_CASE([$host_cpu], [armv7*],[enable_libarm32=yes], [*],[enable_libarm32=no]) ]) AC_MSG_RESULT([$enable_libarm32]) AS_CASE([$enable_libarm32], [no],[], [yes],[AS_VAR_SET([LIBARM32])], [AC_MSG_ERROR([invalid argument. Must be either yes or no.])]) AM_CONDITIONAL([LIBARM32], [AS_VAR_TEST_SET([LIBARM32])]) AS_VAR_IF([enable_libarm32],[yes],[ AS_IF([AS_VAR_TEST_SET([LIB32]) || AS_VAR_TEST_SET([LIB64])], [AC_MSG_WARN([Building the runtime to use libarm32 with lib32 or lib64 is unsupported.])])]) AC_MSG_CHECKING([whether to build the WinARM64 libraries]) AC_ARG_ENABLE([libarm64], [AS_HELP_STRING([--enable-libarm64], [Build the WinARM64 libraries])], [], [AS_CASE([$host_cpu], [aarch64*],[enable_libarm64=yes], [*],[enable_libarm64=no]) ]) AC_MSG_RESULT([$enable_libarm64]) AS_CASE([$enable_libarm64], [no],[], [yes],[AS_VAR_SET([LIBARM64])], [AC_MSG_ERROR([invalid argument. Must be either yes or no.])]) AM_CONDITIONAL([LIBARM64], [AS_VAR_TEST_SET([LIBARM64])]) AS_VAR_IF([enable_libarm64],[yes],[ AS_IF([AS_VAR_TEST_SET([LIB32]) || AS_VAR_TEST_SET([LIB64]) || AS_VAR_TEST_SET([LIBARM32])], [AC_MSG_WARN([Building the runtime to use libarm64 with lib32, lib64 or libarm32 is unsupported.])])]) AS_CASE([$host_cpu], [x86_64],[ libx8664suffx=lib libx8632suffx=lib32 libarm64suffx=libarm64 libarm32suffx=libarm32], [i*86],[ libx8664suffx=lib64 libx8632suffx=lib libarm64suffx=libarm64 libarm32suffx=libarm32], [aarch64*],[ libx8664suffx=libx8664 libx8632suffx=libx8632 libarm64suffx=lib libarm32suffx=lib32], [armv7*],[ libx8664suffx=libx8664 libx8632suffx=libx8632 libarm64suffx=lib64 libarm32suffx=lib], [ libx8664suffx=libx8664 libx8632suffx=libx8632 libarm64suffx=libarm64 libarm32suffx=libarm32] ) AS_VAR_IF([enable_w32api],[yes],[ libx8664suffx=$libx8664suffx/w32api libx8632suffx=$libx8632suffx/w32api libarm64suffx=$libarm64suffx/w32api libarm32suffx=$libarm32suffx/w32api ]) AC_SUBST([LIBX8664SUFFIXDIR],[$libx8664suffx]) AC_SUBST([LIBX8632SUFFIXDIR],[$libx8632suffx]) AC_SUBST([LIBARM64SUFFIXDIR],[$libarm64suffx]) AC_SUBST([LIBARM32SUFFIXDIR],[$libarm32suffx]) # Checks for features. AC_MSG_CHECKING([whether to use genlib]) AC_ARG_WITH([genlib], [AS_HELP_STRING([--with-genlib=PATH], [Whether to build import libraries via the genlib tool (default: no)])], [], [with_genlib=no]) AS_CASE([$with_genlib], [yes],[AC_CHECK_TOOL([GENLIB], [genlib], [:])], [no],[], [AS_VAR_SET([GENLIB], [$with_genlib])]) AM_CONDITIONAL([WITH_GENLIB], [AS_VAR_TEST_SET([GENLIB])]) AC_MSG_RESULT([$with_genlib]) AC_MSG_CHECKING([whether to enable globbing]) AC_ARG_ENABLE([wildcard], [AS_HELP_STRING([--enable-wildcard], [Enable command line globbing])], [], [enable_wildcard=no]) AS_CASE([$enable_wildcard], [yes],[enable_wildcard_value=-1], [no],[enable_wildcard_value=0], [AC_MSG_ERROR([Please only use --enable-wildcard or --disable-wildcard, without any additional arguments.])]) AC_DEFINE_UNQUOTED([__ENABLE_GLOBBING],[$enable_wildcard_value],[Define as -1 to enable command line globbing or 0 to disable it.]) AC_MSG_RESULT([$enable_wildcard]) AC_MSG_CHECKING([whether to enable private exports]) AC_ARG_ENABLE([private-exports], [AS_HELP_STRING([--enable-private-exports], [Enable exporting private internal functions])], [], [enable_private_exports=no]) AS_CASE([$enable_private_exports], [yes],[], [no],[], [AC_MSG_ERROR([Please only use --enable-private-exports or --disable-private-exports, without any additional arguments.])]) AM_CONDITIONAL([PRIVATE_EXPORTS],[test $enable_private_exports = yes]) AC_MSG_RESULT([$enable_private_exports]) AC_MSG_CHECKING([whether to enable delay import libs]) AC_ARG_ENABLE([delay-import-libs], [AS_HELP_STRING([--enable-delay-import-libs], [Enable creation of delay-import libraries])], [], [enable_delay_import_libs=no]) AS_CASE([$enable_delay_import_libs], [yes],[], [no],[], [AC_MSG_ERROR([Please only use --enable-delay-import-libs or --disable-delay-import-libs, without any additional arguments.])]) AM_CONDITIONAL([DELAY_IMPORT_LIBS],[test $enable_delay_import_libs = yes]) AC_MSG_RESULT([$enable_delay_import_libs]) AC_MSG_CHECKING([what to provide as libmsvcrt.a]) AC_ARG_WITH([default-msvcrt], [AS_HELP_STRING([--with-default-msvcrt=LIB], [Lib to provide as libmsvcrt.a (default: msvcrt-os)])], [], [with_default_msvcrt=msvcrt-os]) if test "$with_default_msvcrt" = "msvcrt"; then with_default_msvcrt=msvcrt-os fi AC_MSG_RESULT([$with_default_msvcrt]) AS_VAR_SET([MSVCRT_LIB],[lib${with_default_msvcrt}.a]) AC_SUBST([MSVCRT_LIB]) AC_MSG_CHECKING([whether to enable experimental features]) AC_ARG_ENABLE([experimental], [AS_HELP_STRING([--enable-experimental], [Enable experimental features, valid options are comma separated combination of all, dfp, printf128, registeredprintf, softmath.])], [experimental_features=$enable_experimental], [experimental_features="no"]) enable_dfp=no enable_printf128=no enable_registeredprintf=no enable_softmath=no experiment_list=$($AWK 'BEGIN{OFS=" "; len = split(ARGV@<:@1@:>@,str,","); for(; len != 0; len--) print str@<:@len@:>@ }' "$experimental_features") for arg in $experiment_list do AS_CASE([$arg], [dfp],[enable_dfp=yes], [printf128],[enable_printf128=yes], [registeredprintf],[enable_registeredprintf=yes], [softmath],[enable_softmath=yes], [all], [enable_dfp=yes; enable_printf128=yes; enable_registeredprintf=yes; enable_softmath=yes; ], [yes], [enable_dfp=yes; enable_printf128=yes; enable_registeredprintf=yes; enable_softmath=yes; ], [no], [enable_dfp=no; enable_printf128=no; enable_registeredprintf=no; enable_softmath=no; ], [AC_MSG_ERROR([Unknown option \"$experiment\"])] ) done AC_MSG_RESULT([$experimental_features]) AM_CONDITIONAL([ENABLE_DFP],[ test "$enable_dfp" = "yes" ]) AM_CONDITIONAL([ENABLE_PRINTF128],[ test "$enable_printf128" = "yes" ]) AM_CONDITIONAL([ENABLE_REGISTEREDPRINTF],[ test "$enable_registeredprintf" = "yes" ]) AM_CONDITIONAL([ENABLE_SOFTMATH],[ test "$enable_softmath" = "yes" ]) AM_COND_IF([ENABLE_DFP],[AC_DEFINE([__ENABLE_DFP],[1],[Build DFP support])]) AM_COND_IF([ENABLE_PRINTF128],[AC_DEFINE([__ENABLE_PRINTF128],[1],[Build DFP support])]) AM_COND_IF([ENABLE_REGISTEREDPRINTF],[AC_DEFINE([__ENABLE_REGISTEREDPRINTF],[1],[Build DFP support])]) AM_COND_IF([ENABLE_SOFTMATH],[AC_DEFINE([__ENABLE_SOFTMATH],[1],[Build softmath routines])]) AC_MSG_CHECKING([whether the compiler supports -municode]) AC_ARG_ENABLE([tests-unicode], [AS_HELP_STRING([--enable-tests-unicode], [Enable the unicode testsuite without testing the compiler for support.])], [],[ saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -municode" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #ifndef UNICODE # error UNICODE not defined with -municode #endif ]])], [enable_tests_unicode=yes], [enable_tests_unicode=no]) CFLAGS="$saved_CFLAGS"]) AM_CONDITIONAL([ENABLE_TESTS_UNICODE],[test x$enable_tests_unicode = xyes]) AC_MSG_RESULT([$enable_tests_unicode]) AC_MSG_CHECKING([whether the linker provides __CTOR_LIST__]) saved_LDFLAGS="$LDFLAGS" saved_ac_no_link="$ac_no_link" LDFLAGS="$LDFLAGS -nostdlib" # Note that binutils 2.30 is broken with respect to __CTOR_LIST__ (the change # was reverted for 2.31); it does provide __CTOR_LIST__ automatically only if # necessary. But as long as there's no other definition of it, a fallback # __CTOR_LIST__ gets pulled in from libgcc, and this fallback is only a dummy # to prevent linker errors (in general) and isn't assigned to the right # sections. Therefore, it'd be better to test whether we can/should provide # our own __CTOR_LIST__. # But we can't test whether we can provide our own __CTOR_LIST__ with binutils # ld either; even if our test provides its own symbol __CTOR_LIST__, ld will # include it but silently use its own provided __CTOR_LIST__ instead, and # won't error out. For actual real use, that'd mean a stray broken pointer in # the .ctors section. # This test uses both mainCRTStartup and main functions, to let lld deduce # entry point and subsystem automatically without having to manually specify, # anything. And as long as main() is provided, we need to implicitly provide # __main as well, since the compiler injects a call to it. # Run this test manually instead of wrapping it in AC_LINK_IFELSE; when # bootstrapping an environment, an earlier linking test will have failed, # which both causes autoconf to refuse to run any linker test at all, # and even if $ac_no_link is overridden, the linker test iteslf will explicitly # check that the linker actually produced output in the given output file. # If $ac_exeext is empty, as it is when the earlier linker test failed, gcc # will behave differently depending on version. If run with "gcc conftest.c # -o conftest", old versions will produce explicitly a file named "conftest", # while modern GCC versions will produce "conftest.exe". AC_LINK_IFELSE will # explicitly look for the output file named "conftest$ac_exeext", which isn't # found, and the test fails even though linking succeeded. # # Therefore, just do a manual test; run the linking command and check the return # code whether it was successful or not. cat <<_ACEOF >conftest.$ac_ext #include extern const void * __CTOR_LIST__; void __main(void) { } int main(void) { return (int)(intptr_t)__CTOR_LIST__; } int mainCRTStartup(void) { return main(); } _ACEOF echo "$as_me:$LINENO: $CC conftest.$ac_ext $LDFLAGS -o conftest$ac_exeext" >&AS_MESSAGE_LOG_FD if $CC conftest.$ac_ext $LDFLAGS -o conftest$ac_exeext >&AS_MESSAGE_LOG_FD 2>&1; then AC_DEFINE([HAVE_CTOR_LIST],[1],[Whether the linker provides __CTOR_LIST__]) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi LDFLAGS="$saved_LDFLAGS" # Checks for libraries. # Checks for header files. #AC_HEADER_DIRENT #AC_HEADER_STDC #AC_CHECK_HEADERS([fcntl.h fenv.h float.h inttypes.h limits.h locale.h malloc.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/time.h sys/timeb.h termios.h unistd.h wchar.h wctype.h]) # Checks for typedefs, structures, and compiler characteristics. #AC_C_INLINE #AC_HEADER_TIME #AC_C_VOLATILE #AC_CHECK_TYPES([ptrdiff_t]) # Checks for library functions. #AC_FUNC_MALLOC #AC_FUNC_MBRTOWC #AC_FUNC_REALLOC #AC_FUNC_STRTOD #AC_FUNC_VPRINTF #AC_CHECK_FUNCS([alarm atexit btowc fesetround floor ftruncate gettimeofday isascii localeconv mbrlen memmove memset pow rint setlocale sqrt strcasecmp strchr strncasecmp strtoull strtoumax]) AC_CHECK_HEADER([_mingw_mac.h], [], [AC_MSG_ERROR([Please check if the mingw-w64 header set and the build/host option are set properly.])]) #Warnings and errors, default level is 3 AC_MSG_CHECKING([for warning levels]) AC_ARG_ENABLE([warnings], [AS_HELP_STRING([[--enable-warnings[=0-5]]], [Enable compile time warnings @<:@default=3@:>@])], [AS_CASE([$enableval], [yes], [warning_level=3], [no], [warning_level=0], [[[0-5]]], [warning_level="$enableval"], [warning_level=3])], [warning_level=3]) AC_MSG_RESULT([Level $warning_level]) #Add warning flags as appropriate. Level 4 and above are only for testing purpose. AS_CASE([$warning_level], [0],[ADD_C_CXX_WARNING_FLAGS="-Wall"], [1],[ ADD_C_CXX_WARNING_FLAGS="-Wall -Wextra" ADD_C_ONLY_WARNING_FLAGS="-Wimplicit-function-declaration"], [2],[ ADD_C_CXX_WARNING_FLAGS="-Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline" ADD_C_ONLY_WARNING_FLAGS="-Wimplicit-function-declaration"], [3],[ ADD_C_CXX_WARNING_FLAGS="-Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline" ADD_C_ONLY_WARNING_FLAGS="-Wimplicit-function-declaration -Wmissing-noreturn -Wmissing-prototypes"], [4],[ ADD_C_CXX_WARNING_FLAGS="-Wall -Wextra -Wformat -Wstrict-aliasing=2 -Wsystem-headers -Wshadow -Wmissing-declarations -Wpacked -Winline -Werror -pedantic" ADD_C_ONLY_WARNING_FLAGS="-Wimplicit-function-declaration -Wmissing-noreturn -Wmissing-prototypes"], [5],[ ADD_C_CXX_WARNING_FLAGS="-Wall -Wextra -Wformat -Wstrict-aliasing=2 -Wsystem-headers -Wshadow -Wmissing-declarations -Wpacked -Wredundant-decls -Winline -Werror -Wfatal-errors -pedantic -pedantic-errors" ADD_C_ONLY_WARNING_FLAGS="-Wimplicit-function-declaration -Wmissing-noreturn -Wmissing-prototypes"] ) AC_SUBST(ADD_C_ONLY_WARNING_FLAGS) AC_SUBST(ADD_C_CXX_WARNING_FLAGS) AC_SUBST(ADD_CXX_ONLY_WARNING_FLAGS) AC_CONFIG_FILES([Makefile]) AC_OUTPUT AC_MSG_NOTICE([]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([------------------------------------------------------------------------]) AC_MSG_NOTICE([$PACKAGE $VERSION]) AC_MSG_NOTICE([------------------------------------------------------------------------]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([Configuration Options Summary:]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ WinARM32 runtime.....: $enable_libarm32]) AC_MSG_NOTICE([ WinARM64 runtime.....: $enable_libarm64]) AC_MSG_NOTICE([ Win32 runtime........: $enable_lib32]) AC_MSG_NOTICE([ Win64 runtime........: $enable_lib64]) AC_MSG_NOTICE([ C Warning Flags......: $ADD_C_ONLY_WARNING_FLAGS]) AC_MSG_NOTICE([ C++ Warning Flags....: $ADD_CXX_ONLY_WARNING_FLAGS]) AC_MSG_NOTICE([ Common Warning Flags.: $ADD_C_CXX_WARNING_FLAGS]) AC_MSG_NOTICE([ Default msvcrt.......: $with_default_msvcrt]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ DFP printf...........: $enable_dfp]) AC_MSG_NOTICE([ 128-bit printf.......: $enable_printf128]) AC_MSG_NOTICE([ Custom printf........: $enable_registeredprintf]) AC_MSG_NOTICE([ Softhmath............: $enable_softmath]) AC_MSG_NOTICE([])