]> git.proxmox.com Git - grub2.git/blob - configure.ac
* configure.ac: Use -mcmodel=large on x86_64-emu as well.
[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 as well as the build type,
30 dnl because GRUB does not need to use those variables for the build
31 dnl type, so there is no conflict. Variables with the prefix "TARGET_"
32 dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
33 dnl type.
34
35 AC_INIT([GRUB],[2.00],[bug-grub@gnu.org])
36
37 AC_CONFIG_AUX_DIR([build-aux])
38
39 # We don't want -g -O2 by default in CFLAGS
40 : ${CFLAGS=""}
41
42 # Checks for host and target systems.
43 AC_CANONICAL_HOST
44 AC_CANONICAL_TARGET
45
46 AM_INIT_AUTOMAKE()
47 AC_PREREQ(2.60)
48 AC_CONFIG_SRCDIR([include/grub/dl.h])
49 AC_CONFIG_HEADER([config-util.h])
50
51 # Program name transformations
52 AC_ARG_PROGRAM
53 grub_TRANSFORM([grub-bios-setup])
54 grub_TRANSFORM([grub-editenv])
55 grub_TRANSFORM([grub-install])
56 grub_TRANSFORM([grub-mkconfig])
57 grub_TRANSFORM([grub-mkfont])
58 grub_TRANSFORM([grub-mkimage])
59 grub_TRANSFORM([grub-glue-efi])
60 grub_TRANSFORM([grub-mklayout])
61 grub_TRANSFORM([grub-mkpasswd-pbkdf2])
62 grub_TRANSFORM([grub-mkrelpath])
63 grub_TRANSFORM([grub-mkrescue])
64 grub_TRANSFORM([grub-probe])
65 grub_TRANSFORM([grub-reboot])
66 grub_TRANSFORM([grub-script-check])
67 grub_TRANSFORM([grub-set-default])
68 grub_TRANSFORM([grub-sparc64-setup])
69 grub_TRANSFORM([grub-render-label])
70
71 # Optimization flag. Allow user to override.
72 if test "x$TARGET_CFLAGS" = x; then
73 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
74 fi
75
76 # Default HOST_CPPFLAGS
77 HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
78 HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
79 HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
80 HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_LIBDIR=\\\"\$(pkglibdir)\\\""
81 HOST_CPPFLAGS="$HOST_CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\""
82
83 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
84 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
85 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
86
87 case "$target_cpu" in
88 i[[3456]]86) target_cpu=i386 ;;
89 amd64) target_cpu=x86_64 ;;
90 sparc) target_cpu=sparc64 ;;
91 mipsel|mips64el)
92 target_cpu=mipsel;
93 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1";
94 ;;
95 mips|mips64)
96 target_cpu=mips;
97 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1";
98 ;;
99 esac
100
101 # Specify the platform (such as firmware).
102 AC_ARG_WITH([platform],
103 AS_HELP_STRING([--with-platform=PLATFORM],
104 [select the host platform [[guessed]]]))
105
106 # Guess the platform if not specified.
107 if test "x$with_platform" = x; then
108 case "$target_cpu"-"$target_vendor" in
109 i386-apple) platform=efi ;;
110 i386-*) platform=pc ;;
111 x86_64-apple) platform=efi ;;
112 x86_64-*) platform=pc ;;
113 powerpc-*) platform=ieee1275 ;;
114 powerpc64-*) platform=ieee1275 ;;
115 sparc64-*) platform=ieee1275 ;;
116 mipsel-*) platform=loongson ;;
117 mips-*) platform=arc ;;
118 ia64-*) platform=efi ;;
119 *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
120 esac
121 else
122 platform="$with_platform"
123 fi
124
125 case "$target_cpu"-"$platform" in
126 x86_64-efi) ;;
127 x86_64-emu) ;;
128 x86_64-*) target_cpu=i386 ;;
129 powerpc64-ieee1275) target_cpu=powerpc ;;
130 esac
131
132 # Check if the platform is supported, make final adjustments.
133 case "$target_cpu"-"$platform" in
134 i386-efi) ;;
135 x86_64-efi) ;;
136 i386-pc) ;;
137 i386-multiboot) ;;
138 i386-coreboot) ;;
139 i386-linuxbios) platform=coreboot ;;
140 i386-ieee1275) ;;
141 i386-qemu) ;;
142 powerpc-ieee1275) ;;
143 sparc64-ieee1275) ;;
144 ia64-efi) ;;
145 mips-qemu_mips) ;;
146 mips-qemu-mips) platform=qemu_mips;;
147 mips-arc) ;;
148 mipsel-arc) ;;
149 mipsel-qemu_mips) ;;
150 mipsel-qemu-mips) platform=qemu_mips;;
151 mipsel-yeeloong) platform=loongson ;;
152 mipsel-fuloong) platform=loongson ;;
153 mipsel-loongson) ;;
154 *-emu) ;;
155 *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
156 esac
157
158 case "$target_cpu" in
159 i386 | powerpc) target_m32=1 ;;
160 x86_64 | sparc64) target_m64=1 ;;
161 esac
162
163 case "$host_os" in
164 mingw32*) host_os=cygwin ;;
165 esac
166
167 # This normalizes the names, and creates a new variable ("host_kernel")
168 # while at it, since the mapping is not always 1:1 (e.g. different OSes
169 # using the same kernel type).
170 case "$host_os" in
171 gnu*) host_kernel=hurd ;;
172 linux*) host_kernel=linux ;;
173 freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;;
174 netbsd*) host_kernel=netbsd ;;
175 solaris*) host_kernel=illumos ;;
176 darwin*) host_kernel=xnu ;;
177 cygwin) host_kernel=windows ;;
178 esac
179
180 case "$platform" in
181 coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
182 multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
183 efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
184 ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
185 qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
186 pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
187 emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
188 loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
189 qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
190 arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
191 esac
192 case "$target_cpu" in
193 mips |mipsel) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;;
194 sparc64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;;
195 esac
196 if test x${target_cpu} = xmipsel ; then
197 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
198 else
199 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,` -DGRUB_TARGET_CPU_`echo ${target_cpu} | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`=1"
200 fi
201
202 case "${target_cpu}-$platform" in
203 mips-arc)
204 TARGET_LINK_ADDR=0x88200000
205 TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
206 ;;
207 mipsel-arc)
208 TARGET_LINK_ADDR=0x80700000
209 TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
210 ;;
211 mips*-qemu_mips | mips*-loongson)
212 TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
213 ;;
214 esac
215
216 AC_SUBST(TARGET_LINK_ADDR)
217 AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
218
219 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
220
221 AC_SUBST(host_cpu)
222 AC_SUBST(host_os)
223 AC_SUBST(host_kernel)
224
225 AC_SUBST(target_cpu)
226 AC_SUBST(platform)
227
228 # Define default variables
229
230 have_with_bootdir=n
231 AC_ARG_WITH([bootdir],
232 AS_HELP_STRING([--with-bootdir=DIR],
233 [set the name of /boot directory [[guessed]]]),
234 [have_with_bootdir=y],
235 [have_with_bootdir=n])
236 if test x$have_with_bootdir = xy; then
237 bootdirname="$with_bootdir"
238 else
239 case "$host_os" in
240 netbsd* | openbsd*)
241 # Because /boot is used for the boot block in NetBSD and OpenBSD,
242 bootdirname='' ;;
243 *) bootdirname='boot' ;;
244 esac
245 fi
246
247 AC_SUBST(bootdirname)
248 AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
249 [Default boot directory name]")
250
251 AC_ARG_WITH([grubdir],
252 AS_HELP_STRING([--with-grubdir=DIR],
253 [set the name of grub directory [[guessed]]]),
254 [grubdirname="$with_grubdir"],
255 [grubdirname="$PACKAGE"])
256
257 AC_SUBST(grubdirname)
258 AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
259 [Default grub directory name])
260
261 #
262 # Checks for build programs.
263 #
264
265 # Although cmp is listed in the GNU Coding Standards as a command which
266 # can used directly, OpenBSD lacks cmp in the default installation.
267 AC_CHECK_PROGS([CMP], [cmp])
268 if test "x$CMP" = x; then
269 AC_MSG_ERROR([cmp is not found])
270 fi
271
272 AC_CHECK_PROGS([YACC], [bison])
273 if test "x$YACC" = x; then
274 AC_MSG_ERROR([bison is not found])
275 fi
276
277 FONT_SOURCE=
278
279 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
280 for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni; do
281 if test -f "$dir/unifont.$ext"; then
282 FONT_SOURCE="$dir/unifont.$ext"
283 break 2
284 fi
285 done
286 done
287
288 if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips); then
289 AC_MSG_ERROR([qemu and loongson ports need unifont])
290 fi
291
292 AC_SUBST([FONT_SOURCE])
293
294 AC_PROG_RANLIB
295 AC_PROG_INSTALL
296 AC_PROG_AWK
297 AC_PROG_LEX
298 AC_PROG_YACC
299 AC_PROG_MAKE_SET
300 AC_PROG_MKDIR_P
301 AC_PROG_LN_S
302
303 if test "x$LEX" = "x:"; then
304 AC_MSG_ERROR([flex is not found])
305 else
306 version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
307 if test -n "$version" -a "$version" -ge 20535; then
308 :
309 else
310 AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
311 fi
312 fi
313
314 # These are not a "must".
315 AC_PATH_PROGS(MAKEINFO, makeinfo true)
316
317 #
318 # Checks for host programs.
319 #
320
321 AC_PROG_CC
322 gl_EARLY
323 AM_PROG_CC_C_O
324 AM_PROG_AS
325
326 # Must be GCC.
327 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
328
329 AC_GNU_SOURCE
330 AM_GNU_GETTEXT([external])
331 AC_SYS_LARGEFILE
332
333 # Identify characteristics of the host architecture.
334 AC_C_BIGENDIAN
335 AC_CHECK_SIZEOF(void *)
336 AC_CHECK_SIZEOF(long)
337
338 grub_apple_cc
339 if test x$grub_cv_apple_cc = xyes ; then
340 HOST_CPPFLAGS="$HOST_CPPFLAGS -fnested-functions"
341 HOST_LDFLAGS="$HOST_LDFLAGS -Wl,-allow_stack_execute"
342 fi
343
344 if test x$USE_NLS = xno; then
345 HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
346 fi
347
348 if test "x$cross_compiling" = xyes; then
349 AC_MSG_WARN([cannot generate manual pages while cross compiling])
350 else
351 AC_PATH_PROG(HELP2MAN, help2man)
352 fi
353
354 # Check for functions and headers.
355 AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf getextmntent)
356 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
357
358 AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
359 #include <sys/param.h>
360 #include <sys/mount.h>])
361
362 AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
363 #include <sys/param.h>
364 #include <sys/mount.h>])
365
366 # For opendisk() and getrawpartition() on NetBSD.
367 # Used in util/deviceiter.c and in util/hostdisk.c.
368 AC_CHECK_HEADER([util.h], [
369 AC_CHECK_LIB([util], [opendisk], [
370 LIBUTIL="-lutil"
371 AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
372 ])
373 AC_CHECK_LIB([util], [getrawpartition], [
374 LIBUTIL="-lutil"
375 AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
376 ])
377 ])
378 AC_SUBST([LIBUTIL])
379
380 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
381 SAVED_CFLAGS="$CFLAGS"
382 CFLAGS="$HOST_CFLAGS -Wtrampolines"
383 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
384 int va_arg_func (int fixed, va_list args);]], [[]])],
385 [grub_cv_host_cc_wtrampolines=yes],
386 [grub_cv_host_cc_wtrampolines=no])
387 CFLAGS="$SAVED_CFLAGS"
388 ])
389
390 if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
391 HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
392 fi
393
394 #
395 # Check for host and build compilers.
396 #
397 HOST_CC=$CC
398 AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc],
399 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])])
400
401 # For gnulib.
402 gl_INIT
403
404 #
405 # Check for target programs.
406 #
407
408 # Find tools for the target.
409 if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
410 tmp_ac_tool_prefix="$ac_tool_prefix"
411 ac_tool_prefix=$target_alias-
412
413 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
414 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
415 AC_CHECK_TOOL(OBJCOPY, objcopy)
416 AC_CHECK_TOOL(STRIP, strip)
417 AC_CHECK_TOOL(NM, nm)
418
419 ac_tool_prefix="$tmp_ac_tool_prefix"
420 else
421 if test "x$TARGET_CC" = x; then
422 TARGET_CC=$CC
423 fi
424 AC_CHECK_TOOL(OBJCOPY, objcopy)
425 AC_CHECK_TOOL(STRIP, strip)
426 AC_CHECK_TOOL(NM, nm)
427 fi
428 AC_SUBST(HOST_CC)
429 AC_SUBST(BUILD_CC)
430 AC_SUBST(TARGET_CC)
431
432 # Test the C compiler for the target environment.
433 tmp_CC="$CC"
434 tmp_CFLAGS="$CFLAGS"
435 tmp_LDFLAGS="$LDFLAGS"
436 tmp_CPPFLAGS="$CPPFLAGS"
437 tmp_LIBS="$LIBS"
438 CC="$TARGET_CC"
439 CFLAGS="$TARGET_CFLAGS"
440 CPPFLAGS="$TARGET_CPPFLAGS"
441 LDFLAGS="$TARGET_LDFLAGS"
442 LIBS=""
443
444 # debug flags.
445 WARN_FLAGS="-Wall -W -Wshadow -Wold-style-definition -Wpointer-arith -Wundef -Wextra -Waddress -Wattributes -Wcast-align -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wempty-body -Wendif-labels -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-noreturn -Wmultichar -Wnonnull -Woverflow -Wparentheses -Wpointer-arith -Wpointer-to-int-cast -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wstrict-aliasing -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wnested-externs -Wstrict-prototypes -Wpointer-sign"
446 HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS"
447 TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
448 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
449
450 # Force no alignment to save space on i386.
451 if test "x$target_cpu" = xi386; then
452 AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
453 CFLAGS="$CFLAGS -falign-loops=1"
454 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
455 [grub_cv_cc_falign_loop=yes],
456 [grub_cv_cc_falign_loop=no])
457 ])
458
459 if test "x$grub_cv_cc_falign_loop" = xyes; then
460 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
461 else
462 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
463 fi
464
465 # Some toolchains enable these features by default, but they need
466 # registers that aren't set up properly in GRUB.
467 TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
468 fi
469
470 # By default, GCC 4.4 generates .eh_frame sections containing unwind
471 # information in some cases where it previously did not. GRUB doesn't need
472 # these and they just use up vital space. Restore the old compiler
473 # behaviour.
474 AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
475 SAVE_CFLAGS="$CFLAGS"
476 CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm"
477 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
478 [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
479 [grub_cv_cc_fno_dwarf2_cfi_asm=no])
480 CFLAGS="$SAVE_CFLAGS"
481 ])
482
483 if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
484 TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
485 fi
486
487 # By default, GCC 4.6 generates .eh_frame sections containing unwind
488 # information in some cases where it previously did not. GRUB doesn't need
489 # these and they just use up vital space. Restore the old compiler
490 # behaviour.
491 AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
492 SAVE_CFLAGS="$CFLAGS"
493 CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm"
494 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
495 [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
496 [grub_cv_cc_fno_asynchronous_unwind_tables=no])
497 CFLAGS="$SAVE_CFLAGS"
498 ])
499
500 if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
501 TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
502 fi
503
504 grub_apple_target_cc
505 if test x$grub_cv_apple_target_cc = xyes ; then
506 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -fnested-functions"
507
508 CFLAGS="$CFLAGS -fnested-functions"
509 TARGET_APPLE_CC=1
510 AC_CHECK_PROG([OBJCONV], [objconv], [objconv], [])
511 if test "x$OBJCONV" = x ; then
512 AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.])
513 fi
514 if test "x$OBJCONV" = x ; then
515 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
516 fi
517 TARGET_IMG_LDSCRIPT=
518 TARGET_IMG_CFLAGS="-static"
519 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
520 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
521 TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
522 TARGET_LDFLAGS_OLDMAGIC=""
523 else
524 TARGET_APPLE_CC=0
525 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
526 # Use linker script if present, otherwise use builtin -N script.
527 if test -f "${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then
528 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"
529 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
530 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"
531 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
532 else
533 TARGET_IMG_LDSCRIPT=
534 TARGET_IMG_LDFLAGS='-Wl,-N'
535 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
536 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
537 fi
538 TARGET_IMG_CFLAGS=
539 fi
540
541 AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
542
543 # For platforms where ELF is not the default link format.
544 AC_MSG_CHECKING([for command to convert module to ELF format])
545 case "${host_os}" in
546 cygwin) TARGET_OBJ2ELF='$(top_builddir)/grub-pe2elf';
547 # FIXME: put proper test here
548 NEED_REGISTER_FRAME_INFO=1
549 ;;
550 *) NEED_REGISTER_FRAME_INFO=0 ;;
551 esac
552 AC_MSG_RESULT([$TARGET_OBJ2ELF])
553
554
555 AC_ARG_ENABLE([efiemu],
556 [AS_HELP_STRING([--enable-efiemu],
557 [build and install the efiemu runtimes (default=guessed)])])
558 if test x"$enable_efiemu" = xno ; then
559 efiemu_excuse="explicitly disabled"
560 fi
561 if test x"$target_cpu" != xi386 ; then
562 efiemu_excuse="only available on i386"
563 fi
564 if test x"$platform" = xefi ; then
565 efiemu_excuse="not available on efi"
566 fi
567 if test x"$efiemu_excuse" = x ; then
568 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
569 SAVED_CFLAGS="$CFLAGS"
570 CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib"
571 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
572 [grub_cv_cc_efiemu=yes],
573 [grub_cv_cc_efiemu=no])
574 CFLAGS="$SAVED_CFLAGS"
575 ])
576 if test x$grub_cv_cc_efiemu = xno; then
577 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
578 fi
579 fi
580 if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
581 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled])
582 fi
583 if test x"$efiemu_excuse" = x ; then
584 enable_efiemu=yes
585 else
586 enable_efiemu=no
587 fi
588 AC_SUBST([enable_efiemu])
589
590 if test "x$target_m32" = x1; then
591 # Force 32-bit mode.
592 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
593 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
594 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
595 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
596 TARGET_MODULE_FORMAT="elf32"
597 fi
598
599 if test "x$target_m64" = x1; then
600 # Force 64-bit mode.
601 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
602 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
603 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
604 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
605 TARGET_MODULE_FORMAT="elf64"
606 fi
607
608 if test "$target_cpu" = x86_64; then
609 # Use large model to support 4G memory
610 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
611 SAVED_CFLAGS=$CFLAGS
612 CFLAGS="$CFLAGS -m64 -mcmodel=large"
613 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
614 [grub_cv_cc_mcmodel=yes],
615 [grub_cv_cc_mcmodel=no])
616 ])
617 if test "x$grub_cv_cc_mcmodel" = xno; then
618 AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.])
619 else
620 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
621 fi
622 fi
623
624 if test "$target_cpu"-"$platform" = x86_64-efi; then
625 # EFI writes to stack below %rsp, we must not use the red zone
626 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
627 CFLAGS="$CFLAGS -m64 -mno-red-zone"
628 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
629 [grub_cv_cc_no_red_zone=yes],
630 [grub_cv_cc_no_red_zone=no])
631 ])
632 if test "x$grub_cv_cc_no_red_zone" = xno; then
633 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
634 fi
635
636 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
637 fi
638
639 #
640 # Compiler features.
641 #
642
643 # Position independent executable.
644 grub_CHECK_PIE
645 [# Need that, because some distributions ship compilers that include
646 # `-fPIE' in the default specs.
647 if [ x"$pie_possible" = xyes ]; then
648 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
649 fi]
650
651 # Position independent executable.
652 grub_CHECK_PIC
653 [# Need that, because some distributions ship compilers that include
654 # `-fPIC' in the default specs.
655 if [ x"$pic_possible" = xyes ]; then
656 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
657 fi]
658
659 # Smashing stack protector.
660 grub_CHECK_STACK_PROTECTOR
661 # Need that, because some distributions ship compilers that include
662 # `-fstack-protector' in the default specs.
663 if test "x$ssp_possible" = xyes; then
664 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
665 fi
666 grub_CHECK_STACK_ARG_PROBE
667 # Cygwin's GCC uses alloca() to probe the stackframe on static
668 # stack allocations above some threshold.
669 if test x"$sap_possible" = xyes; then
670 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
671 fi
672
673 AC_ARG_ENABLE([werror],
674 [AS_HELP_STRING([--disable-werror],
675 [do not use -Werror when building GRUB])])
676 if test x"$enable_werror" != xno ; then
677 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
678 HOST_CFLAGS="$HOST_CFLAGS -Werror"
679 fi
680
681 TARGET_CPP="$TARGET_CC -E"
682 TARGET_CCAS=$TARGET_CC
683
684 GRUB_TARGET_CPU="${target_cpu}"
685 GRUB_PLATFORM="${platform}"
686
687 AC_SUBST(GRUB_TARGET_CPU)
688 AC_SUBST(GRUB_PLATFORM)
689
690 AC_SUBST(OBJCONV)
691 AC_SUBST(TARGET_CPP)
692 AC_SUBST(TARGET_CCAS)
693 AC_SUBST(TARGET_OBJ2ELF)
694 AC_SUBST(TARGET_APPLE_CC)
695 AC_SUBST(TARGET_MODULE_FORMAT)
696
697 AC_SUBST(TARGET_CFLAGS)
698 AC_SUBST(TARGET_LDFLAGS)
699 AC_SUBST(TARGET_CPPFLAGS)
700 AC_SUBST(TARGET_CCASFLAGS)
701
702 AC_SUBST(TARGET_IMG_LDSCRIPT)
703 AC_SUBST(TARGET_IMG_LDFLAGS)
704 AC_SUBST(TARGET_IMG_CFLAGS)
705 AC_SUBST(TARGET_IMG_BASE_LDOPT)
706
707 AC_SUBST(HOST_CFLAGS)
708 AC_SUBST(HOST_LDFLAGS)
709 AC_SUBST(HOST_CPPFLAGS)
710 AC_SUBST(HOST_CCASFLAGS)
711
712 # Set them to their new values for the tests below.
713 CC="$TARGET_CC"
714 if test "x$TARGET_APPLE_CC" = x1 ; then
715 CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
716 else
717 CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error"
718 fi
719 CPPFLAGS="$TARGET_CPPFLAGS"
720 if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 ; then
721 LIBS=
722 else
723 LIBS=-lgcc
724 fi
725
726 grub_ASM_USCORE
727 if test x$grub_cv_asm_uscore = xyes; then
728 CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main"
729 else
730 CFLAGS="$CFLAGS -Wl,--defsym,abort=main"
731 fi
732
733 # Check for libgcc symbols
734 AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x __udivsi3 __umoddi3 __udivdi3 __divsi3 __modsi3 __umodsi3 __moddi3 __divdi3 __ctzdi2 __ctzsi2)
735
736 if test "x$TARGET_APPLE_CC" = x1 ; then
737 CFLAGS="$TARGET_CFLAGS -nostdlib"
738 else
739 CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100"
740 fi
741 LIBS=""
742
743 # Defined in aclocal.m4.
744 grub_PROG_TARGET_CC
745 if test "x$TARGET_APPLE_CC" != x1 ; then
746 grub_PROG_OBJCOPY_ABSOLUTE
747 fi
748 grub_PROG_LD_BUILD_ID_NONE
749 if test "x$target_cpu" = xi386; then
750 if test "$platform" != emu && test "x$TARGET_APPLE_CC" != x1 ; then
751 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
752 # Check symbols provided by linker script.
753 CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},8000 -Wl,--defsym,___main=0x8100"
754 fi
755 grub_CHECK_BSS_START_SYMBOL
756 grub_CHECK_END_SYMBOL
757 fi
758 CFLAGS="$TARGET_CFLAGS"
759 grub_I386_ASM_PREFIX_REQUIREMENT
760 grub_I386_ASM_ADDR32
761 fi
762
763 if test "$platform" != emu; then
764 AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
765 SAVED_CPPFLAGS="$CPPFLAGS"
766 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
767 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
768 #include <stddef.h>
769 int va_arg_func (int fixed, va_list args);]], [[]])],
770 [grub_cv_cc_isystem=yes],
771 [grub_cv_cc_isystem=no])
772 CPPFLAGS="$SAVED_CPPFLAGS"
773 ])
774
775 if test x"$grub_cv_cc_isystem" = xyes ; then
776 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
777 fi
778 fi
779
780 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
781 SAVED_CFLAGS="$CFLAGS"
782 CFLAGS="$TARGET_CFLAGS -Wtrampolines"
783 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
784 int va_arg_func (int fixed, va_list args);]], [[]])],
785 [grub_cv_cc_wtrampolines=yes],
786 [grub_cv_cc_wtrampolines=no])
787 CFLAGS="$SAVED_CFLAGS"
788 ])
789
790 if test x"$grub_cv_cc_wtrampolines" = xyes ; then
791 TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
792 fi
793
794 # Restore the flags.
795 CC="$tmp_CC"
796 CFLAGS="$tmp_CFLAGS"
797 CPPFLAGS="$tmp_CPPFLAGS"
798 LDFLAGS="$tmp_LDFLAGS"
799 LIBS="$tmp_LIBS"
800
801 #
802 # Check for options.
803 #
804
805 # Memory manager debugging.
806 AC_ARG_ENABLE([mm-debug],
807 AS_HELP_STRING([--enable-mm-debug],
808 [include memory manager debugging]),
809 [AC_DEFINE([MM_DEBUG], [1],
810 [Define to 1 if you enable memory manager debugging.])])
811
812 AC_ARG_ENABLE([cache-stats],
813 AS_HELP_STRING([--enable-cache-stats],
814 [enable disk cache statistics collection]))
815
816 if test x$enable_cache_stats = xyes; then
817 DISK_CACHE_STATS=1
818 else
819 DISK_CACHE_STATS=0
820 fi
821 AC_SUBST([DISK_CACHE_STATS])
822
823 AC_ARG_ENABLE([boot-time],
824 AS_HELP_STRING([--enable-boot-time],
825 [enable boot time statistics collection]))
826
827 if test x$enable_boot_time = xyes; then
828 BOOT_TIME_STATS=1
829 else
830 BOOT_TIME_STATS=0
831 fi
832 AC_SUBST([BOOT_TIME_STATS])
833
834 AC_ARG_ENABLE([grub-emu-usb],
835 [AS_HELP_STRING([--enable-grub-emu-usb],
836 [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
837
838 AC_ARG_ENABLE([grub-emu-sdl],
839 [AS_HELP_STRING([--enable-grub-emu-sdl],
840 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
841
842 AC_ARG_ENABLE([grub-emu-pci],
843 [AS_HELP_STRING([--enable-grub-emu-pci],
844 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
845
846 if test "$platform" = emu; then
847
848 if test x"$enable_grub_emu_usb" != xyes ; then
849 grub_emu_usb_excuse="not enabled"
850 fi
851
852 if test x"$enable_grub_emu_pci" = xyes ; then
853 grub_emu_usb_excuse="conflicts with PCI support"
854 fi
855
856 [if [ x"$grub_emu_usb_excuse" = x ]; then
857 # Check for libusb libraries.]
858 AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
859 [grub_emu_usb_excuse=["need libusb library"]])
860 AC_SUBST([LIBUSB])
861 [fi]
862 [if [ x"$grub_emu_usb_excuse" = x ]; then
863 # Check for headers.]
864 AC_CHECK_HEADERS([usb.h], [],
865 [grub_emu_usb_excuse=["need libusb headers"]])
866 [fi]
867 if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
868 AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled])
869 fi
870 if test x"$grub_emu_usb_excuse" = x ; then
871 enable_grub_emu_usb=yes
872 else
873 enable_grub_emu_usb=no
874 fi
875
876 if test x"$enable_grub_emu_sdl" = xno ; then
877 grub_emu_sdl_excuse="explicitely disabled"
878 fi
879 [if [ x"$grub_emu_sdl_excuse" = x ]; then
880 # Check for libSDL libraries.]
881 AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
882 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
883 AC_SUBST([LIBSDL])
884 [fi]
885
886 [if [ x"$grub_emu_sdl_excuse" = x ]; then
887 # Check for headers.]
888 AC_CHECK_HEADERS([SDL/SDL.h], [],
889 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
890 [fi]
891
892 if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
893 AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled])
894 fi
895 if test x"$grub_emu_sdl_excuse" = x ; then
896 enable_grub_emu_sdl=yes
897 else
898 enable_grub_emu_sdl=no
899 fi
900
901 if test x"$enable_grub_emu_pci" != xyes ; then
902 grub_emu_pci_excuse="not enabled"
903 fi
904
905 if test x"$enable_grub_emu_usb" = xyes ; then
906 grub_emu_pci_excuse="conflicts with USB support"
907 fi
908
909 [if [ x"$grub_emu_pci_excuse" = x ]; then
910 # Check for libpci libraries.]
911 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
912 [grub_emu_pci_excuse=["need libpciaccess library"]])
913 AC_SUBST([LIBPCIACCESS])
914 [fi]
915 [if [ x"$grub_emu_pci_excuse" = x ]; then
916 # Check for headers.]
917 AC_CHECK_HEADERS([pci/pci.h], [],
918 [grub_emu_pci_excuse=["need libpciaccess headers"]])
919 [fi]
920
921 if test x"$grub_emu_pci_excuse" = x ; then
922 enable_grub_emu_pci=yes
923 else
924
925 enable_grub_emu_pci=no
926 fi
927
928 AC_SUBST([enable_grub_emu_sdl])
929 AC_SUBST([enable_grub_emu_usb])
930 AC_SUBST([enable_grub_emu_pci])
931 fi
932
933 AC_ARG_ENABLE([grub-mkfont],
934 [AS_HELP_STRING([--enable-grub-mkfont],
935 [build and install the `grub-mkfont' utility (default=guessed)])])
936 if test x"$enable_grub_mkfont" = xno ; then
937 grub_mkfont_excuse="explicitly disabled"
938 fi
939
940 if test x"$grub_mkfont_excuse" = x ; then
941 # Check for freetype libraries.
942 AC_CHECK_PROGS([FREETYPE], [freetype-config])
943 if test "x$FREETYPE" = x ; then
944 grub_mkfont_excuse=["need freetype2 library"]
945 fi
946 fi
947
948 if test x"$grub_mkfont_excuse" = x ; then
949 # Check for freetype libraries.
950 freetype_cflags=`freetype-config --cflags`
951 freetype_libs=`freetype-config --libs`
952 SAVED_CPPFLAGS="$CPPFLAGS"
953 CPPFLAGS="$CPPFLAGS $freetype_cflags"
954 AC_CHECK_HEADERS([ft2build.h], [],
955 [grub_mkfont_excuse=["need freetype2 headers"]])
956 CPPFLAGS="$SAVED_CPPFLAGS"
957 fi
958
959 if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
960 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled])
961 fi
962 if test x"$grub_mkfont_excuse" = x ; then
963 enable_grub_mkfont=yes
964 else
965 enable_grub_mkfont=no
966 fi
967 if test x"$enable_grub_mkfont" = xno && test "x$platform" = xloongson; then
968 AC_MSG_ERROR([loongson port needs grub-mkfont])
969 fi
970 AC_SUBST([enable_grub_mkfont])
971 AC_SUBST([freetype_cflags])
972 AC_SUBST([freetype_libs])
973
974 DJVU_FONT_SOURCE=
975
976 starfield_excuse=
977
978 if test x$enable_grub_mkfont = xno; then
979 starfield_excuse="No grub-mkfont"
980 fi
981
982 if test x"$starfield_excuse" = x; then
983 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
984 for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do
985 if test -f "$dir/DejaVuSans.$ext"; then
986 DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
987 break 2
988 fi
989 done
990 done
991
992 if test "x$DJVU_FONT_SOURCE" = x; then
993 starfield_excuse="No DejaVu found"
994 fi
995 fi
996
997 AC_SUBST([DJVU_FONT_SOURCE])
998
999 AC_ARG_ENABLE([grub-mount],
1000 [AS_HELP_STRING([--enable-grub-mount],
1001 [build and install the `grub-mount' utility (default=guessed)])])
1002 if test x"$enable_grub_mount" = xno ; then
1003 grub_mount_excuse="explicitly disabled"
1004 fi
1005
1006 if test x"$grub_mount_excuse" = x ; then
1007 AC_CHECK_LIB([fuse], [fuse_main_real], [],
1008 [grub_mount_excuse="need FUSE library"])
1009 fi
1010
1011 if test x"$grub_mount_excuse" = x ; then
1012 # Check for fuse headers.
1013 SAVED_CPPFLAGS="$CPPFLAGS"
1014 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26"
1015 AC_CHECK_HEADERS([fuse/fuse.h], [],
1016 [grub_mount_excuse=["need FUSE headers"]])
1017 CPPFLAGS="$SAVED_CPPFLAGS"
1018 fi
1019
1020 if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1021 AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled])
1022 fi
1023 if test x"$grub_mount_excuse" = x ; then
1024 enable_grub_mount=yes
1025 else
1026 enable_grub_mount=no
1027 fi
1028 AC_SUBST([enable_grub_mount])
1029
1030 AC_ARG_ENABLE([device-mapper],
1031 [AS_HELP_STRING([--enable-device-mapper],
1032 [enable Linux device-mapper support (default=guessed)])])
1033 if test x"$enable_device_mapper" = xno ; then
1034 device_mapper_excuse="explicitly disabled"
1035 fi
1036
1037 if test x"$device_mapper_excuse" = x ; then
1038 # Check for device-mapper header.
1039 AC_CHECK_HEADER([libdevmapper.h], [],
1040 [device_mapper_excuse="need libdevmapper header"])
1041 fi
1042
1043 if test x"$device_mapper_excuse" = x ; then
1044 # Check for device-mapper library.
1045 AC_CHECK_LIB([devmapper], [dm_task_create], [],
1046 [device_mapper_excuse="need devmapper library"])
1047 fi
1048
1049 if test x"$device_mapper_excuse" = x ; then
1050 # Check for device-mapper library.
1051 AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1052 [],
1053 [device_mapper_excuse="need devmapper library"])
1054 fi
1055
1056 if test x"$device_mapper_excuse" = x ; then
1057 LIBDEVMAPPER="-ldevmapper";
1058 AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1059 [Define to 1 if you have the devmapper library.])
1060 fi
1061
1062 AC_SUBST([LIBDEVMAPPER])
1063
1064 LIBGEOM=
1065 if test x$host_kernel = xkfreebsd; then
1066 AC_CHECK_LIB([geom], [geom_gettree], [],
1067 [AC_MSG_ERROR([Your platform requires libgeom])])
1068 LIBGEOM="-lgeom"
1069 fi
1070
1071 AC_SUBST([LIBGEOM])
1072
1073 AC_CHECK_LIB([lzma], [lzma_code],
1074 [LIBLZMA="-llzma"
1075 AC_DEFINE([HAVE_LIBLZMA], [1],
1076 [Define to 1 if you have the LZMA library.])],)
1077 AC_SUBST([LIBLZMA])
1078
1079 AC_ARG_ENABLE([libzfs],
1080 [AS_HELP_STRING([--enable-libzfs],
1081 [enable libzfs integration (default=guessed)])])
1082 if test x"$enable_libzfs" = xno ; then
1083 libzfs_excuse="explicitly disabled"
1084 fi
1085
1086 if test x"$libzfs_excuse" = x ; then
1087 # Only check for system headers if libzfs support has not been disabled.
1088 AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1089 fi
1090
1091 if test x"$libzfs_excuse" = x ; then
1092 AC_CHECK_LIB([zfs], [libzfs_init],
1093 [],
1094 [libzfs_excuse="need zfs library"])
1095 fi
1096
1097 if test x"$libzfs_excuse" = x ; then
1098 AC_CHECK_LIB([nvpair], [nvlist_print],
1099 [],
1100 [libzfs_excuse="need nvpair library"])
1101 fi
1102
1103 if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1104 AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied])
1105 fi
1106
1107 if test x"$libzfs_excuse" = x ; then
1108 # We need both libzfs and libnvpair for a successful build.
1109 LIBZFS="-lzfs"
1110 AC_DEFINE([HAVE_LIBZFS], [1],
1111 [Define to 1 if you have the ZFS library.])
1112 LIBNVPAIR="-lnvpair"
1113 AC_DEFINE([HAVE_LIBNVPAIR], [1],
1114 [Define to 1 if you have the NVPAIR library.])
1115 fi
1116
1117 AC_SUBST([LIBZFS])
1118 AC_SUBST([LIBNVPAIR])
1119
1120 LIBS=""
1121
1122 AC_SUBST([FONT_SOURCE])
1123 AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1124 [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1125 AS_IF([test x$TARGET_APPLE_CC = x1],
1126 [AC_SUBST([USE_APPLE_CC_FIXES], yes)])
1127
1128 AC_SUBST(HAVE_ASM_USCORE)
1129 AC_SUBST(ADDR32)
1130 AC_SUBST(DATA32)
1131 AC_SUBST(BSS_START_SYMBOL)
1132 AC_SUBST(END_SYMBOL)
1133 AC_SUBST(PACKAGE)
1134 AC_SUBST(VERSION)
1135 AC_SUBST(NEED_ENABLE_EXECUTE_STACK)
1136 AC_SUBST(NEED_REGISTER_FRAME_INFO)
1137
1138 #
1139 # Automake conditionals
1140 #
1141
1142 AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1143 AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1144 AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1145 AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1146 AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1147 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1148 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1149 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1150 AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1151 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1152 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
1153 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
1154 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1155 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1156 AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1157 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1158 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1159
1160 AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1161 AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1162 AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
1163 AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1164 AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1165 AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1166 AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
1167
1168 AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1169 AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1170 AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1171 AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1172 AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1173 AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1174 AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1175 AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x])
1176 AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC = x1])
1177 AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1178 AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1179 AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1180
1181 AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1182 AM_CONDITIONAL([COND_CYGWIN], [test x$host_os = xcygwin])
1183 AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1184
1185 # Output files.
1186 cpudir="${target_cpu}"
1187 if test x${cpudir} = xmipsel; then
1188 cpudir=mips;
1189 fi
1190 grub_CHECK_LINK_DIR
1191 if test x"$link_dir" = xyes ; then
1192 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1193 if test "$platform" != emu ; then
1194 AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1195 fi
1196 else
1197 mkdir -p include/grub 2>/dev/null
1198 rm -rf include/grub/cpu
1199 cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1200 if test "$platform" != emu ; then
1201 rm -rf include/grub/machine
1202 cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1203 fi
1204 fi
1205
1206 AC_CONFIG_FILES([Makefile])
1207 AC_CONFIG_FILES([grub-core/Makefile])
1208 AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1209 AC_CONFIG_FILES([po/Makefile.in])
1210 AC_CONFIG_FILES([docs/Makefile])
1211 AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1212 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1213 AC_CONFIG_FILES([config.h])
1214
1215 AC_OUTPUT
1216 [
1217 echo "*******************************************************"
1218 echo GRUB2 will be compiled with following components:
1219 echo Platform: "$target_cpu"-"$platform"
1220 if [ x"$platform" = xemu ]; then
1221 if [ x"$grub_emu_usb_excuse" = x ]; then
1222 echo USB support for grub-emu: Yes
1223 else
1224 echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1225 fi
1226 if [ x"$grub_emu_sdl_excuse" = x ]; then
1227 echo SDL support for grub-emu: Yes
1228 else
1229 echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1230 fi
1231 if [ x"$grub_emu_pci_excuse" = x ]; then
1232 echo PCI support for grub-emu: Yes
1233 else
1234 echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1235 fi
1236 fi
1237 if test x"$device_mapper_excuse" = x ; then
1238 echo With devmapper support: Yes
1239 else
1240 echo With devmapper support: No "($device_mapper_excuse)"
1241 fi
1242 if [ x"$enable_mm_debug" = xyes ]; then
1243 echo With memory debugging: Yes
1244 else
1245 echo With memory debugging: No
1246 fi
1247 if [ x"$enable_cache_stats" = xyes ]; then
1248 echo With disk cache statistics: Yes
1249 else
1250 echo With disk cache statistics: No
1251 fi
1252
1253 if [ x"$enable_boot_time" = xyes ]; then
1254 echo With boot time statistics: Yes
1255 else
1256 echo With boot time statistics: No
1257 fi
1258
1259 if [ x"$efiemu_excuse" = x ]; then
1260 echo efiemu runtime: Yes
1261 else
1262 echo efiemu runtime: No "($efiemu_excuse)"
1263 fi
1264 if [ x"$grub_mkfont_excuse" = x ]; then
1265 echo grub-mkfont: Yes
1266 else
1267 echo grub-mkfont: No "($grub_mkfont_excuse)"
1268 fi
1269 if [ x"$grub_mount_excuse" = x ]; then
1270 echo grub-mount: Yes
1271 else
1272 echo grub-mount: No "($grub_mount_excuse)"
1273 fi
1274 if [ x"$starfield_excuse" = x ]; then
1275 echo starfield theme: Yes
1276 else
1277 echo starfield theme: No "($starfield_excuse)"
1278 fi
1279 if [ x"$libzfs_excuse" = x ]; then
1280 echo With libzfs support: Yes
1281 else
1282 echo With libzfs support: No "($libzfs_excuse)"
1283 fi
1284 echo "*******************************************************"
1285 ]