Automatic date update in version.in
[binutils-gdb.git] / gdbsupport / common.m4
blobd89c3aed0fe1e76a7fb11b59855e437ef97353f0
1 dnl Autoconf configure snippets for common.
2 dnl Copyright (C) 1995-2024 Free Software Foundation, Inc.
3 dnl
4 dnl This file is part of GDB.
5 dnl 
6 dnl This program is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or
9 dnl (at your option) any later version.
10 dnl
11 dnl This program is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 dnl GNU General Public License for more details.
15 dnl
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 dnl Invoke configury needed by the files in 'common'.
20 AC_DEFUN([GDB_AC_COMMON], [
21   # Set the 'development' global.
22   . $srcdir/../bfd/development.sh
24   AC_HEADER_STDC
25   AC_FUNC_ALLOCA
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
39   dnl Note that this requires codeset.m4, which is included
40   dnl by the users of common.m4.
41   AM_LANGINFO_CODESET
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)
52   AC_FUNC_MMAP
53   AC_FUNC_FORK
54   # Some systems (e.g. Solaris) have `socketpair' in libsocket.
55   AC_SEARCH_LIBS(socketpair, socket)
56   AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 poll socketpair sigaction \
57                   ptrace64 sbrk setns sigaltstack sigprocmask \
58                   setpgid setpgrp getrusage getauxval sigtimedwait])
60   # This is needed for RHEL 5 and uclibc-ng < 1.0.39.
61   # These did not define ADDR_NO_RANDOMIZE in sys/personality.h,
62   # only in linux/personality.h.
63   AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
65   AC_CHECK_DECLS([strstr])
67   # ----------------------- #
68   # Checks for structures.  #
69   # ----------------------- #
71   AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
73   # On FreeBSD we need libutil for the kinfo_get* functions.  On
74   # GNU/kFreeBSD systems, FreeBSD libutil is renamed to libutil-freebsd.
75   # Figure out which one to use.
76   AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd)
78   # Define HAVE_KINFO_GETFILE if kinfo_getfile is available.
79   AC_CHECK_FUNCS(kinfo_getfile)
81   # ----------------------- #
82   # Check for threading.    #
83   # ----------------------- #
85   AC_ARG_ENABLE(threading,
86     AS_HELP_STRING([--enable-threading], [include support for parallel processing of data (yes/no)]),
87     [case "$enableval" in
88     yes) want_threading=yes ;;
89     no) want_threading=no ;;
90     *) AC_MSG_ERROR([bad value $enableval for threading]) ;;
91     esac],
92     [want_threading=auto])
94   # Check for std::thread.  This does not work on some platforms, like
95   # mingw using the win32 threads model with gcc older than 13, and
96   # DJGPP.
97   AC_LANG_PUSH([C++])
98   AX_PTHREAD([threads=yes], [threads=no])
99   save_LIBS="$LIBS"
100   LIBS="$PTHREAD_LIBS $LIBS"
101   save_CXXFLAGS="$CXXFLAGS"
102   CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
103   AC_CACHE_CHECK([for std::thread],
104                  gdb_cv_cxx_std_thread,
105                  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
106   dnl NOTE: this must be kept in sync with common-defs.h.
107   [[#if defined (__MINGW32__) || defined (__CYGWIN__)
108     # ifdef _WIN32_WINNT
109     #  if _WIN32_WINNT < 0x0501
110     #   undef _WIN32_WINNT
111     #   define _WIN32_WINNT 0x0501
112     #  endif
113     # else
114     #  define _WIN32_WINNT 0x0501
115     # endif
116     #endif      /* __MINGW32__ || __CYGWIN__ */
117     #include <thread>
118     #include <mutex>
119     void callback() { }]],
120   [[std::thread t(callback);]])],
121                                 gdb_cv_cxx_std_thread=yes,
122                                 gdb_cv_cxx_std_thread=no)])
124   if test "$threads" = "yes"; then
125     # This check must be here, while LIBS includes any necessary
126     # threading library.
127     AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
128   fi
129   LIBS="$save_LIBS"
130   CXXFLAGS="$save_CXXFLAGS"
132   if test "$want_threading" != "no"; then
133     if test "$gdb_cv_cxx_std_thread" = "yes"; then
134       AC_DEFINE(CXX_STD_THREAD, 1,
135                 [Define to 1 if std::thread works.])
136     else
137         if test "$want_threading" = "yes"; then
138             AC_MSG_ERROR([std::thread does not work; disable threading])
139         else
140             AC_MSG_WARN([std::thread does not work; disabling threading])
141         fi
142     fi
143   fi
144   AC_LANG_POP
146   dnl Check if sigsetjmp is available.  Using AC_CHECK_FUNCS won't
147   dnl do since sigsetjmp might only be defined as a macro.
148   AC_CACHE_CHECK(
149     [for sigsetjmp],
150     [gdb_cv_func_sigsetjmp],
151     [AC_COMPILE_IFELSE(
152        [AC_LANG_PROGRAM(
153           [#include <setjmp.h>],
154           [sigjmp_buf env;
155            while (! sigsetjmp (env, 1))
156              siglongjmp (env, 1);]
157         )],
158        [gdb_cv_func_sigsetjmp=yes],
159        [gdb_cv_func_sigsetjmp=no]
160      )]
161   )
162   if test "$gdb_cv_func_sigsetjmp" = "yes"; then
163     AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
164   fi
166   AC_ARG_WITH(intel_pt,
167     AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]),
168     [], [with_intel_pt=auto])
169   AC_MSG_CHECKING([whether to use intel pt])
170   AC_MSG_RESULT([$with_intel_pt])
172   if test "${with_intel_pt}" = no; then
173     AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.])
174     HAVE_LIBIPT=no
175   else
176     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
177   #include <linux/perf_event.h>
178   #ifndef PERF_ATTR_SIZE_VER5
179   # error
180   #endif
181     ]])], [perf_event=yes], [perf_event=no])
182     if test "$perf_event" != yes; then
183       if test "$with_intel_pt" = yes; then
184         AC_MSG_ERROR([linux/perf_event.h missing or too old])
185       else
186         AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.])
187       fi
188     fi
190     AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);])
191     if test "$HAVE_LIBIPT" != yes; then
192       if test "$with_intel_pt" = yes; then
193         AC_MSG_ERROR([libipt is missing or unusable])
194       else
195         AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.])
196       fi
197     else
198       save_LIBS=$LIBS
199       LIBS="$LIBS $LIBIPT"
200       AC_CHECK_FUNCS(pt_insn_event)
201       AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [],
202                        [#include <intel-pt.h>])
203       AC_CHECK_MEMBERS([struct pt_event.variant.ptwrite], [], [],
204                        [#include <intel-pt.h>])
205       LIBS=$save_LIBS
206     fi
207   fi
209   # Check if the compiler and runtime support printing long longs.
211   AC_CACHE_CHECK([for long long support in printf],
212                  gdb_cv_printf_has_long_long,
213                  [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
214   [[char buf[32];
215     long long l = 0;
216     l = (l << 16) + 0x0123;
217     l = (l << 16) + 0x4567;
218     l = (l << 16) + 0x89ab;
219     l = (l << 16) + 0xcdef;
220     sprintf (buf, "0x%016llx", l);
221     return (strcmp ("0x0123456789abcdef", buf));]])],
222                                 gdb_cv_printf_has_long_long=yes,
223                                 gdb_cv_printf_has_long_long=no,
224                                 gdb_cv_printf_has_long_long=no)])
225   if test "$gdb_cv_printf_has_long_long" = yes; then
226     AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
227               [Define to 1 if the "%ll" format works to print long longs.])
228   fi
230   BFD_SYS_PROCFS_H
231   if test "$ac_cv_header_sys_procfs_h" = yes; then
232     BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
233     BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t)
234     BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
235     BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
236     BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
237     BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
238     BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
239     BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
240   fi
242   dnl xxhash support
243   # Check for xxhash
244   AC_ARG_WITH(xxhash,
245     AS_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
246     [], [with_xxhash=auto])
248   if test "x$with_xxhash" != "xno"; then
249     AC_LIB_HAVE_LINKFLAGS([xxhash], [],
250                           [#include <xxhash.h>],
251                           [XXH32("foo", 3, 0);
252                           ])
253     if test "$HAVE_LIBXXHASH" != yes; then
254       if test "$with_xxhash" = yes; then
255         AC_MSG_ERROR([xxhash is missing or unusable])
256       fi
257     fi
258     if test "x$with_xxhash" = "xauto"; then
259       with_xxhash="$HAVE_LIBXXHASH"
260     fi
261   fi
263   AC_MSG_CHECKING([whether to use xxhash])
264   AC_MSG_RESULT([$with_xxhash])
267 dnl Check that the provided value ($1) is either "yes" or "no".  If not,
268 dnl emit an error message mentionning the configure option $2, and abort
269 dnl the script.
270 AC_DEFUN([GDB_CHECK_YES_NO_VAL],
271          [
272            case $1 in
273              yes | no)
274                ;;
275              *)
276                AC_MSG_ERROR([bad value $1 for $2])
277                ;;
278            esac
279           ])
281 dnl Check that the provided value ($1) is either "yes", "no" or "auto".  If not,
282 dnl emit an error message mentionning the configure option $2, and abort
283 dnl the script.
284 AC_DEFUN([GDB_CHECK_YES_NO_AUTO_VAL],
285          [
286            case $1 in
287              yes | no | auto)
288                ;;
289              *)
290                AC_MSG_ERROR([bad value $1 for $2])
291                ;;
292            esac
293           ])