1dnl Autoconf configure script for GDB server.
2dnl Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
3dnl 2010, 2011 Free Software Foundation, Inc.
4dnl
5dnl This file is part of GDB.
6dnl
7dnl This program is free software; you can redistribute it and/or modify
8dnl it under the terms of the GNU General Public License as published by
9dnl the Free Software Foundation; either version 3 of the License, or
10dnl (at your option) any later version.
11dnl
12dnl This program is distributed in the hope that it will be useful,
13dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
14dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15dnl GNU General Public License for more details.
16dnl
17dnl You should have received a copy of the GNU General Public License
18dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20dnl Process this file with autoconf to produce a configure script.
21
22AC_PREREQ(2.59)dnl
23
24AC_INIT(server.c)
25AC_CONFIG_HEADER(config.h:config.in)
26AC_CONFIG_LIBOBJ_DIR(../gnulib)
27
28AC_PROG_CC
29AC_GNU_SOURCE
30
31AC_CANONICAL_SYSTEM
32
33AC_PROG_INSTALL
34
35AC_ARG_PROGRAM
36
37AC_HEADER_STDC
38
39AC_FUNC_ALLOCA
40AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
41		 proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl
42		 stdlib.h unistd.h dnl
43		 errno.h fcntl.h signal.h sys/file.h malloc.h dnl
44		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
45		 netinet/tcp.h arpa/inet.h sys/wait.h)
46AC_CHECK_FUNCS(pread pwrite pread64)
47AC_REPLACE_FUNCS(memmem vasprintf vsnprintf)
48
49# Check for UST
50ustlibs=""
51ustinc=""
52
53AC_ARG_WITH(ust, [  --with-ust=PATH       Specify prefix directory for the installed UST package
54                          Equivalent to --with-ust-include=PATH/include
55                          plus --with-ust-lib=PATH/lib])
56AC_ARG_WITH(ust_include, [  --with-ust-include=PATH Specify directory for installed UST include files])
57AC_ARG_WITH(ust_lib, [  --with-ust-lib=PATH   Specify the directory for the installed UST library])
58
59case $with_ust in
60  no)
61    ustlibs=
62    ustinc=
63    ;;
64  "" | yes)
65    ustlibs=" -lust "
66    ustinc=""
67    ;;
68  *)
69    ustlibs="-L$with_ust/lib -lust"
70    ustinc="-I$with_ust/include "
71    ;;
72esac
73if test "x$with_ust_include" != x; then
74  ustinc="-I$with_ust_include "
75fi
76if test "x$with_ust_lib" != x; then
77  ustlibs="-L$with_ust_lib -lust"
78fi
79
80if test "x$with_ust" != "xno"; then
81  saved_CFLAGS="$CFLAGS"
82  CFLAGS="$CFLAGS $ustinc"
83  AC_MSG_CHECKING([for ust])
84  AC_TRY_COMPILE([
85#define CONFIG_UST_GDB_INTEGRATION
86#include <ust/ust.h>
87  ],[],
88  [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
89  [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
90  CFLAGS="$saved_CFLAGS"
91fi
92
93# Flags needed for UST
94AC_SUBST(ustlibs)
95AC_SUBST(ustinc)
96
97AC_ARG_ENABLE(werror,
98  AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
99  [case "${enableval}" in
100     yes | y) ERROR_ON_WARNING="yes" ;;
101     no | n)  ERROR_ON_WARNING="no" ;;
102     *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
103   esac])
104
105# Enable -Werror by default when using gcc
106if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
107    ERROR_ON_WARNING=yes
108fi
109
110WERROR_CFLAGS=""
111if test "${ERROR_ON_WARNING}" = yes ; then
112    WERROR_CFLAGS="-Werror"
113fi
114
115build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
116-Wformat-nonliteral -Wno-char-subscripts"
117
118WARN_CFLAGS=""
119if test "x$GCC" = xyes
120then
121    AC_MSG_CHECKING(compiler warning flags)
122    # Separate out the -Werror flag as some files just cannot be
123    # compiled with it enabled.
124    for w in ${build_warnings}; do
125	case $w in
126	-Werr*) WERROR_CFLAGS=-Werror ;;
127	*) # Check that GCC accepts it
128	    saved_CFLAGS="$CFLAGS"
129	    CFLAGS="$CFLAGS $w"
130	    AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
131	    CFLAGS="$saved_CFLAGS"
132	esac
133    done
134    AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
135fi
136AC_SUBST(WARN_CFLAGS)
137AC_SUBST(WERROR_CFLAGS)
138
139dnl dladdr is glibc-specific.  It is used by thread-db.c but only for
140dnl debugging messages.  It lives in -ldl which is handled below so we don't
141dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here.  Instead we just temporarily
142dnl augment LIBS.
143old_LIBS="$LIBS"
144LIBS="$LIBS -ldl"
145AC_CHECK_FUNCS(dladdr)
146LIBS="$old_LIBS"
147
148have_errno=no
149AC_MSG_CHECKING(for errno)
150AC_TRY_LINK([
151#if HAVE_ERRNO_H
152#include <errno.h>
153#endif], [static int x; x = errno;],
154  [AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) have_errno=yes])
155if test $have_errno = no; then
156AC_TRY_LINK([
157#if HAVE_ERRNO_H
158#include <errno.h>
159#endif], [extern int errno; static int x; x = errno;],
160  [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) AC_DEFINE(MUST_DEFINE_ERRNO, 1, [Checking if errno must be defined])],
161  [AC_MSG_RESULT(no)])
162fi
163
164AC_CHECK_DECLS([strerror, perror, memmem, vasprintf, vsnprintf])
165
166AC_CHECK_TYPES(socklen_t, [], [],
167[#include <sys/types.h>
168#include <sys/socket.h>
169])
170
171ACX_PKGVERSION([GDB])
172ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
173AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
174AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
175
176# Check for various supplementary target information (beyond the
177# triplet) which might affect the choices in configure.srv.
178case "${target}" in
179changequote(,)dnl
180  i[34567]86-*-linux*)
181changequote([,])dnl
182    AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
183      	           [save_CPPFLAGS="$CPPFLAGS"
184                    CPPFLAGS="$CPPFLAGS $CFLAGS"
185                    AC_EGREP_CPP([got it], [
186#if __x86_64__
187got it
188#endif
189                 ], [gdb_cv_i386_is_x86_64=yes],
190                    [gdb_cv_i386_is_x86_64=no])
191                    CPPFLAGS="$save_CPPFLAGS"])
192    ;;
193  m68k-*-*)
194    AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
195      	           [save_CPPFLAGS="$CPPFLAGS"
196                    CPPFLAGS="$CPPFLAGS $CFLAGS"
197                    AC_EGREP_CPP([got it], [
198#ifdef __mcoldfire__
199got it
200#endif
201                 ], [gdb_cv_m68k_is_coldfire=yes],
202                    [gdb_cv_m68k_is_coldfire=no])
203                    CPPFLAGS="$save_CPPFLAGS"])
204    ;;
205esac
206
207. ${srcdir}/configure.srv
208
209if test "${srv_mingwce}" = "yes"; then
210  LIBS="$LIBS -lws2"
211elif test "${srv_mingw}" = "yes"; then
212  LIBS="$LIBS -lws2_32"
213elif test "${srv_qnx}" = "yes"; then
214  LIBS="$LIBS -lsocket"
215elif test "${srv_lynxos}" = "yes"; then
216  LIBS="$LIBS -lnetinet"
217fi
218
219if test "${srv_mingw}" = "yes"; then
220  AC_DEFINE(USE_WIN32API, 1,
221	    [Define if we should use the Windows API, instead of the
222	     POSIX API.  On Windows, we use the Windows API when
223	     building for MinGW, but the POSIX API when building
224	     for Cygwin.])
225fi
226
227if test "${srv_linux_usrregs}" = "yes"; then
228  AC_DEFINE(HAVE_LINUX_USRREGS, 1,
229	    [Define if the target supports PTRACE_PEEKUSR for register ]
230	    [access.])
231fi
232
233if test "${srv_linux_regsets}" = "yes"; then
234  AC_DEFINE(HAVE_LINUX_REGSETS, 1,
235	    [Define if the target supports register sets.])
236
237  AC_MSG_CHECKING(for PTRACE_GETREGS)
238  AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
239  [AC_TRY_COMPILE([#include <sys/ptrace.h>],
240		  [PTRACE_GETREGS;],
241		  [gdbsrv_cv_have_ptrace_getregs=yes],
242		  [gdbsrv_cv_have_ptrace_getregs=no])])
243  AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
244  if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
245    AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
246	      [Define if the target supports PTRACE_GETREGS for register ]
247	      [access.])
248  fi
249
250  AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
251  AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
252  [AC_TRY_COMPILE([#include <sys/ptrace.h>],
253		  [PTRACE_GETFPXREGS;],
254		  [gdbsrv_cv_have_ptrace_getfpxregs=yes],
255		  [gdbsrv_cv_have_ptrace_getfpxregs=no])])
256  AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
257  if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
258    AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
259	      [Define if the target supports PTRACE_GETFPXREGS for extended ]
260	      [register access.])
261  fi
262fi
263
264if test "$ac_cv_header_sys_procfs_h" = yes; then
265  BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
266  BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
267  BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
268  BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
269fi
270
271dnl Check for libdl, but do not add it to LIBS as only gdbserver
272dnl needs it (and gdbreplay doesn't).
273old_LIBS="$LIBS"
274AC_CHECK_LIB(dl, dlopen)
275LIBS="$old_LIBS"
276
277srv_thread_depfiles=
278srv_libs=
279USE_THREAD_DB=
280
281if test "$srv_linux_thread_db" = "yes"; then
282  if test "$ac_cv_lib_dl_dlopen" = "yes"; then
283    srv_libs="-ldl"
284    AC_MSG_CHECKING(for the dynamic export flag)
285    old_LDFLAGS="$LDFLAGS"
286    # Older GNU ld supports --export-dynamic but --dynamic-list may not be
287    # supported there.
288    RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
289    LDFLAGS="$LDFLAGS $RDYNAMIC"
290    AC_TRY_LINK([], [],
291		[found="-Wl,--dynamic-list"
292		 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
293		[RDYNAMIC="-rdynamic"
294		 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
295		 AC_TRY_LINK([], [],
296			     [found="-rdynamic"],
297			     [found="no"
298			      RDYNAMIC=""])])
299    AC_SUBST(RDYNAMIC)
300    LDFLAGS="$old_LDFLAGS"
301    AC_MSG_RESULT($found)
302  else
303    srv_libs="-lthread_db"
304  fi
305
306  srv_thread_depfiles="thread-db.o proc-service.o"
307  USE_THREAD_DB="-DUSE_THREAD_DB"
308  AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
309  [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
310		  [gdbsrv_cv_have_td_version=yes],
311		  [gdbsrv_cv_have_td_version=no])])
312  if test $gdbsrv_cv_have_td_version = yes; then
313    AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
314  fi
315fi
316
317AC_ARG_WITH(libthread-db,
318AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
319[srv_libthread_db_path="${withval}"
320  srv_libs="$srv_libthread_db_path"
321])
322
323if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
324  AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
325fi
326
327if test "$srv_xmlfiles" != ""; then
328  srv_xmlbuiltin="xml-builtin.o"
329  AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
330
331  tmp_xmlfiles=$srv_xmlfiles
332  srv_xmlfiles=""
333  for f in $tmp_xmlfiles; do
334    srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
335  done
336fi
337
338GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles"
339GDBSERVER_LIBS="$srv_libs"
340
341dnl Check whether the target supports __sync_*_compare_and_swap.
342AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
343		gdbsrv_cv_have_sync_builtins, [
344AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
345		gdbsrv_cv_have_sync_builtins=yes,
346		gdbsrv_cv_have_sync_builtins=no)])
347if test $gdbsrv_cv_have_sync_builtins = yes; then
348  AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
349    [Define to 1 if the target supports __sync_*_compare_and_swap])
350fi
351
352dnl Check for -fvisibility=hidden support in the compiler.
353saved_cflags="$CFLAGS"
354CFLAGS="$CFLAGS -fvisibility=hidden"
355AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
356		        [gdbsrv_cv_have_visibility_hidden=yes],
357	        	[gdbsrv_cv_have_visibility_hidden=no])
358CFLAGS="$saved_cflags"
359
360
361IPA_DEPFILES=""
362extra_libraries=""
363
364# check whether to enable the inprocess agent
365if test "$ipa_obj" != "" \
366   -a "$gdbsrv_cv_have_sync_builtins" = yes \
367   -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
368   have_ipa=true
369else
370   have_ipa=false
371fi
372
373AC_ARG_ENABLE(inprocess-agent,
374AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
375[case "$enableval" in
376  yes) want_ipa=true ;;
377  no) want_ipa=false ;;
378  *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
379esac],
380[want_ipa=$have_ipa])
381
382if $want_ipa ; then
383   if $have_ipa ; then
384     IPA_DEPFILES="$ipa_obj"
385     extra_libraries="$extra_libraries libinproctrace.so"
386   else
387     AC_MSG_ERROR([inprocess agent not supported for this target])
388   fi
389fi
390
391AC_SUBST(GDBSERVER_DEPFILES)
392AC_SUBST(GDBSERVER_LIBS)
393AC_SUBST(USE_THREAD_DB)
394AC_SUBST(srv_xmlbuiltin)
395AC_SUBST(srv_xmlfiles)
396AC_SUBST(IPA_DEPFILES)
397AC_SUBST(extra_libraries)
398
399AC_OUTPUT(Makefile,
400[case x$CONFIG_HEADERS in
401xconfig.h:config.in)
402echo > stamp-h ;;
403esac
404])
405