Merge branch 'vendor/OPENSSL' into HEAD
[dragonfly.git] / contrib / binutils-2.20 / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.59)
4
5 AC_INIT(gold, 0.1)
6 AC_CONFIG_SRCDIR(gold.cc)
7
8 AC_CANONICAL_TARGET
9
10 AM_INIT_AUTOMAKE
11
12 AM_CONFIG_HEADER(config.h:config.in)
13
14 AC_ARG_WITH(sysroot,
15 [  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
16 [sysroot=$withval], [sysroot=no])
17
18 if test "$sysroot" = "yes"; then
19   sysroot='${exec_prefix}/${target_alias}/sys-root'
20 elif test "$sysroot" = "no"; then
21   sysroot=
22 fi
23
24 sysroot_relocatable=0
25 if test -n "$sysroot"; then
26   case "sysroot" in
27     "${prefix}" | "${prefix}/"* | \
28     "${exec_prefix}" | "${exec_prefix}/"* | \
29     '${prefix}' | '${prefix}/'*| \
30     '${exec_prefix}' | '${exec_prefix}/'*)
31       sysroot_relocatable=1
32       ;;
33   esac
34 fi
35
36 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
37   [System root for target files])
38 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
39   [Whether the system root can be relocated])
40
41 dnl For now threads are a configure time option.
42 AC_ARG_ENABLE([threads],
43 [  --enable-threads        multi-threaded linking],
44 [case "${enableval}" in
45   yes | "") threads=yes ;;
46   no) threads=no ;;
47   *) threads=yes ;;
48  esac],
49 [threads=no])
50 if test "$threads" = "yes"; then
51   AC_DEFINE(ENABLE_THREADS, 1,
52             [Define to do multi-threaded linking])
53 fi
54 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
55
56 AC_ARG_ENABLE([plugins],
57 [  --enable-plugins        linker plugins],
58 [case "${enableval}" in
59   yes | "") plugins=yes ;;
60   no) plugins=no ;;
61   *) plugins=yes ;;
62  esac],
63 [plugins=no])
64 if test "$plugins" = "yes"; then
65   AC_DEFINE(ENABLE_PLUGINS, 1,
66             [Define to enable linker plugins])
67 fi
68 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
69
70 AC_ARG_ENABLE([targets],
71 [  --enable-targets        alternative target configurations],
72 [case "${enableval}" in
73   yes | "")
74     AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
75     ;;
76   no)
77     enable_targets=
78     ;;
79   *)
80     enable_targets=$enableval
81     ;;
82 esac],
83 [# For now, enable all targets by default
84  enable_targets=all
85 ])
86
87 # Canonicalize the enabled targets.
88 if test -n "$enable_targets"; then
89   for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
90     result=`$ac_config_sub $targ 2>/dev/null`
91     if test -n "$result"; then
92       canon_targets="$canon_targets $result"
93     else
94       # Permit unrecognized target names, like "all".
95       canon_targets="$canon_targets $targ"
96     fi
97   done
98 fi
99
100 # See which specific instantiations we need.
101 targetobjs=
102 all_targets=
103 default_machine=
104 default_size=
105 default_big_endian=
106 default_osabi=ELFOSABI_NONE
107 targ_32_little=
108 targ_32_big=
109 targ_64_little=
110 targ_64_big=
111 for targ in $target $canon_targets; do
112   if test "$targ" = "all"; then
113     targ_32_little=yes
114     targ_32_big=yes
115     targ_64_little=yes
116     targ_64_big=yes
117     all_targets=yes
118   else
119     . ${srcdir}/configure.tgt
120
121     if test "$targ_obj" = "UNKNOWN"; then
122       AC_MSG_ERROR("unsupported target $targ")
123     else
124       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
125       if test "$targ_extra_obj" != ""; then
126         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
127       fi
128       if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
129           if test "$targ_big_endian" = "true" \
130               -o "$targ_extra_big_endian" = "true"; then
131               targ_32_big=yes
132           fi
133           if test "$targ_big_endian" = "false" \
134               -o "$targ_extra_big_endian" = "false"; then
135               targ_32_little=yes
136           fi
137       fi
138       if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
139           if test "$targ_big_endian" = "true" \
140               -o "$targ_extra_big_endian" = "true"; then
141               targ_64_big=yes
142           fi
143           if test "$targ_big_endian" = "false" \
144               -o "$targ_extra_big_endian" = "false"; then
145               targ_64_little=yes
146           fi
147       fi
148
149       if test "$target" = "$targ"; then
150         default_machine=$targ_machine
151         default_size=$targ_size
152         default_big_endian=$targ_big_endian
153         default_osabi=$targ_osabi
154
155         AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
156         AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
157         AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
158         AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
159         AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
160       fi
161     fi
162   fi
163 done
164
165 if test -n "$targ_32_little"; then
166   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
167               [Define to support 32-bit little-endian targets])
168 fi
169 if test -n "$targ_32_big"; then
170   AC_DEFINE(HAVE_TARGET_32_BIG, 1,
171               [Define to support 32-bit big-endian targets])
172 fi
173 if test -n "$targ_64_little"; then
174   AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
175               [Define to support 64-bit little-endian targets])
176 fi
177 if test -n "$targ_64_big"; then
178   AC_DEFINE(HAVE_TARGET_64_BIG, 1,
179               [Define to support 64-bit big-endian targets])
180 fi
181
182 if test -n "$all_targets"; then
183   TARGETOBJS='$(ALL_TARGETOBJS)'
184 else
185   TARGETOBJS="$targetobjs"
186 fi
187 AC_SUBST(TARGETOBJS)
188
189 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
190                    [Default machine code])
191 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
192                    [Default size (32 or 64)])
193 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
194                    [Default big endian (true or false)])
195 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
196                    [Default OSABI code])
197
198 AC_PROG_CC
199 AC_PROG_CXX
200 AC_PROG_YACC
201 AC_PROG_RANLIB
202 AC_PROG_INSTALL
203 AC_PROG_LN_S
204
205 AC_GNU_SOURCE
206
207 ZW_GNU_GETTEXT_SISTER_DIR
208 AM_PO_SUBDIRS
209
210 AC_C_BIGENDIAN
211
212 AC_EXEEXT
213
214 AM_CONDITIONAL(NATIVE_LINKER,
215   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
216 AM_CONDITIONAL(GCC, test "$GCC" = yes)
217
218 dnl Some architectures do not support taking pointers of functions
219 dnl defined in shared libraries except in -fPIC mode.  We need to
220 dnl tell the unittest framework if we're compiling for one of those
221 dnl targets, so it doesn't try to run the tests that do that.
222 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
223   case $target_cpu in
224     i?86) true;;
225     x86_64) false;;
226     sparc64) false;;
227     *) true;;
228   esac])
229
230 dnl Whether we can test -mcmodel=medium.
231 AM_CONDITIONAL(MCMODEL_MEDIUM, [test "$target_cpu" = "x86_64"])
232
233 dnl Test for __thread support.
234 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
235 [AC_COMPILE_IFELSE([__thread int i = 1;],
236 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
237
238 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
239
240 dnl On GNU/Linux TLS in static programs only works when using glibc
241 dnl 2.4 or later.
242 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
243 [AC_COMPILE_IFELSE([
244 #include <features.h>
245 #if !defined __GLIBC__
246 error
247 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
248 error
249 #endif
250 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
251
252 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
253
254 dnl Test for #pragma omp threadprivate
255 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
256 [save_CFLAGS="$CFLAGS"
257 CFLAGS="$CFLAGS -fopenmp"
258 AC_COMPILE_IFELSE([
259 #include <omp.h>
260 int i;
261 #pragma omp threadprivate (i)
262 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
263 CFLAGS="$save_CFLAGS"])
264 if test "$gold_cv_c_threadprivate" = "yes"; then
265   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
266             [Define if compiler supports #pragma omp threadprivate])
267 fi
268 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
269
270 dnl Test for the -ftls-dialect=gnu2 option.
271 save_CFLAGS="$CFLAGS"
272 CFLAGS="$CFLAGS -mtls-dialect=gnu2"
273 AC_COMPILE_IFELSE([int i;], [have_tls_gnu2=yes], [have_tls_gnu2=no])
274 CFLAGS="$save_CFLAGS"
275 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
276
277 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
278 dnl only with glibc 2.9 or later.
279 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
280 [AC_COMPILE_IFELSE([
281 #include <features.h>
282 #if !defined __GLIBC__
283 error
284 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
285 error
286 #endif
287 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
288
289 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
290
291 dnl Check whether the compiler supports constructor priorities in
292 dnl attributes, which were added in gcc 4.3.
293 AC_CACHE_CHECK([for constructor priorities], [gold_cv_c_conprio],
294 [AC_COMPILE_IFELSE([void f() __attribute__ ((constructor (1)));],
295 [gold_cv_c_conprio=yes], [gold_cv_c_conprio=no])])
296
297 AM_CONDITIONAL(CONSTRUCTOR_PRIORITY, test "$gold_cv_c_conprio" = "yes")
298
299 dnl Test for the -frandom-seed option.
300 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
301 [save_CFLAGS="$CFLAGS"
302 CFLAGS="$CFLAGS -frandom-seed=foo"
303 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
304 [gold_cv_c_random_seed=no])
305 CFLAGS="$save_CFLAGS"])
306 if test "$gold_cv_c_random_seed" = "yes"; then
307   # In Makefile, '$@' will be expanded to be the name of the file
308   # being built, providing a unique seed for each file.
309   RANDOM_SEED_CFLAGS=-frandom-seed=\$@
310 fi
311 AC_SUBST(RANDOM_SEED_CFLAGS)
312
313 AM_BINUTILS_WARNINGS
314
315 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//'`
316 AC_SUBST(WARN_CXXFLAGS)
317
318 dnl Force support for large files by default.  This may need to be
319 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
320 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
321 AC_SUBST(LFS_CFLAGS)
322
323 AC_CHECK_FUNCS(chsize)
324 AC_REPLACE_FUNCS(pread ftruncate mremap ffsll)
325
326 # Link in zlib if we can.  This allows us to write compressed sections.
327 AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)])
328 AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_search_zlibVersion" != "no")
329
330 dnl We have to check these in C, not C++, because autoconf generates
331 dnl tests which have no type information, and current glibc provides
332 dnl multiple declarations of functions like basename when compiling
333 dnl with C++.
334 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
335
336 AC_LANG_PUSH(C++)
337
338 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
339 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
340 AC_CHECK_HEADERS(byteswap.h)
341 AC_CHECK_FUNCS(mallinfo posix_fallocate readv)
342 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
343
344 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
345 # at link time with some versions of GCC.
346 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
347 [gold_cv_unordered_map_rehash],
348 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
349 #include <tr1/unordered_map>
350 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
351 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
352 if test "$gold_cv_unordered_map_rehash" = "yes"; then
353   AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
354             [Define if ::std::tr1::unordered_map::rehash is usable])
355 fi
356
357 # gcc 4.3.0 doesn't recognize the printf attribute on a template
358 # function.  Check for that.  This is gcc bug 35546.  This test can
359 # probably be removed after the bug has been fixed for a while.
360 AC_CACHE_CHECK([whether we can use attributes with template functions],
361 [gold_cv_template_attribute],
362 [AC_COMPILE_IFELSE([
363 template<typename T> extern void foo(const char*, ...)
364   __attribute__ ((__format__ (__printf__, 1, 2)));
365 template<typename T> void foo(const char* format, ...) {}
366 void bar() { foo<int>("%s\n", "foo"); }
367 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
368 if test "$gold_cv_template_attribute" = "yes"; then
369   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
370             [Define if attributes work on C++ templates])
371 fi
372
373 AC_LANG_POP(C++)
374
375 AM_MAINTAINER_MODE
376
377 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)