toplevel:
[deliverable/binutils-gdb.git] / config / acx.m4
1 # Autoconf M4 include file defining utility macros for complex Canadian
2 # cross builds.
3
4 dnl ####
5 dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
6 dnl # $build_alias or canonical $build if blank.
7 dnl # Used when we would use $build_alias, but empty is not OK.
8 AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_BUILD],
9 [AC_REQUIRE([AC_CANONICAL_BUILD]) []dnl
10 case ${build_alias} in
11 "") build_noncanonical=${build} ;;
12 *) build_noncanonical=${build_alias} ;;
13 esac
14 ]) []dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
15
16 dnl ####
17 dnl # _GCC_TOPLEV_NONCANONICAL_HOST
18 dnl # $host_alias, or $build_noncanonical if blank.
19 dnl # Used when we would use $host_alias, but empty is not OK.
20 AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_HOST],
21 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
22 case ${host_alias} in
23 "") host_noncanonical=${build_noncanonical} ;;
24 *) host_noncanonical=${host_alias} ;;
25 esac
26 ]) []dnl # _GCC_TOPLEV_NONCANONICAL_HOST
27
28 dnl ####
29 dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
30 dnl # $target_alias or $host_noncanonical if blank.
31 dnl # Used when we would use $target_alias, but empty is not OK.
32 AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_TARGET],
33 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
34 case ${target_alias} in
35 "") target_noncanonical=${host_noncanonical} ;;
36 *) target_noncanonical=${target_alias} ;;
37 esac
38 ]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
39
40 dnl ####
41 dnl # ACX_NONCANONICAL_BUILD
42 dnl # Like underscored version, but AC_SUBST's.
43 AC_DEFUN([ACX_NONCANONICAL_BUILD],
44 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
45 AC_SUBST(build_noncanonical)
46 ]) []dnl # ACX_NONCANONICAL_BUILD
47
48 dnl ####
49 dnl # ACX_NONCANONICAL_HOST
50 dnl # Like underscored version, but AC_SUBST's.
51 AC_DEFUN([ACX_NONCANONICAL_HOST],
52 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
53 AC_SUBST(host_noncanonical)
54 ]) []dnl # ACX_NONCANONICAL_HOST
55
56 dnl ####
57 dnl # ACX_NONCANONICAL_TARGET
58 dnl # Like underscored version, but AC_SUBST's.
59 AC_DEFUN([ACX_NONCANONICAL_TARGET],
60 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
61 AC_SUBST(target_noncanonical)
62 ]) []dnl # ACX_NONCANONICAL_TARGET
63
64 dnl ####
65 dnl # GCC_TOPLEV_SUBDIRS
66 dnl # GCC & friends build 'build', 'host', and 'target' tools. These must
67 dnl # be separated into three well-known subdirectories of the build directory:
68 dnl # build_subdir, host_subdir, and target_subdir. The values are determined
69 dnl # here so that they can (theoretically) be changed in the future. They
70 dnl # were previously reproduced across many different files.
71 dnl #
72 dnl # This logic really amounts to very little with autoconf 2.13; it will
73 dnl # amount to a lot more with autoconf 2.5x.
74 AC_DEFUN([GCC_TOPLEV_SUBDIRS],
75 [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
76 AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
77 # Prefix 'build-' so this never conflicts with target_subdir.
78 build_subdir="build-${build_noncanonical}"
79 # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories
80 if ( test $srcdir = . && test -d gcc ) \
81 || test -d $srcdir/../host-${host_noncanonical}; then
82 host_subdir="host-${host_noncanonical}"
83 else
84 host_subdir=.
85 fi
86 # No prefix.
87 target_subdir=${target_noncanonical}
88 AC_SUBST([build_subdir]) []dnl
89 AC_SUBST([host_subdir]) []dnl
90 AC_SUBST([target_subdir]) []dnl
91 ]) []dnl # GCC_TOPLEV_SUBDIRS
92
93
94 ####
95 # _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM
96 # or AC_INIT.
97 # These demand that AC_CANONICAL_SYSTEM be called beforehand.
98 AC_DEFUN([_NCN_TOOL_PREFIXES],
99 [ncn_tool_prefix=
100 test -n "$host_alias" && ncn_tool_prefix=$host_alias-
101 ncn_target_tool_prefix=
102 test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
103 ]) []dnl # _NCN_TOOL_PREFIXES
104
105 ####
106 # NCN_STRICT_CHECK_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])
107 # Like plain AC_CHECK_TOOLS, but require prefix if build!=target.
108
109 AC_DEFUN([NCN_STRICT_CHECK_TOOLS],
110 [AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
111 for ncn_progname in $2; do
112 if test -n "$ncn_tool_prefix"; then
113 AC_CHECK_PROG([$1], [${ncn_tool_prefix}${ncn_progname}],
114 [${ncn_tool_prefix}${ncn_progname}], , [$4])
115 fi
116 if test -z "$ac_cv_prog_$1" && test $build = $host ; then
117 AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
118 fi
119 test -n "$ac_cv_prog_$1" && break
120 done
121
122 if test -z "$ac_cv_prog_$1" ; then
123 ifelse([$3],[], [set dummy $2
124 if test $build = $host ; then
125 $1="[$]2"
126 else
127 $1="${ncn_tool_prefix}[$]2"
128 fi], [$1="$3"])
129 fi
130 ]) []dnl # NCN_STRICT_CHECK_TOOLS
131
132 ####
133 # NCN_STRICT_CHECK_TARGET_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path])
134 # Like CVS Autoconf AC_CHECK_TARGET_TOOLS, but require prefix if build!=target.
135
136 AC_DEFUN([NCN_STRICT_CHECK_TARGET_TOOLS],
137 [AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl
138 for ncn_progname in $2; do
139 if test -n "$ncn_target_tool_prefix"; then
140 AC_CHECK_PROG([$1], [${ncn_target_tool_prefix}${ncn_progname}],
141 [${ncn_target_tool_prefix}${ncn_progname}], , [$4])
142 fi
143 if test -z "$ac_cv_prog_$1" && test $build = $target ; then
144 AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4])
145 fi
146 test -n "$ac_cv_prog_$1" && break
147 done
148
149 if test -z "$ac_cv_prog_$1" ; then
150 ifelse([$3],[], [set dummy $2
151 if test $build = $target ; then
152 $1="[$]2"
153 else
154 $1="${ncn_target_tool_prefix}[$]2"
155 fi], [$1="$3"])
156 fi
157 ]) []dnl # NCN_STRICT_CHECK_TARGET_TOOLS
158
159 ###
160 # AC_PROG_CPP_WERROR
161 # Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which
162 # triggers warnings from the preprocessor. Will be in autoconf 2.58.
163 # For now, using this also overrides header checks to use only the
164 # preprocessor (matches 2.13 behavior; matching 2.58's behavior is a
165 # bit harder from here).
166 # Eventually autoconf will default to checking headers with the compiler
167 # instead, and we'll have to do this differently.
168
169 AC_DEFUN([AC_PROG_CPP_WERROR],
170 [AC_REQUIRE([AC_PROG_CPP])dnl
171 m4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD]))
172 ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
173
174 # Test for GNAT.
175 # We require the gnatbind program, and a compiler driver that
176 # understands Ada. We use the user's CC setting, already found.
177 #
178 # Sets the shell variable have_gnat to yes or no as appropriate, and
179 # substitutes GNATBIND.
180 AC_DEFUN([ACX_PROG_GNAT],
181 [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
182 AC_REQUIRE([AC_PROG_CC])
183 AC_CHECK_TOOL(GNATBIND, gnatbind, no)
184 AC_CACHE_CHECK([whether compiler driver understands Ada],
185 acx_cv_cc_gcc_supports_ada,
186 [cat >conftest.adb <<EOF
187 procedure conftest is begin null; end conftest;
188 EOF
189 acx_cv_cc_gcc_supports_ada=no
190 # There is a bug in old released versions of GCC which causes the
191 # driver to exit successfully when the appropriate language module
192 # has not been installed. This is fixed in 2.95.4, 3.0.2, and 3.1.
193 # Therefore we must check for the error message as well as an
194 # unsuccessful exit.
195 # Other compilers, like HP Tru64 UNIX cc, exit successfully when
196 # given a .adb file, but produce no object file. So we must check
197 # if an object file was really produced to guard against this.
198 errors=`(${CC} -c conftest.adb) 2>&1 || echo failure`
199 if test x"$errors" = x && test -f conftest.$ac_objext; then
200 acx_cv_cc_gcc_supports_ada=yes
201 fi
202 rm -f conftest.*])
203
204 if test x$GNATBIND != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
205 have_gnat=yes
206 else
207 have_gnat=no
208 fi
209 ])
210
211 dnl 'make compare' can be significantly faster, if cmp itself can
212 dnl skip bytes instead of using tail. The test being performed is
213 dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
214 dnl but we need to sink errors and handle broken shells. We also test
215 dnl for the parameter format "cmp file1 file2 skip1 skip2" which is
216 dnl accepted by cmp on some systems.
217 AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL],
218 [AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip,
219 [ echo abfoo >t1
220 echo cdfoo >t2
221 gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2'
222 if cmp t1 t2 2 2 > /dev/null 2>&1; then
223 if cmp t1 t2 1 1 > /dev/null 2>&1; then
224 :
225 else
226 gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16'
227 fi
228 fi
229 if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then
230 if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then
231 :
232 else
233 gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2'
234 fi
235 fi
236 rm t1 t2
237 ])
238 do_compare="$gcc_cv_prog_cmp_skip"
239 AC_SUBST(do_compare)
240 ])
241
242 dnl See whether we can include both string.h and strings.h.
243 AC_DEFUN([ACX_HEADER_STRING],
244 [AC_CACHE_CHECK([whether string.h and strings.h may both be included],
245 gcc_cv_header_string,
246 [AC_TRY_COMPILE([#include <string.h>
247 #include <strings.h>], , gcc_cv_header_string=yes, gcc_cv_header_string=no)])
248 if test $gcc_cv_header_string = yes; then
249 AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both <string.h> and <strings.h>.])
250 fi
251 ])
252
253 dnl See if stdbool.h properly defines bool and true/false.
254 dnl Check whether _Bool is built-in.
255 AC_DEFUN([ACX_HEADER_STDBOOL],
256 [AC_CACHE_CHECK([for working stdbool.h],
257 ac_cv_header_stdbool_h,
258 [AC_TRY_COMPILE([#include <stdbool.h>],
259 [bool foo = false;],
260 ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)])
261 if test $ac_cv_header_stdbool_h = yes; then
262 AC_DEFINE(HAVE_STDBOOL_H, 1,
263 [Define if you have a working <stdbool.h> header file.])
264 fi
265 AC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool,
266 [AC_TRY_COMPILE(,
267 [_Bool foo;],
268 gcc_cv_c__bool=yes, gcc_cv_c__bool=no)
269 ])
270 if test $gcc_cv_c__bool = yes; then
271 AC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.])
272 fi
273 ])
274
275 dnl See if hard links work and if not, try to substitute $1 or simple copy.
276 AC_DEFUN([ACX_PROG_LN],
277 [AC_MSG_CHECKING(whether ln works)
278 AC_CACHE_VAL(acx_cv_prog_LN,
279 [rm -f conftestdata_t
280 echo >conftestdata_f
281 if ln conftestdata_f conftestdata_t 2>/dev/null
282 then
283 acx_cv_prog_LN=ln
284 else
285 acx_cv_prog_LN=no
286 fi
287 rm -f conftestdata_f conftestdata_t
288 ])dnl
289 if test $acx_cv_prog_LN = no; then
290 LN="ifelse([$1],,cp,[$1])"
291 AC_MSG_RESULT([no, using $LN])
292 else
293 LN="$acx_cv_prog_LN"
294 AC_MSG_RESULT(yes)
295 fi
296 AC_SUBST(LN)dnl
297 ])
298
299 dnl GCC_TARGET_TOOL(PROGRAM, TARGET-VAR, HOST-VAR, IN-TREE-TOOL, LANGUAGE)
300 AC_DEFUN([GCC_TARGET_TOOL],
301 [AC_MSG_CHECKING(where to find the target $1)
302 if test "x${build}" != "x${host}" ; then
303 # Canadian cross, just use what we found
304 AC_MSG_RESULT(pre-installed)
305 else
306 ifelse([$4],,,
307 [ok=yes
308 case " ${configdirs} " in
309 *" patsubst([$4], [/.*], []) "*) ;;
310 *) ok=no ;;
311 esac
312 ifelse([$5],,,
313 [case ,${enable_languages}, in
314 *,$5,*) ;;
315 *) ok=no ;;
316 esac])
317 if test $ok = yes; then
318 # An in-tree tool is available and we can use it
319 $2='$$r/$(HOST_SUBDIR)/$4'
320 AC_MSG_RESULT(just compiled)
321 el])if test "x$target" = "x$host"; then
322 # We can use an host tool
323 $2='$($3)'
324 AC_MSG_RESULT(host tool)
325 else
326 # We need a cross tool
327 AC_MSG_RESULT(pre-installed)
328 fi
329 fi])
This page took 0.047524 seconds and 5 git commands to generate.