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