Migrate .cvsignore to svn:ignore property
[grub2/phcoder/solaris.git] / configure.ac
blob7a5938a38fca72098c04f98c734db332c17de5fb
1 # Process this file with autoconf to produce a configure script.
3 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008  Free Software Foundation, Inc.
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.
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.
14 dnl This configure script is complicated, because GRUB needs to deal
15 dnl with three potentially different types:
16 dnl
17 dnl   build  -- the environment for building GRUB
18 dnl   host   -- the environment for running utilities
19 dnl   target -- the environment for running GRUB
20 dnl
21 dnl In addition, GRUB needs to deal with a platform specification
22 dnl which specifies the system running GRUB, such as firmware.
23 dnl This is necessary because the target type in autoconf does not
24 dnl describe such a system very well.
25 dnl
26 dnl The current strategy is to use variables with no prefix (such as
27 dnl CC, CFLAGS, etc.) for the host type as well as the build type,
28 dnl because GRUB does not need to use those variables for the build
29 dnl type, so there is no conflict. Variables with the prefix "TARGET_"
30 dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
31 dnl type.
34 AC_INIT(GRUB, 1.96, [bug-grub@gnu.org])
35 AC_PREREQ(2.53)
36 AC_CONFIG_SRCDIR([include/grub/dl.h])
37 AC_CONFIG_HEADER([config.h])
39 # Checks for host and target systems.
40 AC_CANONICAL_HOST
41 AC_CANONICAL_TARGET
43 # Program name transformations
44 AC_ARG_PROGRAM
46 case "$host_cpu" in
47   powerpc64) host_m32=1 ;;
48 esac
50 case "$target_cpu" in
51   i[[3456]]86) target_cpu=i386 ;;
52 esac
54 # Specify the platform (such as firmware).
55 AC_ARG_WITH([platform],
56             AS_HELP_STRING([--with-platform=PLATFORM],
57                            [select the host platform [[guessed]]]))
59 # Guess the platform if not specified.
60 if test "x$with_platform" = x; then
61   case "$target_cpu"-"$target_vendor" in
62     i386-apple) platform=efi ;;
63     i386-*) platform=pc ;;
64     x86_64-apple) platform=efi ;;
65     x86_64-*) platform=pc ;;
66     powerpc-*) platform=ieee1275 ;;
67     powerpc64-*) platform=ieee1275 ;;
68     sparc64-*) platform=ieee1275 ;;
69     *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
70   esac
71 else
72   platform="$with_platform"
75 # Adjust CPU unless target was explicitly specified.
76 if test -z "$target_alias"; then
77   case "$target_cpu"-"$platform" in
78     x86_64-efi) ;;
79     x86_64-*) target_cpu=i386 ;;
80     powerpc64-ieee1275) target_cpu=powerpc ;;
81   esac
84 # Check if the platform is supported, make final adjustments.
85 case "$target_cpu"-"$platform" in
86   i386-efi) ;;
87   x86_64-efi) ;;
88   i386-pc) ;;
89   i386-coreboot) ;;
90   i386-linuxbios) platform=coreboot ;;
91   i386-ieee1275) ;;
92   powerpc-ieee1275) ;;
93   sparc64-ieee1275) ;;
94   *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
95 esac
97 case "$target_cpu" in
98   i386 | powerpc) target_m32=1 ;;
99   x86_64 | sparc64) target_m64=1 ;;
100 esac
102 AC_SUBST(target_cpu)
103 AC_SUBST(platform)
106 # Checks for build programs.
109 # Although cmp is listed in the GNU Coding Standards as a command which
110 # can used directly, OpenBSD lacks cmp in the default installation.
111 AC_CHECK_PROGS([CMP], [cmp])
112 if test "x$CMP" = x; then
113   AC_MSG_ERROR([cmp is not found])
116 AC_CHECK_PROGS([YACC], [bison])
117 if test "x$YACC" = x; then
118   AC_MSG_ERROR([bison is not found])
121 for file in /usr/share/unifont/unifont.hex ; do
122   if test -e $file ; then
123     AC_SUBST([UNIFONT_HEX], [$file])
124     break
125   fi
126 done
128 AC_PROG_INSTALL
129 AC_PROG_AWK
130 AC_PROG_MAKE_SET
132 # These are not a "must".
133 AC_PATH_PROG(RUBY, ruby)
134 AC_PATH_PROG(HELP2MAN, help2man)
137 # Checks for host programs.
140 AC_PROG_CC
141 # Must be GCC.
142 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
144 AC_GNU_SOURCE
145 AC_SYS_LARGEFILE
147 # Identify characteristics of the host architecture.
148 AC_C_BIGENDIAN
149 AC_CHECK_SIZEOF(void *)
150 AC_CHECK_SIZEOF(long)
152 if test "x$host_m32" = x1; then
153   # Force 32-bit mode.
154   CFLAGS="$CFLAGS -m32"
155   LDFLAGS="$LDFLAGS -m32"
158 # Check LZO when compiling for the i386-pc.
159 if test "$target_cpu"-"$platform" = i386-pc; then
160   AC_ARG_ENABLE([lzo],
161               [AS_HELP_STRING([--enable-lzo],
162                              [use lzo to compress kernel (default is lzma)])])
163   [if [ x"$enable_lzo" = xyes ]; then
164     # There are three possibilities. LZO version 2 installed with the name
165     # liblzo2, with the name liblzo, and LZO version 1.]
166     AC_DEFINE([ENABLE_LZO], [1], [Use lzo compression])
167     AC_CHECK_LIB([lzo2], [__lzo_init_v2], [LIBLZO="-llzo2"],
168       [AC_CHECK_LIB([lzo], [__lzo_init_v2], [LIBLZO="-llzo"],
169         [AC_CHECK_LIB([lzo], [__lzo_init2], [LIBLZO="-llzo"],
170                [AC_MSG_ERROR([LZO library version 1.02 or later is required])])])])
171     AC_SUBST([LIBLZO])
172     [LIBS="$LIBS $LIBLZO"]
173     AC_CHECK_FUNC([lzo1x_999_compress], ,
174                 [AC_MSG_ERROR([LZO1X-999 must be enabled])])
176     [# LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.]
177     AC_CHECK_HEADERS([lzo/lzo1x.h lzo1x.h])
178   [else]
179     AC_DEFINE([ENABLE_LZMA], [1], [Use lzma compression])
180   [fi]
181   AC_SUBST([enable_lzo])
184 # Check for functions.
185 AC_CHECK_FUNCS(posix_memalign memalign)
188 # Check for target programs.
192 # Use linker script if present, otherwise use builtin -N script.
193 AC_MSG_CHECKING([for option to link raw image])
194 if test -f "${srcdir}/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"; then
195   TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"
196   TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
197   TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"
198 else
199   TARGET_IMG_LDSCRIPT=
200   TARGET_IMG_LDFLAGS='-Wl,-N'
201   TARGET_IMG_LDFLAGS_AC='-Wl,-N'
203 AC_SUBST(TARGET_IMG_LDSCRIPT)
204 AC_SUBST(TARGET_IMG_LDFLAGS)
205 AC_MSG_RESULT([$TARGET_IMG_LDFLAGS_AC])
207 # For platforms where ELF is not the default link format.
208 AC_MSG_CHECKING([for command to convert module to ELF format])
209 if test "$host_os" = cygwin; then
210   TARGET_OBJ2ELF='grub-pe2elf.exe'
212 AC_SUBST(TARGET_OBJ2ELF)
213 AC_MSG_RESULT([$TARGET_OBJ2ELF])
215 # For cross-compiling.
216 if test "x$target" != "x$host"; then
217   # XXX this depends on the implementation of autoconf!
218   tmp_ac_tool_prefix="$ac_tool_prefix"
219   ac_tool_prefix=$target_alias-
221   AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
222                  [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
223   AC_CHECK_TOOL(OBJCOPY, objcopy)
224   AC_CHECK_TOOL(STRIP, strip)
225   AC_CHECK_TOOL(NM, nm)
227   ac_tool_prefix="$tmp_ac_tool_prefix"
228 else
229   if test "x$TARGET_CC" = x; then
230     TARGET_CC=$CC
231   fi
232   AC_CHECK_TOOL(OBJCOPY, objcopy)
233   AC_CHECK_TOOL(STRIP, strip)
234   AC_CHECK_TOOL(NM, nm)
236 AC_SUBST(TARGET_CC)
239 # Test the C compiler for the target environment.
240 tmp_CC="$CC"
241 tmp_CFLAGS="$CFLAGS"
242 tmp_LDFLAGS="$LDFLAGS"
243 tmp_CPPFLAGS="$CPPFLAGS"
244 tmp_LIBS="$LIBS"
245 CC="$TARGET_CC"
246 CFLAGS="$TARGET_CFLAGS"
247 CPPFLAGS="$TARGET_CPPFLAGS"
248 LDFLAGS="$TARGET_LDFLAGS"
249 LIBS=""
251 if test "x$TARGET_CFLAGS" = x; then
252   # debug flags.
253   TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
254                  -Wundef -Wstrict-prototypes -g"
256   # optimization flags.
257   AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [
258     CFLAGS=-Os
259     AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no)
260   ])
261   if test "x$grub_cv_cc_Os" = xyes; then
262     TARGET_CFLAGS="$TARGET_CFLAGS -Os"
263   else
264     TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
265   fi
267   # Force no alignment to save space on i386.
268   if test "x$target_cpu" = xi386; then
269     AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
270       CFLAGS="-falign-loops=1"
271       AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no])
272     ])
274     if test "x$grub_cv_cc_falign_loop" = xyes; then
275       TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
276     else
277       TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
278     fi
279   fi
282 if test "x$target_m32" = x1; then
283   # Force 32-bit mode.
284   TARGET_CFLAGS="$TARGET_CFLAGS -m32"
285   TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
288 if test "x$target_m64" = x1; then
289   # Force 64-bit mode.
290   TARGET_CFLAGS="$TARGET_CFLAGS -m64"
291   TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
295 # Compiler features.
298 # Smashing stack protector.
299 grub_CHECK_STACK_PROTECTOR
300 # Need that, because some distributions ship compilers that include
301 # `-fstack-protector' in the default specs.
302 if test "x$ssp_possible" = xyes; then
303   TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
305 grub_CHECK_STACK_ARG_PROBE
306 # Cygwin's GCC uses alloca() to probe the stackframe on static
307 # stack allocations above some threshold.
308 if test x"$sap_possible" = xyes; then
309   TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
312 AC_SUBST(TARGET_CFLAGS)
313 AC_SUBST(TARGET_CPPFLAGS)
314 AC_SUBST(TARGET_LDFLAGS)
315 AC_SUBST(MODULE_LDFLAGS)
317 # Set them to their new values for the tests below.
318 CC="$TARGET_CC"
319 CFLAGS="$TARGET_CFLAGS"
320 CPPFLAGS="$TARGET_CPPFLAGS"
321 LDFLAGS="$TARGET_LDFLAGS"
323 # Defined in aclocal.m4.
324 grub_PROG_TARGET_CC
325 grub_PROG_OBJCOPY_ABSOLUTE
326 grub_PROG_LD_BUILD_ID_NONE
327 grub_ASM_USCORE
328 if test "x$target_cpu" = xi386; then
329   if test ! -z "$TARGET_IMG_LDSCRIPT"; then
330     # Check symbols provided by linker script.
331     CFLAGS="$TARGET_CFLAGS -nostdlib $TARGET_IMG_LDFLAGS_AC -Wl,-Ttext,8000,--defsym,___main=0x8100"
332   fi
333   if test "x$platform" = xpc; then
334     grub_CHECK_START_SYMBOL
335     grub_CHECK_BSS_START_SYMBOL
336     grub_CHECK_END_SYMBOL
337   fi
338   CFLAGS="$TARGET_CFLAGS"
339   grub_I386_ASM_PREFIX_REQUIREMENT
340   grub_I386_ASM_ADDR32
341   grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
342   grub_I386_CHECK_REGPARM_BUG
343 else
344   AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
347 # Restore the flags.
348 CC="$tmp_CC"
349 CFLAGS="$tmp_CFLAGS"
350 CPPFLAGS="$tmp_CPPFLAGS"
351 LDFLAGS="$tmp_LDFLAGS"
352 LIBS="$tmp_LIBS"
355 # Check for options.
358 # Memory manager debugging.
359 AC_ARG_ENABLE([mm-debug], 
360               AS_HELP_STRING([--enable-mm-debug],
361                              [include memory manager debugging]),
362               [AC_DEFINE([MM_DEBUG], [1],
363                          [Define to 1 if you enable memory manager debugging.])])
365 AC_ARG_ENABLE([grub-emu],
366               [AS_HELP_STRING([--enable-grub-emu],
367                              [build and install the `grub-emu' debugging utility])])
368 [if [ x"$enable_grub_emu" = xyes ]; then
369   # Check for curses libraries.]
370   AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
371     [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
372       [AC_MSG_ERROR([(n)curses libraries are required to build `grub-emu'])])])
373   AC_SUBST([LIBCURSES])
375   [# Check for headers.]
376   AC_CHECK_HEADERS([ncurses/curses.h], [],
377     [AC_CHECK_HEADERS([ncurses.h], [],
378       [AC_CHECK_HEADERS([curses.h], [],
379         [AC_MSG_ERROR([(n)curses header files are required to build `grub-emu'])])])])
380 [fi]
381 AC_SUBST([enable_grub_emu])
383 AC_ARG_ENABLE([grub-fstest],
384               [AS_HELP_STRING([--enable-grub-fstest],
385                              [build and install the `grub-fstest' debugging utility])])
386 AC_SUBST([enable_grub_fstest])
388 # Output files.
389 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu
390         include/grub/machine:include/grub/$target_cpu/$platform])
391 AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
392 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
393 AC_OUTPUT