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