blob: b388cb20ff486cfb071cda6d4b6a19e787cdf5cc [file] [log] [blame]
# -*- 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 <stdint.h>
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([])