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