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