xref: /netbsd-src/external/gpl3/gdb/dist/gdbsupport/common.m4 (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1dnl Autoconf configure snippets for common.
2dnl Copyright (C) 1995-2023 Free Software Foundation, Inc.
3dnl
4dnl This file is part of GDB.
5dnl
6dnl This program is free software; you can redistribute it and/or modify
7dnl it under the terms of the GNU General Public License as published by
8dnl the Free Software Foundation; either version 3 of the License, or
9dnl (at your option) any later version.
10dnl
11dnl This program is distributed in the hope that it will be useful,
12dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14dnl GNU General Public License for more details.
15dnl
16dnl You should have received a copy of the GNU General Public License
17dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19dnl Invoke configury needed by the files in 'common'.
20AC_DEFUN([GDB_AC_COMMON], [
21  # Set the 'development' global.
22  . $srcdir/../bfd/development.sh
23
24  AC_HEADER_STDC
25  AC_FUNC_ALLOCA
26
27  WIN32APILIBS=
28  case ${host} in
29    *mingw32*)
30      AC_DEFINE(USE_WIN32API, 1,
31		[Define if we should use the Windows API, instead of the
32		 POSIX API.  On Windows, we use the Windows API when
33		 building for MinGW, but the POSIX API when building
34		 for Cygwin.])
35      WIN32APILIBS="-lws2_32"
36      ;;
37  esac
38
39  dnl Note that this requires codeset.m4, which is included
40  dnl by the users of common.m4.
41  AM_LANGINFO_CODESET
42
43  AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl
44		   sys/resource.h sys/socket.h dnl
45		   sys/un.h sys/wait.h dnl
46		   thread_db.h wait.h dnl
47		   termios.h dnl
48		   dlfcn.h dnl
49		   linux/elf.h proc_service.h dnl
50		   poll.h sys/poll.h sys/select.h)
51
52  AC_FUNC_MMAP
53  AC_FUNC_FORK
54  AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 poll socketpair sigaction \
55		  ptrace64 sbrk setns sigaltstack sigprocmask \
56		  setpgid setpgrp getrusage getauxval sigtimedwait])
57
58  # This is needed for RHEL 5 and uclibc-ng < 1.0.39.
59  # These did not define ADDR_NO_RANDOMIZE in sys/personality.h,
60  # only in linux/personality.h.
61  AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
62
63  AC_CHECK_DECLS([strstr])
64
65  # ----------------------- #
66  # Checks for structures.  #
67  # ----------------------- #
68
69  AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
70
71  # On FreeBSD we need libutil for the kinfo_get* functions.  On
72  # GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd.
73  # Figure out which one to use.
74  AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd)
75
76  # Define HAVE_KINFO_GETFILE if kinfo_getfile is available.
77  AC_CHECK_FUNCS(kinfo_getfile)
78
79  # ----------------------- #
80  # Check for threading.    #
81  # ----------------------- #
82
83  AC_ARG_ENABLE(threading,
84    AS_HELP_STRING([--enable-threading], [include support for parallel processing of data (yes/no)]),
85    [case "$enableval" in
86    yes) want_threading=yes ;;
87    no) want_threading=no ;;
88    *) AC_MSG_ERROR([bad value $enableval for threading]) ;;
89    esac],
90    [want_threading=yes])
91
92  # Check for std::thread.  This does not work on some platforms, like
93  # mingw and DJGPP.
94  AC_LANG_PUSH([C++])
95  AX_PTHREAD([threads=yes], [threads=no])
96  save_LIBS="$LIBS"
97  LIBS="$PTHREAD_LIBS $LIBS"
98  save_CXXFLAGS="$CXXFLAGS"
99  CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
100  AC_CACHE_CHECK([for std::thread],
101		 gdb_cv_cxx_std_thread,
102		 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
103  dnl NOTE: this must be kept in sync with common-defs.h.
104  [[#if defined (__MINGW32__) || defined (__CYGWIN__)
105    # ifdef _WIN32_WINNT
106    #  if _WIN32_WINNT < 0x0501
107    #   undef _WIN32_WINNT
108    #   define _WIN32_WINNT 0x0501
109    #  endif
110    # else
111    #  define _WIN32_WINNT 0x0501
112    # endif
113    #endif	/* __MINGW32__ || __CYGWIN__ */
114    #include <thread>
115    void callback() { }]],
116  [[std::thread t(callback);]])],
117				gdb_cv_cxx_std_thread=yes,
118				gdb_cv_cxx_std_thread=no)])
119
120  if test "$threads" = "yes"; then
121    # This check must be here, while LIBS includes any necessary
122    # threading library.
123    AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
124  fi
125  LIBS="$save_LIBS"
126  CXXFLAGS="$save_CXXFLAGS"
127
128  if test "$want_threading" = "yes"; then
129    if test "$gdb_cv_cxx_std_thread" = "yes"; then
130      AC_DEFINE(CXX_STD_THREAD, 1,
131		[Define to 1 if std::thread works.])
132    fi
133  fi
134  AC_LANG_POP
135
136  dnl Check if sigsetjmp is available.  Using AC_CHECK_FUNCS won't
137  dnl do since sigsetjmp might only be defined as a macro.
138  AC_CACHE_CHECK(
139    [for sigsetjmp],
140    [gdb_cv_func_sigsetjmp],
141    [AC_COMPILE_IFELSE(
142       [AC_LANG_PROGRAM(
143          [#include <setjmp.h>],
144          [sigjmp_buf env;
145           while (! sigsetjmp (env, 1))
146             siglongjmp (env, 1);]
147        )],
148       [gdb_cv_func_sigsetjmp=yes],
149       [gdb_cv_func_sigsetjmp=no]
150     )]
151  )
152  if test "$gdb_cv_func_sigsetjmp" = "yes"; then
153    AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
154  fi
155
156  AC_ARG_WITH(intel_pt,
157    AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]),
158    [], [with_intel_pt=auto])
159  AC_MSG_CHECKING([whether to use intel pt])
160  AC_MSG_RESULT([$with_intel_pt])
161
162  if test "${with_intel_pt}" = no; then
163    AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.])
164    HAVE_LIBIPT=no
165  else
166    AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
167  #include <linux/perf_event.h>
168  #ifndef PERF_ATTR_SIZE_VER5
169  # error
170  #endif
171    ]])], [perf_event=yes], [perf_event=no])
172    if test "$perf_event" != yes; then
173      if test "$with_intel_pt" = yes; then
174	AC_MSG_ERROR([linux/perf_event.h missing or too old])
175      else
176	AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.])
177      fi
178    fi
179
180    AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);])
181    if test "$HAVE_LIBIPT" != yes; then
182      if test "$with_intel_pt" = yes; then
183	AC_MSG_ERROR([libipt is missing or unusable])
184      else
185	AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.])
186      fi
187    else
188      save_LIBS=$LIBS
189      LIBS="$LIBS $LIBIPT"
190      AC_CHECK_FUNCS(pt_insn_event)
191      AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [],
192		       [#include <intel-pt.h>])
193      LIBS=$save_LIBS
194    fi
195  fi
196
197  # Check if the compiler and runtime support printing long longs.
198
199  AC_CACHE_CHECK([for long long support in printf],
200		 gdb_cv_printf_has_long_long,
201		 [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
202  [[char buf[32];
203    long long l = 0;
204    l = (l << 16) + 0x0123;
205    l = (l << 16) + 0x4567;
206    l = (l << 16) + 0x89ab;
207    l = (l << 16) + 0xcdef;
208    sprintf (buf, "0x%016llx", l);
209    return (strcmp ("0x0123456789abcdef", buf));]])],
210				gdb_cv_printf_has_long_long=yes,
211				gdb_cv_printf_has_long_long=no,
212				gdb_cv_printf_has_long_long=no)])
213  if test "$gdb_cv_printf_has_long_long" = yes; then
214    AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
215	      [Define to 1 if the "%ll" format works to print long longs.])
216  fi
217
218  BFD_SYS_PROCFS_H
219  if test "$ac_cv_header_sys_procfs_h" = yes; then
220    BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
221    BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t)
222    BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
223    BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
224    BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
225    BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
226    BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
227    BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
228  fi
229])
230
231dnl Check that the provided value ($1) is either "yes" or "no".  If not,
232dnl emit an error message mentionning the configure option $2, and abort
233dnl the script.
234AC_DEFUN([GDB_CHECK_YES_NO_VAL],
235	 [
236	   case $1 in
237	     yes | no)
238	       ;;
239	     *)
240	       AC_MSG_ERROR([bad value $1 for $2])
241	       ;;
242	   esac
243	  ])
244
245dnl Check that the provided value ($1) is either "yes", "no" or "auto".  If not,
246dnl emit an error message mentionning the configure option $2, and abort
247dnl the script.
248AC_DEFUN([GDB_CHECK_YES_NO_AUTO_VAL],
249	 [
250	   case $1 in
251	     yes | no | auto)
252	       ;;
253	     *)
254	       AC_MSG_ERROR([bad value $1 for $2])
255	       ;;
256	   esac
257	  ])
258