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