72c136c900
This option is not useful on its own as all posix modules require the compiler to predefine version(Posix) anyway. So the option has been removed, and logic moved into DRUNTIME_OS_SOURCES, where the conditional DRUNTIME_OS_POSIX is set instead. libphobos/ChangeLog: * configure: Regenerate. * configure.ac: Remove DRUNTIME_OS_UNIX. * libdruntime/Makefile.am: Add DRUNTIME_DSOURCES_POSIX if DRUNTIME_OS_POSIX is true. * libdruntime/Makefile.in: Regenerate. * m4/druntime/os.m4 (DRUNTIME_OS_UNIX): Remove, move AM_CONDITIONAL logic to... (DRUNTIME_OS_SOURCES): ...here. Rename conditional to DRUNTIME_OS_POSIX.
221 lines
7.0 KiB
Plaintext
221 lines
7.0 KiB
Plaintext
#
|
|
# Contains macros to detect OS features.
|
|
#
|
|
|
|
|
|
# DRUNTIME_OS_THREAD_MODEL
|
|
# ------------------------
|
|
# Detect thread model and substitute DCFG_THREAD_MODEL
|
|
AC_DEFUN([DRUNTIME_OS_THREAD_MODEL],
|
|
[
|
|
AC_REQUIRE([AC_PROG_GDC])
|
|
AC_MSG_CHECKING([for thread model used by GDC])
|
|
d_thread_model=`$GDC -v 2>&1 | sed -n 's/^Thread model: //p'`
|
|
AC_MSG_RESULT([$d_thread_model])
|
|
|
|
# Map from thread model to thread interface.
|
|
DRUNTIME_CONFIGURE_THREADS([$d_thread_model])
|
|
])
|
|
|
|
|
|
# DRUNTIME_CONFIGURE_THREADS(thread_model)
|
|
# ----------------------------------------
|
|
# Map target os to D version identifier
|
|
AC_DEFUN([DRUNTIME_CONFIGURE_THREADS],
|
|
[
|
|
case $1 in
|
|
aix) DCFG_THREAD_MODEL="Posix" ;;
|
|
lynx) DCFG_THREAD_MODEL="Posix" ;;
|
|
posix) DCFG_THREAD_MODEL="Posix" ;;
|
|
single) DCFG_THREAD_MODEL="Single" ;;
|
|
win32) DCFG_THREAD_MODEL="Win32" ;;
|
|
# TODO: These targets need porting.
|
|
dce|mipssde|rtems|tpf|vxworks)
|
|
DCFG_THREAD_MODEL="Single" ;;
|
|
*) as_fn_error "Thread implementation '$1' not recognised" "$LINENO" 5 ;;
|
|
esac
|
|
AC_SUBST(DCFG_THREAD_MODEL)
|
|
])
|
|
|
|
|
|
# DRUNTIME_OS_DETECT
|
|
# ------------------
|
|
# Set the druntime_cv_target_os variable
|
|
AC_DEFUN([DRUNTIME_OS_DETECT],
|
|
[
|
|
AC_CACHE_CHECK([[for target OS]],
|
|
[[druntime_cv_target_os]],
|
|
[[druntime_cv_target_os=`echo $target_os | sed 's/^\([A-Za-z_]+\)/\1/'`]])
|
|
AS_IF([[test -z "$druntime_cv_target_os"]],
|
|
[AC_MSG_ERROR([[can't detect target OS]])],
|
|
[])
|
|
])
|
|
|
|
|
|
# DRUNTIME_OS_SOURCES
|
|
# -------------------
|
|
# Detect target OS and add DRUNTIME_OS_AIX DRUNTIME_OS_DARWIN
|
|
# DRUNTIME_OS_FREEBSD DRUNTIME_OS_LINUX DRUNTIME_OS_MINGW
|
|
# DRUNTIME_OS_SOLARIS DRUNTIME_OS_OPENBSD conditionals.
|
|
# If the system is posix, add DRUNTIME_OS_POSIX conditional.
|
|
AC_DEFUN([DRUNTIME_OS_SOURCES],
|
|
[
|
|
AC_REQUIRE([DRUNTIME_OS_DETECT])
|
|
|
|
druntime_target_os_parsed=""
|
|
case "$druntime_cv_target_os" in
|
|
aix*) druntime_target_os_parsed="aix"
|
|
;;
|
|
*android*)
|
|
druntime_target_os_parsed="android"
|
|
;;
|
|
darwin*) druntime_target_os_parsed="darwin"
|
|
;;
|
|
dragonfly*)
|
|
druntime_target_os_parsed="dragonflybsd"
|
|
;;
|
|
freebsd*|k*bsd*-gnu)
|
|
druntime_target_os_parsed="freebsd"
|
|
;;
|
|
openbsd*)
|
|
druntime_target_os_parsed="openbsd"
|
|
;;
|
|
netbsd*)
|
|
druntime_target_os_parsed="netbsd"
|
|
;;
|
|
linux*) druntime_target_os_parsed="linux"
|
|
;;
|
|
mingw*) druntime_target_os_parsed="mingw"
|
|
;;
|
|
*solaris*) druntime_target_os_parsed="solaris"
|
|
esac
|
|
AM_CONDITIONAL([DRUNTIME_OS_AIX],
|
|
[test "$druntime_target_os_parsed" = "aix"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_ANDROID],
|
|
[test "$druntime_target_os_parsed" = "android"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_DARWIN],
|
|
[test "$druntime_target_os_parsed" = "darwin"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_DRAGONFLYBSD],
|
|
[test "$druntime_target_os_parsed" = "dragonflybsd"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_FREEBSD],
|
|
[test "$druntime_target_os_parsed" = "freebsd"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_NETBSD],
|
|
[test "$druntime_target_os_parsed" = "netbsd"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_OPENBSD],
|
|
[test "$druntime_target_os_parsed" = "openbsd"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_LINUX],
|
|
[test "$druntime_target_os_parsed" = "linux"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_MINGW],
|
|
[test "$druntime_target_os_parsed" = "mingw"])
|
|
AM_CONDITIONAL([DRUNTIME_OS_SOLARIS],
|
|
[test "$druntime_target_os_parsed" = "solaris"])
|
|
|
|
druntime_target_posix="no"
|
|
case "$druntime_cv_target_os" in
|
|
aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*)
|
|
druntime_target_posix="yes"
|
|
;;
|
|
esac
|
|
AM_CONDITIONAL([DRUNTIME_OS_POSIX], [test "$druntime_target_posix" = "yes"])
|
|
])
|
|
|
|
|
|
# DRUNTIME_OS_ARM_EABI_UNWINDER
|
|
# ------------------------
|
|
# Check if using ARM unwinder and substitute DCFG_ARM_EABI_UNWINDER
|
|
# and set DRUNTIME_OS_ARM_EABI_UNWINDER conditional.
|
|
AC_DEFUN([DRUNTIME_OS_ARM_EABI_UNWINDER],
|
|
[
|
|
AC_LANG_PUSH([C])
|
|
AC_MSG_CHECKING([for ARM unwinder])
|
|
AC_TRY_COMPILE([#include <unwind.h>],[
|
|
#if __ARM_EABI_UNWINDER__
|
|
#error Yes, it is.
|
|
#endif
|
|
],
|
|
[AC_MSG_RESULT([no])
|
|
DCFG_ARM_EABI_UNWINDER=false],
|
|
[AC_MSG_RESULT([yes])
|
|
DCFG_ARM_EABI_UNWINDER=true])
|
|
AC_SUBST(DCFG_ARM_EABI_UNWINDER)
|
|
AM_CONDITIONAL([DRUNTIME_OS_ARM_EABI_UNWINDER], [test "$DCFG_ARM_EABI_UNWINDER" = "true"])
|
|
AC_LANG_POP([C])
|
|
])
|
|
|
|
|
|
# DRUNTIME_OS_MINFO_BRACKETING
|
|
# ----------------------------
|
|
# Check if the linker provides __start_minfo and __stop_minfo symbols and
|
|
# substitute DCFG_MINFO_BRACKETING.
|
|
AC_DEFUN([DRUNTIME_OS_MINFO_BRACKETING],
|
|
[
|
|
AC_LANG_PUSH([C])
|
|
AC_MSG_CHECKING([for minfo section bracketing])
|
|
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
|
void* module_info_ptr __attribute__((section ("minfo")));
|
|
extern void* __start_minfo __attribute__((visibility ("hidden")));
|
|
extern void* __stop_minfo __attribute__((visibility ("hidden")));
|
|
|
|
int main()
|
|
{
|
|
// Never run, just to prevent compiler from optimizing access
|
|
return &__start_minfo == &__stop_minfo;
|
|
}
|
|
])],
|
|
[AC_MSG_RESULT([yes])
|
|
DCFG_MINFO_BRACKETING=true],
|
|
[AC_MSG_RESULT([no])
|
|
DCFG_MINFO_BRACKETING=false])
|
|
AC_SUBST(DCFG_MINFO_BRACKETING)
|
|
AM_CONDITIONAL([DRUNTIME_OS_MINFO_BRACKETING], [test "$DCFG_MINFO_BRACKETING" = "true"])
|
|
AC_LANG_POP([C])
|
|
])
|
|
|
|
# DRUNTIME_OS_DLPI_TLS_MODID
|
|
# ----------------------------
|
|
# Check if struct dl_phdr_info includes the dlpi_tls_modid member and
|
|
# substitute DCFG_DLPI_TLS_MODID.
|
|
AC_DEFUN([DRUNTIME_OS_DLPI_TLS_MODID],
|
|
[
|
|
AC_LANG_PUSH([C])
|
|
AC_CHECK_MEMBER([struct dl_phdr_info.dlpi_tls_modid],
|
|
[DCFG_DLPI_TLS_MODID=true], [DCFG_DLPI_TLS_MODID=false],
|
|
[[#include <link.h>]])
|
|
AC_SUBST(DCFG_DLPI_TLS_MODID)
|
|
AC_LANG_POP([C])
|
|
])
|
|
|
|
# DRUNTIME_OS_LINK_SPEC
|
|
# ---------------------
|
|
# Add target-specific link options to link_spec.
|
|
AC_DEFUN([DRUNTIME_OS_LINK_SPEC],
|
|
[
|
|
case $target in
|
|
i?86-*-solaris2.* | x86_64-*-solaris2.*)
|
|
# 64-bit Solaris/x86 ld breaks calls to __tls_get_addr with non-TLS
|
|
# relocs. Work around by disabling TLS transitions. Not necessary
|
|
# on 32-bit x86, but cannot be distinguished reliably in specs.
|
|
druntime_ld_prog=`$CC -print-prog-name=ld`
|
|
druntime_ld_gld=no
|
|
druntime_ld_relax_transtls=no
|
|
if test -n "$druntime_ld_prog" \
|
|
&& $druntime_ld_prog -v 2>&1 | grep GNU > /dev/null 2>&1; then
|
|
druntime_ld_gld=yes
|
|
else
|
|
echo 'int main (void) { return 0; }' > conftest.c
|
|
save_LDFLAGS="$LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -Wl,-z,relax=transtls"
|
|
if $CC $CFLAGS $LDFLAGS -o conftest conftest.c > /dev/null 2>&1; then
|
|
druntime_ld_relax_transtls=yes
|
|
fi
|
|
LDFLAGS="$save_LDFLAGS"
|
|
rm -f conftest.c conftest
|
|
fi
|
|
if test "$druntime_ld_relax_transtls" = "yes"; then
|
|
OS_LINK_SPEC='-z relax=transtls'
|
|
fi
|
|
;;
|
|
esac
|
|
AC_SUBST(OS_LINK_SPEC)
|
|
])
|