* configure.in: Call AC_CONFIG_HEADER. Substitute
[external/binutils.git] / bfd / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 AC_PREREQ(2.3)
4 AC_INIT(libbfd.c)
5
6 AC_ARG_ENABLE(64-bit-bfd,
7 [  --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)],
8 [case "${enableval}" in
9   yes)  want64=true  ;;
10   no)   want64=false ;;
11   *)    AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;;
12 esac],[want64=false])dnl
13 AC_ARG_ENABLE(targets,
14 [  --enable-targets        alternative target configurations],
15 [case "${enableval}" in
16   yes | "") AC_ERROR(enable-targets option must specify target names or 'all')
17             ;;
18   no)       enable_targets= ;;
19   *)        enable_targets=$enableval ;;
20 esac])dnl
21
22 AC_CONFIG_HEADER(config.h)
23
24 AC_CONFIG_AUX_DIR(`cd $srcdir/..;pwd`)
25 AC_CANONICAL_SYSTEM
26 if test -z "$target" ; then
27     AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
28 fi
29 AC_ARG_PROGRAM
30
31 host64=false
32 target64=false
33
34 # host stuff:
35
36 # Permit host specific settings.
37 . ${srcdir}/configure.host
38
39 AC_PROG_CC
40 AC_SUBST(CFLAGS)
41 AC_SUBST(HDEFINES)
42 AR=${AR-ar}
43 AC_SUBST(AR)
44 AC_PROG_RANLIB
45 AC_PROG_INSTALL
46
47 HOST_64BIT_LONG=0
48 if test "x${HOST_64BIT_TYPE}" = "xlong"; then
49   HOST_64BIT_LONG=1
50 fi
51 AC_SUBST(HOST_64BIT_LONG)
52
53 BFD_CC_FOR_BUILD
54
55 AC_CHECK_HEADERS(stddef.h string.h strings.h stdlib.h time.h unistd.h)
56 AC_CHECK_HEADERS(fcntl.h sys/file.h sys/procfs.h)
57 AC_CHECK_FUNCS(fcntl)
58
59 BFD_BINARY_FOPEN
60
61 AC_MSG_CHECKING([whether malloc must be declared])
62 AC_CACHE_VAL(bfd_cv_decl_needed_malloc,
63 [AC_TRY_COMPILE([
64 #include <stdio.h>
65 #ifdef HAVE_STDLIB_H
66 #include <stdlib.h>
67 #endif
68 #ifdef HAVE_UNISTD_H
69 #include <unistd.h>
70 #endif],
71 [char *(*pfn) = (char *(*)) malloc],
72 bfd_cv_decl_needed_malloc=no, bfd_cv_decl_needed_malloc=yes)])
73 AC_MSG_RESULT($bfd_cv_decl_needed_malloc)
74 if test $bfd_cv_decl_needed_malloc = yes; then
75   AC_DEFINE(NEED_DECLARATION_MALLOC)
76 fi
77
78 AC_MSG_CHECKING([whether free must be declared])
79 AC_CACHE_VAL(bfd_cv_decl_needed_free,
80 [AC_TRY_COMPILE([
81 #include <stdio.h>
82 #ifdef HAVE_STDLIB_H
83 #include <stdlib.h>
84 #endif
85 #ifdef HAVE_UNISTD_H
86 #include <unistd.h>
87 #endif],
88 [int (*pfn) = (int (*)) free],
89 bfd_cv_decl_needed_free=no, bfd_cv_decl_needed_free=yes)])
90 AC_MSG_RESULT($bfd_cv_decl_needed_free)
91 if test $bfd_cv_decl_needed_free = yes; then
92   AC_DEFINE(NEED_DECLARATION_FREE)
93 fi
94
95 # If we are configured native, pick a core file support file.
96 COREFILE=
97 COREFLAG=
98 if test "${target}" = "${host}"; then
99   case "${host}" in
100   alpha-*-*)            COREFILE=osf-core.o ;;
101   arm-*-riscix)         COREFILE=trad-core.o ;;
102   hppa*-*-hpux*)        COREFILE=hpux-core.o ;;
103   hppa*-*-hiux*)        COREFILE=hpux-core.o ;;
104   hppa*-*-bsd*)         COREFILE="hpux-core.o hppabsd-core.o"
105                         COREFLAG="-DHPUX_CORE -DHPPABSD_CORE" ;;
106 changequote(,)dnl
107   i[345]86-sequent-bsd*)
108 changequote([,])dnl
109         COREFILE=trad-core.o;
110         AC_DEFINE(TRAD_HEADER,"hosts/symmetry.h")
111         ;;
112 changequote(,)dnl
113   i[345]86-sequent-sysv4*) ;;
114   i[345]86-sequent-sysv*)
115 changequote([,])dnl
116         COREFILE=trad-core.o
117         AC_DEFINE(TRAD_HEADER,"hosts/symmetry.h")
118         ;;
119 changequote(,)dnl
120   i[345]86-*-bsd* | i[345]86-*-freebsd* | i[345]86-*-netbsd*)
121 changequote([,])dnl
122         COREFILE=trad-core.o
123         AC_DEFINE(TRAD_HEADER,"hosts/i386bsd.h")
124         ;;
125 changequote(,)dnl
126   i[345]86-esix-sysv3*)
127 changequote([,])dnl
128         COREFILE=trad-core.o
129         AC_DEFINE(TRAD_HEADER,"hosts/esix.h")
130         ;;
131 changequote(,)dnl
132   i[345]86-*-sco* | i[345]86-*-isc*)
133 changequote([,])dnl
134         COREFILE=trad-core.o
135         AC_DEFINE(TRAD_HEADER,"hosts/i386sco.h")
136         ;;
137 changequote(,)dnl
138   i[345]86-*-mach3*)
139 changequote([,])dnl
140         COREFILE=trad-core.o
141         AC_DEFINE(TRAD_HEADER,"hosts/i386mach3.h")
142         ;;
143 changequote(,)dnl
144   i[345]86-*-linux*)
145 changequote([,])dnl
146         COREFILE=trad-core.o
147         AC_DEFINE(TRAD_HEADER,"hosts/i386linux.h")
148         ;;
149 changequote(,)dnl
150   i[345]86-*-isc*)      COREFILE=trad-core.o ;;
151   i[345]86-*-aix*)      COREFILE=aix386-core.o ;;
152 changequote([,])dnl
153   mips-dec-bsd*)
154         COREFILE=trad-core.o
155         AC_DEFINE(TRAD_HEADER,"hosts/mipsbsd.h")
156         ;;
157   mips-dec-mach3*)
158         COREFILE=trad-core.o
159         AC_DEFINE(TRAD_HEADER,"hosts/mipsmach3.h")
160         ;;
161   mips-dec-*)
162         COREFILE=trad-core.o
163         AC_DEFINE(TRAD_HEADER,"hosts/decstation.h")
164         ;;
165   mips-sgi-irix4*)      COREFILE=irix-core.o ;;
166   mips-sgi-irix5*)      COREFILE=irix-core.o ;;
167   mips-*-mach3*)
168         COREFILE=trad-core.o
169         AC_DEFINE(TRAD_HEADER,"hosts/mipsmach3.h")
170         ;;
171   mips-*-sysv4*)        ;;
172   mips-*-sysv* | mips-*-riscos*)
173         COREFILE=trad-core.o
174         AC_DEFINE(TRAD_HEADER,"hosts/riscos.h")
175         ;;
176   mips-sony-bsd*)
177         COREFILE=trad-core.o
178         AC_DEFINE(TRAD_HEADER,"hosts/news-mips".h)
179         ;;
180   m68*-bull*-sysv*)
181         COREFILE=trad-core.o
182         AC_DEFINE(TRAD_HEADER,"hosts/dpx2.h")
183         ;;
184   m68*-hp-hpux*)        COREFILE=hpux-core.o ;;
185   m68*-hp-bsd*)
186         COREFILE=trad-core.o
187         AC_DEFINE(TRAD_HEADER,"hosts/hp300bsd.h")
188         ;;
189   m68*-motorola-sysv*)  COREFILE=ptrace-core.o ;;
190   m68*-sony-*)
191         COREFILE=trad-core.o
192         AC_DEFINE(TRAD_HEADER,"hosts/news.h")
193         ;;
194   m88*-*-sysv4*)        ;;
195   m88*-motorola-sysv*)  COREFILE=trad-core.o ;;
196   m88*-*-mach3*)
197         COREFILE=trad-core.o
198         AC_DEFINE(TRAD_HEADER,"hosts/m88kmach3.h")
199         ;;
200   ns32k-pc532-mach)
201         COREFILE=trad-core.o
202         AC_DEFINE(TRAD_HEADER,"hosts/pc532mach.h")
203         ;;
204   rs6000-*-lynx*)       COREFILE=lynx-core.o ;;
205   rs6000-*-aix4*)       COREFILE=rs6000-core.o
206                         COREFLAG=-DALTERNATE_AIX_CORE_FORMAT ;;
207   rs6000-*-*)           COREFILE=rs6000-core.o ;;
208   powerpc-*-aix4*)      COREFILE=rs6000-core.o
209                         COREFLAG=-DALTERNATE_AIX_CORE_FORMAT ;;
210   powerpc-*-aix*)       COREFILE=rs6000-core.o ;;
211   tahoe-*-*)
212         COREFILE=trad-core.o
213         AC_DEFINE(TRAD_HEADER,"hosts/tahoe.h")
214         ;;
215   vax-*-ultrix2*)
216         COREFILE=trad-core.o
217         AC_DEFINE(TRAD_HEADER,"hosts/vaxult2.h")
218         ;;
219   vax-*-ultrix*)
220         COREFILE=trad-core.o
221         AC_DEFINE(TRAD_HEADER,"hosts/vaxult2.h")
222         ;;
223   vax-*-*)
224         COREFILE=trad-core.o
225         AC_DEFINE(TRAD_HEADER,"hosts/vaxbsd.h")
226         ;;
227   esac
228
229   case "$COREFILE" in
230   aix386-core.o)        COREFLAG=-DAIX386_CORE ;;
231   hppabsd-core.o)       COREFLAG=-DHPPABSD_CORE ;;
232   hpux-core.o)          COREFLAG=-DHPUX_CORE ;;
233   irix-core.o)          COREFLAG=-DIRIX_CORE ;;
234   lynx-core.o)          COREFLAG=-DLYNX_CORE ;;
235   osf-core.o)           COREFLAG=-DOSF_CORE ;;
236   ptrace-core.o)        COREFLAG=-DPTRACE_CORE ;;
237   rs6000-core.o)        COREFLAG="$COREFLAG -DAIX_CORE" ;;
238   trad-core.o)          COREFLAG="$COREFLAG -DTRAD_CORE" ;;
239   esac
240 fi
241 AC_SUBST(COREFILE)
242 AC_SUBST(COREFLAG)
243
244 # target stuff:
245
246 # Canonicalize the secondary target names.
247 if test -n "$enable_targets" ; then
248     for targ in `echo $enable_targets | sed 's/,/ /g'`
249     do
250         result=`$ac_config_sub $targ 2>/dev/null`
251         if test -n "$result" ; then
252             canon_targets="$canon_targets $result"
253         else
254             # Allow targets that config.sub doesn't recognize, like "all".
255             canon_targets="$canon_targets $targ"
256         fi
257     done
258 fi
259
260 all_targets=false
261 defvec=
262 selvecs=
263 selarchs=
264 TDEFINES=
265 for targ in $target $canon_targets
266 do
267     if test "x$targ" = "xall"; then
268         all_targets=true
269     else
270         . $srcdir/config.bfd
271         if test "x$targ" = "x$target"; then
272             defvec=$targ_defvec
273         fi
274         selvecs="$selvecs $targ_defvec $targ_selvecs"
275         selarchs="$selarchs $targ_archs"
276         TDEFINES="$TDEFINES $targ_cflags"
277     fi
278 done
279 AC_SUBST(TDEFINES)
280
281 # This processing still needs to be done if we're to decide properly whether
282 # 64-bit support needs to be compiled in.  Currently, it will be included if
283 # the default or any other explicitly requested target requires it; it
284 # will not be included on a 32-bit host if no 64-bit target is requested, and
285 # no "--with-64-bit-bfd" option is given, even if "--with-targets=all" is
286 # used.
287
288 # uniq the default and selected vectors in all the configured targets.
289 f=""
290 for i in $selvecs ; do
291     case " $f " in
292     *" $i "*) ;;
293     *) f="$f $i" ;;
294     esac
295 done
296 selvecs="$f"
297
298 # uniq the architectures in all the configured targets.
299 f=""
300 for i in $selarchs ; do
301     case " $f " in
302     *" $i "*) ;;
303     *) f="$f $i" ;;
304     esac
305 done
306 selarchs="$f"
307
308 # Target backend .o files.
309 tb=
310
311 elf="elf.o elflink.o"
312
313 for vec in $selvecs
314 do
315     case "$vec" in
316     # This list is alphabetized to make it easy to compare
317     # with the two vector lists in targets.c.
318     a29kcoff_big_vec)           tb="$tb coff-a29k.o cofflink.o" ;;
319     a_out_adobe_vec)            tb="$tb aout-adobe.o aout32.o stab-syms.o" ;;
320     armpe_little_vec)           tb="$tb pe-arm.o cofflink.o " ;;
321     armpe_big_vec)              tb="$tb pe-arm.o cofflink.o " ;;
322     armpei_little_vec)          tb="$tb pei-arm.o cofflink.o " ;;
323     armpei_big_vec)             tb="$tb pei-arm.o cofflink.o " ;;
324     aout0_big_vec)              tb="$tb aout0.o aout32.o stab-syms.o" ;;
325     aout_arm_big_vec)           tb="$tb aout-arm.o aout32.o stab-syms.o" ;;
326     aout_arm_little_vec)        tb="$tb aout-arm.o aout32.o stab-syms.o" ;;
327     aout_mips_big_vec)          tb="$tb mipsbsd.o aout32.o stab-syms.o" ;;
328     aout_mips_little_vec)       tb="$tb mipsbsd.o aout32.o stab-syms.o" ;;
329     apollocoff_vec)             tb="$tb coff-apollo.o" ;;
330     b_out_vec_big_host)         tb="$tb bout.o aout32.o stab-syms.o" ;;
331     b_out_vec_little_host)      tb="$tb bout.o aout32.o stab-syms.o" ;;
332 # start-sanitize-arc
333     bfd_elf32_littlearc_vec)    tb="$tb elf32-arc.o elf32.o $elf" ;;
334     bfd_elf32_bigarc_vec)       tb="$tb elf32-arc.o elf32.o $elf" ;;
335 # end-sanitize-arc
336     bfd_elf32_big_generic_vec)  tb="$tb elf32-gen.o elf32.o $elf" ;;
337     bfd_elf32_bigmips_vec)      tb="$tb elf32-mips.o elf32.o $elf ecofflink.o" ;;
338     bfd_elf32_hppa_vec)         tb="$tb elf32-hppa.o elf32.o $elf" ;;
339     bfd_elf32_i386_vec)         tb="$tb elf32-i386.o elf32.o $elf" ;;
340     bfd_elf32_i860_vec)         tb="$tb elf32-i860.o elf32.o $elf" ;;
341     bfd_elf32_little_generic_vec) tb="$tb elf32-gen.o elf32.o $elf" ;;
342     bfd_elf32_littlemips_vec)   tb="$tb elf32-mips.o elf32.o $elf ecofflink.o" ;;
343     bfd_elf32_m68k_vec)         tb="$tb elf32-m68k.o elf32.o $elf" ;;
344     bfd_elf32_m88k_vec)         tb="$tb elf32-m88k.o elf32.o $elf" ;;
345     bfd_elf32_powerpc_vec)      tb="$tb elf32-ppc.o elf32.o $elf" ;;
346     bfd_elf32_powerpcle_vec)    tb="$tb elf32-ppc.o elf32.o $elf" ;;
347     bfd_elf32_sparc_vec)        tb="$tb elf32-sparc.o elf32.o $elf" ;;
348     bfd_elf64_big_generic_vec)  tb="$tb elf64-gen.o elf64.o $elf"
349                                 target64=true ;;
350     bfd_elf64_little_generic_vec) tb="$tb elf64-gen.o elf64.o $elf"
351                                 target64=true ;;
352     bfd_elf64_sparc_vec)        tb="$tb elf64-sparc.o elf64.o $elf"
353                                 target64=true ;;
354     cisco_core_vec)             tb="$tb cisco-core.o" ;;
355     demo_64_vec)                tb="$tb demo64.o aout64.o stab-syms.o"
356                                 target64=true ;;
357     ecoff_big_vec)              tb="$tb coff-mips.o ecoff.o ecofflink.o" ;;
358     ecoff_little_vec)           tb="$tb coff-mips.o ecoff.o ecofflink.o" ;;
359     ecoffalpha_little_vec)      tb="$tb coff-alpha.o ecoff.o ecofflink.o"
360                                 target64=true ;;
361     h8300coff_vec)              tb="$tb coff-h8300.o reloc16.o" ;;
362     h8500coff_vec)              tb="$tb coff-h8500.o reloc16.o" ;;
363     host_aout_vec)              tb="$tb host-aout.o aout32.o stab-syms.o" ;;
364     hp300bsd_vec)               tb="$tb hp300bsd.o aout32.o stab-syms.o" ;;
365     hp300hpux_vec)              tb="$tb hp300hpux.o aout32.o stab-syms.o" ;;
366     i386aout_vec)               tb="$tb i386aout.o aout32.o stab-syms.o" ;;
367     i386bsd_vec)                tb="$tb i386bsd.o aout32.o stab-syms.o" ;;
368     i386dynix_vec)              tb="$tb i386dynix.o aout32.o stab-syms.o" ;;
369     i386coff_vec)               tb="$tb coff-i386.o cofflink.o" ;;
370     i386msdos_vec)              tb="$tb i386msdos.o" ;;
371     i386pe_vec)                 tb="$tb pe-i386.o cofflink.o " ;;
372     i386pei_vec)                tb="$tb pei-i386.o cofflink.o" ;;
373     i386linux_vec)              tb="$tb i386linux.o aout32.o stab-syms.o" ;;
374     i386lynx_aout_vec)          tb="$tb i386lynx.o lynx-core.o aout32.o stab-syms.o" ;;
375     i386lynx_coff_vec)          tb="$tb cf-i386lynx.o cofflink.o lynx-core.o stab-syms.o" ;;
376     i386mach3_vec)              tb="$tb i386mach3.o aout32.o stab-syms.o" ;;
377     i386netbsd_vec)             tb="$tb i386netbsd.o aout32.o stab-syms.o" ;;
378     i386os9k_vec)               tb="$tb i386os9k.o aout32.o stab-syms.o" ;;
379     icoff_big_vec)              tb="$tb coff-i960.o" ;;
380     icoff_little_vec)           tb="$tb coff-i960.o" ;;
381     ieee_vec)                   tb="$tb ieee.o" ;;
382     m68kcoff_vec)               tb="$tb coff-m68k.o cofflink.o" ;;
383     m68kcoffun_vec)             tb="$tb coff-u68k.o coff-m68k.o cofflink.o" ;;
384     m68klynx_aout_vec)          tb="$tb m68klynx.o lynx-core.o aout32.o stab-syms.o" ;;
385     m68klynx_coff_vec)          tb="$tb cf-m68klynx.o coff-m68k.o cofflink.o lynx-core.o stab-syms.o" ;;
386     m68knetbsd_vec)             tb="$tb m68knetbsd.o aout32.o stab-syms.o" ;;
387     m88kbcs_vec)                tb="$tb coff-m88k.o" ;;
388     newsos3_vec)                tb="$tb newsos3.o aout32.o stab-syms.o" ;;
389     nlm32_i386_vec)             tb="$tb nlm32-i386.o nlm32.o nlm.o" ;;
390     nlm32_sparc_vec)            tb="$tb nlm32-sparc.o nlm32.o nlm.o" ;;
391     nlm32_alpha_vec)            tb="$tb nlm32-alpha.o nlm32.o nlm.o"
392                                 target64=true ;;
393     riscix_vec)                 tb="$tb aout32.o riscix.o stab-syms.o" ;;
394     nlm32_powerpc_vec)          tb="$tb nlm32-ppc.o nlm32.o nlm.o" ;;
395     pc532netbsd_vec)            tb="$tb ns32knetbsd.o aout-ns32k.o stab-syms.o" ;;
396     pc532machaout_vec)          tb="$tb pc532-mach.o aout-ns32k.o stab-syms.o" ;;
397     rs6000coff_vec)             tb="$tb coff-rs6000.o" ;;
398     shcoff_vec)                 tb="$tb coff-sh.o cofflink.o" ;;
399 # start-sanitize-rce
400     rce_aout_vec)               tb="$tb aout-rce.o aout32.o stab-syms.o" ;;
401 # end-sanitize-rce
402     shlcoff_vec)                tb="$tb coff-sh.o cofflink.o" ;;
403     som_vec)                    tb="$tb som.o" ;;
404     sparclynx_aout_vec)         tb="$tb sparclynx.o lynx-core.o aout32.o stab-syms.o" ;;
405     sparclynx_coff_vec)         tb="$tb cf-sparclynx.o lynx-core.o stab-syms.o" ;;
406     sparcnetbsd_vec)            tb="$tb sparcnetbsd.o aout32.o stab-syms.o" ;;
407     sparccoff_vec)              tb="$tb coff-sparc.o" ;;
408     srec_vec)                   tb="$tb srec.o" ;;
409     sunos_big_vec)              tb="$tb sunos.o aout32.o stab-syms.o" ;;
410     symbolsrec_vec)             tb="$tb srec.o" ;;
411     tekhex_vec)                 tb="$tb tekhex.o" ;;
412     we32kcoff_vec)              tb="$tb coff-we32k.o" ;;
413     z8kcoff_vec)                tb="$tb coff-z8k.o reloc16.o" ;;
414     w65_vec)                    tb="$tb coff-w65.o reloc16.o" ;;
415     versados_vec)               tb="$tb versados.o" ;;
416
417     "")                 ;;
418     *) AC_MSG_ERROR(*** unknown target vector $vec) ;;
419     esac
420 done
421
422 # Target architecture .o files.
423 ta=`echo $selarchs | sed -e s/bfd_/cpu-/g -e s/_arch/.o/g`
424
425 # Weed out duplicate .o files.
426 f=""
427 for i in $tb ; do
428     case " $f " in
429     *" $i "*) ;;
430     *) f="$f $i" ;;
431     esac
432 done
433 tb="$f"
434
435 f=""
436 for i in $ta ; do
437     case " $f " in
438     *" $i "*) ;;
439     *) f="$f $i" ;;
440     esac
441 done
442 ta="$f"
443
444 bfd_backends="$tb"
445 bfd_machines="$ta"
446
447 if test x${all_targets} = xtrue ; then
448   bfd_backends="${bfd_backends}"' $(ALL_BACKENDS)'
449   bfd_machines="${bfd_machines}"' $(ALL_MACHINES)'
450   selvecs=
451   selarchs=
452 else    # all_targets is true
453   # Only set these if they will be nonempty, for the clever echo.
454   test -n "$selvecs" &&
455     selvecs=`echo $selvecs | sed -e 's/^/\&/' -e 's/ \(.\)/,\&\1/g'`
456   test -n "$selarchs" &&
457     selarchs=`echo $selarchs | sed -e 's/ \(.\)/,\1/g'`
458 fi      # all_targets is true
459
460 case ${host64}-${target64}-${want64} in
461   *true*)
462     wordsize=64
463     all_backends='$(BFD64_BACKENDS) $(BFD32_BACKENDS)'
464     ;;
465   false-false-false)
466     wordsize=32
467     all_backends='$(BFD32_BACKENDS)'
468     ;;
469 esac
470
471 AC_SUBST(wordsize)
472 AC_SUBST(all_backends)
473 AC_SUBST(bfd_backends)
474 AC_SUBST(bfd_machines)
475
476 tdefaults=""
477 test -n "${defvec}" && tdefaults="${tdefaults} -DDEFAULT_VECTOR=${defvec}"
478 test -n "${selvecs}" && tdefaults="${tdefaults} -DSELECT_VECS='${selvecs}'"
479 test -n "${selarchs}" && tdefaults="${tdefaults} -DSELECT_ARCHITECTURES='${selarchs}'"
480 AC_SUBST(tdefaults)
481
482 rm -f doc/config.status
483 AC_OUTPUT(Makefile doc/Makefile)