]> git.proxmox.com Git - grub2.git/blame - configure.ac
2007-03-19 Yoshinori K. Okuji <okuji@enbug.org>
[grub2.git] / configure.ac
CommitLineData
6a161fa9 1# Process this file with autoconf to produce a configure script.
2
c9a86192 3# Copyright (C) 2002,2003,2004,2005,2006 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
5d74d927 34AC_INIT(GRUB, 1.95, [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
43case "$host_cpu" in
b977bf01 44 powerpc64) host_m32=1 ;;
45esac
46
47case "$target_cpu" in
48 i[[3456]]86) target_cpu=i386 ;;
49 x86_64) target_cpu=i386 target_m32=1 ;;
e56cdf21 50 powerpc) ;;
b977bf01 51 powerpc64) target_cpu=powerpc target_m32=1;;
e9211b5d 52 sparc64) ;;
6a161fa9 53 *) AC_MSG_ERROR([unsupported CPU type]) ;;
54esac
55
05568c2e 56# Specify the platform (such as firmware).
57AC_ARG_WITH([platform],
58 AS_HELP_STRING([--with-platform=PLATFORM],
83b984de 59 [select the host platform [[guessed]]]))
05568c2e 60
61# Guess the platform if not specified.
62if test "x$with_platform" = x; then
b977bf01 63 case "$target_cpu"-"$target_vendor" in
05568c2e 64 i386-apple) platform=efi ;;
65 i386-*) platform=pc ;;
66 powerpc-*) platform=ieee1275 ;;
67 sparc64-*) platform=ieee1275 ;;
68 *) AC_MSG_ERROR([unsupported machine type]) ;;
69 esac
70else
71 platform="$with_platform"
72fi
73
74# Sanity check.
b977bf01 75case "$target_cpu"-"$platform" in
05568c2e 76 i386-efi) ;;
77 i386-pc) ;;
78 powerpc-ieee1275) ;;
79 sparc64-ieee1275) ;;
6a161fa9 80 *) AC_MSG_ERROR([unsupported machine type]) ;;
81esac
82
b977bf01 83AC_SUBST(target_cpu)
05568c2e 84AC_SUBST(platform)
6a161fa9 85
b977bf01 86#
87# Checks for build programs.
88#
144f1f98 89
6c826348 90# Although cmp is listed in the GNU Coding Standards as a command which
91# can used directly, OpenBSD lacks cmp in the default installation.
92AC_CHECK_PROGS([CMP], [cmp])
93if test "x$CMP" = x; then
94 AC_MSG_ERROR([cmp is not found])
95fi
96
144f1f98 97AC_CHECK_PROGS([YACC], [bison])
1569ec51 98if test "x$YACC" = x; then
6c826348 99 AC_MSG_ERROR([bison is not found])
1569ec51 100fi
101
b977bf01 102AC_PROG_INSTALL
103AC_PROG_AWK
104AC_PROG_MAKE_SET
105
106# This is not a "must".
107AC_PATH_PROG(RUBY, ruby)
6a161fa9 108
b977bf01 109#
110# Checks for host programs.
111#
112
113AC_PROG_CC
6a161fa9 114# Must be GCC.
115test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
116
4889bdec 117AC_GNU_SOURCE
b977bf01 118AC_SYS_LARGEFILE
119
120# Identify characteristics of the host architecture.
121AC_C_BIGENDIAN
122AC_CHECK_SIZEOF(void *)
123AC_CHECK_SIZEOF(long)
124
125if test "x$host_m32" = x1; then
126 # Force 32-bit mode.
127 CFLAGS="$CFLAGS -m32"
128 LDFLAGS="$LDFLAGS -m32"
129fi
130
131# Check LZO when compiling for the i386-pc.
132if test "$target_cpu"-"$platform" = i386-pc; then
133 # There are three possibilities. LZO version 2 installed with the name
134 # liblzo2, with the name liblzo, and LZO version 1.
135 AC_CHECK_LIB(lzo2, __lzo_init_v2, [LIBLZO="-llzo2"],
136 AC_CHECK_LIB(lzo, __lzo_init_v2, [LIBLZO="-llzo"],
137 AC_CHECK_LIB(lzo, __lzo_init2, [LIBLZO="-llzo"],
138 AC_MSG_ERROR([LZO library version 1.02 or later is required]))))
139 AC_SUBST(LIBLZO)
140 LIBS="$LIBS $LIBLZO"
141 AC_CHECK_FUNC(lzo1x_999_compress, ,
142 [AC_MSG_ERROR([LZO1X-999 must be enabled])])
143
144 # LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.
145 AC_CHECK_HEADERS(lzo/lzo1x.h lzo1x.h)
146fi
147
4889bdec 148# Check for functions.
149AC_CHECK_FUNCS(posix_memalign memalign)
150
baa2a121 151#
152# Compiler features.
153#
154
155# Smashing stack protector.
156grub_CHECK_STACK_PROTECTOR
157[# Need that, because some distributions ship compilers that include
158# `-fstack-protector' in the default specs.
159if [ x"$ssp_possible" = xyes ]; then
160 CFLAGS=$CFLAGS\ -fno-stack-protector
161fi]
162
163
b977bf01 164#
165# Check for target programs.
166#
167
168# For cross-compiling.
169if test "x$target" != "x$host"; then
170 # XXX this depends on the implementation of autoconf!
171 tmp_ac_tool_prefix="$ac_tool_prefix"
172 ac_tool_prefix=$target_alias-
173
174 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
175 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
176 AC_CHECK_TOOL(OBJCOPY, objcopy)
177 AC_CHECK_TOOL(STRIP, strip)
178 AC_CHECK_TOOL(NM, nm)
179
180 ac_tool_prefix="$tmp_ac_tool_prefix"
181else
182 if test "x$TARGET_CC" = x; then
183 TARGET_CC=$CC
184 fi
185 AC_CHECK_TOOL(OBJCOPY, objcopy)
186 AC_CHECK_TOOL(STRIP, strip)
187 AC_CHECK_TOOL(NM, nm)
188fi
189AC_SUBST(TARGET_CC)
190
191
192# Test the C compiler for the target environment.
193tmp_CC="$CC"
194tmp_CFLAGS="$CFLAGS"
195tmp_LDFLAGS="$LDFLAGS"
196tmp_CPPFLAGS="$CPPFLAGS"
aa6d7826 197tmp_LIBS="$LIBS"
b977bf01 198CC="$TARGET_CC"
199CFLAGS="$TARGET_CFLAGS"
200CPPFLAGS="$TARGET_CPPFLAGS"
201LDFLAGS="$TARGET_LDFLAGS"
aa6d7826 202LIBS=""
b977bf01 203
204if test "x$TARGET_CFLAGS" = x; then
6a161fa9 205 # debug flags.
b977bf01 206 TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
207 -Wundef -Wstrict-prototypes -g"
6a161fa9 208
209 # optimization flags.
210 AC_CACHE_CHECK([whether optimization for size works], size_flag, [
211 CFLAGS=-Os
212 AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
213 ])
214 if test "x$size_flag" = xyes; then
b977bf01 215 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
6a161fa9 216 else
b977bf01 217 TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
6a161fa9 218 fi
219
220 # Force no alignment to save space on i386.
b977bf01 221 if test "x$target_cpu" = xi386; then
6a161fa9 222 AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
223 CFLAGS="-falign-loops=1"
224 AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
225 ])
226
227 if test "x$falign_loop_flag" = xyes; then
b977bf01 228 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
6a161fa9 229 else
b977bf01 230 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
6a161fa9 231 fi
232 fi
b977bf01 233fi
6a161fa9 234
b977bf01 235if test "x$target_m32" = x1; then
236 # Force 32-bit mode.
237 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
238 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
6a161fa9 239fi
b977bf01 240
baa2a121 241#
242# Compiler features.
243#
244
245# Smashing stack protector.
246grub_CHECK_STACK_PROTECTOR
247[# Need that, because some distributions ship compilers that include
248# `-fstack-protector' in the default specs.
249if [ x"$ssp_possible" = xyes ]; then
250 TARGET_CFLAGS=$TARGET_CFLAGS\ -fno-stack-protector
251fi]
252
b977bf01 253AC_SUBST(TARGET_CFLAGS)
254AC_SUBST(TARGET_CPPFLAGS)
255AC_SUBST(TARGET_LDFLAGS)
6a161fa9 256
aa6d7826 257# Set them to their new values for the tests below.
258CC="$TARGET_CC"
259CFLAGS="$TARGET_CFLAGS"
260CPPFLAGS="$TARGET_CPPFLAGS"
261LDFLAGS="$TARGET_LDFLAGS"
262
6a161fa9 263# Defined in aclocal.m4.
b977bf01 264grub_PROG_OBJCOPY_ABSOLUTE
4b13b216 265grub_ASM_USCORE
b977bf01 266if test "x$target_cpu" = xi386; then
4b13b216 267 grub_CHECK_START_SYMBOL
268 grub_CHECK_BSS_START_SYMBOL
269 grub_CHECK_END_SYMBOL
4b13b216 270 grub_I386_ASM_PREFIX_REQUIREMENT
271 grub_I386_ASM_ADDR32
272 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
273 grub_I386_CHECK_REGPARM_BUG
5aded270 274else
f4917dfd 275 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
6a161fa9 276fi
277
c9a86192 278# Restore the flags.
9962ed99 279CC="$tmp_CC"
280CFLAGS="$tmp_CFLAGS"
281CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 282LDFLAGS="$tmp_LDFLAGS"
aa6d7826 283LIBS="$tmp_LIBS"
6a161fa9 284
4fe9862e 285#
2965c7cc 286# Check for options.
4fe9862e 287#
288
289# Memory manager debugging.
2965c7cc 290AC_ARG_ENABLE([mm-debug],
291 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 292 [include memory manager debugging]),
2965c7cc 293 [AC_DEFINE([MM_DEBUG], [1],
294 [Define to 1 if you enable memory manager debugging.])])
295
4fe9862e 296AC_ARG_ENABLE([grub-emu],
297 [AS_HELP_STRING([--enable-grub-emu],
298 [build and install the `grub-emu' debugging utility])])
299[if [ x"$enable_grub_emu" = xyes ]; then
300 # Check for curses libraries.]
301 AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
302 [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
303 [AC_MSG_ERROR([(n)curses libraries are required to build `grub-emu'])])])
304 AC_SUBST([LIBCURSES])
305
306 [# Check for headers.]
307 AC_CHECK_HEADERS([ncurses/curses.h], [],
308 [AC_CHECK_HEADERS([ncurses.h], [],
309 [AC_CHECK_HEADERS([curses.h], [],
310 [AC_MSG_ERROR([(n)curses header files are required to build `grub-emu'])])])])
311[fi]
312AC_SUBST([enable_grub_emu])
313
6a161fa9 314# Output files.
b977bf01 315AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu
316 include/grub/machine:include/grub/$target_cpu/$platform])
7b455f4d 317AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
6a161fa9 318AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
319AC_OUTPUT