2 # Contains macros to handle library dependencies.
6 # DRUNTIME_LIBRARIES_DLOPEN
7 # -----------------------
8 # Autodetect and add dl library to LIBS if necessary.
9 AC_DEFUN([DRUNTIME_LIBRARIES_DLOPEN],
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"
19 # DRUNTIME_LIBRARIES_NET
20 # -----------------------
21 # Autodetect and add networking library to LIBS if necessary.
22 AC_DEFUN([DRUNTIME_LIBRARIES_NET],
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)
46 AC_CHECK_FUNC(gethostbyname, ,
47 [AC_CHECK_LIB(nsl, gethostbyname, LIBS="$LIBS -lnsl")])
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.
55 AC_DEFUN([DRUNTIME_LIBRARIES_ZLIB],
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])
65 case "$with_target_system_zlib" in
67 *) AC_MSG_ERROR([Invalid argument for --with-target-system-zlib]) ;;
70 AC_MSG_CHECKING([for system zlib])
73 dnl the link test is not good enough for ARM32 multilib detection,
74 dnl first check to link, then to run
76 [AC_LANG_PROGRAM([#include <zlib.h>],[gzopen("none", "rb")])],
78 AC_RUN_IFELSE([AC_LANG_SOURCE([[
81 gzFile file = gzopen("none", "rb");
85 [system_zlib_found=yes],
86 [system_zlib_found=no],
87 dnl no system zlib for cross builds ...
88 [system_zlib_found=no]
91 [system_zlib_found=no])
94 if test x$system_zlib_found = xyes && test x$with_target_system_zlib != xno; then
95 AC_MSG_RESULT([found])
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])
100 AC_MSG_RESULT([just compiled])
101 LIBZ=../../zlib/libz_convenience.la
108 # DRUNTIME_LIBRARIES_ATOMIC
109 # -------------------------
110 # Allow specifying whether to use libatomic for atomic support.
111 AC_DEFUN([DRUNTIME_LIBRARIES_ATOMIC],
113 AC_ARG_WITH(libatomic,
114 AS_HELP_STRING([--without-libatomic],
115 [Do not use libatomic in core.atomic (default: auto)]))
117 DCFG_HAVE_LIBATOMIC=false
119 AS_IF([test "x$enable_libatomic" != "xno" && test "x$with_libatomic" != "xno"], [
120 DCFG_HAVE_LIBATOMIC=true
121 LIBATOMIC=../../libatomic/libatomic_convenience.la
123 AC_MSG_CHECKING([for libatomic])
124 AC_MSG_RESULT([disabled])
127 AC_SUBST(DCFG_HAVE_LIBATOMIC)
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.
136 AC_DEFUN([DRUNTIME_LIBRARIES_BACKTRACE],
139 BACKTRACE_SUPPORTED=false
140 BACKTRACE_USES_MALLOC=false
141 BACKTRACE_SUPPORTS_THREADS=false
144 AC_ARG_WITH(libbacktrace,
145 AS_HELP_STRING([--without-libbacktrace],
146 [Do not use libbacktrace in core.runtime (default: auto)]))
148 AS_IF([test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace" != "xno"], [
149 LIBBACKTRACE=../../libbacktrace/libbacktrace.la
151 gdc_save_CPPFLAGS=$CPPFLAGS
152 CPPFLAGS="$CPPFLAGS -I../libbacktrace "
154 AC_CHECK_HEADER(backtrace-supported.h, have_libbacktrace_h=true,
155 have_libbacktrace_h=false)
157 if $have_libbacktrace_h; then
158 AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTED])
159 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
161 #include <backtrace-supported.h>
162 #if BACKTRACE_SUPPORTED
163 FOUND_LIBBACKTRACE_RESULT_GDC
165 ], BACKTRACE_SUPPORTED=true, BACKTRACE_SUPPORTED=false)
166 AC_MSG_RESULT($BACKTRACE_SUPPORTED)
168 AC_MSG_CHECKING([libbacktrace: BACKTRACE_USES_MALLOC])
169 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
171 #include <backtrace-supported.h>
172 #if BACKTRACE_USES_MALLOC
173 FOUND_LIBBACKTRACE_RESULT_GDC
175 ], BACKTRACE_USES_MALLOC=true, BACKTRACE_USES_MALLOC=false)
176 AC_MSG_RESULT($BACKTRACE_USES_MALLOC)
178 AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTS_THREADS])
179 AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
181 #include <backtrace-supported.h>
182 #if BACKTRACE_SUPPORTS_THREADS
183 FOUND_LIBBACKTRACE_RESULT_GDC
185 ], BACKTRACE_SUPPORTS_THREADS=true, BACKTRACE_SUPPORTS_THREADS=false)
186 AC_MSG_RESULT($BACKTRACE_SUPPORTS_THREADS)
188 CPPFLAGS=$gdc_save_CPPFLAGS
190 AC_MSG_CHECKING([for libbacktrace])
191 AC_MSG_RESULT([disabled])
194 AC_SUBST(LIBBACKTRACE)
195 AC_SUBST(BACKTRACE_SUPPORTED)
196 AC_SUBST(BACKTRACE_USES_MALLOC)
197 AC_SUBST(BACKTRACE_SUPPORTS_THREADS)
201 # DRUNTIME_LIBRARIES_CLIB
202 # -----------------------
203 # Perform various feature checks on the C library.
204 AC_DEFUN([DRUNTIME_LIBRARIES_CLIB],
207 DCFG_HAVE_QSORT_R=false
208 AC_CHECK_FUNC(qsort_r, [DCFG_HAVE_QSORT_R=true])
209 AC_SUBST(DCFG_HAVE_QSORT_R)
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.
218 AC_DEFUN([DRUNTIME_LIBRARIES_UCONTEXT],
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
226 i[[34567]]86|x86_64 | \
228 druntime_fiber_asm_external=yes
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]))
237 # DRUNTIME_LIBRARIES_VALGRIND
238 # ------------------------------
239 # Allow specifying whether to use valgrind integration in the GC, which enables
240 # the D run-time to communicate which memory access operations are valid.
241 # This is only required if `--enable-libphobos-checking=valgrind' was seen.
242 AC_DEFUN([DRUNTIME_LIBRARIES_VALGRIND],
244 AC_CHECK_HEADERS(stddef.h stdlib.h)
246 AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
248 AC_MSG_CHECKING(for VALGRIND_DISCARD in <valgrind/memcheck.h>)
249 AC_PREPROC_IFELSE([AC_LANG_SOURCE(
250 [[#include <valgrind/memcheck.h>
251 #ifndef VALGRIND_DISCARD
252 #error VALGRIND_DISCARD not defined
254 [have_valgrind_memcheck_h=yes],
255 [have_valgrind_memcheck_h=no])
256 AC_MSG_RESULT($have_valgrind_memcheck_h)
257 AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
258 AC_PREPROC_IFELSE([AC_LANG_SOURCE(
259 [[#include <memcheck.h>
260 #ifndef VALGRIND_DISCARD
261 #error VALGRIND_DISCARD not defined
263 [have_memcheck_h=yes],
264 [have_memcheck_h=no])
265 AC_MSG_RESULT($have_memcheck_h)
267 if test x$VALGRIND_FLAG != x ; then
268 AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
269 [Define to enable to integrate valgrind (a memory checker) in the GC.])
271 if test $have_valgrind_memcheck_h = yes; then
272 AC_DEFINE(HAVE_VALGRIND_MEMCHECK_H, 1,
273 [Define if valgrind's valgrind/memcheck.h header is installed.])
275 if test $have_memcheck_h = yes; then
276 AC_DEFINE(HAVE_MEMCHECK_H, 1,
277 [Define if valgrind's memcheck.h header is installed.])
280 if test x$VALGRIND_FLAG != x; then
281 if (test $have_valgrind_h = no \
282 && test $have_memcheck_h = no \
283 && test $have_valgrind_memcheck_h = no); then
284 AC_MSG_ERROR([*** valgrind checking requested, but
285 *** Can't find valgrind/memcheck.h, memcheck.h or valgrind.h])