1#
2# Contains macros to handle library dependencies.
3#
4
5
6# DRUNTIME_LIBRARIES_THREAD
7# -------------------------
8# Allow specifying the thread library to link with or autodetect
9# Add thread library to LIBS if necessary.
10AC_DEFUN([DRUNTIME_LIBRARIES_THREAD],
11[
12  enable_thread_lib=yes
13  AC_ARG_ENABLE(thread-lib,
14    AC_HELP_STRING([--enable-thread-lib=<arg>],
15                   [specify linker option for the system thread library (default: autodetect)]))
16
17  AS_IF([test "x$enable_thread_lib" = "xyes"], [
18    AC_SEARCH_LIBS([pthread_create], [pthread])
19  ], [
20    AS_IF([test "x$enable_thread_lib" = "xno"], [
21      AC_MSG_CHECKING([for thread library])
22      AC_MSG_RESULT([disabled])
23    ], [
24      AC_CHECK_LIB([$enable_thread_lib], [pthread_create], [], [
25        AC_MSG_ERROR([Thread library not found])
26      ])
27    ])
28  ])
29])
30
31
32# DRUNTIME_LIBRARIES_DLOPEN
33# -----------------------
34# Autodetect and add dl library to LIBS if necessary.
35AC_DEFUN([DRUNTIME_LIBRARIES_DLOPEN],
36[
37  # Libtool has already checked this, so re-use the inferred dlopen lib.
38  AS_IF([test "x$enable_dlopen" = "xyes" && test -n "$lt_cv_dlopen_libs"], [
39    LIBS="$LIBS $lt_cv_dlopen_libs"
40  ], [
41  ])
42])
43
44
45# DRUNTIME_LIBRARIES_NET
46# -----------------------
47# Autodetect and add networking library to LIBS if necessary.
48AC_DEFUN([DRUNTIME_LIBRARIES_NET],
49[
50  dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
51  AC_CACHE_CHECK([for socket libraries], druntime_cv_lib_sockets,
52    [druntime_cv_lib_sockets=
53     druntime_check_both=no
54     AC_CHECK_FUNC(connect, druntime_check_socket=no, druntime_check_socket=yes)
55     if test "$druntime_check_socket" = "yes"; then
56       unset ac_cv_func_connect
57       AC_CHECK_LIB(socket, main, druntime_cv_lib_sockets="-lsocket",
58		    druntime_check_both=yes)
59     fi
60     if test "$druntime_check_both" = "yes"; then
61       druntime_old_libs=$LIBS
62       LIBS="$LIBS -lsocket -lnsl"
63       unset ac_cv_func_accept
64       AC_CHECK_FUNC(accept,
65		     [druntime_check_nsl=no
66		      druntime_cv_lib_sockets="-lsocket -lnsl"])
67       unset ac_cv_func_accept
68       LIBS=$druntime_old_libs
69     fi
70     unset ac_cv_func_gethostbyname
71     druntime_old_libs="$LIBS"
72     AC_CHECK_FUNC(gethostbyname, ,
73		   [AC_CHECK_LIB(nsl, main,
74		    [druntime_cv_lib_sockets="$druntime_cv_lib_sockets -lnsl"])])
75  ])
76  LIBS="$LIBS $druntime_cv_lib_sockets"
77])
78
79# DRUNTIME_LIBRARIES_ZLIB
80# -----------------------
81# Allow specifying whether to use the system zlib or
82# compiling the zlib included in GCC.  Adds substitute
83# for LIBZ or adds zlib to LIBS if necessary.
84AC_DEFUN([DRUNTIME_LIBRARIES_ZLIB],
85[
86  AC_LANG_PUSH([C])
87  LIBZ=""
88
89  AC_ARG_WITH(target-system-zlib,
90    AS_HELP_STRING([--with-target-system-zlib={yes,no,auto}],
91                   [use installed libz (default: no)]),,
92              [with_target_system_zlib=no])
93
94  case "$with_target_system_zlib" in
95    yes|no|auto) ;;
96    *) AC_MSG_ERROR([Invalid argument for --with-target-system-zlib]) ;;
97  esac
98
99  AC_MSG_CHECKING([for system zlib])
100  save_LIBS=$LIBS
101  LIBS="$LIBS -lz"
102  dnl the link test is not good enough for ARM32 multilib detection,
103  dnl first check to link, then to run
104  AC_LINK_IFELSE(
105    [AC_LANG_PROGRAM([#include <zlib.h>],[gzopen("none", "rb")])],
106    [
107      AC_RUN_IFELSE([AC_LANG_SOURCE([[
108        #include <zlib.h>
109        int main() {
110          gzFile file = gzopen("none", "rb");
111          return 0;
112        }
113        ]])],
114        [system_zlib_found=yes],
115        [system_zlib_found=no],
116        dnl no system zlib for cross builds ...
117        [system_zlib_found=no]
118      )
119    ],
120    [system_zlib_found=no])
121  LIBS=$save_LIBS
122
123  if test x$system_zlib_found = xyes && test x$with_target_system_zlib != xno; then
124    AC_MSG_RESULT([found])
125    LIBS="$LIBS -lz"
126  elif test x$system_zlib_found = xno && test x$with_target_system_zlib = xyes; then
127    AC_MSG_ERROR([system zlib required but not found])
128  else
129    AC_MSG_RESULT([just compiled])
130    LIBZ=../../zlib/libz_convenience.la
131  fi
132
133  AC_SUBST(LIBZ)
134  AC_LANG_POP([C])
135])
136
137# DRUNTIME_LIBRARIES_ATOMIC
138# -------------------------
139# Allow specifying whether to use libatomic for atomic support.
140AC_DEFUN([DRUNTIME_LIBRARIES_ATOMIC],
141[
142  AC_ARG_WITH(libatomic,
143    AS_HELP_STRING([--without-libatomic],
144                   [Do not use libatomic in core.atomic (default: auto)]))
145
146  DCFG_HAVE_LIBATOMIC=false
147  LIBATOMIC=
148  AS_IF([test "x$with_libatomic" != "xno"], [
149    DCFG_HAVE_LIBATOMIC=true
150    LIBATOMIC=../../libatomic/libatomic_convenience.la
151  ], [
152    AC_MSG_CHECKING([for libatomic])
153    AC_MSG_RESULT([disabled])
154  ])
155
156  AC_SUBST(DCFG_HAVE_LIBATOMIC)
157  AC_SUBST(LIBATOMIC)
158])
159
160# DRUNTIME_LIBRARIES_BACKTRACE
161# ---------------------------
162# Allow specifying whether to use libbacktrace for backtrace support.
163# Adds subsitute for BACKTRACE_SUPPORTED, BACKTRACE_USES_MALLOC,
164# and BACKTRACE_SUPPORTS_THREADS.
165AC_DEFUN([DRUNTIME_LIBRARIES_BACKTRACE],
166[
167  AC_LANG_PUSH([C])
168  BACKTRACE_SUPPORTED=false
169  BACKTRACE_USES_MALLOC=false
170  BACKTRACE_SUPPORTS_THREADS=false
171  LIBBACKTRACE=""
172
173  AC_ARG_WITH(libbacktrace,
174    AS_HELP_STRING([--without-libbacktrace],
175                   [Do not use libbacktrace in core.runtime (default: auto)]))
176
177  AS_IF([test "x$with_libbacktrace" != "xno"], [
178    LIBBACKTRACE=../../libbacktrace/libbacktrace.la
179
180    gdc_save_CPPFLAGS=$CPPFLAGS
181    CPPFLAGS="$CPPFLAGS -I../libbacktrace "
182
183    AC_CHECK_HEADER(backtrace-supported.h, have_libbacktrace_h=true,
184      have_libbacktrace_h=false)
185
186    if $have_libbacktrace_h; then
187      AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTED])
188      AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
189      [
190      #include <backtrace-supported.h>
191      #if BACKTRACE_SUPPORTED
192        FOUND_LIBBACKTRACE_RESULT_GDC
193      #endif
194      ], BACKTRACE_SUPPORTED=true, BACKTRACE_SUPPORTED=false)
195      AC_MSG_RESULT($BACKTRACE_SUPPORTED)
196
197      AC_MSG_CHECKING([libbacktrace: BACKTRACE_USES_MALLOC])
198      AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
199      [
200      #include <backtrace-supported.h>
201      #if BACKTRACE_USES_MALLOC
202        FOUND_LIBBACKTRACE_RESULT_GDC
203      #endif
204      ], BACKTRACE_USES_MALLOC=true, BACKTRACE_USES_MALLOC=false)
205      AC_MSG_RESULT($BACKTRACE_USES_MALLOC)
206
207      AC_MSG_CHECKING([libbacktrace: BACKTRACE_SUPPORTS_THREADS])
208      AC_EGREP_CPP(FOUND_LIBBACKTRACE_RESULT_GDC,
209      [
210      #include <backtrace-supported.h>
211      #if BACKTRACE_SUPPORTS_THREADS
212        FOUND_LIBBACKTRACE_RESULT_GDC
213      #endif
214      ], BACKTRACE_SUPPORTS_THREADS=true, BACKTRACE_SUPPORTS_THREADS=false)
215      AC_MSG_RESULT($BACKTRACE_SUPPORTS_THREADS)
216    fi
217    CPPFLAGS=$gdc_save_CPPFLAGS
218  ], [
219    AC_MSG_CHECKING([for libbacktrace])
220    AC_MSG_RESULT([disabled])
221  ])
222
223  AC_SUBST(LIBBACKTRACE)
224  AC_SUBST(BACKTRACE_SUPPORTED)
225  AC_SUBST(BACKTRACE_USES_MALLOC)
226  AC_SUBST(BACKTRACE_SUPPORTS_THREADS)
227  AC_LANG_POP([C])
228])
229
230# DRUNTIME_LIBRARIES_CLIB
231# -----------------------
232# Perform various feature checks on the C library.
233AC_DEFUN([DRUNTIME_LIBRARIES_CLIB],
234[
235  AC_LANG_PUSH([C])
236  DCFG_HAVE_QSORT_R=false
237  AC_CHECK_FUNC(qsort_r, [DCFG_HAVE_QSORT_R=true])
238  AC_SUBST(DCFG_HAVE_QSORT_R)
239  AC_LANG_POP([C])
240])
241