configure.ac: Remove unused COND_clang
[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 "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
699                 "-Xclang -msoft-float -Xclang -no-implicit-float" \
700                 "-Xclang -msoft-float" "-msoft-float"; do
701       if test x"$grub_cv_target_cc_soft_float" != xno ; then
702         break
703       fi
704       CFLAGS="$TARGET_CFLAGS $cand -Werror"
705       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
706                         [grub_cv_target_cc_soft_float="$cand"], [])
707     done
708   ])
709
710   if test x"$grub_cv_target_cc_soft_float" = xno ; then
711     AC_MSG_ERROR([could not force soft-float])
712   fi
713
714   case x"$grub_cv_target_cc_soft_float" in
715     x*"-Xclang"*)
716       # A trick so that clang doesn't see it on link stаge
717       TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
718       ;;
719     *)
720       TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
721       ;;
722   esac
723   case x"$grub_cv_target_cc_soft_float" in
724     x"-march=armv8-a+nofp+nosimd")
725       # +nosimd disables also the cache opcodes that we need in asm.
726       TARGET_CCASFLAGS="$TARGET_CCASFLAGS -march=armv8-a+nofp"
727       ;;
728     *)
729       TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
730       ;;
731   esac
732
733 fi
734
735 if test x"$target_cpu" = xsparc64 ; then
736   AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
737     grub_cv_target_cc_mno_app_regs=no
738     for cand in "-mllvm -sparc-reserve-app-registers" \
739                 "-mno-app-regs"; do
740       if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
741         break
742       fi
743       CFLAGS="$TARGET_CFLAGS $cand -Werror"
744       CPPFLAGS="$TARGET_CPPFLAGS"
745       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
746                         [grub_cv_target_cc_mno_app_regs="$cand"], [])
747     done
748   ])
749
750   if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
751     AC_MSG_ERROR([could not reserve application registers])
752   fi
753   if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
754     # A trick so that clang doesn't see it on link stаge
755     TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
756   else
757     TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
758   fi
759
760   AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
761     grub_cv_target_cc_mno_relax=no
762     for cand in "-mno-relax" "-Wl,--no-relax"; do
763       if test x"$grub_cv_target_cc_mno_relax" != xno ; then
764         break
765       fi
766       LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
767       CFLAGS="$TARGET_CFLAGS -Werror"
768       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
769             asm (".globl start; start:");
770             void __main (void);
771             void __main (void) {}
772             int main (void);
773             ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
774     done
775   ])
776   LDFLAGS="$TARGET_LDFLAGS"
777   CFLAGS="$TARGET_CFLAGS"
778
779   if test x"$grub_cv_target_cc_mno_relax" = xno ; then
780     AC_MSG_ERROR([could not find no-relax options])
781   fi
782   TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
783 fi
784
785 # By default, GCC 4.4 generates .eh_frame sections containing unwind
786 # information in some cases where it previously did not. GRUB doesn't need
787 # these and they just use up vital space. Restore the old compiler
788 # behaviour.
789 AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
790   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
791   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
792       [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
793       [grub_cv_cc_fno_dwarf2_cfi_asm=no])
794 ])
795
796 if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
797   TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
798 fi
799
800 if test x"$target_os" = xcygwin; then
801   AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
802     CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
803     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
804                       [grub_cv_cc_no_reorder_functions=yes],
805                       [grub_cv_cc_no_reorder_functions=no])
806   ])
807 fi
808
809 if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
810   TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
811 fi
812
813 # By default, GCC 4.6 generates .eh_frame sections containing unwind
814 # information in some cases where it previously did not. GRUB doesn't need
815 # these and they just use up vital space. Restore the old compiler
816 # behaviour.
817 AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
818   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
819   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
820       [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
821       [grub_cv_cc_fno_asynchronous_unwind_tables=no])
822 ])
823
824 if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
825   TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
826 fi
827
828 AC_ARG_ENABLE([efiemu],
829               [AS_HELP_STRING([--enable-efiemu],
830                              [build and install the efiemu runtimes (default=guessed)])])
831 if test x"$enable_efiemu" = xno ; then
832   efiemu_excuse="explicitly disabled"
833 fi
834 if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
835   efiemu_excuse="not available on cygwin"
836 fi
837 if test x"$target_cpu" != xi386 ; then
838   efiemu_excuse="only available on i386"
839 fi
840 if test x"$platform" = xefi ; then
841   efiemu_excuse="not available on efi"
842 fi
843 if test x"$efiemu_excuse" = x ; then
844   AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
845     CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
846     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
847                       [grub_cv_cc_efiemu=yes],
848                       [grub_cv_cc_efiemu=no])
849   ])
850   if test x$grub_cv_cc_efiemu = xno; then
851      efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
852   fi
853 fi
854 if test x"$efiemu_excuse" = x ; then
855   AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
856     grub_cv_target_cc_efiemu64_link_format=unknown
857     for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
858       CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
859       LDFLAGS="-m64 -Wl,$format -nostdlib -static"
860       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
861       asm (".globl start; start:");
862       asm (".globl _start; _start:");
863       asm (".globl __start; __start:");
864       void __main (void);
865       void __main (void) {}
866       ]], [[]])], [flag=1], [flag=0])
867       if test x"$flag" = x1; then
868         grub_cv_target_cc_efiemu64_link_format="$format"
869         break
870       fi
871     done])
872   if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
873     efiemu_excuse="no suitable link format for efiemu64 found"
874   else
875     EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
876   fi
877 fi
878 if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
879   AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
880 fi
881 if test x"$efiemu_excuse" = x ; then
882 enable_efiemu=yes
883 else
884 enable_efiemu=no
885 fi
886 AC_SUBST([enable_efiemu])
887 AC_SUBST([EFIEMU64_LINK_FORMAT])
888
889 CFLAGS="$TARGET_CFLAGS"
890
891
892 if test x"$platform" = xemu ; then
893   TARGET_OBJ2ELF=
894   grub_cv_target_cc_link_format=
895   case "$host_os" in
896     *darwin* | *mac*)
897        grub_cv_target_cc_link_format="-arch,${target_cpu}"
898        TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
899         ;;
900     *windows* | *cygwin* | *mingw*)
901       if test x${target_cpu} = xi386 ; then
902         grub_cv_target_cc_link_format=-mi386pe
903         TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
904       fi
905       if test x${target_cpu} = xx86_64 ; then
906         grub_cv_target_cc_link_format=-mi386pep
907         TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
908       fi
909       TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
910       ;;
911   esac
912 elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
913   AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
914     grub_cv_target_cc_link_format=unknown
915     for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
916       if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
917         continue
918       fi
919       if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
920         continue
921       fi
922       CFLAGS="$TARGET_CFLAGS"
923       LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
924       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
925       asm (".globl start; start:");
926       asm (".globl _start; _start:");
927       asm (".globl __start; __start:");
928       void __main (void);
929       void __main (void) {}
930       ]], [[]])], [flag=1], [flag=0])
931       if test x"$flag" = x1; then
932         grub_cv_target_cc_link_format="$format"
933         break
934       fi
935     done])
936   if test x"$grub_cv_target_cc_link_format" = xunknown; then
937     AC_MSG_ERROR([no suitable link format found])
938   fi
939   TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
940   if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
941     TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
942   fi
943   if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
944     TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
945   fi
946 fi
947
948 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
949    TARGET_APPLE_LINKER=1
950    AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
951    if test "x$TARGET_OBJCONV" = x ; then
952       AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
953    fi
954    if test "x$TARGET_OBJCONV" = x ; then
955       AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
956    fi
957    TARGET_IMG_LDSCRIPT=
958    TARGET_IMG_CFLAGS="-static"
959    TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
960    TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
961    TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
962    TARGET_LDFLAGS_OLDMAGIC=""
963 elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
964   TARGET_APPLE_LINKER=0
965   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
966   TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
967   TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
968   TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
969   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
970   TARGET_IMG_CFLAGS=
971 else
972   TARGET_APPLE_LINKER=0
973   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
974   TARGET_IMG_LDSCRIPT=
975   TARGET_IMG_LDFLAGS='-Wl,-N'
976   TARGET_IMG_LDFLAGS_AC='-Wl,-N'
977   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
978   TARGET_IMG_CFLAGS=
979 fi
980
981 AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
982
983
984 LDFLAGS="$TARGET_LDFLAGS"
985
986 if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
987   # Use large model to support 4G memory
988   AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
989     CFLAGS="$TARGET_CFLAGS -mcmodel=large"
990     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
991                       [grub_cv_cc_mcmodel=yes],
992                       [grub_cv_cc_mcmodel=no])
993   ])
994   if test "x$grub_cv_cc_mcmodel" = xyes; then
995     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
996   elif test "$target_cpu" = sparc64; then
997     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
998   fi
999 fi
1000
1001 if test "$target_cpu"-"$platform" = x86_64-efi; then
1002   # EFI writes to stack below %rsp, we must not use the red zone
1003   AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
1004     CFLAGS="$TARGET_CFLAGS -mno-red-zone"
1005     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1006                       [grub_cv_cc_no_red_zone=yes],
1007                       [grub_cv_cc_no_red_zone=no])
1008   ])
1009   if test "x$grub_cv_cc_no_red_zone" = xno; then
1010     AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
1011   fi
1012
1013   TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
1014 fi
1015
1016 if test "x$target_cpu" = xarm; then
1017   AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
1018     CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
1019     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1020                       [grub_cv_cc_mlong_calls=yes],
1021                       [grub_cv_cc_mlong_calls=no])
1022   ])
1023   if test "x$grub_cv_cc_mlong_calls" = xyes; then
1024     TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
1025   fi
1026   AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
1027     CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
1028     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1029                       [grub_cv_cc_mthumb_interwork=yes],
1030                       [grub_cv_cc_mthumb_interwork=no])
1031   ])
1032   if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
1033     TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
1034   # Clang defaults to thumb interworking
1035   elif test "x$grub_cv_cc_target_clang" = xno ; then
1036     AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
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"$platform" = xemu ; then
1135 CFLAGS="$TARGET_CFLAGS -Wno-error"
1136 elif test "x$TARGET_APPLE_LINKER" = x1 ; then
1137 CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
1138 else
1139 CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
1140 fi
1141 CPPFLAGS="$TARGET_CPPFLAGS"
1142
1143 grub_ASM_USCORE
1144 if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then
1145 if test x$grub_cv_asm_uscore = xyes; then
1146 DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1147 else
1148 DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1149 fi
1150 CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1151 fi
1152
1153 # Check for libgcc symbols
1154 if test x"$platform" = xemu; then
1155 AC_CHECK_FUNCS(__udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms)
1156 fi
1157
1158 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1159 CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1160 else
1161 CFLAGS="$TARGET_CFLAGS -nostdlib"
1162 fi
1163 LIBS=""
1164
1165 # Defined in aclocal.m4.
1166 grub_PROG_TARGET_CC
1167 if test "x$TARGET_APPLE_LINKER" != x1 ; then
1168 grub_PROG_OBJCOPY_ABSOLUTE
1169 fi
1170 grub_PROG_LD_BUILD_ID_NONE
1171 if test "x$target_cpu" = xi386; then
1172   if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1173     if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1174       # Check symbols provided by linker script.
1175       CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1176     fi
1177     grub_CHECK_BSS_START_SYMBOL
1178     grub_CHECK_END_SYMBOL
1179   fi
1180   CFLAGS="$TARGET_CFLAGS"
1181 fi
1182
1183 grub_PROG_NM_WORKS
1184 grub_PROG_NM_MINUS_P
1185 grub_PROG_NM_DEFINED_ONLY
1186 AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1187 AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1188
1189 if test "$platform" != emu; then
1190 AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1191   SAVED_CPPFLAGS="$CPPFLAGS"
1192   CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1193   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1194 #include <stddef.h>
1195 int va_arg_func (int fixed, va_list args);]], [[]])],
1196       [grub_cv_cc_isystem=yes],
1197       [grub_cv_cc_isystem=no])
1198   CPPFLAGS="$SAVED_CPPFLAGS"
1199 ])
1200
1201 if test x"$grub_cv_cc_isystem" = xyes ; then
1202   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1203 fi
1204 fi
1205
1206 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1207   CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1208   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1209 int va_arg_func (int fixed, va_list args);]], [[]])],
1210       [grub_cv_cc_wtrampolines=yes],
1211       [grub_cv_cc_wtrampolines=no])
1212 ])
1213
1214 if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1215   TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1216 fi
1217
1218 # Restore the flags.
1219 CC="$tmp_CC"
1220 CFLAGS="$tmp_CFLAGS"
1221 CPPFLAGS="$tmp_CPPFLAGS"
1222 LDFLAGS="$tmp_LDFLAGS"
1223 LIBS="$tmp_LIBS"
1224
1225 #
1226 # Check for options.
1227 #
1228
1229 # Memory manager debugging.
1230 AC_ARG_ENABLE([mm-debug],
1231               AS_HELP_STRING([--enable-mm-debug],
1232                              [include memory manager debugging]),
1233               [AC_DEFINE([MM_DEBUG], [1],
1234                          [Define to 1 if you enable memory manager debugging.])])
1235
1236 AC_ARG_ENABLE([cache-stats],
1237               AS_HELP_STRING([--enable-cache-stats],
1238                              [enable disk cache statistics collection]))
1239
1240 if test x$enable_cache_stats = xyes; then
1241   DISK_CACHE_STATS=1
1242 else
1243   DISK_CACHE_STATS=0
1244 fi
1245 AC_SUBST([DISK_CACHE_STATS])
1246
1247 AC_ARG_ENABLE([boot-time],
1248               AS_HELP_STRING([--enable-boot-time],
1249                              [enable boot time statistics collection]))
1250
1251 if test x$enable_boot_time = xyes; then
1252   BOOT_TIME_STATS=1
1253 else
1254   BOOT_TIME_STATS=0
1255 fi
1256 AC_SUBST([BOOT_TIME_STATS])
1257
1258 AC_ARG_ENABLE([grub-emu-usb],
1259               [AS_HELP_STRING([--enable-grub-emu-usb],
1260                              [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
1261
1262 AC_ARG_ENABLE([grub-emu-sdl],
1263               [AS_HELP_STRING([--enable-grub-emu-sdl],
1264                              [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1265
1266 AC_ARG_ENABLE([grub-emu-pci],
1267               [AS_HELP_STRING([--enable-grub-emu-pci],
1268                              [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1269
1270 if test "$platform" = emu; then
1271
1272 if test x"$enable_grub_emu_usb" != xyes ; then
1273    grub_emu_usb_excuse="not enabled"
1274 fi
1275
1276 if test x"$enable_grub_emu_pci" = xyes ; then
1277    grub_emu_usb_excuse="conflicts with PCI support"
1278 fi
1279
1280 [if [ x"$grub_emu_usb_excuse" = x ]; then
1281     # Check for libusb libraries.]
1282 AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
1283     [grub_emu_usb_excuse=["need libusb library"]])
1284     AC_SUBST([LIBUSB])
1285 [fi]
1286 [if [ x"$grub_emu_usb_excuse" = x ]; then
1287     # Check for headers.]
1288     AC_CHECK_HEADERS([usb.h], [],
1289       [grub_emu_usb_excuse=["need libusb headers"]])
1290 [fi]
1291 if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
1292   AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
1293 fi
1294 if test x"$grub_emu_usb_excuse" = x ; then
1295 enable_grub_emu_usb=yes
1296 else
1297 enable_grub_emu_usb=no
1298 fi
1299
1300 if test x"$enable_grub_emu_sdl" = xno ; then
1301   grub_emu_sdl_excuse="explicitly disabled"
1302 fi
1303 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1304     # Check for libSDL libraries.]
1305 AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1306     [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1307     AC_SUBST([LIBSDL])
1308 [fi]
1309
1310 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1311     # Check for headers.]
1312     AC_CHECK_HEADERS([SDL/SDL.h], [],
1313       [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1314 [fi]
1315
1316 if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1317   AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
1318 fi
1319 if test x"$grub_emu_sdl_excuse" = x ; then
1320 enable_grub_emu_sdl=yes
1321 else
1322 enable_grub_emu_sdl=no
1323 fi
1324
1325 if test x"$enable_grub_emu_pci" != xyes ; then
1326    grub_emu_pci_excuse="not enabled"
1327 fi
1328
1329 if test x"$enable_grub_emu_usb" = xyes ; then
1330    grub_emu_pci_excuse="conflicts with USB support"
1331 fi
1332
1333 [if [ x"$grub_emu_pci_excuse" = x ]; then
1334       # Check for libpci libraries.]
1335    AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1336       [grub_emu_pci_excuse=["need libpciaccess library"]])
1337     AC_SUBST([LIBPCIACCESS])
1338 [fi]
1339 [if [ x"$grub_emu_pci_excuse" = x ]; then
1340     # Check for headers.]
1341     AC_CHECK_HEADERS([pci/pci.h], [],
1342       [grub_emu_pci_excuse=["need libpciaccess headers"]])
1343 [fi]
1344
1345 if test x"$grub_emu_pci_excuse" = x ; then
1346 enable_grub_emu_pci=yes
1347 else
1348
1349 enable_grub_emu_pci=no
1350 fi
1351
1352 AC_SUBST([enable_grub_emu_sdl])
1353 AC_SUBST([enable_grub_emu_usb])
1354 AC_SUBST([enable_grub_emu_pci])
1355
1356 else
1357
1358 # Ignore --enable-emu-* if platform is not emu
1359 enable_grub_emu_sdl=no
1360 enable_grub_emu_usb=no
1361 enable_grub_emu_pci=no
1362 fi
1363
1364 AC_ARG_ENABLE([grub-mkfont],
1365               [AS_HELP_STRING([--enable-grub-mkfont],
1366                              [build and install the `grub-mkfont' utility (default=guessed)])])
1367 if test x"$enable_grub_mkfont" = xno ; then
1368   grub_mkfont_excuse="explicitly disabled"
1369 fi
1370
1371 if test x"$grub_mkfont_excuse" = x ; then
1372   # Check for freetype libraries.
1373   AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1374   if test "x$FREETYPE" = x ; then
1375     grub_mkfont_excuse=["need freetype2 library"]
1376   fi
1377 fi
1378
1379 unset ac_cv_header_ft2build_h
1380
1381 if test x"$grub_mkfont_excuse" = x ; then
1382   # Check for freetype libraries.
1383   freetype_cflags=`$FREETYPE --cflags`
1384   freetype_libs=`$FREETYPE --libs`
1385   SAVED_CPPFLAGS="$CPPFLAGS"
1386   SAVED_LIBS="$LIBS"
1387   CPPFLAGS="$CPPFLAGS $freetype_cflags"
1388   LIBS="$LIBS $freetype_libs"
1389   AC_CHECK_HEADERS([ft2build.h], [],
1390         [grub_mkfont_excuse=["need freetype2 headers"]])
1391   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1392   CPPFLAGS="$SAVED_CPPFLAGS"
1393   LIBS="$SAVED_LIBS"
1394 fi
1395
1396 if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1397   AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
1398 fi
1399 if test x"$grub_mkfont_excuse" = x ; then
1400 enable_grub_mkfont=yes
1401 else
1402 enable_grub_mkfont=no
1403 fi
1404 AC_SUBST([enable_grub_mkfont])
1405 AC_SUBST([freetype_cflags])
1406 AC_SUBST([freetype_libs])
1407
1408 SAVED_CC="$CC"
1409 SAVED_CPP="$CPP"
1410 SAVED_CFLAGS="$CFLAGS"
1411 SAVED_CPPFLAGS="$CPPFLAGS"
1412 SAVED_LDFLAGS="$LDFLAGS"
1413 CC="$BUILD_CC"
1414 CPP="$BUILD_CPP"
1415 CFLAGS="$BUILD_CFLAGS"
1416 CPPFLAGS="$BUILD_CPPFLAGS"
1417 LDFLAGS="$BUILD_LDFAGS"
1418
1419 unset ac_cv_c_bigendian
1420 unset ac_cv_header_ft2build_h
1421
1422 AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1423 AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1424 AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1425
1426 if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1427    AC_MSG_ERROR([couldnt determine build endianness])
1428 fi
1429
1430 AC_SUBST([BUILD_SIZEOF_LONG])
1431 AC_SUBST([BUILD_SIZEOF_VOID_P])
1432 AC_SUBST([BUILD_WORDS_BIGENDIAN])
1433
1434 if test x"$grub_build_mkfont_excuse" = x ; then
1435   # Check for freetype libraries.
1436   AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1437   if test "x$BUILD_FREETYPE" = x ; then
1438     grub_build_mkfont_excuse=["need freetype2 library"]
1439   fi
1440 fi
1441
1442 if test x"$grub_build_mkfont_excuse" = x ; then
1443   # Check for freetype libraries.
1444   build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1445   build_freetype_libs=`$BUILD_FREETYPE --libs`
1446   SAVED_CPPFLAGS_2="$CPPFLAGS"
1447   SAVED_LIBS="$LIBS"
1448   CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1449   LIBS="$LIBS $build_freetype_libs"
1450   AC_CHECK_HEADERS([ft2build.h], [],
1451         [grub_build_mkfont_excuse=["need freetype2 headers"]])
1452   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1453   LIBS="$SAVED_LIBS"
1454   CPPFLAGS="$SAVED_CPPFLAGS_2"
1455 fi
1456
1457 if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1458   AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
1459 fi
1460 if test x"$grub_build_mkfont_excuse" = x ; then
1461   enable_build_grub_mkfont=yes
1462 else
1463   enable_build_grub_mkfont=no
1464 fi
1465 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
1466   if test x"$grub_build_mkfont_excuse" = x ; then
1467     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1468   else
1469     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1470   fi
1471 fi
1472
1473 AC_SUBST([build_freetype_cflags])
1474 AC_SUBST([build_freetype_libs])
1475
1476 CC="$SAVED_CC"
1477 CPP="$SAVED_CPP"
1478 CFLAGS="$SAVED_CFLAGS"
1479 CPPFLAGS="$SAVED_CPPFLAGS"
1480 LDFLAGS="$SAVED_LDFLAGS"
1481
1482
1483 DJVU_FONT_SOURCE=
1484
1485 starfield_excuse=
1486
1487 AC_ARG_ENABLE([grub-themes],
1488               [AS_HELP_STRING([--enable-grub-themes],
1489                              [build and install GRUB themes (default=guessed)])])
1490 if test x"$enable_grub_themes" = xno ; then
1491   starfield_excuse="explicitly disabled"
1492 fi
1493
1494 if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1495   starfield_excuse="No build-time grub-mkfont"
1496 fi
1497
1498 if test x"$starfield_excuse" = x; then
1499    for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1500      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
1501         if test -f "$dir/DejaVuSans.$ext"; then
1502           DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1503           break 2
1504         fi
1505      done
1506    done
1507
1508    if test "x$DJVU_FONT_SOURCE" = x; then
1509      starfield_excuse="No DejaVu found"
1510    fi
1511 fi
1512
1513 if test x"$enable_grub_themes" = xyes &&  test x"$starfield_excuse" != x; then
1514    AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
1515 fi
1516
1517 AC_SUBST([DJVU_FONT_SOURCE])
1518
1519 FONT_SOURCE=
1520
1521 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1522   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
1523     if test -f "$dir/unifont.$ext"; then
1524       md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1525       # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1526       if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1527         continue
1528       fi
1529       FONT_SOURCE="$dir/unifont.$ext"
1530       break 2
1531     fi
1532   done
1533 done
1534
1535 if test x"$enable_build_grub_mkfont" = xno ; then
1536   FONT_SOURCE=
1537 fi
1538
1539 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
1540   if test x"$grub_build_mkfont_excuse" = x ; then
1541     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1542   else
1543     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1544   fi
1545 fi
1546
1547 AC_SUBST([FONT_SOURCE])
1548
1549 if test x"$FONT_SOURCE" = x &&  test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1550   grub_build_mkfont_excuse="no fonts"
1551 fi
1552
1553
1554 AC_ARG_ENABLE([grub-mount],
1555               [AS_HELP_STRING([--enable-grub-mount],
1556                              [build and install the `grub-mount' utility (default=guessed)])])
1557 if test x"$enable_grub_mount" = xno ; then
1558   grub_mount_excuse="explicitly disabled"
1559 fi
1560
1561 if test x"$grub_mount_excuse" = x ; then
1562   AC_CHECK_LIB([fuse], [fuse_main_real], [],
1563                [grub_mount_excuse="need FUSE library"])
1564 fi
1565
1566 if test x"$grub_mount_excuse" = x ; then
1567   # Check for fuse headers.
1568   SAVED_CPPFLAGS="$CPPFLAGS"
1569   CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
1570   AC_CHECK_HEADERS([fuse/fuse.h], [],
1571         [grub_mount_excuse=["need FUSE headers"]])
1572   CPPFLAGS="$SAVED_CPPFLAGS"
1573 fi
1574
1575 if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1576   AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
1577 fi
1578 if test x"$grub_mount_excuse" = x ; then
1579 enable_grub_mount=yes
1580 else
1581 enable_grub_mount=no
1582 fi
1583 AC_SUBST([enable_grub_mount])
1584
1585 AC_ARG_ENABLE([device-mapper],
1586               [AS_HELP_STRING([--enable-device-mapper],
1587                               [enable Linux device-mapper support (default=guessed)])])
1588 if test x"$enable_device_mapper" = xno ; then
1589   device_mapper_excuse="explicitly disabled"
1590 fi
1591
1592 if test x"$device_mapper_excuse" = x ; then
1593   # Check for device-mapper header.
1594   AC_CHECK_HEADER([libdevmapper.h], [],
1595                [device_mapper_excuse="need libdevmapper header"])
1596 fi
1597
1598 if test x"$device_mapper_excuse" = x ; then
1599   # Check for device-mapper library.
1600   AC_CHECK_LIB([devmapper], [dm_task_create], [],
1601                [device_mapper_excuse="need devmapper library"])
1602 fi
1603
1604 if test x"$device_mapper_excuse" = x ; then
1605   # Check for device-mapper library.
1606   AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1607                [],
1608                [device_mapper_excuse="need devmapper library"])
1609 fi
1610
1611 if test x"$device_mapper_excuse" = x ; then
1612    LIBDEVMAPPER="-ldevmapper"
1613    AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1614              [Define to 1 if you have the devmapper library.])
1615 fi
1616
1617 AC_SUBST([LIBDEVMAPPER])
1618
1619 LIBGEOM=
1620 if test x$host_kernel = xkfreebsd; then
1621   AC_CHECK_LIB([geom], [geom_gettree], [],
1622                [AC_MSG_ERROR([Your platform requires libgeom])])
1623   LIBGEOM="-lgeom"
1624 fi
1625
1626 AC_SUBST([LIBGEOM])
1627
1628 AC_ARG_ENABLE([liblzma],
1629               [AS_HELP_STRING([--enable-liblzma],
1630                               [enable liblzma integration (default=guessed)])])
1631 if test x"$enable_liblzma" = xno ; then
1632   liblzma_excuse="explicitly disabled"
1633 fi
1634
1635 if test x"$liblzma_excuse" = x ; then
1636 AC_CHECK_LIB([lzma], [lzma_code],
1637              [],[liblzma_excuse="need lzma library"])
1638 fi
1639 if test x"$liblzma_excuse" = x ; then
1640 AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1641 fi
1642
1643 if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1644   AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
1645 fi
1646
1647
1648 if test x"$liblzma_excuse" = x ; then
1649    LIBLZMA="-llzma"
1650    AC_DEFINE([USE_LIBLZMA], [1],
1651              [Define to 1 if you have the LZMA library.])
1652 fi
1653
1654 AC_SUBST([LIBLZMA])
1655
1656 AC_ARG_ENABLE([libzfs],
1657               [AS_HELP_STRING([--enable-libzfs],
1658                               [enable libzfs integration (default=guessed)])])
1659 if test x"$enable_libzfs" = xno ; then
1660   libzfs_excuse="explicitly disabled"
1661 fi
1662
1663 if test x"$libzfs_excuse" = x ; then
1664   # Only check for system headers if libzfs support has not been disabled.
1665   AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1666 fi
1667
1668 if test x"$libzfs_excuse" = x ; then
1669   AC_CHECK_LIB([zfs], [libzfs_init],
1670                [],
1671                [libzfs_excuse="need zfs library"])
1672 fi
1673
1674 if test x"$libzfs_excuse" = x ; then
1675   AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1676                [],
1677                [libzfs_excuse="need nvpair library"])
1678 fi
1679
1680 if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1681   AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
1682 fi
1683
1684 if test x"$libzfs_excuse" = x ; then
1685   # We need both libzfs and libnvpair for a successful build.
1686   LIBZFS="-lzfs"
1687   AC_DEFINE([HAVE_LIBZFS], [1],
1688             [Define to 1 if you have the ZFS library.])
1689   LIBNVPAIR="-lnvpair"
1690   AC_DEFINE([HAVE_LIBNVPAIR], [1],
1691             [Define to 1 if you have the NVPAIR library.])
1692 fi
1693
1694 AC_SUBST([LIBZFS])
1695 AC_SUBST([LIBNVPAIR])
1696
1697 LIBS=""
1698
1699 AC_SUBST([FONT_SOURCE])
1700 AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1701             [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1702
1703 AC_SUBST(HAVE_ASM_USCORE)
1704 AC_SUBST(BSS_START_SYMBOL)
1705 AC_SUBST(END_SYMBOL)
1706 AC_SUBST(PACKAGE)
1707 AC_SUBST(VERSION)
1708
1709 AC_ARG_ENABLE([werror],
1710               [AS_HELP_STRING([--disable-werror],
1711                              [do not use -Werror when building GRUB])])
1712 if test x"$enable_werror" != xno ; then
1713   TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1714   HOST_CFLAGS="$HOST_CFLAGS -Werror"
1715 fi
1716
1717 TARGET_CPP="$TARGET_CC -E"
1718 TARGET_CCAS=$TARGET_CC
1719
1720 # Includes which include make-time substitutions. They must come last
1721 # as to avoid executing top_builddir in shell.
1722 HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
1723 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
1724 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
1725
1726 GRUB_TARGET_CPU="${target_cpu}"
1727 GRUB_PLATFORM="${platform}"
1728
1729 AC_SUBST(GRUB_TARGET_CPU)
1730 AC_SUBST(GRUB_PLATFORM)
1731
1732 AC_SUBST(TARGET_OBJCONV)
1733 AC_SUBST(TARGET_CPP)
1734 AC_SUBST(TARGET_CCAS)
1735 AC_SUBST(TARGET_OBJ2ELF)
1736 AC_SUBST(TARGET_MODULE_FORMAT)
1737 AC_SUBST(TARGET_CC_VERSION)
1738
1739 AC_SUBST(TARGET_CFLAGS)
1740 AC_SUBST(TARGET_LDFLAGS)
1741 AC_SUBST(TARGET_CPPFLAGS)
1742 AC_SUBST(TARGET_CCASFLAGS)
1743
1744 AC_SUBST(TARGET_IMG_LDFLAGS)
1745 AC_SUBST(TARGET_IMG_CFLAGS)
1746 AC_SUBST(TARGET_IMG_BASE_LDOPT)
1747 AC_SUBST(TARGET_APPLE_LINKER)
1748
1749 AC_SUBST(HOST_CFLAGS)
1750 AC_SUBST(HOST_LDFLAGS)
1751 AC_SUBST(HOST_CPPFLAGS)
1752 AC_SUBST(HOST_CCASFLAGS)
1753
1754 AC_SUBST(BUILD_LIBM)
1755
1756 #
1757 # Automake conditionals
1758 #
1759
1760 AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
1761 AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1762 AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1763 AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1764 AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1765 AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1766 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1767 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1768 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1769 AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1770 AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1771 AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1772 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1773 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
1774 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xarc])
1775 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1776 AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1777 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1778 AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1779 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1780 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1781 AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1782 AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1783 AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1784 AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1785 AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
1786
1787 AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1788 AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1789 AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
1790 AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1791 AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1792 AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1793 AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
1794
1795 AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1796 AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1797 AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1798 AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1799 AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1800 AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1801 AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1802 if test x$FONT_SOURCE != x ; then
1803    HAVE_FONT_SOURCE=1
1804 else
1805    HAVE_FONT_SOURCE=0
1806 fi
1807 AC_SUBST(HAVE_FONT_SOURCE)
1808 AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1809 AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1810 AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1811 AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1812
1813 AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1814
1815 AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1816 AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1817 AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1818
1819 test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1820 test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1821 datarootdir="$(eval echo "$datarootdir")"
1822 grub_libdir="$(eval echo "$libdir")"
1823 grub_localedir="$(eval echo "$localedir")"
1824 grub_datadir="$(eval echo "$datadir")"
1825 grub_sysconfdir="$(eval echo "$sysconfdir")"
1826 AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1827 AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1828 AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1829 AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1830
1831
1832 # Output files.
1833 if test "$platform" != none; then
1834   cpudir="${target_cpu}"
1835   if test x${cpudir} = xmipsel; then
1836     cpudir=mips;
1837   fi
1838   grub_CHECK_LINK_DIR
1839   if test x"$link_dir" = xyes ; then
1840     AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1841     if test "$platform" != emu ; then
1842       AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1843     fi
1844   else
1845     mkdir -p include/grub 2>/dev/null
1846     rm -rf include/grub/cpu
1847     cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1848     if test "$platform" != emu ; then
1849       rm -rf include/grub/machine
1850       cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1851     fi
1852   fi
1853 else
1854   # Just enough to stop the compiler failing with -I$(srcdir)/include.
1855   mkdir -p include 2>/dev/null
1856   rm -rf include/grub/cpu include/grub/machine
1857 fi
1858
1859 AC_CONFIG_FILES([Makefile])
1860 AC_CONFIG_FILES([grub-core/Makefile])
1861 AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1862 AC_CONFIG_FILES([po/Makefile.in])
1863 AC_CONFIG_FILES([docs/Makefile])
1864 AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1865 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1866 AC_CONFIG_FILES([config.h])
1867
1868 AC_OUTPUT
1869 [
1870 echo "*******************************************************"
1871 echo GRUB2 will be compiled with following components:
1872 echo Platform: "$target_cpu"-"$platform"
1873 if [ x"$platform" = xemu ]; then
1874 if [ x"$grub_emu_usb_excuse" = x ]; then
1875 echo USB support for grub-emu: Yes
1876 else
1877 echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1878 fi
1879 if [ x"$grub_emu_sdl_excuse" = x ]; then
1880 echo SDL support for grub-emu: Yes
1881 else
1882 echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1883 fi
1884 if [ x"$grub_emu_pci_excuse" = x ]; then
1885 echo PCI support for grub-emu: Yes
1886 else
1887 echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1888 fi
1889 fi
1890 if test x"$device_mapper_excuse" = x ; then
1891 echo With devmapper support: Yes
1892 else
1893 echo With devmapper support: No "($device_mapper_excuse)"
1894 fi
1895 if [ x"$enable_mm_debug" = xyes ]; then
1896 echo With memory debugging: Yes
1897 else
1898 echo With memory debugging: No
1899 fi
1900 if [ x"$enable_cache_stats" = xyes ]; then
1901 echo With disk cache statistics: Yes
1902 else
1903 echo With disk cache statistics: No
1904 fi
1905
1906 if [ x"$enable_boot_time" = xyes ]; then
1907 echo With boot time statistics: Yes
1908 else
1909 echo With boot time statistics: No
1910 fi
1911
1912 if [ x"$efiemu_excuse" = x ]; then
1913 echo efiemu runtime: Yes
1914 else
1915 echo efiemu runtime: No "($efiemu_excuse)"
1916 fi
1917 if [ x"$grub_mkfont_excuse" = x ]; then
1918 echo grub-mkfont: Yes
1919 else
1920 echo grub-mkfont: No "($grub_mkfont_excuse)"
1921 fi
1922 if [ x"$grub_mount_excuse" = x ]; then
1923 echo grub-mount: Yes
1924 else
1925 echo grub-mount: No "($grub_mount_excuse)"
1926 fi
1927 if [ x"$starfield_excuse" = x ]; then
1928 echo starfield theme: Yes
1929 echo With DejaVuSans font from $DJVU_FONT_SOURCE
1930 else
1931 echo starfield theme: No "($starfield_excuse)"
1932 fi
1933 if [ x"$libzfs_excuse" = x ]; then
1934 echo With libzfs support: Yes
1935 else
1936 echo With libzfs support: No "($libzfs_excuse)"
1937 fi
1938 if [ x"$grub_build_mkfont_excuse" = x ]; then
1939   echo Build-time grub-mkfont: Yes
1940   if test "x$FONT_SOURCE" = x ; then
1941     echo "Without unifont"
1942   else
1943     echo "With unifont from $FONT_SOURCE"
1944   fi
1945 else
1946   echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
1947   echo "Without unifont (no build-time grub-mkfont)"
1948 fi
1949 if test x"$liblzma_excuse" != x ; then
1950 echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
1951 else
1952 echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1953 fi
1954 echo "*******************************************************"
1955 ]