Update release-README after completing the 2.43 release.
[binutils-gdb.git] / gdbsupport / common.m4
blob6c317ff2450387fe43c070fe983db241acaa38cd
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       LIBS=$save_LIBS
204     fi
205   fi
207   # Check if the compiler and runtime support printing long longs.
209   AC_CACHE_CHECK([for long long support in printf],
210                  gdb_cv_printf_has_long_long,
211                  [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
212   [[char buf[32];
213     long long l = 0;
214     l = (l << 16) + 0x0123;
215     l = (l << 16) + 0x4567;
216     l = (l << 16) + 0x89ab;
217     l = (l << 16) + 0xcdef;
218     sprintf (buf, "0x%016llx", l);
219     return (strcmp ("0x0123456789abcdef", buf));]])],
220                                 gdb_cv_printf_has_long_long=yes,
221                                 gdb_cv_printf_has_long_long=no,
222                                 gdb_cv_printf_has_long_long=no)])
223   if test "$gdb_cv_printf_has_long_long" = yes; then
224     AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
225               [Define to 1 if the "%ll" format works to print long longs.])
226   fi
228   BFD_SYS_PROCFS_H
229   if test "$ac_cv_header_sys_procfs_h" = yes; then
230     BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
231     BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t)
232     BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
233     BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
234     BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
235     BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
236     BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
237     BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
238   fi
240   dnl xxhash support
241   # Check for xxhash
242   AC_ARG_WITH(xxhash,
243     AS_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]),
244     [], [with_xxhash=auto])
246   if test "x$with_xxhash" != "xno"; then
247     AC_LIB_HAVE_LINKFLAGS([xxhash], [],
248                           [#include <xxhash.h>],
249                           [XXH32("foo", 3, 0);
250                           ])
251     if test "$HAVE_LIBXXHASH" != yes; then
252       if test "$with_xxhash" = yes; then
253         AC_MSG_ERROR([xxhash is missing or unusable])
254       fi
255     fi
256     if test "x$with_xxhash" = "xauto"; then
257       with_xxhash="$HAVE_LIBXXHASH"
258     fi
259   fi
261   AC_MSG_CHECKING([whether to use xxhash])
262   AC_MSG_RESULT([$with_xxhash])
265 dnl Check that the provided value ($1) is either "yes" or "no".  If not,
266 dnl emit an error message mentionning the configure option $2, and abort
267 dnl the script.
268 AC_DEFUN([GDB_CHECK_YES_NO_VAL],
269          [
270            case $1 in
271              yes | no)
272                ;;
273              *)
274                AC_MSG_ERROR([bad value $1 for $2])
275                ;;
276            esac
277           ])
279 dnl Check that the provided value ($1) is either "yes", "no" or "auto".  If not,
280 dnl emit an error message mentionning the configure option $2, and abort
281 dnl the script.
282 AC_DEFUN([GDB_CHECK_YES_NO_AUTO_VAL],
283          [
284            case $1 in
285              yes | no | auto)
286                ;;
287              *)
288                AC_MSG_ERROR([bad value $1 for $2])
289                ;;
290            esac
291           ])