1# 2# Contains macros to handle library dependencies. 3# 4 5 6# DRUNTIME_LIBRARIES_DLOPEN 7# ----------------------- 8# Autodetect and add dl library to LIBS if necessary. 9AC_DEFUN([DRUNTIME_LIBRARIES_DLOPEN], 10[ 11 # Libtool has already checked this, so re-use the inferred dlopen lib. 12 AS_IF([test "x$enable_dlopen" = "xyes" && test -n "$lt_cv_dlopen_libs"], [ 13 LIBS="$LIBS $lt_cv_dlopen_libs" 14 ], [ 15 ]) 16]) 17 18 19# DRUNTIME_LIBRARIES_NET 20# ----------------------- 21# Autodetect and add networking library to LIBS if necessary. 22AC_DEFUN([DRUNTIME_LIBRARIES_NET], 23[ 24 dnl Check for the existence of the -lsocket and -lnsl libraries. 25 dnl The order here is important, so that they end up in the right 26 dnl order in the command line generated by make. Here are some 27 dnl special considerations: 28 dnl 1. Use "connect" and "accept" to check for -lsocket, and 29 dnl "gethostbyname" to check for -lnsl. 30 dnl 2. Use each function name only once: can't redo a check because 31 dnl autoconf caches the results of the last check and won't redo it. 32 dnl 3. Use -lnsl and -lsocket only if they supply procedures that 33 dnl aren't already present in the normal libraries. 34 dnl 4. On some systems, can't use -lsocket without -lnsl too. 35 dnl To get around this problem, check for both libraries together 36 dnl if -lsocket doesn't work by itself. 37 druntime_check_both=no 38 AC_CHECK_FUNC(connect, , 39 [AC_CHECK_LIB(socket, connect, 40 LIBS="$LIBS -lsocket", druntime_check_both=yes)]) 41 if test "$druntime_check_both" = "yes"; then 42 druntime_old_libs=$LIBS 43 LIBS="$LIBS -lsocket -lnsl" 44 AC_CHECK_FUNC(accept, , LIBS=$druntime_old_libs) 45 fi 46 AC_CHECK_FUNC(gethostbyname, , 47 [AC_CHECK_LIB(nsl, gethostbyname, LIBS="$LIBS -lnsl")]) 48]) 49 50# DRUNTIME_LIBRARIES_ZLIB 51# ----------------------- 52# Allow specifying whether to use the system zlib or 53# compiling the zlib included in GCC. Adds substitute 54# for LIBZ or adds zlib to LIBS if necessary. 55AC_DEFUN([DRUNTIME_LIBRARIES_ZLIB], 56[ 57 AC_LANG_PUSH([C]) 58 LIBZ="" 59 60 AC_ARG_WITH(target-system-zlib, 61 AS_HELP_STRING([--with-target-system-zlib={yes,no,auto}], 62 [use installed libz (default: no)]),, 63 [with_target_system_zlib=no]) 64 65 case "$with_target_system_zlib" in 66 yes|no|auto) ;; 67 *) AC_MSG_ERROR([Invalid argument for --with-target-system-zlib]) ;; 68 esac 69 70 AC_MSG_CHECKING([for system zlib]) 71 save_LIBS=$LIBS 72 LIBS="$LIBS -lz" 73 dnl the link test is not good enough for ARM32 multilib detection, 74 dnl first check to link, then to run 75 AC_LINK_IFELSE( 76 [AC_LANG_PROGRAM([#include <zlib.h>],[gzopen("none", "rb")])], 77 [ 78 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 79 #include <zlib.h> 80 int main() { 81 gzFile file = gzopen("none", "rb"); 82 return 0; 83 } 84 ]])], 85 [system_zlib_found=yes], 86 [system_zlib_found=no], 87 dnl no system zlib for cross builds ... 88 [system_zlib_found=no] 89 ) 90 ], 91 [system_zlib_found=no]) 92 LIBS=$save_LIBS 93 94 if test x$system_zlib_found = xyes && test x$with_target_system_zlib != xno; then 95 AC_MSG_RESULT([found]) 96 LIBS="$LIBS -lz" 97 elif test x$system_zlib_found = xno && test x$with_target_system_zlib = xyes; then 98 AC_MSG_ERROR([system zlib required but not found]) 99 else 100 AC_MSG_RESULT([just compiled]) 101 LIBZ=../../zlib/libz_convenience.la 102 fi 103 104 AC_SUBST(LIBZ) 105 AC_LANG_POP([C]) 106]) 107 108# DRUNTIME_LIBRARIES_ATOMIC 109# ------------------------- 110# Allow specifying whether to use libatomic for atomic support. 111AC_DEFUN([DRUNTIME_LIBRARIES_ATOMIC], 112[ 113 AC_ARG_WITH(libatomic, 114 AS_HELP_STRING([--without-libatomic], 115 [Do not use libatomic in core.atomic (default: auto)])) 116 117 DCFG_HAVE_LIBATOMIC=false 118 LIBATOMIC= 119 AS_IF([test "x$enable_libatomic" != "xno" && test "x$with_libatomic" != "xno"], [ 120 DCFG_HAVE_LIBATOMIC=true 121 LIBATOMIC=../../libatomic/libatomic_convenience.la 122 ], [ 123 AC_MSG_CHECKING([for libatomic]) 124 AC_MSG_RESULT([disabled]) 125 ]) 126 127 AC_SUBST(DCFG_HAVE_LIBATOMIC) 128 AC_SUBST(LIBATOMIC) 129]) 130 131# DRUNTIME_LIBRARIES_BACKTRACE 132# --------------------------- 133# Allow specifying whether to use libbacktrace for backtrace support. 134# Adds subsitute for BACKTRACE_SUPPORTED, BACKTRACE_USES_MALLOC, 135# and BACKTRACE_SUPPORTS_THREADS. 136AC_DEFUN([DRUNTIME_LIBRARIES_BACKTRACE], 137[ 138 AC_LANG_PUSH([C]) 139 BACKTRACE_SUPPORTED=false 140 BACKTRACE_USES_MALLOC=false 141 BACKTRACE_SUPPORTS_THREADS=false 142 LIBBACKTRACE="" 143 144 AC_ARG_WITH(libbacktrace, 145 AS_HELP_STRING([--without-libbacktrace], 146 [Do not use libbacktrace in core.runtime (default: auto)])) 147 148 AS_IF([test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace" != "xno"], [ 149 LIBBACKTRACE=../../libbacktrace/libbacktrace.la 150 151 gdc_save_CPPFLAGS=$CPPFLAGS 152 CPPFLAGS="$CPPFLAGS -I../libbacktrace " 153 154 AC_CHECK_HEADER(backtrace-supported.h, have_libbacktrace_h=true, 155 have_libbacktrace_h=false) 156 157 if $have_libbacktrace_h; then 158 AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTED]) 159 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC, 160 [ 161 #include <backtrace-supported.h> 162 #if BACKTRACE_SUPPORTED 163 FOUND_LIBBACKTRACE_RESULT_GDC 164 #endif 165 ], BACKTRACE_SUPPORTED=true, BACKTRACE_SUPPORTED=false) 166 AC_MSG_RESULT($BACKTRACE_SUPPORTED) 167 168 AC_MSG_CHECKING([libbacktrace: BACKTRACE_USES_MALLOC]) 169 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC, 170 [ 171 #include <backtrace-supported.h> 172 #if BACKTRACE_USES_MALLOC 173 FOUND_LIBBACKTRACE_RESULT_GDC 174 #endif 175 ], BACKTRACE_USES_MALLOC=true, BACKTRACE_USES_MALLOC=false) 176 AC_MSG_RESULT($BACKTRACE_USES_MALLOC) 177 178 AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTS_THREADS]) 179 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC, 180 [ 181 #include <backtrace-supported.h> 182 #if BACKTRACE_SUPPORTS_THREADS 183 FOUND_LIBBACKTRACE_RESULT_GDC 184 #endif 185 ], BACKTRACE_SUPPORTS_THREADS=true, BACKTRACE_SUPPORTS_THREADS=false) 186 AC_MSG_RESULT($BACKTRACE_SUPPORTS_THREADS) 187 fi 188 CPPFLAGS=$gdc_save_CPPFLAGS 189 ], [ 190 AC_MSG_CHECKING([for libbacktrace]) 191 AC_MSG_RESULT([disabled]) 192 ]) 193 194 AC_SUBST(LIBBACKTRACE) 195 AC_SUBST(BACKTRACE_SUPPORTED) 196 AC_SUBST(BACKTRACE_USES_MALLOC) 197 AC_SUBST(BACKTRACE_SUPPORTS_THREADS) 198 AC_LANG_POP([C]) 199]) 200 201# DRUNTIME_LIBRARIES_CLIB 202# ----------------------- 203# Perform various feature checks on the C library. 204AC_DEFUN([DRUNTIME_LIBRARIES_CLIB], 205[ 206 AC_LANG_PUSH([C]) 207 DCFG_HAVE_QSORT_R=false 208 AC_CHECK_FUNC(qsort_r, [DCFG_HAVE_QSORT_R=true]) 209 AC_SUBST(DCFG_HAVE_QSORT_R) 210 AC_LANG_POP([C]) 211]) 212 213# DRUNTIME_LIBRARIES_UCONTEXT 214# ------------------------------ 215# Autodetect and add ucontext library to LIBS if necessary. 216# This is only required if fiber_switchContext does not have 217# its own internal asm implementation. 218AC_DEFUN([DRUNTIME_LIBRARIES_UCONTEXT], 219[ 220 # Keep this in sync with core/thread.d, set druntime_fiber_asm_external to 221 # "yes" for targets that have 'version = AsmExternal'. 222 druntime_fiber_asm_external=no 223 case "$target_cpu" in 224 aarch64* | \ 225 arm* | \ 226 i[[34567]]86|x86_64 | \ 227 powerpc) 228 druntime_fiber_asm_external=yes 229 ;; 230 esac 231 if test "$druntime_fiber_asm_external" = no; then 232 AC_SEARCH_LIBS([swapcontext], [c ucontext], [], 233 AC_MSG_ERROR([swapcontext required but not found])) 234 fi 235]) 236