configure.ac revision 1.1.1.2 1 1.1 christos dnl -*- Autoconf -*-
2 1.1 christos dnl Process this file with autoconf to produce a configure script.
3 1.1 christos dnl
4 1.1.1.2 christos dnl Copyright (C) 2019-2022 Free Software Foundation, Inc.
5 1.1 christos dnl
6 1.1 christos dnl This file is free software; you can redistribute it and/or modify
7 1.1 christos dnl it under the terms of the GNU General Public License as published by
8 1.1 christos dnl the Free Software Foundation; either version 2 of the License, or
9 1.1 christos dnl (at your option) any later version.
10 1.1 christos dnl
11 1.1 christos dnl This program is distributed in the hope that it will be useful,
12 1.1 christos dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 1.1 christos dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 1.1 christos dnl GNU General Public License for more details.
15 1.1 christos dnl
16 1.1 christos dnl You should have received a copy of the GNU General Public License
17 1.1 christos dnl along with this program; see the file COPYING. If not see
18 1.1 christos dnl <http://www.gnu.org/licenses/>.
19 1.1 christos dnl
20 1.1 christos
21 1.1 christos AC_PREREQ(2.64)
22 1.1 christos AC_INIT([libctf], 1.2.0)
23 1.1 christos AC_CONFIG_SRCDIR(ctf-impl.h)
24 1.1.1.2 christos AC_CANONICAL_BUILD
25 1.1.1.2 christos AC_CANONICAL_HOST
26 1.1.1.2 christos AC_CANONICAL_TARGET
27 1.1 christos AC_USE_SYSTEM_EXTENSIONS
28 1.1 christos AM_INIT_AUTOMAKE
29 1.1.1.2 christos AM_SILENT_RULES([yes])
30 1.1 christos
31 1.1 christos # Checks for programs.
32 1.1 christos AC_PROG_MAKE_SET
33 1.1 christos AC_PROG_CC
34 1.1 christos AC_PROG_RANLIB
35 1.1 christos AM_PROG_AR
36 1.1 christos ZW_GNU_GETTEXT_SISTER_DIR
37 1.1 christos
38 1.1 christos dnl Default to a non shared library. This may be overridden by the
39 1.1 christos dnl configure option --enable-shared.
40 1.1 christos AC_DISABLE_SHARED
41 1.1 christos
42 1.1 christos LT_INIT
43 1.1 christos AC_SYS_LARGEFILE
44 1.1.1.2 christos LT_OUTPUT
45 1.1 christos
46 1.1 christos MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
47 1.1 christos AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
48 1.1 christos AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
49 1.1 christos AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
50 1.1 christos
51 1.1 christos # Figure out what compiler warnings we can enable.
52 1.1 christos # See config/warnings.m4 for details.
53 1.1 christos
54 1.1 christos ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wno-narrowing -Wwrite-strings \
55 1.1 christos -Wmissing-format-attribute], [warn])
56 1.1 christos ACX_PROG_CC_WARNING_OPTS([-Wstrict-prototypes -Wmissing-prototypes \
57 1.1 christos -Wold-style-definition], [c_warn])
58 1.1 christos ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long])
59 1.1 christos
60 1.1 christos # Only enable with --enable-werror-always until existing warnings are
61 1.1 christos # corrected.
62 1.1 christos ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual])
63 1.1 christos
64 1.1 christos AM_MAINTAINER_MODE
65 1.1 christos AM_INSTALL_LIBBFD
66 1.1 christos ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_libctf_warn_cflags])
67 1.1 christos
68 1.1 christos AC_FUNC_MMAP
69 1.1 christos # Needed for BFD capability checks.
70 1.1.1.2 christos AC_SEARCH_LIBS(dlsym, dl)
71 1.1 christos AM_ZLIB
72 1.1 christos
73 1.1 christos GCC_ENABLE([libctf-hash-debugging], [no], [], [Enable expensive debugging of CTF deduplication type hashing])
74 1.1 christos if test "${enable_libctf_hash_debugging}" = yes; then
75 1.1 christos AC_DEFINE(ENABLE_LIBCTF_HASH_DEBUGGING, 1, [Enable expensive debugging of CTF deduplication type hashing])
76 1.1 christos fi
77 1.1 christos AM_CONDITIONAL(ENABLE_LIBCTF_HASH_DEBUGGING, test "${enable_libctf_hash_debugging}" = yes)
78 1.1 christos
79 1.1 christos # Similar to GDB_AC_CHECK_BFD.
80 1.1 christos OLD_CFLAGS=$CFLAGS
81 1.1 christos OLD_LDFLAGS=$LDFLAGS
82 1.1 christos OLD_LIBS=$LIBS
83 1.1.1.2 christos OLD_CC=$CC
84 1.1 christos # Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
85 1.1 christos # points somewhere with bfd, with -I/foo/lib and -L/foo/lib. We
86 1.1 christos # always want our bfd.
87 1.1.1.2 christos CC="./libtool --quiet --mode=link $OLD_CC"
88 1.1 christos CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
89 1.1.1.2 christos LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
90 1.1 christos intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
91 1.1.1.2 christos LIBS="-lbfd -liberty $intl $LIBS"
92 1.1 christos AC_CACHE_CHECK([for ELF support in BFD], ac_cv_libctf_bfd_elf,
93 1.1 christos [AC_TRY_LINK([#include <stdlib.h>
94 1.1.1.2 christos #include <string.h>
95 1.1 christos #include "bfd.h"
96 1.1 christos #include "elf-bfd.h"],
97 1.1 christos [(void) bfd_section_from_elf_index (NULL, 0);
98 1.1 christos return 0;],
99 1.1 christos [ac_cv_libctf_bfd_elf=yes],
100 1.1 christos [ac_cv_libctf_bfd_elf=no])])
101 1.1 christos CFLAGS=$OLD_CFLAGS
102 1.1 christos LDFLAGS=$OLD_LDFLAGS
103 1.1 christos LIBS=$OLD_LIBS
104 1.1.1.2 christos CC=$OLD_CC
105 1.1 christos
106 1.1 christos if test $ac_cv_libctf_bfd_elf = yes; then
107 1.1 christos AC_DEFINE([HAVE_BFD_ELF], 1,
108 1.1 christos [Whether libbfd was configured for an ELF target.])
109 1.1 christos fi
110 1.1 christos
111 1.1 christos AC_C_BIGENDIAN
112 1.1 christos AC_CHECK_HEADERS(byteswap.h endian.h)
113 1.1 christos AC_CHECK_FUNCS(pread)
114 1.1 christos
115 1.1 christos dnl Check for bswap_{16,32,64}
116 1.1 christos AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include <byteswap.h>]])
117 1.1 christos AC_CHECK_DECLS([asprintf, vasprintf, stpcpy])
118 1.1 christos
119 1.1 christos dnl Check for qsort_r. (Taken from gnulib.)
120 1.1 christos AC_CHECK_FUNCS_ONCE([qsort_r])
121 1.1 christos if test $ac_cv_func_qsort_r = yes; then
122 1.1 christos AC_CACHE_CHECK([for qsort_r signature], [ac_cv_libctf_qsort_r_signature],
123 1.1 christos [AC_LINK_IFELSE(
124 1.1 christos [AC_LANG_PROGRAM([[#undef qsort_r
125 1.1 christos #include <stdlib.h>
126 1.1 christos void qsort_r (void *, size_t, size_t,
127 1.1 christos int (*) (void const *, void const *,
128 1.1 christos void *),
129 1.1 christos void *);
130 1.1 christos void (*p) (void *, size_t, size_t,
131 1.1 christos int (*) (void const *, void const *,
132 1.1 christos void *),
133 1.1 christos void *) = qsort_r;
134 1.1 christos ]])],
135 1.1 christos [ac_cv_libctf_qsort_r_signature=GNU],
136 1.1 christos [AC_LINK_IFELSE(
137 1.1 christos [AC_LANG_PROGRAM([[#undef qsort_r
138 1.1 christos #include <stdlib.h>
139 1.1 christos void qsort_r (void *, size_t, size_t, void *,
140 1.1 christos int (*) (void *,
141 1.1 christos void const *,
142 1.1 christos void const *));
143 1.1 christos void (*p) (void *, size_t, size_t, void *,
144 1.1 christos int (*) (void *, void const *,
145 1.1 christos void const *)) = qsort_r;
146 1.1 christos ]])],
147 1.1 christos [ac_cv_libctf_qsort_r_signature=BSD],
148 1.1 christos [ac_cv_libctf_qsort_r_signature=unknown])])])
149 1.1 christos fi
150 1.1 christos
151 1.1 christos case x$ac_cv_libctf_qsort_r_signature in
152 1.1 christos xGNU) AC_DEFINE([HAVE_QSORT_R_ARG_LAST], 1,
153 1.1 christos [Whether a qsort_r exists with a void *arg as its last arg.]);;
154 1.1 christos xBSD) AC_DEFINE([HAVE_QSORT_R_COMPAR_LAST], 1,
155 1.1 christos [Whether a qsort_r exists with the compar function as its last arg.]);;
156 1.1 christos *) ac_cv_libctf_qsort_r_signature=unknown;;
157 1.1 christos esac
158 1.1 christos
159 1.1 christos AM_CONDITIONAL(NEED_CTF_QSORT_R, test "${ac_cv_libctf_qsort_r_signature}" = unknown)
160 1.1 christos
161 1.1 christos AC_CACHE_CHECK([for O_CLOEXEC], [ac_cv_libctf_macro_O_CLOEXEC],
162 1.1 christos [AC_LINK_IFELSE(
163 1.1 christos [AC_LANG_PROGRAM([[#include <fcntl.h>
164 1.1 christos #ifndef O_CLOEXEC
165 1.1 christos choke me;
166 1.1 christos #endif
167 1.1 christos ]],
168 1.1 christos [[return O_CLOEXEC;]])],
169 1.1 christos [ac_cv_libctf_macro_O_CLOEXEC=yes],
170 1.1 christos [ac_cv_libctf_macro_O_CLOEXEC=no])])
171 1.1 christos
172 1.1 christos if test $ac_cv_libctf_macro_O_CLOEXEC = yes; then
173 1.1 christos AC_DEFINE([HAVE_O_CLOEXEC], 1,
174 1.1 christos [Whether the platform has a definition of O_CLOEXEC.])
175 1.1 christos fi
176 1.1 christos
177 1.1.1.2 christos build_info=
178 1.1.1.2 christos makeinfo_too_old=
179 1.1.1.2 christos AC_CHECK_PROGS([MAKEINFO], makeinfo, [$MISSING makeinfo])
180 1.1.1.2 christos case " $build_configdirs " in
181 1.1.1.2 christos *" texinfo "*) MAKEINFO='$$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo' ;;
182 1.1.1.2 christos esac
183 1.1.1.2 christos changequote(,)
184 1.1.1.2 christos # We require texinfo to be 6.3 or later, for a working synindex
185 1.1.1.2 christos # and validatemenus: otherwise we fall back to /bin/true.
186 1.1.1.2 christos if ${MAKEINFO} --version \
187 1.1.1.2 christos | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9][0-9])' >/dev/null 2>&1; then
188 1.1.1.2 christos build_info=yes
189 1.1.1.2 christos else
190 1.1.1.2 christos build_info=
191 1.1.1.2 christos makeinfo_too_old=t
192 1.1.1.2 christos fi
193 1.1.1.2 christos changequote([,])
194 1.1.1.2 christos if test -n "$makeinfo_too_old"; then
195 1.1.1.2 christos AC_MSG_WARN([
196 1.1.1.2 christos *** Makeinfo is too old. Info documentation will not be built.])
197 1.1.1.2 christos fi
198 1.1.1.2 christos AC_SUBST(MAKEINFO)
199 1.1.1.2 christos AM_CONDITIONAL(BUILD_INFO, test "${build_info}" = yes)
200 1.1.1.2 christos
201 1.1.1.2 christos CTF_LIBADD="-L`pwd`/../libiberty -liberty"
202 1.1 christos SHARED_LDFLAGS=
203 1.1.1.2 christos
204 1.1.1.2 christos # Horrible hacks to build DLLs on Windows and a shared library elsewhere.
205 1.1 christos if test "$enable_shared" = "yes"; then
206 1.1 christos # When building a shared libctf, link against the pic version of libiberty
207 1.1 christos # so that apps that use libctf won't need libiberty just to satisfy any
208 1.1.1.2 christos # libctf references. We can't do that if a pic libiberty is unavailable
209 1.1.1.2 christos # since including non-pic # code would insert text relocations into libctf.
210 1.1 christos # Note that linking against libbfd as we do here, which is itself linked
211 1.1 christos # against libiberty, may not satisfy all the libctf libiberty references
212 1.1 christos # since libbfd may not pull in the entirety of libiberty.
213 1.1.1.2 christos # Also, jam libintl into the right place in all of this: after libiberty,
214 1.1.1.2 christos # which uses it, but before -lcygwin, which it uses.
215 1.1 christos changequote(,)dnl
216 1.1 christos x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'`
217 1.1 christos changequote([,])dnl
218 1.1 christos if test -n "$x"; then
219 1.1.1.2 christos CTF_LIBADD="-L`pwd`/../libiberty/pic -liberty"
220 1.1 christos fi
221 1.1.1.2 christos fi
222 1.1 christos
223 1.1.1.2 christos CTF_LIBADD="$CTF_LIBADD $LIBINTL"
224 1.1.1.2 christos
225 1.1.1.2 christos if test "$enable_shared" = "yes"; then
226 1.1 christos case "${host}" in
227 1.1 christos # More hacks to build DLLs on Windows.
228 1.1 christos *-*-cygwin*)
229 1.1 christos SHARED_LDFLAGS="-no-undefined"
230 1.1.1.2 christos CTF_LIBADD="$CTF_LIBADD -lcygwin"
231 1.1 christos ;;
232 1.1 christos esac
233 1.1 christos fi
234 1.1 christos AC_SUBST(SHARED_LDFLAGS)
235 1.1.1.2 christos AC_SUBST(CTF_LIBADD)
236 1.1.1.2 christos
237 1.1.1.2 christos AC_PATH_PROG([EXPECT], [expect])
238 1.1.1.2 christos AC_CACHE_CHECK([for Tcl supporting try/catch], [ac_cv_libctf_tcl_try],
239 1.1.1.2 christos [ac_cv_libctf_tcl_try=`if test -z $EXPECT; then echo no; else $EXPECT << EOF
240 1.1.1.2 christos if @<:@llength @<:@info commands try@:>@@:>@ then { puts yes } else { puts no }
241 1.1.1.2 christos EOF
242 1.1.1.2 christos fi`
243 1.1.1.2 christos ])
244 1.1.1.2 christos AM_CONDITIONAL(TCL_TRY, test "${ac_cv_libctf_tcl_try}" = yes)
245 1.1 christos
246 1.1 christos # Use a version script, if possible, or an -export-symbols-regex otherwise.
247 1.1.1.2 christos decommented_version_script=
248 1.1.1.2 christos AC_CACHE_CHECK([for linker versioning flags], [ac_cv_libctf_version_script],
249 1.1.1.2 christos [echo 'FOO { global: mai*; local: ctf_fo*; };' > conftest.ver
250 1.1.1.2 christos old_LDFLAGS="$LDFLAGS"
251 1.1.1.2 christos old_CFLAGS="$CFLAGS"
252 1.1.1.2 christos LDFLAGS="$LDFLAGS -shared -Wl,--version-script=conftest.ver"
253 1.1.1.2 christos CFLAGS="$CFLAGS -fPIC"
254 1.1.1.2 christos AC_LINK_IFELSE([AC_LANG_SOURCE([[int ctf_foo (void) { return 0; }
255 1.1.1.2 christos int main (void) { return ctf_foo(); }]])],
256 1.1.1.2 christos [ac_cv_libctf_version_script="-Wl,--version-script='$srcdir/libctf.ver'"],
257 1.1.1.2 christos [])
258 1.1.1.2 christos LDFLAGS="$old_LDFLAGS"
259 1.1.1.2 christos
260 1.1.1.2 christos if test -z "$ac_cv_libctf_version_script"; then
261 1.1.1.2 christos LDFLAGS="$LDFLAGS -shared -Wl,-B,local -Wl,-z,gnu-version-script=conftest.ver"
262 1.1.1.2 christos AC_LINK_IFELSE([AC_LANG_SOURCE([[int ctf_foo (void) { return 0; }
263 1.1.1.2 christos int main (void) { return ctf_foo(); }]])],
264 1.1.1.2 christos [ac_cv_libctf_version_script="-Wl,-B,local -Wl,-z,gnu-version-script"
265 1.1.1.2 christos decommented_version_script=t],
266 1.1.1.2 christos [])
267 1.1.1.2 christos LDFLAGS="$old_LDFLAGS"
268 1.1.1.2 christos fi
269 1.1.1.2 christos CFLAGS="$old_CFLAGS"
270 1.1.1.2 christos
271 1.1.1.2 christos if test -z "$ac_cv_libctf_version_script"; then
272 1.1.1.2 christos ac_cv_libctf_version_script='-export-symbols-regex ctf_.*'
273 1.1.1.2 christos fi
274 1.1.1.2 christos rm -f conftest.ver])
275 1.1.1.2 christos if test -n "$decommented_version_script"; then
276 1.1.1.2 christos # Solaris's version scripts use shell-style comments rather than the C-style
277 1.1.1.2 christos # used by GNU ld. Use cpp to strip the comments out. (cpp exists under this
278 1.1.1.2 christos # name on all platforms that support ld -z gnu-version-script.)
279 1.1.1.2 christos # Also ensure that no symbols exist in the version script for libctf-nobfd.so
280 1.1.1.2 christos # that do not exist in the shared library itself, since some linkers add such
281 1.1.1.2 christos # symbols with type NOTYPE.
282 1.1.1.2 christos /lib/cpp < $srcdir/libctf.ver > libctf-decommented.ver
283 1.1.1.2 christos grep -v 'libctf only' $srcdir/libctf.ver | /lib/cpp > libctf-nobfd-decommented.ver
284 1.1.1.2 christos VERSION_FLAGS="$ac_cv_libctf_version_script='libctf-decommented.ver'"
285 1.1.1.2 christos VERSION_FLAGS_NOBFD="$ac_cv_libctf_version_script='libctf-nobfd-decommented.ver'"
286 1.1.1.2 christos else
287 1.1.1.2 christos VERSION_FLAGS="$ac_cv_libctf_version_script"
288 1.1.1.2 christos VERSION_FLAGS_NOBFD="$ac_cv_libctf_version_script"
289 1.1 christos fi
290 1.1 christos AC_SUBST(VERSION_FLAGS)
291 1.1.1.2 christos AC_SUBST(VERSION_FLAGS_NOBFD)
292 1.1 christos
293 1.1 christos AC_CONFIG_FILES(Makefile)
294 1.1 christos AC_CONFIG_HEADERS(config.h)
295 1.1 christos AC_OUTPUT
296 1.1.1.2 christos
297 1.1.1.2 christos GNU_MAKE_JOBSERVER
298