configure.ac: Add ia64-specific way to disable floats.
[grub.git] / configure.ac
1 # -*- autoconf -*-
2
3 # Process this file with autoconf to produce a configure script.
4
5 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010  Free Software Foundation, Inc.
6 #
7 # This configure.ac is free software; the author
8 # gives unlimited permission to copy and/or distribute it,
9 # with or without modifications, as long as this notice is preserved.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 # PARTICULAR PURPOSE.
15
16 dnl This configure script is complicated, because GRUB needs to deal
17 dnl with three potentially different types:
18 dnl
19 dnl   build  -- the environment for building GRUB
20 dnl   host   -- the environment for running utilities
21 dnl   target -- the environment for running GRUB
22 dnl
23 dnl In addition, GRUB needs to deal with a platform specification
24 dnl which specifies the system running GRUB, such as firmware.
25 dnl This is necessary because the target type in autoconf does not
26 dnl describe such a system very well.
27 dnl
28 dnl The current strategy is to use variables with no prefix (such as
29 dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
30 dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
31 dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
32 dnl used for the target type. See INSTALL for full list of variables.
33
34 AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
35
36 AC_CONFIG_AUX_DIR([build-aux])
37
38 # We don't want -g -O2 by default in CFLAGS
39 : ${CFLAGS=""}
40
41 # Checks for build, host and target systems.
42 AC_CANONICAL_BUILD
43 AC_CANONICAL_HOST
44 save_program_prefix="${program_prefix}"
45 AC_CANONICAL_TARGET
46 program_prefix="${save_program_prefix}"
47
48 AM_INIT_AUTOMAKE([1.10.1])
49 AC_PREREQ(2.60)
50 AC_CONFIG_SRCDIR([include/grub/dl.h])
51 AC_CONFIG_HEADER([config-util.h])
52
53 # Program name transformations
54 AC_ARG_PROGRAM
55 grub_TRANSFORM([grub-bios-setup])
56 grub_TRANSFORM([grub-editenv])
57 grub_TRANSFORM([grub-install])
58 grub_TRANSFORM([grub-mkconfig])
59 grub_TRANSFORM([grub-mkfont])
60 grub_TRANSFORM([grub-mkimage])
61 grub_TRANSFORM([grub-glue-efi])
62 grub_TRANSFORM([grub-mklayout])
63 grub_TRANSFORM([grub-mkpasswd-pbkdf2])
64 grub_TRANSFORM([grub-mkrelpath])
65 grub_TRANSFORM([grub-mkrescue])
66 grub_TRANSFORM([grub-probe])
67 grub_TRANSFORM([grub-reboot])
68 grub_TRANSFORM([grub-script-check])
69 grub_TRANSFORM([grub-set-default])
70 grub_TRANSFORM([grub-sparc64-setup])
71 grub_TRANSFORM([grub-render-label])
72 grub_TRANSFORM([grub-file])
73
74 # Optimization flag.  Allow user to override.
75 if test "x$TARGET_CFLAGS" = x; then
76   TARGET_CFLAGS="$TARGET_CFLAGS -Os"
77 fi
78
79 # Default HOST_CPPFLAGS
80 HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
81 HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
82
83 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
84
85 case "$target_cpu" in
86   i[[3456]]86)  target_cpu=i386 ;;
87   amd64)        target_cpu=x86_64 ;;
88   sparc)        target_cpu=sparc64 ;;
89   mipsel|mips64el)
90                 target_cpu=mipsel
91                 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
92                 ;;
93   mips|mips64)
94                 target_cpu=mips
95                 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
96                 ;;
97   arm*)
98                 target_cpu=arm
99                 ;;
100   aarch64*)
101                 target_cpu=arm64
102                 ;;
103 esac
104
105 # Specify the platform (such as firmware).
106 AC_ARG_WITH([platform],
107             AS_HELP_STRING([--with-platform=PLATFORM],
108                            [select the host platform [[guessed]]]))
109
110 # Guess the platform if not specified.
111 if test "x$with_platform" = x; then
112   case "$target_cpu"-"$target_vendor" in
113     i386-apple) platform=efi ;;
114     i386-*) platform=pc ;;
115     x86_64-apple) platform=efi ;;
116     x86_64-*) platform=pc ;;
117     powerpc-*) platform=ieee1275 ;;
118     powerpc64-*) platform=ieee1275 ;;
119     sparc64-*) platform=ieee1275 ;;
120     mipsel-*) platform=loongson ;;
121     mips-*) platform=arc ;;
122     ia64-*) platform=efi ;;
123     arm-*) platform=uboot ;;
124     arm64-*) platform=efi ;;
125     *)
126       AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
127       platform=none
128       ;;
129   esac
130 else
131   platform="$with_platform"
132 fi
133
134 case "$target_cpu"-"$platform" in
135   x86_64-efi) ;;
136   x86_64-emu) ;;
137   x86_64-xen) ;;
138   x86_64-none) ;;
139   x86_64-*) target_cpu=i386 ;;
140   powerpc64-ieee1275) target_cpu=powerpc ;;
141 esac
142
143 # Check if the platform is supported, make final adjustments.
144 case "$target_cpu"-"$platform" in
145   i386-efi) ;;
146   x86_64-efi) ;;
147   i386-xen) ;;
148   x86_64-xen) ;;
149   i386-pc) ;;
150   i386-multiboot) ;;
151   i386-coreboot) ;;
152   i386-linuxbios) platform=coreboot ;;
153   i386-ieee1275) ;;
154   i386-qemu) ;;
155   powerpc-ieee1275) ;;
156   sparc64-ieee1275) ;;
157   ia64-efi) ;;
158   mips-qemu_mips) ;;
159   mips-qemu-mips) platform=qemu_mips;;
160   mips-arc) ;;
161   mipsel-arc) ;;
162   mipsel-qemu_mips) ;;
163   mipsel-qemu-mips) platform=qemu_mips;;
164   mipsel-yeeloong) platform=loongson ;;
165   mipsel-fuloong) platform=loongson ;;
166   mipsel-loongson) ;;
167   arm-uboot) ;;
168   arm-efi) ;;
169   arm64-efi) ;;
170   *-emu) ;;
171   *-none) ;;
172   *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
173 esac
174
175 if test x$platform != xemu ; then
176    case "$target_cpu" in
177         i386 | powerpc) target_m32=1 ;;
178         x86_64 | sparc64) target_m64=1 ;;
179    esac
180 fi
181
182 if test x"$target_cpu-$platform" = xsparc64-emu ; then
183    target_m64=1
184 fi
185
186 case "$target_os" in
187   windows* | mingw32*) target_os=cygwin ;;
188 esac
189
190 # This normalizes the names, and creates a new variable ("host_kernel")
191 # while at it, since the mapping is not always 1:1 (e.g. different OSes
192 # using the same kernel type).
193 case "$host_os" in
194   gnu*)                         host_kernel=hurd ;;
195   linux*)                       host_kernel=linux ;;
196   freebsd* | kfreebsd*-gnu)     host_kernel=kfreebsd ;;
197   netbsd*)                      host_kernel=netbsd ;;
198   solaris*)                     host_kernel=illumos ;;
199   darwin*)                      host_kernel=xnu ;;
200   cygwin | windows* | mingw32*) host_kernel=windows ;;
201 esac
202
203 case "$host_os" in
204   cygwin | windows* | mingw32*) have_exec=n ;;
205   aros*) have_exec=n ;;
206   *) have_exec=y;;
207 esac
208
209 case "$platform" in
210   coreboot)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
211   multiboot)    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
212   efi)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
213   xen)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
214   ieee1275)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
215   uboot)        machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
216   qemu)         machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
217   pc)           machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
218   emu)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
219   loongson)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
220   qemu_mips)    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
221   arc)  machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
222 esac
223 if test x${target_cpu} = xmipsel ; then
224    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
225 else
226    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
227 fi
228
229 case "${target_cpu}-$platform" in
230      mips-arc)
231         TARGET_LINK_ADDR=0x88200000
232         TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
233         ;;
234      mipsel-arc)
235         TARGET_LINK_ADDR=0x80700000
236         TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
237         ;;
238      mips*-qemu_mips | mips*-loongson)
239         TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
240         ;;
241 esac
242
243 AC_SUBST(TARGET_LINK_ADDR)
244 AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
245
246 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
247
248 AC_SUBST(host_cpu)
249 AC_SUBST(host_os)
250 AC_SUBST(host_kernel)
251
252 AC_SUBST(target_cpu)
253 AC_SUBST(platform)
254
255 # Define default variables
256
257 have_with_bootdir=n
258 AC_ARG_WITH([bootdir],
259             AS_HELP_STRING([--with-bootdir=DIR],
260                            [set the name of /boot directory [[guessed]]]),
261                            [have_with_bootdir=y],
262                            [have_with_bootdir=n])
263 if test x$have_with_bootdir = xy; then
264    bootdirname="$with_bootdir"
265 else
266    case "$host_os" in
267      netbsd* | openbsd*)
268         # Because /boot is used for the boot block in NetBSD and OpenBSD,
269            bootdirname=''      ;;
270      *)    bootdirname='boot'  ;;
271    esac
272 fi
273
274 AC_SUBST(bootdirname)
275 AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
276     [Default boot directory name]")
277
278 AC_ARG_WITH([grubdir],
279             AS_HELP_STRING([--with-grubdir=DIR],
280                            [set the name of grub directory [[guessed]]]),
281                            [grubdirname="$with_grubdir"],
282                            [grubdirname="$PACKAGE"])
283
284 AC_SUBST(grubdirname)
285 AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
286     [Default grub directory name])
287
288 #
289 # Checks for build programs.
290 #
291
292 # Although cmp is listed in the GNU Coding Standards as a command which
293 # can used directly, OpenBSD lacks cmp in the default installation.
294 AC_CHECK_PROGS([CMP], [cmp])
295 if test "x$CMP" = x; then
296   AC_MSG_ERROR([cmp is not found])
297 fi
298
299 AC_CHECK_PROGS([YACC], [bison])
300 if test "x$YACC" = x; then
301   AC_MSG_ERROR([bison is not found])
302 fi
303
304 AC_PROG_RANLIB
305 AC_PROG_INSTALL
306 AC_PROG_AWK
307 AC_PROG_LEX
308 AC_PROG_YACC
309 AC_PROG_MAKE_SET
310 AC_PROG_MKDIR_P
311 AC_PROG_LN_S
312
313 if test "x$LEX" = "x:"; then
314   AC_MSG_ERROR([flex is not found])
315 else
316   version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
317   if test -n "$version" -a "$version" -ge 20535; then
318     :
319   else
320     AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
321   fi
322 fi
323
324 # These are not a "must".
325 AC_PATH_PROGS(MAKEINFO, makeinfo true)
326
327 #
328 # Checks for host programs.
329 #
330
331 AC_PROG_CC
332 gl_EARLY
333 AC_PROG_CXX
334 AM_PROG_CC_C_O
335 AM_PROG_AS
336
337 # Must be GCC.
338 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
339
340 AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
341
342 AC_GNU_SOURCE
343 AM_GNU_GETTEXT([external])
344 AC_SYS_LARGEFILE
345
346 # Identify characteristics of the host architecture.
347 unset ac_cv_c_bigendian
348
349 if test x"$target_cpu-$platform" = xsparc64-emu ; then
350   CFLAGS="$CFLAGS -m64"
351   HOST_CFLAGS="$HOST_CFLAGS -m64"
352 fi
353
354 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
355 HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"
356
357 AC_C_BIGENDIAN
358 AC_CHECK_SIZEOF(void *)
359 AC_CHECK_SIZEOF(long)
360
361 case "$host_os" in
362   cygwin | windows* | mingw32*)
363      HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
364      CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
365      AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
366    ;;
367 esac
368
369 case "$host_os" in
370   cygwin | windows* | mingw32* | aros*)
371      ;;
372   *)
373      AC_CHECK_SIZEOF(off_t)
374      test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
375 esac
376
377 if test x$USE_NLS = xno; then
378   HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
379 fi
380
381 if test "x$cross_compiling" = xyes; then
382   AC_MSG_WARN([cannot generate manual pages while cross compiling])
383 else
384   AC_PATH_PROG(HELP2MAN, help2man)
385 fi
386
387 # Check for functions and headers.
388 AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
389 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
390
391 AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
392 #include <sys/param.h>
393 #include <sys/mount.h>])
394
395 AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
396 #include <sys/param.h>
397 #include <sys/mount.h>])
398
399 # For opendisk() and getrawpartition() on NetBSD.
400 # Used in util/deviceiter.c and in util/hostdisk.c.
401 AC_CHECK_HEADER([util.h], [
402   AC_CHECK_LIB([util], [opendisk], [
403     LIBUTIL="-lutil"
404     AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
405   ])
406   AC_CHECK_LIB([util], [getrawpartition], [
407     LIBUTIL="-lutil"
408     AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
409   ])
410 ])
411 AC_SUBST([LIBUTIL])
412
413 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
414   SAVED_CFLAGS="$CFLAGS"
415   CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
416   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
417 int va_arg_func (int fixed, va_list args);]], [[]])],
418       [grub_cv_host_cc_wtrampolines=yes],
419       [grub_cv_host_cc_wtrampolines=no])
420   CFLAGS="$SAVED_CFLAGS"
421 ])
422
423 if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
424   HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
425 fi
426
427 #
428 # Check for host and build compilers.
429 #
430 HOST_CC=$CC
431 AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
432 test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
433 BUILD_CPP="$BUILD_CC -E"
434
435 case "$build_os" in
436   haiku*)                               BUILD_LIBM= ;;
437   *)                                    BUILD_LIBM=-lm ;;
438 esac
439
440 dnl FIXME proper test seems to require too deep dive into Autoconf internals.
441 dnl For now just list known platforms that we support.
442
443 case "$build_os" in
444   cygwin*|mingw32*|mingw64*)            BUILD_EXEEXT=.exe ;;
445   *)                                    BUILD_EXEEXT= ;;
446 esac
447 AC_SUBST(BUILD_EXEEXT)
448
449 # For gnulib.
450 gl_INIT
451
452 WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value  -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
453 EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2"
454
455 HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
456
457 AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
458   SAVED_CFLAGS="$CFLAGS"
459   grub_cv_cc_w_extra_flags=
460   for x in $EXTRA_WARN_FLAGS; do
461       CFLAGS="$HOST_CFLAGS $x -Werror"
462       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
463       if test x$flag = x1 ; then
464          grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
465       fi
466   done
467   CFLAGS="$SAVED_CFLAGS"
468 ])
469
470 HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
471
472 #
473 # Check for target programs.
474 #
475
476 # Find tools for the target.
477 if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
478   tmp_ac_tool_prefix="$ac_tool_prefix"
479   ac_tool_prefix=$target_alias-
480
481   AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
482                  [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
483   AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
484   AC_CHECK_TOOL(TARGET_STRIP, strip)
485   AC_CHECK_TOOL(TARGET_NM, nm)
486   AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
487
488   ac_tool_prefix="$tmp_ac_tool_prefix"
489 else
490   if test "x$TARGET_CC" = x; then
491     TARGET_CC=$CC
492   fi
493   AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
494   AC_CHECK_TOOL(TARGET_STRIP, strip)
495   AC_CHECK_TOOL(TARGET_NM, nm)
496   AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
497 fi
498
499 AC_SUBST(HOST_CC)
500 AC_SUBST(BUILD_CC)
501 AC_SUBST(BUILD_CFLAGS)
502 AC_SUBST(BUILD_CPPFLAGS)
503 AC_SUBST(BUILD_LDFLAGS)
504 AC_SUBST(TARGET_CC)
505 AC_SUBST(TARGET_NM)
506 AC_SUBST(TARGET_RANLIB)
507 AC_SUBST(TARGET_STRIP)
508 AC_SUBST(TARGET_OBJCOPY)
509
510 # Test the C compiler for the target environment.
511 tmp_CC="$CC"
512 tmp_CFLAGS="$CFLAGS"
513 tmp_LDFLAGS="$LDFLAGS"
514 tmp_CPPFLAGS="$CPPFLAGS"
515 tmp_LIBS="$LIBS"
516 CC="$TARGET_CC"
517 CFLAGS="$TARGET_CFLAGS"
518 CPPFLAGS="$TARGET_CPPFLAGS"
519 LDFLAGS="$TARGET_LDFLAGS"
520 LIBS=""
521
522 # debug flags.
523 TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
524 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
525
526 if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
527 TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
528 fi
529
530 TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
531
532 AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
533   LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
534
535   grub_cv_target_cc_w_extra_flags=
536   for x in $EXTRA_WARN_FLAGS; do
537       CFLAGS="$TARGET_CFLAGS $x -Werror"
538       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
539 asm (".globl start; start:");
540 void __main (void);
541 void __main (void) {}
542 int main (void);
543 ]], [[]])], [flag=1], [flag=0])
544       if test x$flag = x1 ; then
545          grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
546       fi
547   done
548 ])
549
550 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
551
552 AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang],
553 [
554 CFLAGS="$TARGET_CFLAGS"
555 AC_COMPILE_IFELSE(
556 [AC_LANG_PROGRAM([], [[
557 #ifdef __clang__
558 #error "is clang"
559 #endif
560 ]])],
561 [grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
562
563 AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
564 test_program=
565 case "x$target_cpu-$platform" in
566      xmips-* | xmipsel-*)
567         test_program=mips
568         ;;
569      xi386-pc)
570        test_program=i386-pc
571         ;;
572      xi386-* | xx86_64-*)
573        test_program=i386
574         ;;
575      xpowerpc-* | xsparc64-* | xarm-*)
576         test_program=$target_cpu
577         ;;
578 esac
579 if test x"$test_program" = x ; then
580   grub_cv_cc_target_asm_compile=
581 else
582   found=no
583   for arg in "" "-no-integrated-as"; do
584     cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S"
585     echo "Running $cmdline" >&AS_MESSAGE_LOG_FD
586     if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
587       grub_cv_cc_target_asm_compile="$arg"
588       found=yes
589       break
590     fi
591   done
592   if test x"$found" = xno ; then
593     AC_MSG_ERROR([could not compile assembly])
594   fi
595 fi
596 ])
597
598 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile"
599
600 if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
601   TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
602 fi
603
604 if test "x$target_m32" = x1; then
605   # Force 32-bit mode.
606   TARGET_CFLAGS="$TARGET_CFLAGS -m32"
607   TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
608   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
609   TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
610   TARGET_MODULE_FORMAT="elf32"
611 fi
612
613 if test "x$target_m64" = x1; then
614   # Force 64-bit mode.
615   TARGET_CFLAGS="$TARGET_CFLAGS -m64"
616   TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
617   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
618   TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
619   TARGET_MODULE_FORMAT="elf64"
620 fi
621
622 if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
623    TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
624 fi
625
626 # on mips redirect cache flushing function to non-existant one.
627 if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
628   AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
629     CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
630     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
631         [grub_cv_cc_mflush_func=yes],
632         [grub_cv_cc_mflush_func=no])
633   ])
634
635   if test "x$grub_cv_cc_mflush_func" = xyes; then
636     TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
637   fi
638 fi
639
640
641 # Force no alignment to save space on i386.
642 if test "x$target_cpu" = xi386; then
643   AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
644     CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
645     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
646         [grub_cv_cc_falign_loop=yes],
647         [grub_cv_cc_falign_loop=no])
648   ])
649
650   AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
651     CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
652     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
653         [grub_cv_cc_malign_loop=yes],
654         [grub_cv_cc_malign_loop=no])
655   ])
656
657   if test "x$grub_cv_cc_falign_loop" = xyes; then
658     TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
659   elif test "x$grub_cv_cc_malign_loop" = xyes; then
660     TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
661   fi
662 fi
663
664 AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
665     CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
666     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
667         [grub_cv_cc_freg_struct_return=yes],
668         [grub_cv_cc_freg_struct_return=no])
669 ])
670
671 if test "x$grub_cv_cc_freg_struct_return" = xyes; then
672     TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
673 fi
674
675 if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
676   # Some toolchains enable these features by default, but they need
677   # registers that aren't set up properly in GRUB.
678   TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
679 fi
680
681 # GRUB doesn't use float or doubles at all. Yet some toolchains may decide
682 # that floats are a good fit to run instead of what's written in the code.
683 # Given that floating point unit is disabled (if present to begin with)
684 # when GRUB is running which may result in various hard crashes.
685 if test x"$platform" != xemu ; then
686   AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
687     grub_cv_target_cc_soft_float=no
688     if test "x$target_cpu" = xarm64; then
689        CFLAGS="$TARGET_CFLAGS -march=armv8-a+nofp+nosimd -Werror"
690        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
691                          [grub_cv_target_cc_soft_float="-march=armv8-a+nofp+nosimd"], [])
692     fi
693     if test "x$target_cpu" = xia64; then
694        CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
695        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
696                          [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
697     fi
698     for cand in "-Xclang -msoft-float -Xclang -no-implicit-float" \
699                 "-Xclang -msoft-float" "-msoft-float"; do
700       if test x"$grub_cv_target_cc_soft_float" != xno ; then
701         break
702       fi
703       CFLAGS="$TARGET_CFLAGS $cand -Werror"
704       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
705                         [grub_cv_target_cc_soft_float="$cand"], [])
706     done
707   ])
708
709   if test x"$grub_cv_target_cc_soft_float" = xno ; then
710     AC_MSG_ERROR([could not force soft-float])
711   fi
712
713   case x"$grub_cv_target_cc_soft_float" in
714     x"-Xclang"*)
715       # A trick so that clang doesn't see it on link stаge
716       TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
717       ;;
718     *)
719       TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
720       ;;
721   esac
722   TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
723 fi
724
725 if test x"$target_cpu" = xsparc64 ; then
726   AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
727     grub_cv_target_cc_mno_app_regs=no
728     for cand in "-mllvm -sparc-reserve-app-registers" \
729                 "-mno-app-regs"; do
730       if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
731         break
732       fi
733       CFLAGS="$TARGET_CFLAGS $cand -Werror"
734       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
735                         [grub_cv_target_cc_mno_app_regs="$cand"], [])
736     done
737   ])
738
739   if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
740     AC_MSG_ERROR([could not reserve application registers])
741   fi
742   if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
743     # A trick so that clang doesn't see it on link stаge
744     TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
745   else
746     TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
747   fi
748
749   AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
750     grub_cv_target_cc_mno_relax=no
751     for cand in "-mno-relax" "-Wl,--no-relax"; do
752       if test x"$grub_cv_target_cc_mno_relax" != xno ; then
753         break
754       fi
755       LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
756       CFLAGS="$TARGET_CFLAGS -Werror"
757       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
758             asm (".globl start; start:");
759             void __main (void);
760             void __main (void) {}
761             int main (void);
762             ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
763     done
764   ])
765   LDFLAGS="$TARGET_LDFLAGS"
766   CFLAGS="$TARGET_CFLAGS"
767
768   if test x"$grub_cv_target_cc_mno_relax" = xno ; then
769     AC_MSG_ERROR([could not find no-relax options])
770   fi
771   TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
772 fi
773
774 # By default, GCC 4.4 generates .eh_frame sections containing unwind
775 # information in some cases where it previously did not. GRUB doesn't need
776 # these and they just use up vital space. Restore the old compiler
777 # behaviour.
778 AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
779   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
780   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
781       [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
782       [grub_cv_cc_fno_dwarf2_cfi_asm=no])
783 ])
784
785 if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
786   TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
787 fi
788
789 if test x"$target_os" = xcygwin; then
790   AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
791     CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
792     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
793                       [grub_cv_cc_no_reorder_functions=yes],
794                       [grub_cv_cc_no_reorder_functions=no])
795   ])
796 fi
797
798 if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
799   TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
800 fi
801
802 # By default, GCC 4.6 generates .eh_frame sections containing unwind
803 # information in some cases where it previously did not. GRUB doesn't need
804 # these and they just use up vital space. Restore the old compiler
805 # behaviour.
806 AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
807   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
808   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
809       [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
810       [grub_cv_cc_fno_asynchronous_unwind_tables=no])
811 ])
812
813 if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
814   TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
815 fi
816
817 AC_ARG_ENABLE([efiemu],
818               [AS_HELP_STRING([--enable-efiemu],
819                              [build and install the efiemu runtimes (default=guessed)])])
820 if test x"$enable_efiemu" = xno ; then
821   efiemu_excuse="explicitly disabled"
822 fi
823 if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
824   efiemu_excuse="not available on cygwin"
825 fi
826 if test x"$target_cpu" != xi386 ; then
827   efiemu_excuse="only available on i386"
828 fi
829 if test x"$platform" = xefi ; then
830   efiemu_excuse="not available on efi"
831 fi
832 if test x"$efiemu_excuse" = x ; then
833   AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
834     CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
835     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
836                       [grub_cv_cc_efiemu=yes],
837                       [grub_cv_cc_efiemu=no])
838   ])
839   if test x$grub_cv_cc_efiemu = xno; then
840      efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
841   fi
842 fi
843 if test x"$efiemu_excuse" = x ; then
844   AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
845     grub_cv_target_cc_efiemu64_link_format=unknown
846     for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
847       CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
848       LDFLAGS="-m64 -Wl,$format -nostdlib -static"
849       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
850       asm (".globl start; start:");
851       asm (".globl _start; _start:");
852       asm (".globl __start; __start:");
853       void __main (void);
854       void __main (void) {}
855       ]], [[]])], [flag=1], [flag=0])
856       if test x"$flag" = x1; then
857         grub_cv_target_cc_efiemu64_link_format="$format"
858         break
859       fi
860     done])
861   if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
862     efiemu_excuse="no suitable link format for efiemu64 found"
863   else
864     EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
865   fi
866 fi
867 if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
868   AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
869 fi
870 if test x"$efiemu_excuse" = x ; then
871 enable_efiemu=yes
872 else
873 enable_efiemu=no
874 fi
875 AC_SUBST([enable_efiemu])
876 AC_SUBST([EFIEMU64_LINK_FORMAT])
877
878 CFLAGS="$TARGET_CFLAGS"
879
880
881 if test x"$platform" = xemu ; then
882   TARGET_OBJ2ELF=
883   grub_cv_target_cc_link_format=
884   case "$host_os" in
885     *darwin* | *mac*)
886        grub_cv_target_cc_link_format="-arch,${target_cpu}"
887        TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
888         ;;
889     *windows* | *cygwin* | *mingw*)
890       if test x${target_cpu} = xi386 ; then
891         grub_cv_target_cc_link_format=-mi386pe
892         TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
893       fi
894       if test x${target_cpu} = xx86_64 ; then
895         grub_cv_target_cc_link_format=-mi386pep
896         TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
897       fi
898       TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
899       ;;
900   esac
901 elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
902   AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
903     grub_cv_target_cc_link_format=unknown
904     for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
905       if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
906         continue
907       fi
908       if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
909         continue
910       fi
911       CFLAGS="$TARGET_CFLAGS"
912       LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
913       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
914       asm (".globl start; start:");
915       asm (".globl _start; _start:");
916       asm (".globl __start; __start:");
917       void __main (void);
918       void __main (void) {}
919       ]], [[]])], [flag=1], [flag=0])
920       if test x"$flag" = x1; then
921         grub_cv_target_cc_link_format="$format"
922         break
923       fi
924     done])
925   if test x"$grub_cv_target_cc_link_format" = xunknown; then
926     AC_MSG_ERROR([no suitable link format found])
927   fi
928   TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
929   if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
930     TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
931   fi
932   if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
933     TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
934   fi
935 fi
936
937 if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
938    TARGET_APPLE_LINKER=1
939    AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
940    if test "x$TARGET_OBJCONV" = x ; then
941       AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
942    fi
943    if test "x$TARGET_OBJCONV" = x ; then
944       AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
945    fi
946    TARGET_IMG_LDSCRIPT=
947    TARGET_IMG_CFLAGS="-static"
948    TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
949    TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
950    TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
951    TARGET_LDFLAGS_OLDMAGIC=""
952 elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
953   TARGET_APPLE_LINKER=0
954   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
955   TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
956   TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
957   TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
958   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
959   TARGET_IMG_CFLAGS=
960 else
961   TARGET_APPLE_LINKER=0
962   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
963   TARGET_IMG_LDSCRIPT=
964   TARGET_IMG_LDFLAGS='-Wl,-N'
965   TARGET_IMG_LDFLAGS_AC='-Wl,-N'
966   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
967   TARGET_IMG_CFLAGS=
968 fi
969
970 AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
971
972
973 LDFLAGS="$TARGET_LDFLAGS"
974
975 if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
976   # Use large model to support 4G memory
977   AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
978     CFLAGS="$TARGET_CFLAGS -mcmodel=large"
979     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
980                       [grub_cv_cc_mcmodel=yes],
981                       [grub_cv_cc_mcmodel=no])
982   ])
983   if test "x$grub_cv_cc_mcmodel" = xyes; then
984     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
985   elif test "$target_cpu" = sparc64; then
986     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
987   fi
988 fi
989
990 if test "$target_cpu"-"$platform" = x86_64-efi; then
991   # EFI writes to stack below %rsp, we must not use the red zone
992   AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
993     CFLAGS="$TARGET_CFLAGS -mno-red-zone"
994     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
995                       [grub_cv_cc_no_red_zone=yes],
996                       [grub_cv_cc_no_red_zone=no])
997   ])
998   if test "x$grub_cv_cc_no_red_zone" = xno; then
999     AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
1000   fi
1001
1002   TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
1003 fi
1004
1005 if test "x$target_cpu" = xarm; then
1006   AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
1007     CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
1008     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1009                       [grub_cv_cc_mlong_calls=yes],
1010                       [grub_cv_cc_mlong_calls=no])
1011   ])
1012   if test "x$grub_cv_cc_mlong_calls" = xyes; then
1013     TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
1014   fi
1015   AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
1016     CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
1017     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1018                       [grub_cv_cc_mthumb_interwork=yes],
1019                       [grub_cv_cc_mthumb_interwork=no])
1020   ])
1021   if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
1022     TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
1023   elif test "x$grub_cv_cc_target_clang" = xno ; then
1024     AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
1025   else
1026     CFLAGS="$TARGET_CFLAGS"
1027     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1028 #if defined (__thumb__) && !defined (__thumb2__)
1029 #error thumb without interworking
1030 #endif
1031 ]])],
1032                       [no_interwork_ok=yes],
1033                       [no_interwork_ok=no])
1034     if test x$no_interwork_ok = xno ; then
1035        AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
1036     fi
1037   fi
1038 fi
1039
1040 AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
1041   CFLAGS="$TARGET_CFLAGS -Qn -Werror"
1042   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1043                     [grub_cv_target_cc_qn=yes],
1044                     [grub_cv_target_cc_qn=no])])
1045 if test "x$grub_cv_target_cc_qn" = xyes; then
1046   TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
1047 fi
1048
1049 #
1050 # Compiler features.
1051 #
1052
1053 CFLAGS="$TARGET_CFLAGS"
1054
1055 # Position independent executable.
1056 grub_CHECK_PIE
1057 [# Need that, because some distributions ship compilers that include
1058 # `-fPIE' in the default specs.
1059 if [ x"$pie_possible" = xyes ]; then
1060   TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
1061 fi]
1062
1063 CFLAGS="$TARGET_CFLAGS"
1064
1065 # Position independent executable.
1066 grub_CHECK_PIC
1067 [# On most platforms we don't want PIC as it only makes relocations harder
1068 # and code less efficient. On mips we want to have one got table per module
1069 # and reload $gp in every function.
1070 # GCC implements it using symbol __gnu_local_gp in non-PIC as well.
1071 # However with clang we need PIC for this reloading to happen.
1072 # Since default varies across dictributions use either -fPIC or -fno-PIC
1073 # explicitly.
1074 if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
1075    TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
1076 elif [ x"$pic_possible" = xyes ]; then
1077    TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
1078 fi]
1079
1080 CFLAGS="$TARGET_CFLAGS"
1081
1082 # Smashing stack protector.
1083 grub_CHECK_STACK_PROTECTOR
1084 # Need that, because some distributions ship compilers that include
1085 # `-fstack-protector' in the default specs.
1086 if test "x$ssp_possible" = xyes; then
1087   TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
1088 fi
1089
1090 CFLAGS="$TARGET_CFLAGS"
1091
1092 grub_CHECK_STACK_ARG_PROBE
1093 # Cygwin's GCC uses alloca() to probe the stackframe on static
1094 # stack allocations above some threshold.
1095 if test x"$sap_possible" = xyes; then
1096   TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1097 fi
1098
1099 CFLAGS="$TARGET_CFLAGS"
1100
1101 # -mno-unaligned-access -mstrict-align
1102 if test "$target_cpu" = arm; then
1103   AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
1104     grub_cv_target_cc_strict_align=
1105     for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1106       CFLAGS="$TARGET_CFLAGS $arg -Werror"
1107       LDFLAGS="$TARGET_LDFLAGS"
1108       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1109       if test x"$flag" = x1; then
1110         grub_cv_target_cc_strict_align="$arg"
1111         break
1112       fi
1113     done])
1114
1115   TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1116   if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1117     TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
1118   fi
1119   AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1120   [CFLAGS="$TARGET_CFLAGS"
1121    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1122 #ifdef __ARM_FEATURE_UNALIGNED
1123 #error "unaligned"
1124 #endif
1125      ]])],
1126      [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1127   if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1128     AC_MSG_ERROR([compiler generates unaligned accesses])
1129   fi
1130 fi
1131
1132 # Set them to their new values for the tests below.
1133 CC="$TARGET_CC"
1134 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1135 CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
1136 else
1137 CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
1138 fi
1139 CPPFLAGS="$TARGET_CPPFLAGS"
1140 if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
1141 TARGET_LIBGCC=
1142 else
1143 TARGET_LIBGCC=-lgcc
1144 fi
1145
1146 LIBS="$TARGET_LIBGCC"
1147
1148 grub_ASM_USCORE
1149 if test "x$TARGET_APPLE_LINKER" = x0 ; then
1150 if test x$grub_cv_asm_uscore = xyes; then
1151 DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1152 else
1153 DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1154 fi
1155 CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1156 fi
1157
1158 # Check for libgcc symbols
1159 AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
1160
1161 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1162 CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1163 else
1164 CFLAGS="$TARGET_CFLAGS -nostdlib"
1165 fi
1166 LIBS=""
1167
1168 # Defined in aclocal.m4.
1169 grub_PROG_TARGET_CC
1170 if test "x$TARGET_APPLE_LINKER" != x1 ; then
1171 grub_PROG_OBJCOPY_ABSOLUTE
1172 fi
1173 grub_PROG_LD_BUILD_ID_NONE
1174 if test "x$target_cpu" = xi386; then
1175   if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1176     if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1177       # Check symbols provided by linker script.
1178       CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1179     fi
1180     grub_CHECK_BSS_START_SYMBOL
1181     grub_CHECK_END_SYMBOL
1182   fi
1183   CFLAGS="$TARGET_CFLAGS"
1184 fi
1185
1186 grub_PROG_NM_WORKS
1187 grub_PROG_NM_MINUS_P
1188 grub_PROG_NM_DEFINED_ONLY
1189 AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1190 AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1191
1192 if test "$platform" != emu; then
1193 AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1194   SAVED_CPPFLAGS="$CPPFLAGS"
1195   CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1196   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1197 #include <stddef.h>
1198 int va_arg_func (int fixed, va_list args);]], [[]])],
1199       [grub_cv_cc_isystem=yes],
1200       [grub_cv_cc_isystem=no])
1201   CPPFLAGS="$SAVED_CPPFLAGS"
1202 ])
1203
1204 if test x"$grub_cv_cc_isystem" = xyes ; then
1205   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1206 fi
1207 fi
1208
1209 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1210   CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1211   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1212 int va_arg_func (int fixed, va_list args);]], [[]])],
1213       [grub_cv_cc_wtrampolines=yes],
1214       [grub_cv_cc_wtrampolines=no])
1215 ])
1216
1217 if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1218   TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1219 fi
1220
1221 # Restore the flags.
1222 CC="$tmp_CC"
1223 CFLAGS="$tmp_CFLAGS"
1224 CPPFLAGS="$tmp_CPPFLAGS"
1225 LDFLAGS="$tmp_LDFLAGS"
1226 LIBS="$tmp_LIBS"
1227
1228 #
1229 # Check for options.
1230 #
1231
1232 # Memory manager debugging.
1233 AC_ARG_ENABLE([mm-debug],
1234               AS_HELP_STRING([--enable-mm-debug],
1235                              [include memory manager debugging]),
1236               [AC_DEFINE([MM_DEBUG], [1],
1237                          [Define to 1 if you enable memory manager debugging.])])
1238
1239 AC_ARG_ENABLE([cache-stats],
1240               AS_HELP_STRING([--enable-cache-stats],
1241                              [enable disk cache statistics collection]))
1242
1243 if test x$enable_cache_stats = xyes; then
1244   DISK_CACHE_STATS=1
1245 else
1246   DISK_CACHE_STATS=0
1247 fi
1248 AC_SUBST([DISK_CACHE_STATS])
1249
1250 AC_ARG_ENABLE([boot-time],
1251               AS_HELP_STRING([--enable-boot-time],
1252                              [enable boot time statistics collection]))
1253
1254 if test x$enable_boot_time = xyes; then
1255   BOOT_TIME_STATS=1
1256 else
1257   BOOT_TIME_STATS=0
1258 fi
1259 AC_SUBST([BOOT_TIME_STATS])
1260
1261 AC_ARG_ENABLE([grub-emu-usb],
1262               [AS_HELP_STRING([--enable-grub-emu-usb],
1263                              [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
1264
1265 AC_ARG_ENABLE([grub-emu-sdl],
1266               [AS_HELP_STRING([--enable-grub-emu-sdl],
1267                              [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1268
1269 AC_ARG_ENABLE([grub-emu-pci],
1270               [AS_HELP_STRING([--enable-grub-emu-pci],
1271                              [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1272
1273 if test "$platform" = emu; then
1274
1275 if test x"$enable_grub_emu_usb" != xyes ; then
1276    grub_emu_usb_excuse="not enabled"
1277 fi
1278
1279 if test x"$enable_grub_emu_pci" = xyes ; then
1280    grub_emu_usb_excuse="conflicts with PCI support"
1281 fi
1282
1283 [if [ x"$grub_emu_usb_excuse" = x ]; then
1284     # Check for libusb libraries.]
1285 AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
1286     [grub_emu_usb_excuse=["need libusb library"]])
1287     AC_SUBST([LIBUSB])
1288 [fi]
1289 [if [ x"$grub_emu_usb_excuse" = x ]; then
1290     # Check for headers.]
1291     AC_CHECK_HEADERS([usb.h], [],
1292       [grub_emu_usb_excuse=["need libusb headers"]])
1293 [fi]
1294 if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
1295   AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
1296 fi
1297 if test x"$grub_emu_usb_excuse" = x ; then
1298 enable_grub_emu_usb=yes
1299 else
1300 enable_grub_emu_usb=no
1301 fi
1302
1303 if test x"$enable_grub_emu_sdl" = xno ; then
1304   grub_emu_sdl_excuse="explicitly disabled"
1305 fi
1306 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1307     # Check for libSDL libraries.]
1308 AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1309     [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1310     AC_SUBST([LIBSDL])
1311 [fi]
1312
1313 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1314     # Check for headers.]
1315     AC_CHECK_HEADERS([SDL/SDL.h], [],
1316       [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1317 [fi]
1318
1319 if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1320   AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
1321 fi
1322 if test x"$grub_emu_sdl_excuse" = x ; then
1323 enable_grub_emu_sdl=yes
1324 else
1325 enable_grub_emu_sdl=no
1326 fi
1327
1328 if test x"$enable_grub_emu_pci" != xyes ; then
1329    grub_emu_pci_excuse="not enabled"
1330 fi
1331
1332 if test x"$enable_grub_emu_usb" = xyes ; then
1333    grub_emu_pci_excuse="conflicts with USB support"
1334 fi
1335
1336 [if [ x"$grub_emu_pci_excuse" = x ]; then
1337       # Check for libpci libraries.]
1338    AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1339       [grub_emu_pci_excuse=["need libpciaccess library"]])
1340     AC_SUBST([LIBPCIACCESS])
1341 [fi]
1342 [if [ x"$grub_emu_pci_excuse" = x ]; then
1343     # Check for headers.]
1344     AC_CHECK_HEADERS([pci/pci.h], [],
1345       [grub_emu_pci_excuse=["need libpciaccess headers"]])
1346 [fi]
1347
1348 if test x"$grub_emu_pci_excuse" = x ; then
1349 enable_grub_emu_pci=yes
1350 else
1351
1352 enable_grub_emu_pci=no
1353 fi
1354
1355 AC_SUBST([enable_grub_emu_sdl])
1356 AC_SUBST([enable_grub_emu_usb])
1357 AC_SUBST([enable_grub_emu_pci])
1358
1359 else
1360
1361 # Ignore --enable-emu-* if platform is not emu
1362 enable_grub_emu_sdl=no
1363 enable_grub_emu_usb=no
1364 enable_grub_emu_pci=no
1365 fi
1366
1367 AC_ARG_ENABLE([grub-mkfont],
1368               [AS_HELP_STRING([--enable-grub-mkfont],
1369                              [build and install the `grub-mkfont' utility (default=guessed)])])
1370 if test x"$enable_grub_mkfont" = xno ; then
1371   grub_mkfont_excuse="explicitly disabled"
1372 fi
1373
1374 if test x"$grub_mkfont_excuse" = x ; then
1375   # Check for freetype libraries.
1376   AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1377   if test "x$FREETYPE" = x ; then
1378     grub_mkfont_excuse=["need freetype2 library"]
1379   fi
1380 fi
1381
1382 unset ac_cv_header_ft2build_h
1383
1384 if test x"$grub_mkfont_excuse" = x ; then
1385   # Check for freetype libraries.
1386   freetype_cflags=`$FREETYPE --cflags`
1387   freetype_libs=`$FREETYPE --libs`
1388   SAVED_CPPFLAGS="$CPPFLAGS"
1389   SAVED_LIBS="$LIBS"
1390   CPPFLAGS="$CPPFLAGS $freetype_cflags"
1391   LIBS="$LIBS $freetype_libs"
1392   AC_CHECK_HEADERS([ft2build.h], [],
1393         [grub_mkfont_excuse=["need freetype2 headers"]])
1394   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1395   CPPFLAGS="$SAVED_CPPFLAGS"
1396   LIBS="$SAVED_LIBS"
1397 fi
1398
1399 if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1400   AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
1401 fi
1402 if test x"$grub_mkfont_excuse" = x ; then
1403 enable_grub_mkfont=yes
1404 else
1405 enable_grub_mkfont=no
1406 fi
1407 AC_SUBST([enable_grub_mkfont])
1408 AC_SUBST([freetype_cflags])
1409 AC_SUBST([freetype_libs])
1410
1411 SAVED_CC="$CC"
1412 SAVED_CPP="$CPP"
1413 SAVED_CFLAGS="$CFLAGS"
1414 SAVED_CPPFLAGS="$CPPFLAGS"
1415 SAVED_LDFLAGS="$LDFLAGS"
1416 CC="$BUILD_CC"
1417 CPP="$BUILD_CPP"
1418 CFLAGS="$BUILD_CFLAGS"
1419 CPPFLAGS="$BUILD_CPPFLAGS"
1420 LDFLAGS="$BUILD_LDFAGS"
1421
1422 unset ac_cv_c_bigendian
1423 unset ac_cv_header_ft2build_h
1424
1425 AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1426 AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1427 AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1428
1429 if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1430    AC_MSG_ERROR([couldnt determine build endianness])
1431 fi
1432
1433 AC_SUBST([BUILD_SIZEOF_LONG])
1434 AC_SUBST([BUILD_SIZEOF_VOID_P])
1435 AC_SUBST([BUILD_WORDS_BIGENDIAN])
1436
1437 if test x"$grub_build_mkfont_excuse" = x ; then
1438   # Check for freetype libraries.
1439   AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1440   if test "x$BUILD_FREETYPE" = x ; then
1441     grub_build_mkfont_excuse=["need freetype2 library"]
1442   fi
1443 fi
1444
1445 if test x"$grub_build_mkfont_excuse" = x ; then
1446   # Check for freetype libraries.
1447   build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1448   build_freetype_libs=`$BUILD_FREETYPE --libs`
1449   SAVED_CPPFLAGS_2="$CPPFLAGS"
1450   SAVED_LIBS="$LIBS"
1451   CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1452   LIBS="$LIBS $build_freetype_libs"
1453   AC_CHECK_HEADERS([ft2build.h], [],
1454         [grub_build_mkfont_excuse=["need freetype2 headers"]])
1455   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1456   LIBS="$SAVED_LIBS"
1457   CPPFLAGS="$SAVED_CPPFLAGS_2"
1458 fi
1459
1460 if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1461   AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
1462 fi
1463 if test x"$grub_build_mkfont_excuse" = x ; then
1464   enable_build_grub_mkfont=yes
1465 else
1466   enable_build_grub_mkfont=no
1467 fi
1468 if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1469   if test x"$grub_build_mkfont_excuse" = x ; then
1470     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1471   else
1472     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1473   fi
1474 fi
1475
1476 AC_SUBST([build_freetype_cflags])
1477 AC_SUBST([build_freetype_libs])
1478
1479 CC="$SAVED_CC"
1480 CPP="$SAVED_CPP"
1481 CFLAGS="$SAVED_CFLAGS"
1482 CPPFLAGS="$SAVED_CPPFLAGS"
1483 LDFLAGS="$SAVED_LDFLAGS"
1484
1485
1486 DJVU_FONT_SOURCE=
1487
1488 starfield_excuse=
1489
1490 AC_ARG_ENABLE([grub-themes],
1491               [AS_HELP_STRING([--enable-grub-themes],
1492                              [build and install GRUB themes (default=guessed)])])
1493 if test x"$enable_grub_themes" = xno ; then
1494   starfield_excuse="explicitly disabled"
1495 fi
1496
1497 if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1498   starfield_excuse="No build-time grub-mkfont"
1499 fi
1500
1501 if test x"$starfield_excuse" = x; then
1502    for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1503      for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
1504         if test -f "$dir/DejaVuSans.$ext"; then
1505           DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1506           break 2
1507         fi
1508      done
1509    done
1510
1511    if test "x$DJVU_FONT_SOURCE" = x; then
1512      starfield_excuse="No DejaVu found"
1513    fi
1514 fi
1515
1516 if test x"$enable_grub_themes" = xyes &&  test x"$starfield_excuse" != x; then
1517    AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
1518 fi
1519
1520 AC_SUBST([DJVU_FONT_SOURCE])
1521
1522 FONT_SOURCE=
1523
1524 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1525   for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do
1526     if test -f "$dir/unifont.$ext"; then
1527       md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1528       # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1529       if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1530         continue
1531       fi
1532       FONT_SOURCE="$dir/unifont.$ext"
1533       break 2
1534     fi
1535   done
1536 done
1537
1538 if test x"$enable_build_grub_mkfont" = xno ; then
1539   FONT_SOURCE=
1540 fi
1541
1542 if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1543   if test x"$grub_build_mkfont_excuse" = x ; then
1544     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1545   else
1546     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1547   fi
1548 fi
1549
1550 AC_SUBST([FONT_SOURCE])
1551
1552 if test x"$FONT_SOURCE" = x &&  test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1553   grub_build_mkfont_excuse="no fonts"
1554 fi
1555
1556
1557 AC_ARG_ENABLE([grub-mount],
1558               [AS_HELP_STRING([--enable-grub-mount],
1559                              [build and install the `grub-mount' utility (default=guessed)])])
1560 if test x"$enable_grub_mount" = xno ; then
1561   grub_mount_excuse="explicitly disabled"
1562 fi
1563
1564 if test x"$grub_mount_excuse" = x ; then
1565   AC_CHECK_LIB([fuse], [fuse_main_real], [],
1566                [grub_mount_excuse="need FUSE library"])
1567 fi
1568
1569 if test x"$grub_mount_excuse" = x ; then
1570   # Check for fuse headers.
1571   SAVED_CPPFLAGS="$CPPFLAGS"
1572   CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
1573   AC_CHECK_HEADERS([fuse/fuse.h], [],
1574         [grub_mount_excuse=["need FUSE headers"]])
1575   CPPFLAGS="$SAVED_CPPFLAGS"
1576 fi
1577
1578 if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1579   AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
1580 fi
1581 if test x"$grub_mount_excuse" = x ; then
1582 enable_grub_mount=yes
1583 else
1584 enable_grub_mount=no
1585 fi
1586 AC_SUBST([enable_grub_mount])
1587
1588 AC_ARG_ENABLE([device-mapper],
1589               [AS_HELP_STRING([--enable-device-mapper],
1590                               [enable Linux device-mapper support (default=guessed)])])
1591 if test x"$enable_device_mapper" = xno ; then
1592   device_mapper_excuse="explicitly disabled"
1593 fi
1594
1595 if test x"$device_mapper_excuse" = x ; then
1596   # Check for device-mapper header.
1597   AC_CHECK_HEADER([libdevmapper.h], [],
1598                [device_mapper_excuse="need libdevmapper header"])
1599 fi
1600
1601 if test x"$device_mapper_excuse" = x ; then
1602   # Check for device-mapper library.
1603   AC_CHECK_LIB([devmapper], [dm_task_create], [],
1604                [device_mapper_excuse="need devmapper library"])
1605 fi
1606
1607 if test x"$device_mapper_excuse" = x ; then
1608   # Check for device-mapper library.
1609   AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1610                [],
1611                [device_mapper_excuse="need devmapper library"])
1612 fi
1613
1614 if test x"$device_mapper_excuse" = x ; then
1615    LIBDEVMAPPER="-ldevmapper"
1616    AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1617              [Define to 1 if you have the devmapper library.])
1618 fi
1619
1620 AC_SUBST([LIBDEVMAPPER])
1621
1622 LIBGEOM=
1623 if test x$host_kernel = xkfreebsd; then
1624   AC_CHECK_LIB([geom], [geom_gettree], [],
1625                [AC_MSG_ERROR([Your platform requires libgeom])])
1626   LIBGEOM="-lgeom"
1627 fi
1628
1629 AC_SUBST([LIBGEOM])
1630
1631 AC_ARG_ENABLE([liblzma],
1632               [AS_HELP_STRING([--enable-liblzma],
1633                               [enable liblzma integration (default=guessed)])])
1634 if test x"$enable_liblzma" = xno ; then
1635   liblzma_excuse="explicitly disabled"
1636 fi
1637
1638 if test x"$liblzma_excuse" = x ; then
1639 AC_CHECK_LIB([lzma], [lzma_code],
1640              [],[liblzma_excuse="need lzma library"])
1641 fi
1642 if test x"$liblzma_excuse" = x ; then
1643 AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1644 fi
1645
1646 if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1647   AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
1648 fi
1649
1650
1651 if test x"$liblzma_excuse" = x ; then
1652    LIBLZMA="-llzma"
1653    AC_DEFINE([USE_LIBLZMA], [1],
1654              [Define to 1 if you have the LZMA library.])
1655 fi
1656
1657 AC_SUBST([LIBLZMA])
1658
1659 AC_ARG_ENABLE([libzfs],
1660               [AS_HELP_STRING([--enable-libzfs],
1661                               [enable libzfs integration (default=guessed)])])
1662 if test x"$enable_libzfs" = xno ; then
1663   libzfs_excuse="explicitly disabled"
1664 fi
1665
1666 if test x"$libzfs_excuse" = x ; then
1667   # Only check for system headers if libzfs support has not been disabled.
1668   AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1669 fi
1670
1671 if test x"$libzfs_excuse" = x ; then
1672   AC_CHECK_LIB([zfs], [libzfs_init],
1673                [],
1674                [libzfs_excuse="need zfs library"])
1675 fi
1676
1677 if test x"$libzfs_excuse" = x ; then
1678   AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1679                [],
1680                [libzfs_excuse="need nvpair library"])
1681 fi
1682
1683 if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1684   AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
1685 fi
1686
1687 if test x"$libzfs_excuse" = x ; then
1688   # We need both libzfs and libnvpair for a successful build.
1689   LIBZFS="-lzfs"
1690   AC_DEFINE([HAVE_LIBZFS], [1],
1691             [Define to 1 if you have the ZFS library.])
1692   LIBNVPAIR="-lnvpair"
1693   AC_DEFINE([HAVE_LIBNVPAIR], [1],
1694             [Define to 1 if you have the NVPAIR library.])
1695 fi
1696
1697 AC_SUBST([LIBZFS])
1698 AC_SUBST([LIBNVPAIR])
1699
1700 LIBS=""
1701
1702 AC_SUBST([FONT_SOURCE])
1703 AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1704             [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1705
1706 AC_SUBST(HAVE_ASM_USCORE)
1707 AC_SUBST(BSS_START_SYMBOL)
1708 AC_SUBST(END_SYMBOL)
1709 AC_SUBST(PACKAGE)
1710 AC_SUBST(VERSION)
1711
1712 AC_ARG_ENABLE([werror],
1713               [AS_HELP_STRING([--disable-werror],
1714                              [do not use -Werror when building GRUB])])
1715 if test x"$enable_werror" != xno ; then
1716   TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1717   HOST_CFLAGS="$HOST_CFLAGS -Werror"
1718 fi
1719
1720 if test "x$grub_cv_cc_target_clang" = xno; then
1721    TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
1722 else
1723    TARGET_LDFLAGS_STATIC_LIBGCC=
1724 fi
1725
1726 TARGET_CPP="$TARGET_CC -E"
1727 TARGET_CCAS=$TARGET_CC
1728
1729 # Includes which include make-time substitutions. They must come last
1730 # as to avoid executing top_builddir in shell.
1731 HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
1732 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
1733 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
1734
1735 GRUB_TARGET_CPU="${target_cpu}"
1736 GRUB_PLATFORM="${platform}"
1737
1738 AC_SUBST(GRUB_TARGET_CPU)
1739 AC_SUBST(GRUB_PLATFORM)
1740
1741 AC_SUBST(TARGET_OBJCONV)
1742 AC_SUBST(TARGET_LIBGCC)
1743 AC_SUBST(TARGET_LDFLAGS_STATIC_LIBGCC)
1744 AC_SUBST(TARGET_CPP)
1745 AC_SUBST(TARGET_CCAS)
1746 AC_SUBST(TARGET_OBJ2ELF)
1747 AC_SUBST(TARGET_MODULE_FORMAT)
1748 AC_SUBST(TARGET_CC_VERSION)
1749
1750 AC_SUBST(TARGET_CFLAGS)
1751 AC_SUBST(TARGET_LDFLAGS)
1752 AC_SUBST(TARGET_CPPFLAGS)
1753 AC_SUBST(TARGET_CCASFLAGS)
1754
1755 AC_SUBST(TARGET_IMG_LDFLAGS)
1756 AC_SUBST(TARGET_IMG_CFLAGS)
1757 AC_SUBST(TARGET_IMG_BASE_LDOPT)
1758 AC_SUBST(TARGET_APPLE_LINKER)
1759
1760 AC_SUBST(HOST_CFLAGS)
1761 AC_SUBST(HOST_LDFLAGS)
1762 AC_SUBST(HOST_CPPFLAGS)
1763 AC_SUBST(HOST_CCASFLAGS)
1764
1765 AC_SUBST(BUILD_LIBM)
1766
1767 #
1768 # Automake conditionals
1769 #
1770
1771 AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
1772 AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1773 AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
1774 AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1775 AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1776 AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1777 AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1778 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1779 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1780 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1781 AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1782 AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1783 AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1784 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1785 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
1786 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xarc])
1787 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1788 AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1789 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1790 AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1791 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1792 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1793 AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1794 AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1795 AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1796 AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1797 AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
1798
1799 AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1800 AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1801 AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
1802 AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1803 AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1804 AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1805 AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
1806
1807 AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1808 AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1809 AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1810 AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1811 AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1812 AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1813 AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1814 if test x$FONT_SOURCE != x ; then
1815    HAVE_FONT_SOURCE=1
1816 else
1817    HAVE_FONT_SOURCE=0
1818 fi
1819 AC_SUBST(HAVE_FONT_SOURCE)
1820 AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1821 AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1822 AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1823 AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1824
1825 AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1826
1827 AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1828 AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1829 AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1830
1831 test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1832 test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1833 datarootdir="$(eval echo "$datarootdir")"
1834 grub_libdir="$(eval echo "$libdir")"
1835 grub_localedir="$(eval echo "$localedir")"
1836 grub_datadir="$(eval echo "$datadir")"
1837 grub_sysconfdir="$(eval echo "$sysconfdir")"
1838 AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1839 AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1840 AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1841 AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1842
1843
1844 # Output files.
1845 if test "$platform" != none; then
1846   cpudir="${target_cpu}"
1847   if test x${cpudir} = xmipsel; then
1848     cpudir=mips;
1849   fi
1850   grub_CHECK_LINK_DIR
1851   if test x"$link_dir" = xyes ; then
1852     AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1853     if test "$platform" != emu ; then
1854       AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1855     fi
1856   else
1857     mkdir -p include/grub 2>/dev/null
1858     rm -rf include/grub/cpu
1859     cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1860     if test "$platform" != emu ; then
1861       rm -rf include/grub/machine
1862       cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1863     fi
1864   fi
1865 else
1866   # Just enough to stop the compiler failing with -I$(srcdir)/include.
1867   mkdir -p include 2>/dev/null
1868   rm -rf include/grub/cpu include/grub/machine
1869 fi
1870
1871 AC_CONFIG_FILES([Makefile])
1872 AC_CONFIG_FILES([grub-core/Makefile])
1873 AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1874 AC_CONFIG_FILES([po/Makefile.in])
1875 AC_CONFIG_FILES([docs/Makefile])
1876 AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1877 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1878 AC_CONFIG_FILES([config.h])
1879
1880 AC_OUTPUT
1881 [
1882 echo "*******************************************************"
1883 echo GRUB2 will be compiled with following components:
1884 echo Platform: "$target_cpu"-"$platform"
1885 if [ x"$platform" = xemu ]; then
1886 if [ x"$grub_emu_usb_excuse" = x ]; then
1887 echo USB support for grub-emu: Yes
1888 else
1889 echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1890 fi
1891 if [ x"$grub_emu_sdl_excuse" = x ]; then
1892 echo SDL support for grub-emu: Yes
1893 else
1894 echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1895 fi
1896 if [ x"$grub_emu_pci_excuse" = x ]; then
1897 echo PCI support for grub-emu: Yes
1898 else
1899 echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1900 fi
1901 fi
1902 if test x"$device_mapper_excuse" = x ; then
1903 echo With devmapper support: Yes
1904 else
1905 echo With devmapper support: No "($device_mapper_excuse)"
1906 fi
1907 if [ x"$enable_mm_debug" = xyes ]; then
1908 echo With memory debugging: Yes
1909 else
1910 echo With memory debugging: No
1911 fi
1912 if [ x"$enable_cache_stats" = xyes ]; then
1913 echo With disk cache statistics: Yes
1914 else
1915 echo With disk cache statistics: No
1916 fi
1917
1918 if [ x"$enable_boot_time" = xyes ]; then
1919 echo With boot time statistics: Yes
1920 else
1921 echo With boot time statistics: No
1922 fi
1923
1924 if [ x"$efiemu_excuse" = x ]; then
1925 echo efiemu runtime: Yes
1926 else
1927 echo efiemu runtime: No "($efiemu_excuse)"
1928 fi
1929 if [ x"$grub_mkfont_excuse" = x ]; then
1930 echo grub-mkfont: Yes
1931 else
1932 echo grub-mkfont: No "($grub_mkfont_excuse)"
1933 fi
1934 if [ x"$grub_mount_excuse" = x ]; then
1935 echo grub-mount: Yes
1936 else
1937 echo grub-mount: No "($grub_mount_excuse)"
1938 fi
1939 if [ x"$starfield_excuse" = x ]; then
1940 echo starfield theme: Yes
1941 echo With DejaVuSans font from $DJVU_FONT_SOURCE
1942 else
1943 echo starfield theme: No "($starfield_excuse)"
1944 fi
1945 if [ x"$libzfs_excuse" = x ]; then
1946 echo With libzfs support: Yes
1947 else
1948 echo With libzfs support: No "($libzfs_excuse)"
1949 fi
1950 if [ x"$grub_build_mkfont_excuse" = x ]; then
1951   echo Build-time grub-mkfont: Yes
1952   if test "x$FONT_SOURCE" = x ; then
1953     echo "Without unifont"
1954   else
1955     echo "With unifont from $FONT_SOURCE"
1956   fi
1957 else
1958   echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
1959   echo "Without unifont (no build-time grub-mkfont)"
1960 fi
1961 if test x"$liblzma_excuse" != x ; then
1962 echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
1963 else
1964 echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1965 fi
1966 echo "*******************************************************"
1967 ]