]> git.proxmox.com Git - grub2.git/blame - configure.ac
2006-06-09 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
53af98ad 34AC_INIT(GRUB, 1.94, [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
b977bf01 117AC_SYS_LARGEFILE
118
119# Identify characteristics of the host architecture.
120AC_C_BIGENDIAN
121AC_CHECK_SIZEOF(void *)
122AC_CHECK_SIZEOF(long)
123
124if test "x$host_m32" = x1; then
125 # Force 32-bit mode.
126 CFLAGS="$CFLAGS -m32"
127 LDFLAGS="$LDFLAGS -m32"
128fi
129
130# Check LZO when compiling for the i386-pc.
131if test "$target_cpu"-"$platform" = i386-pc; then
132 # There are three possibilities. LZO version 2 installed with the name
133 # liblzo2, with the name liblzo, and LZO version 1.
134 AC_CHECK_LIB(lzo2, __lzo_init_v2, [LIBLZO="-llzo2"],
135 AC_CHECK_LIB(lzo, __lzo_init_v2, [LIBLZO="-llzo"],
136 AC_CHECK_LIB(lzo, __lzo_init2, [LIBLZO="-llzo"],
137 AC_MSG_ERROR([LZO library version 1.02 or later is required]))))
138 AC_SUBST(LIBLZO)
139 LIBS="$LIBS $LIBLZO"
140 AC_CHECK_FUNC(lzo1x_999_compress, ,
141 [AC_MSG_ERROR([LZO1X-999 must be enabled])])
142
143 # LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.
144 AC_CHECK_HEADERS(lzo/lzo1x.h lzo1x.h)
145fi
146
147# Check for curses.
148AC_CHECK_LIB(ncurses, wgetch, [LIBCURSES="-lncurses"],
149 [AC_CHECK_LIB(curses, wgetch, [LIBCURSES="-lcurses"])])
150AC_SUBST(LIBCURSES)
151
152# Check for headers.
153AC_CHECK_HEADERS(ncurses/curses.h ncurses.h curses.h)
154
155#
156# Check for target programs.
157#
158
159# For cross-compiling.
160if test "x$target" != "x$host"; then
161 # XXX this depends on the implementation of autoconf!
162 tmp_ac_tool_prefix="$ac_tool_prefix"
163 ac_tool_prefix=$target_alias-
164
165 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
166 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
167 AC_CHECK_TOOL(OBJCOPY, objcopy)
168 AC_CHECK_TOOL(STRIP, strip)
169 AC_CHECK_TOOL(NM, nm)
170
171 ac_tool_prefix="$tmp_ac_tool_prefix"
172else
173 if test "x$TARGET_CC" = x; then
174 TARGET_CC=$CC
175 fi
176 AC_CHECK_TOOL(OBJCOPY, objcopy)
177 AC_CHECK_TOOL(STRIP, strip)
178 AC_CHECK_TOOL(NM, nm)
179fi
180AC_SUBST(TARGET_CC)
181
182
183# Test the C compiler for the target environment.
184tmp_CC="$CC"
185tmp_CFLAGS="$CFLAGS"
186tmp_LDFLAGS="$LDFLAGS"
187tmp_CPPFLAGS="$CPPFLAGS"
aa6d7826 188tmp_LIBS="$LIBS"
b977bf01 189CC="$TARGET_CC"
190CFLAGS="$TARGET_CFLAGS"
191CPPFLAGS="$TARGET_CPPFLAGS"
192LDFLAGS="$TARGET_LDFLAGS"
aa6d7826 193LIBS=""
b977bf01 194
195if test "x$TARGET_CFLAGS" = x; then
6a161fa9 196 # debug flags.
b977bf01 197 TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
198 -Wundef -Wstrict-prototypes -g"
6a161fa9 199
200 # optimization flags.
201 AC_CACHE_CHECK([whether optimization for size works], size_flag, [
202 CFLAGS=-Os
203 AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
204 ])
205 if test "x$size_flag" = xyes; then
b977bf01 206 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
6a161fa9 207 else
b977bf01 208 TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
6a161fa9 209 fi
210
211 # Force no alignment to save space on i386.
b977bf01 212 if test "x$target_cpu" = xi386; then
6a161fa9 213 AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
214 CFLAGS="-falign-loops=1"
215 AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
216 ])
217
218 if test "x$falign_loop_flag" = xyes; then
b977bf01 219 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
6a161fa9 220 else
b977bf01 221 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
6a161fa9 222 fi
223 fi
b977bf01 224fi
6a161fa9 225
b977bf01 226if test "x$target_m32" = x1; then
227 # Force 32-bit mode.
228 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
229 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
6a161fa9 230fi
b977bf01 231
232AC_SUBST(TARGET_CFLAGS)
233AC_SUBST(TARGET_CPPFLAGS)
234AC_SUBST(TARGET_LDFLAGS)
6a161fa9 235
aa6d7826 236# Set them to their new values for the tests below.
237CC="$TARGET_CC"
238CFLAGS="$TARGET_CFLAGS"
239CPPFLAGS="$TARGET_CPPFLAGS"
240LDFLAGS="$TARGET_LDFLAGS"
241
6a161fa9 242# Defined in aclocal.m4.
b977bf01 243grub_PROG_OBJCOPY_ABSOLUTE
4b13b216 244grub_ASM_USCORE
b977bf01 245if test "x$target_cpu" = xi386; then
4b13b216 246 grub_CHECK_START_SYMBOL
247 grub_CHECK_BSS_START_SYMBOL
248 grub_CHECK_END_SYMBOL
4b13b216 249 grub_I386_ASM_PREFIX_REQUIREMENT
250 grub_I386_ASM_ADDR32
251 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
252 grub_I386_CHECK_REGPARM_BUG
5aded270 253else
f4917dfd 254 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
6a161fa9 255fi
256
c9a86192 257# Restore the flags.
9962ed99 258CC="$tmp_CC"
259CFLAGS="$tmp_CFLAGS"
260CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 261LDFLAGS="$tmp_LDFLAGS"
aa6d7826 262LIBS="$tmp_LIBS"
6a161fa9 263
2965c7cc 264# Check for options.
265AC_ARG_ENABLE([mm-debug],
266 AS_HELP_STRING([--enable-mm-debug],
267 [include memory manger debugging]),
268 [AC_DEFINE([MM_DEBUG], [1],
269 [Define to 1 if you enable memory manager debugging.])])
270
6a161fa9 271# Output files.
b977bf01 272AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu
273 include/grub/machine:include/grub/$target_cpu/$platform])
7b455f4d 274AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
6a161fa9 275AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
276AC_OUTPUT