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