]> git.proxmox.com Git - grub2.git/blame - configure.ac
2008-02-08 Christian Franke <franke@computer.org>
[grub2.git] / configure.ac
CommitLineData
6a161fa9 1# Process this file with autoconf to produce a configure script.
2
3d04eab8 3# Copyright (C) 2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
6a161fa9 4#
5# This configure.ac is free software; the author
6# gives unlimited permission to copy and/or distribute it,
7# with or without modifications, as long as this notice is preserved.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12# PARTICULAR PURPOSE.
13
b977bf01 14dnl This configure script is complicated, because GRUB needs to deal
15dnl with three potentially different types:
16dnl
17dnl build -- the environment for building GRUB
18dnl host -- the environment for running utilities
19dnl target -- the environment for running GRUB
20dnl
21dnl In addition, GRUB needs to deal with a platform specification
22dnl which specifies the system running GRUB, such as firmware.
23dnl This is necessary because the target type in autoconf does not
24dnl describe such a system very well.
25dnl
26dnl The current strategy is to use variables with no prefix (such as
27dnl CC, CFLAGS, etc.) for the host type as well as the build type,
28dnl because GRUB does not need to use those variables for the build
29dnl type, so there is no conflict. Variables with the prefix "TARGET_"
30dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
31dnl type.
32
33
f2a76e1d 34AC_INIT(GRUB, 1.96, [bug-grub@gnu.org])
6a161fa9 35AC_PREREQ(2.53)
4b13b216 36AC_CONFIG_SRCDIR([include/grub/dl.h])
6a161fa9 37AC_CONFIG_HEADER([config.h])
38
b977bf01 39# Checks for host and target systems.
6a161fa9 40AC_CANONICAL_HOST
b977bf01 41AC_CANONICAL_TARGET
6a161fa9 42
1d543c3e 43# Program name transformations
44AC_ARG_PROGRAM
45
6a161fa9 46case "$host_cpu" in
b977bf01 47 powerpc64) host_m32=1 ;;
48esac
49
50case "$target_cpu" in
51 i[[3456]]86) target_cpu=i386 ;;
52 x86_64) target_cpu=i386 target_m32=1 ;;
e56cdf21 53 powerpc) ;;
b977bf01 54 powerpc64) target_cpu=powerpc target_m32=1;;
e9211b5d 55 sparc64) ;;
6a161fa9 56 *) AC_MSG_ERROR([unsupported CPU type]) ;;
57esac
58
05568c2e 59# Specify the platform (such as firmware).
60AC_ARG_WITH([platform],
61 AS_HELP_STRING([--with-platform=PLATFORM],
83b984de 62 [select the host platform [[guessed]]]))
05568c2e 63
64# Guess the platform if not specified.
65if test "x$with_platform" = x; then
b977bf01 66 case "$target_cpu"-"$target_vendor" in
05568c2e 67 i386-apple) platform=efi ;;
68 i386-*) platform=pc ;;
69 powerpc-*) platform=ieee1275 ;;
70 sparc64-*) platform=ieee1275 ;;
71 *) AC_MSG_ERROR([unsupported machine type]) ;;
72 esac
73else
74 platform="$with_platform"
75fi
76
77# Sanity check.
b977bf01 78case "$target_cpu"-"$platform" in
05568c2e 79 i386-efi) ;;
80 i386-pc) ;;
ca25d8f0 81 i386-linuxbios) ;;
3d04eab8 82 i386-ieee1275) ;;
05568c2e 83 powerpc-ieee1275) ;;
84 sparc64-ieee1275) ;;
6a161fa9 85 *) AC_MSG_ERROR([unsupported machine type]) ;;
86esac
87
b977bf01 88AC_SUBST(target_cpu)
05568c2e 89AC_SUBST(platform)
6a161fa9 90
b977bf01 91#
92# Checks for build programs.
93#
144f1f98 94
6c826348 95# Although cmp is listed in the GNU Coding Standards as a command which
96# can used directly, OpenBSD lacks cmp in the default installation.
97AC_CHECK_PROGS([CMP], [cmp])
98if test "x$CMP" = x; then
99 AC_MSG_ERROR([cmp is not found])
100fi
101
144f1f98 102AC_CHECK_PROGS([YACC], [bison])
1569ec51 103if test "x$YACC" = x; then
6c826348 104 AC_MSG_ERROR([bison is not found])
1569ec51 105fi
106
4931827f 107for file in /usr/share/unifont/unifont.hex ; do
108 if test -e $file ; then
109 AC_SUBST([UNIFONT_HEX], [$file])
110 break
111 fi
112done
113
b977bf01 114AC_PROG_INSTALL
115AC_PROG_AWK
116AC_PROG_MAKE_SET
117
118# This is not a "must".
119AC_PATH_PROG(RUBY, ruby)
6a161fa9 120
b977bf01 121#
122# Checks for host programs.
123#
124
125AC_PROG_CC
6a161fa9 126# Must be GCC.
127test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
128
4889bdec 129AC_GNU_SOURCE
b977bf01 130AC_SYS_LARGEFILE
131
132# Identify characteristics of the host architecture.
133AC_C_BIGENDIAN
134AC_CHECK_SIZEOF(void *)
135AC_CHECK_SIZEOF(long)
136
137if test "x$host_m32" = x1; then
138 # Force 32-bit mode.
139 CFLAGS="$CFLAGS -m32"
140 LDFLAGS="$LDFLAGS -m32"
141fi
142
143# Check LZO when compiling for the i386-pc.
144if test "$target_cpu"-"$platform" = i386-pc; then
145 # There are three possibilities. LZO version 2 installed with the name
146 # liblzo2, with the name liblzo, and LZO version 1.
147 AC_CHECK_LIB(lzo2, __lzo_init_v2, [LIBLZO="-llzo2"],
148 AC_CHECK_LIB(lzo, __lzo_init_v2, [LIBLZO="-llzo"],
149 AC_CHECK_LIB(lzo, __lzo_init2, [LIBLZO="-llzo"],
150 AC_MSG_ERROR([LZO library version 1.02 or later is required]))))
151 AC_SUBST(LIBLZO)
152 LIBS="$LIBS $LIBLZO"
153 AC_CHECK_FUNC(lzo1x_999_compress, ,
154 [AC_MSG_ERROR([LZO1X-999 must be enabled])])
155
156 # LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.
157 AC_CHECK_HEADERS(lzo/lzo1x.h lzo1x.h)
158fi
159
4889bdec 160# Check for functions.
161AC_CHECK_FUNCS(posix_memalign memalign)
162
b977bf01 163#
164# Check for target programs.
165#
166
167# For cross-compiling.
168if test "x$target" != "x$host"; then
169 # XXX this depends on the implementation of autoconf!
170 tmp_ac_tool_prefix="$ac_tool_prefix"
171 ac_tool_prefix=$target_alias-
172
173 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
174 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
175 AC_CHECK_TOOL(OBJCOPY, objcopy)
176 AC_CHECK_TOOL(STRIP, strip)
177 AC_CHECK_TOOL(NM, nm)
178
179 ac_tool_prefix="$tmp_ac_tool_prefix"
180else
181 if test "x$TARGET_CC" = x; then
182 TARGET_CC=$CC
183 fi
184 AC_CHECK_TOOL(OBJCOPY, objcopy)
185 AC_CHECK_TOOL(STRIP, strip)
186 AC_CHECK_TOOL(NM, nm)
187fi
188AC_SUBST(TARGET_CC)
189
190
191# Test the C compiler for the target environment.
192tmp_CC="$CC"
193tmp_CFLAGS="$CFLAGS"
194tmp_LDFLAGS="$LDFLAGS"
195tmp_CPPFLAGS="$CPPFLAGS"
aa6d7826 196tmp_LIBS="$LIBS"
b977bf01 197CC="$TARGET_CC"
198CFLAGS="$TARGET_CFLAGS"
199CPPFLAGS="$TARGET_CPPFLAGS"
200LDFLAGS="$TARGET_LDFLAGS"
aa6d7826 201LIBS=""
b977bf01 202
203if test "x$TARGET_CFLAGS" = x; then
6a161fa9 204 # debug flags.
b977bf01 205 TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
206 -Wundef -Wstrict-prototypes -g"
6a161fa9 207
208 # optimization flags.
209 AC_CACHE_CHECK([whether optimization for size works], size_flag, [
210 CFLAGS=-Os
211 AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
212 ])
213 if test "x$size_flag" = xyes; then
b977bf01 214 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
6a161fa9 215 else
b977bf01 216 TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
6a161fa9 217 fi
218
219 # Force no alignment to save space on i386.
b977bf01 220 if test "x$target_cpu" = xi386; then
6a161fa9 221 AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
222 CFLAGS="-falign-loops=1"
223 AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
224 ])
225
226 if test "x$falign_loop_flag" = xyes; then
b977bf01 227 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
6a161fa9 228 else
b977bf01 229 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
6a161fa9 230 fi
231 fi
b977bf01 232fi
6a161fa9 233
b977bf01 234if test "x$target_m32" = x1; then
235 # Force 32-bit mode.
236 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
237 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
6a161fa9 238fi
b977bf01 239
6af9db01 240AC_MSG_CHECKING([whether the linker accepts `--build-id=none'])
241save_LDFLAGS="$LDFLAGS"
242LDFLAGS="$LDFLAGS -Wl,--build-id=none"
243AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no)
244AC_MSG_RESULT([$build_id_flag])
245LDFLAGS="$save_LDFLAGS"
246if test "x$build_id_flag" = xyes; then
247 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,--build-id=none"
248fi
249
baa2a121 250#
251# Compiler features.
252#
253
254# Smashing stack protector.
255grub_CHECK_STACK_PROTECTOR
256[# Need that, because some distributions ship compilers that include
257# `-fstack-protector' in the default specs.
258if [ x"$ssp_possible" = xyes ]; then
259 TARGET_CFLAGS=$TARGET_CFLAGS\ -fno-stack-protector
260fi]
261
b977bf01 262AC_SUBST(TARGET_CFLAGS)
263AC_SUBST(TARGET_CPPFLAGS)
264AC_SUBST(TARGET_LDFLAGS)
6a161fa9 265
aa6d7826 266# Set them to their new values for the tests below.
267CC="$TARGET_CC"
268CFLAGS="$TARGET_CFLAGS"
269CPPFLAGS="$TARGET_CPPFLAGS"
270LDFLAGS="$TARGET_LDFLAGS"
271
6a161fa9 272# Defined in aclocal.m4.
b977bf01 273grub_PROG_OBJCOPY_ABSOLUTE
4b13b216 274grub_ASM_USCORE
b977bf01 275if test "x$target_cpu" = xi386; then
4b13b216 276 grub_CHECK_START_SYMBOL
277 grub_CHECK_BSS_START_SYMBOL
278 grub_CHECK_END_SYMBOL
4b13b216 279 grub_I386_ASM_PREFIX_REQUIREMENT
280 grub_I386_ASM_ADDR32
281 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
282 grub_I386_CHECK_REGPARM_BUG
5aded270 283else
f4917dfd 284 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
6a161fa9 285fi
286
c9a86192 287# Restore the flags.
9962ed99 288CC="$tmp_CC"
289CFLAGS="$tmp_CFLAGS"
290CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 291LDFLAGS="$tmp_LDFLAGS"
aa6d7826 292LIBS="$tmp_LIBS"
6a161fa9 293
4fe9862e 294#
2965c7cc 295# Check for options.
4fe9862e 296#
297
298# Memory manager debugging.
2965c7cc 299AC_ARG_ENABLE([mm-debug],
300 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 301 [include memory manager debugging]),
2965c7cc 302 [AC_DEFINE([MM_DEBUG], [1],
303 [Define to 1 if you enable memory manager debugging.])])
304
4fe9862e 305AC_ARG_ENABLE([grub-emu],
306 [AS_HELP_STRING([--enable-grub-emu],
307 [build and install the `grub-emu' debugging utility])])
308[if [ x"$enable_grub_emu" = xyes ]; then
309 # Check for curses libraries.]
310 AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
311 [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
312 [AC_MSG_ERROR([(n)curses libraries are required to build `grub-emu'])])])
313 AC_SUBST([LIBCURSES])
314
315 [# Check for headers.]
316 AC_CHECK_HEADERS([ncurses/curses.h], [],
317 [AC_CHECK_HEADERS([ncurses.h], [],
318 [AC_CHECK_HEADERS([curses.h], [],
319 [AC_MSG_ERROR([(n)curses header files are required to build `grub-emu'])])])])
320[fi]
321AC_SUBST([enable_grub_emu])
322
99fadbaa 323AC_ARG_ENABLE([grub-fstest],
324 [AS_HELP_STRING([--enable-grub-fstest],
325 [build and install the `grub-fstest' debugging utility])])
326AC_SUBST([enable_grub_fstest])
327
6a161fa9 328# Output files.
b977bf01 329AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu
330 include/grub/machine:include/grub/$target_cpu/$platform])
7b455f4d 331AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
6a161fa9 332AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
333AC_OUTPUT