• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1define(pkg_major, 1)
2define(pkg_minor, 6)
3define(pkg_extra, -rc1)
4define(pkg_maintainer, libunwind-devel@nongnu.org)
5define(mkvers, $1.$2$3)
6dnl Process this file with autoconf to produce a configure script.
7AC_INIT([libunwind],[mkvers(pkg_major, pkg_minor, pkg_extra)],[pkg_maintainer])
8AC_CONFIG_SRCDIR(src/mi/backtrace.c)
9AC_CONFIG_AUX_DIR(config)
10AC_CANONICAL_TARGET
11AM_INIT_AUTOMAKE([1.6 subdir-objects])
12AM_MAINTAINER_MODE
13AC_CONFIG_HEADERS([include/config.h])
14
15dnl Checks for programs.
16AC_PROG_CC
17AC_PROG_CXX
18AC_PROG_INSTALL
19AC_PROG_MAKE_SET
20m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
21LT_INIT
22AM_PROG_AS
23AM_PROG_CC_C_O
24
25dnl Checks for libraries.
26AC_CHECK_LIB(uca, __uc_get_grs)
27OLD_LIBS=${LIBS}
28AC_SEARCH_LIBS(dlopen, dl)
29LIBS=${OLD_LIBS}
30case "$ac_cv_search_dlopen" in
31  -l*) DLLIB=$ac_cv_search_dlopen;;
32  *) DLLIB="";;
33esac
34
35dnl Checks for header files.
36AC_HEADER_STDC
37AC_CHECK_HEADERS(asm/ptrace_offsets.h asm/ptrace.h endian.h sys/endian.h sys/param.h \
38		execinfo.h ia64intrin.h sys/uc_access.h unistd.h signal.h sys/types.h \
39		sys/procfs.h sys/ptrace.h sys/syscall.h byteswap.h elf.h sys/elf.h \
40		link.h sys/link.h)
41
42dnl Checks for typedefs, structures, and compiler characteristics.
43AC_C_CONST
44AC_C_INLINE
45AC_TYPE_SIZE_T
46AC_CHECK_SIZEOF(off_t)
47
48CPPFLAGS="${CPPFLAGS} -D_GNU_SOURCE"
49
50AC_CHECK_MEMBERS([struct dl_phdr_info.dlpi_subs],,,[#include <link.h>])
51AC_CHECK_TYPES([struct elf_prstatus, struct prstatus], [], [],
52[$ac_includes_default
53#if HAVE_SYS_PROCFS_H
54# include <sys/procfs.h>
55#endif
56])
57
58AC_CHECK_DECLS([PTRACE_POKEUSER, PTRACE_POKEDATA, PTRACE_SETREGSET,
59PTRACE_TRACEME, PTRACE_CONT, PTRACE_SINGLESTEP,
60PTRACE_SYSCALL, PT_IO, PT_GETREGS,
61PT_GETFPREGS, PT_CONTINUE, PT_TRACE_ME,
62PT_STEP, PT_SYSCALL], [], [],
63[$ac_includes_default
64#if HAVE_SYS_TYPES_H
65#include <sys/types.h>
66#endif
67#include <sys/ptrace.h>
68])
69
70dnl Checks for library functions.
71AC_CHECK_FUNCS(dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \
72		ttrace mincore pipe2)
73
74AC_MSG_CHECKING([if building with AltiVec])
75AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
76#ifndef __ALTIVEC__
77# error choke
78#endif
79]])], [use_altivec=yes],[use_altivec=no])
80AM_CONDITIONAL(USE_ALTIVEC, [test x$use_altivec = xyes])
81AC_MSG_RESULT([$use_altivec])
82
83AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
84#ifndef __powerpc64__
85# error choke
86#endif
87]])], [ppc_bits=64], [ppc_bits=32])
88
89AC_DEFUN([SET_ARCH],[
90    AS_CASE([$1],
91        [aarch64*],[$2=aarch64],
92        [arm*],[$2=arm],
93        [i?86],[$2=x86],
94        [hppa*],[$2=hppa],
95        [mips*],[$2=mips],
96        [powerpc*],[$2=ppc$ppc_bits],
97        [sh*],[$2=sh],
98        [amd64],[$2=x86_64],
99        [tile*],[$2=tilegx],
100        [riscv*],[$2=riscv],
101        [$2=$1])
102]) dnl SET_ARCH
103
104SET_ARCH([$build_cpu],[build_arch])
105SET_ARCH([$host_cpu],[host_arch])
106SET_ARCH([$target_cpu],[target_arch])
107
108# Check for Android
109AC_MSG_CHECKING([for Android])
110android="no"
111case "$host_os" in
112  *android*)
113    android="yes"
114    AC_MSG_RESULT([yes])
115    ;;
116  *)
117    AC_MSG_RESULT([no])
118    ;;
119esac
120
121AC_ARG_ENABLE(coredump,
122	AS_HELP_STRING([--enable-coredump],[building libunwind-coredump library]),,
123        [AS_CASE([$host_arch], [aarch64*|arm*|mips*|sh*|x86*|tile*|riscv*], [enable_coredump=yes], [enable_coredump=no])]
124)
125
126AC_MSG_CHECKING([if we should build libunwind-coredump])
127AC_MSG_RESULT([$enable_coredump])
128
129AC_ARG_ENABLE(ptrace,
130	AS_HELP_STRING([--enable-ptrace],[building libunwind-ptrace library]),,
131        [AC_CHECK_HEADER([sys/ptrace.h], [enable_ptrace=yes], [enable_ptrace=no])]
132)
133
134AC_MSG_CHECKING([if we should build libunwind-ptrace])
135AC_MSG_RESULT([$enable_ptrace])
136
137AC_ARG_ENABLE(setjmp,
138	AS_HELP_STRING([--enable-setjmp],[building libunwind-setjmp library]),,
139        [AS_IF([test x$target_arch == x$host_arch], [enable_setjmp=yes], [enable_setjmp=no])]
140)
141
142AC_ARG_ENABLE(documentation,
143	AS_HELP_STRING([--disable-documentation],[Disable generating the man pages]),,
144	[enable_documentation=yes])
145
146AC_ARG_ENABLE(tests,
147 AS_HELP_STRING([--disable-tests],[Disable tests build]),,
148 [enable_tests=yes])
149
150AC_ARG_ENABLE(weak-backtrace,
151 AS_HELP_STRING([--disable-weak-backtrace],[Do not provide the weak 'backtrace' symbol.]),,
152 [enable_weak_backtrace=yes])
153
154AC_ARG_ENABLE(unwind-header,
155 AS_HELP_STRING([--disable-unwind-header],[Do not export the 'unwind.h' header]),,
156 [enable_unwind_header=yes])
157
158AC_MSG_CHECKING([if we should export unwind.h])
159AC_MSG_RESULT([$enable_unwind_header])
160
161AC_MSG_CHECKING([if we should build libunwind-setjmp])
162AC_MSG_RESULT([$enable_setjmp])
163
164AC_MSG_CHECKING([for build architecture])
165AC_MSG_RESULT([$build_arch])
166AC_MSG_CHECKING([for host architecture])
167AC_MSG_RESULT([$host_arch])
168AC_MSG_CHECKING([for target architecture])
169AC_MSG_RESULT([$target_arch])
170AC_MSG_CHECKING([for target operating system])
171AC_MSG_RESULT([$target_os])
172
173AM_CONDITIONAL(BUILD_COREDUMP, test x$enable_coredump = xyes)
174AM_CONDITIONAL(BUILD_PTRACE, test x$enable_ptrace = xyes)
175AM_CONDITIONAL(BUILD_SETJMP, test x$enable_setjmp = xyes)
176AM_CONDITIONAL(BUILD_UNWIND_HEADER, test "x$enable_unwind_header" = xyes)
177AM_CONDITIONAL(NO_PTRACE_TEST, test x$build_arch != x$host_arch)
178AM_CONDITIONAL(REMOTE_ONLY, test x$target_arch != x$host_arch)
179AM_CONDITIONAL(ARCH_AARCH64, test x$target_arch = xaarch64)
180AM_CONDITIONAL(ARCH_ARM, test x$target_arch = xarm)
181AM_CONDITIONAL(ARCH_IA64, test x$target_arch = xia64)
182AM_CONDITIONAL(ARCH_HPPA, test x$target_arch = xhppa)
183AM_CONDITIONAL(ARCH_MIPS, test x$target_arch = xmips)
184AM_CONDITIONAL(ARCH_X86, test x$target_arch = xx86)
185AM_CONDITIONAL(ARCH_X86_64, test x$target_arch = xx86_64)
186AM_CONDITIONAL(ARCH_PPC32, test x$target_arch = xppc32)
187AM_CONDITIONAL(ARCH_PPC64, test x$target_arch = xppc64)
188AM_CONDITIONAL(ARCH_SH, test x$target_arch = xsh)
189AM_CONDITIONAL(ARCH_TILEGX, test x$target_arch = xtilegx)
190AM_CONDITIONAL(ARCH_S390X, test x$target_arch = xs390x)
191AM_CONDITIONAL(ARCH_RISCV, test x$target_arch = xriscv)
192AM_CONDITIONAL(OS_LINUX, expr x$target_os : xlinux >/dev/null)
193AM_CONDITIONAL(OS_HPUX, expr x$target_os : xhpux >/dev/null)
194AM_CONDITIONAL(OS_FREEBSD, expr x$target_os : xfreebsd >/dev/null)
195AM_CONDITIONAL(OS_QNX, expr x$target_os : xnto-qnx >/dev/null)
196AM_CONDITIONAL(OS_SOLARIS, expr x$target_os : xsolaris >/dev/null)
197
198AC_MSG_CHECKING([for ELF helper width])
199case "${target_arch}" in
200(arm|hppa|ppc32|x86|sh) use_elf32=yes; AC_MSG_RESULT([32]);;
201(aarch64|ia64|ppc64|x86_64|s390x|tilegx)  use_elf64=yes; AC_MSG_RESULT([64]);;
202(mips|riscv)                 use_elfxx=yes; AC_MSG_RESULT([xx]);;
203*)                     AC_MSG_ERROR([Unknown ELF target: ${target_arch}])
204esac
205AM_CONDITIONAL(USE_ELF32, [test x$use_elf32 = xyes])
206AM_CONDITIONAL(USE_ELF64, [test x$use_elf64 = xyes])
207AM_CONDITIONAL(USE_ELFXX, [test x$use_elfxx = xyes])
208
209AC_MSG_CHECKING([whether to include DWARF support])
210if test x$target_arch != xia64; then
211  use_dwarf=yes
212else
213  use_dwarf=no
214fi
215AM_CONDITIONAL(USE_DWARF, [test x$use_dwarf = xyes])
216AC_MSG_RESULT([$use_dwarf])
217
218AC_MSG_CHECKING([whether to restrict build to remote support])
219if test x$target_arch != x$host_arch; then
220  CPPFLAGS="${CPPFLAGS} -DUNW_REMOTE_ONLY"
221  remote_only=yes
222else
223  remote_only=no
224fi
225AC_MSG_RESULT([$remote_only])
226
227AC_MSG_CHECKING([whether to enable debug support])
228AC_ARG_ENABLE(debug,
229AS_HELP_STRING([--enable-debug],[turn on debug support (slows down execution)]))
230if test x$enable_debug = xyes; then
231  CPPFLAGS="${CPPFLAGS} -DDEBUG"
232else
233  CPPFLAGS="${CPPFLAGS} -DNDEBUG"
234fi
235AC_MSG_RESULT([$enable_debug])
236
237AC_MSG_CHECKING([whether to enable C++ exception support])
238AC_ARG_ENABLE(cxx_exceptions,
239AS_HELP_STRING([--enable-cxx-exceptions],[use libunwind to handle C++ exceptions]),,
240[
241# C++ exception handling doesn't work too well on x86
242case $target_arch in
243  x86*) enable_cxx_exceptions=no;;
244  aarch64*) enable_cxx_exceptions=no;;
245  arm*) enable_cxx_exceptions=no;;
246  mips*) enable_cxx_exceptions=no;;
247  tile*) enable_cxx_exceptions=no;;
248  s390x*) enable_cxx_exceptions=no;;
249  *) enable_cxx_exceptions=yes;;
250esac
251])
252
253AM_CONDITIONAL([SUPPORT_CXX_EXCEPTIONS], [test x$enable_cxx_exceptions = xyes])
254AC_MSG_RESULT([$enable_cxx_exceptions])
255
256AC_MSG_CHECKING([whether to load .debug_frame sections])
257AC_ARG_ENABLE(debug_frame,
258AS_HELP_STRING([--enable-debug-frame],[Load the ".debug_frame" section if available]),, [
259case "${target_arch}" in
260  (arm) enable_debug_frame=yes;;
261  (aarch64) enable_debug_frame=yes;;
262  (*)   enable_debug_frame=no;;
263esac])
264if test x$remote_only == xyes; then
265  enable_debug_frame=no
266fi
267if test x$enable_debug_frame = xyes; then
268  AC_DEFINE([CONFIG_DEBUG_FRAME], [], [Enable Debug Frame])
269fi
270AC_MSG_RESULT([$enable_debug_frame])
271
272AC_MSG_CHECKING([whether to block signals during mutex ops])
273AC_ARG_ENABLE(block_signals,
274AS_HELP_STRING([--enable-block-signals],[Block signals before performing mutex operations]),,
275[enable_block_signals=yes])
276if test x$enable_block_signals = xyes; then
277  AC_DEFINE([CONFIG_BLOCK_SIGNALS], [], [Block signals before mutex operations])
278fi
279AC_MSG_RESULT([$enable_block_signals])
280
281AC_MSG_CHECKING([whether to validate memory addresses before use])
282AC_ARG_ENABLE(conservative_checks,
283AS_HELP_STRING([--enable-conservative-checks],[Validate all memory addresses before use]),,
284[enable_conservative_checks=yes])
285if test x$enable_conservative_checks = xyes; then
286  AC_DEFINE(CONSERVATIVE_CHECKS, 1,
287	[Define to 1 if you want every memory access validated])
288fi
289AC_MSG_RESULT([$enable_conservative_checks])
290
291AC_MSG_CHECKING([whether to enable msabi support])
292AC_ARG_ENABLE(msabi_support,
293AS_HELP_STRING([--enable-msabi-support],[Enables support for Microsoft ABI extensions]))
294if test x$enable_msabi_support = xyes; then
295  AC_DEFINE([CONFIG_MSABI_SUPPORT], [], [Support for Microsoft ABI extensions])
296fi
297AC_MSG_RESULT([$enable_msabi_support])
298
299LIBLZMA=
300AC_MSG_CHECKING([whether to support LZMA-compressed symbol tables])
301AC_ARG_ENABLE(minidebuginfo,
302AS_HELP_STRING([--enable-minidebuginfo], [Enables support for LZMA-compressed symbol tables]),, [enable_minidebuginfo=auto])
303AC_MSG_RESULT([$enable_minidebuginfo])
304if test x$enable_minidebuginfo != xno; then
305   AC_CHECK_LIB([lzma], [lzma_mf_is_supported],
306   [LIBLZMA=-llzma
307    AC_DEFINE([HAVE_LZMA], [1], [Define if you have liblzma])
308    enable_minidebuginfo=yes],
309   [if test x$enable_minidebuginfo = xyes; then
310      AC_MSG_FAILURE([liblzma not found])
311    fi])
312fi
313AC_SUBST([LIBLZMA])
314AM_CONDITIONAL(HAVE_LZMA, test x$enable_minidebuginfo = xyes)
315
316LIBZ=
317AC_MSG_CHECKING([whether to support ZLIB-compressed symbol tables])
318AC_ARG_ENABLE(zlibdebuginfo,
319AS_HELP_STRING([--enable-zlibdebuginfo], [Enables support for ZLIB-compressed symbol tables]),, [enable_zlibdebuginfo=auto])
320AC_MSG_RESULT([$enable_zlibdebuginfo])
321if test x$enable_zlibdebuginfo != xno; then
322   AC_CHECK_LIB([z], [uncompress],
323   [LIBZ=-lz
324    AC_DEFINE([HAVE_ZLIB], [1], [Define if you have libz])
325    enable_zlibdebuginfo=yes],
326   [if test x$enable_zlibdebuginfo = xyes; then
327      AC_MSG_FAILURE([libz not found])
328    fi])
329fi
330AC_SUBST([LIBZ])
331AM_CONDITIONAL(HAVE_ZLIB, test x$enable_zlibdebuginfo = xyes)
332
333AC_MSG_CHECKING([whether to support UNW_CACHE_PER_THREAD])
334AC_ARG_ENABLE([per-thread-cache],
335AS_HELP_STRING([--enable-per-thread-cache], [build with support for UNW_CACHE_PER_THREAD (which imposes a hight TLS memory usage) (default: disabled)]))
336AC_MSG_RESULT([$enable_per_thread_cache])
337AS_IF([test x$enable_per_thread_cache = xyes], [
338  AC_DEFINE(HAVE___CACHE_PER_THREAD, 1,
339	[Define to 1 if --enable-per-thread-cache])
340])
341
342AC_MSG_CHECKING([for Intel compiler])
343AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#ifndef __INTEL_COMPILER
344#error choke me
345#endif]])],[intel_compiler=yes],[intel_compiler=no])
346
347if test x$GCC = xyes -a x$intel_compiler != xyes; then
348  CFLAGS="${CFLAGS} -fexceptions -Wall -Wsign-compare"
349fi
350AC_MSG_RESULT([$intel_compiler])
351
352AC_MSG_CHECKING([if building on Solaris then define __EXTENSIONS__ macro])
353if $OS_SOLARIS; then
354  CFLAGS="${CFLAGS} -D__EXTENSIONS__"
355  AC_MSG_RESULT([yes])
356else
357  AC_MSG_RESULT([no])
358fi
359
360AC_MSG_CHECKING([for QCC compiler])
361AS_CASE([$CC], [qcc*|QCC*], [qcc_compiler=yes], [qcc_compiler=no])
362AC_MSG_RESULT([$qcc_compiler])
363
364if test x$intel_compiler = xyes; then
365  AC_MSG_CHECKING([if linker supports -static-libcxa])
366  save_LDFLAGS="$LDFLAGS"
367  LDFLAGS="$LDFLAGS -static-libcxa"
368  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[have_static_libcxa=yes],[have_static_libcxa=no])
369  LDFLAGS="$save_LDFLAGS"
370  if test "x$have_static_libcxa" = xyes; then
371    LDFLAGS_STATIC_LIBCXA="-XCClinker -static-libcxa"
372  fi
373  AC_MSG_RESULT([$have_static_libcxa])
374fi
375
376if test x$qcc_compiler = xyes; then
377    LDFLAGS_NOSTARTFILES="-XCClinker -Wc,-nostartfiles"
378else
379    LDFLAGS_NOSTARTFILES="-XCClinker -nostartfiles"
380fi
381
382if test x$GCC = xyes -a x$intel_compiler != xyes -a x$qcc_compiler != xyes -a x$android != xyes; then
383  LIBCRTS="-lgcc_s"
384fi
385
386AC_MSG_CHECKING([for __builtin___clear_cache])
387AC_LINK_IFELSE(
388  [AC_LANG_PROGRAM([[]], [[__builtin___clear_cache(0, 0)]])],
389  [have__builtin___clear_cache=yes],
390  [have__builtin___clear_cache=no])
391if test x$have__builtin___clear_cache = xyes; then
392  AC_DEFINE([HAVE__BUILTIN___CLEAR_CACHE], [1],
393            [Defined if __builtin___clear_cache() is available])
394fi
395AC_MSG_RESULT([$have__builtin___clear_cache])
396
397AC_MSG_CHECKING([for __builtin_unreachable])
398AC_LINK_IFELSE(
399  [AC_LANG_PROGRAM([[]], [[__builtin_unreachable()]])],
400  [have__builtin_unreachable=yes],
401  [have__builtin_unreachable=no])
402if test x$have__builtin_unreachable = xyes; then
403  AC_DEFINE([HAVE__BUILTIN_UNREACHABLE], [1],
404            [Defined if __builtin_unreachable() is available])
405fi
406AC_MSG_RESULT([$have__builtin_unreachable])
407
408CCASFLAGS="${CCASFLAGS} ${CPPFLAGS}"
409
410arch="$target_arch"
411ARCH=`echo $target_arch | tr [a-z] [A-Z]`
412
413dnl create shell variables from the M4 macros:
414PKG_MAJOR=pkg_major
415PKG_MINOR=pkg_minor
416PKG_EXTRA=pkg_extra
417PKG_MAINTAINER=pkg_maintainer
418
419old_LIBS="$LIBS"
420LIBS=""
421AC_SEARCH_LIBS(backtrace, execinfo)
422LIBS="$old_LIBS"
423case "$ac_cv_search_backtrace" in
424  -l*) BACKTRACELIB=$ac_cv_search_backtrace;;
425  *) BACKTRACELIB="";;
426esac
427
428
429AC_SUBST(build_arch)
430AC_SUBST(target_os)
431AC_SUBST(arch)
432AC_SUBST(ARCH)
433AC_SUBST(LDFLAGS_STATIC_LIBCXA)
434AC_SUBST(LDFLAGS_NOSTARTFILES)
435AC_SUBST(LIBCRTS)
436AC_SUBST(PKG_MAJOR)
437AC_SUBST(PKG_MINOR)
438AC_SUBST(PKG_EXTRA)
439AC_SUBST(PKG_MAINTAINER)
440AC_SUBST(enable_cxx_exceptions)
441AC_SUBST(enable_debug_frame)
442AC_SUBST(DLLIB)
443AC_SUBST(BACKTRACELIB)
444
445AC_PATH_PROG([LATEX2MAN],[latex2man])
446if test "x$LATEX2MAN" = "x"; then
447  AC_MSG_WARN([latex2man not found. Install latex2man. Disabling docs.])
448  enable_documentation="no";
449fi
450
451AM_CONDITIONAL([CONFIG_DOCS], [test x$enable_documentation = xyes])
452if test "x$enable_documentation" = "xyes"; then
453  AC_CONFIG_FILES(doc/Makefile doc/common.tex)
454fi
455
456AM_CONDITIONAL([CONFIG_TESTS], [test x$enable_tests = xyes])
457if test "x$enable_tests" = "xyes"; then
458  AC_CONFIG_FILES(tests/Makefile tests/check-namespace.sh)
459fi
460
461AM_CONDITIONAL([CONFIG_WEAK_BACKTRACE], [test "x$enable_weak_backtrace" = xyes])
462AM_COND_IF([CONFIG_WEAK_BACKTRACE], [
463  AC_DEFINE([CONFIG_WEAK_BACKTRACE], [1], [Define if the weak 'backtrace' symbol is provided.])
464])
465
466AC_CONFIG_FILES(Makefile src/Makefile
467                include/libunwind-common.h
468                include/libunwind.h include/tdep/libunwind_i.h)
469AC_CONFIG_FILES(src/unwind/libunwind.pc src/coredump/libunwind-coredump.pc
470                src/ptrace/libunwind-ptrace.pc src/setjmp/libunwind-setjmp.pc
471                src/libunwind-generic.pc)
472AC_OUTPUT
473