123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- dnl Redefine AC_LANG_PROGRAM with a "-Wstrict-prototypes -Werror"-friendly
- dnl version. Patch submitted to bug-autoconf in 2009-09-16.
- m4_define([AC_LANG_PROGRAM(C)],
- [$1
- int
- main (void)
- {
- dnl Do *not* indent the following line: there may be CPP directives.
- dnl Don't move the `;' right after for the same reason.
- $2
- ;
- return 0;
- }])
- dnl Check whether target compiler is working
- AC_DEFUN([grub_PROG_TARGET_CC],
- [AC_MSG_CHECKING([whether target compiler is working])
- AC_CACHE_VAL(grub_cv_prog_target_cc,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);
- ]], [[]])],
- [grub_cv_prog_target_cc=yes],
- [grub_cv_prog_target_cc=no])
- ])
- AC_MSG_RESULT([$grub_cv_prog_target_cc])
- if test "x$grub_cv_prog_target_cc" = xno; then
- AC_MSG_ERROR([cannot compile for the target])
- fi
- ])
- dnl grub_ASM_USCORE checks if C symbols get an underscore after
- dnl compiling to assembler.
- dnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written by
- dnl Erich Boleyn and modified by Yoshinori K. Okuji.
- AC_DEFUN([grub_ASM_USCORE],
- [AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_PROG_EGREP])
- AC_MSG_CHECKING([if C symbols get an underscore after compilation])
- AC_CACHE_VAL(grub_cv_asm_uscore,
- [cat > conftest.c <<\EOF
- int func (int *);
- int
- func (int *list)
- {
- *list = 0;
- return *list;
- }
- EOF
- if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then
- true
- else
- AC_MSG_ERROR([${CC-cc} failed to produce assembly code])
- fi
- if $EGREP '(^|[^_[:alnum]])_func' conftest.s >/dev/null 2>&1; then
- HAVE_ASM_USCORE=1
- grub_cv_asm_uscore=yes
- else
- HAVE_ASM_USCORE=0
- grub_cv_asm_uscore=no
- fi
- rm -f conftest*])
- AC_MSG_RESULT([$grub_cv_asm_uscore])
- ])
- dnl Some versions of `objcopy -O binary' vary their output depending
- dnl on the link address.
- AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
- [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
- AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
- [cat > conftest.c <<\EOF
- void cmain (void);
- void
- cmain (void)
- {
- *((int *) 0x1000) = 2;
- }
- EOF
- if AC_TRY_EVAL(ac_compile) && test -s conftest.o; then :
- else
- AC_MSG_ERROR([${CC-cc} cannot compile C source code])
- fi
- grub_cv_prog_objcopy_absolute=yes
- for link_addr in 0x2000 0x8000 0x7C00; do
- if AC_TRY_COMMAND([${CC-cc} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
- else
- AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
- fi
- if AC_TRY_COMMAND([${TARGET_OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then :
- else
- AC_MSG_ERROR([${TARGET_OBJCOPY-objcopy} cannot create binary files])
- fi
- if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then
- mv -f conftest conftest.old
- else
- grub_cv_prog_objcopy_absolute=no
- break
- fi
- done
- rm -f conftest*])
- AC_MSG_RESULT([$grub_cv_prog_objcopy_absolute])
- if test "x$grub_cv_prog_objcopy_absolute" = xno; then
- AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils])
- fi
- ])
- dnl Supply --build-id=none to ld if building modules.
- dnl This suppresses warnings from ld on some systems
- AC_DEFUN([grub_PROG_LD_BUILD_ID_NONE],
- [AC_MSG_CHECKING([whether linker accepts --build-id=none])
- AC_CACHE_VAL(grub_cv_prog_ld_build_id_none,
- [save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -Wl,--build-id=none"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_prog_ld_build_id_none=yes],
- [grub_cv_prog_ld_build_id_none=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- AC_MSG_RESULT([$grub_cv_prog_ld_build_id_none])
- if test "x$grub_cv_prog_ld_build_id_none" = xyes; then
- TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,--build-id=none"
- fi
- ])
- dnl Check nm
- AC_DEFUN([grub_PROG_NM_WORKS],
- [AC_MSG_CHECKING([whether nm works])
- AC_CACHE_VAL(grub_cv_prog_nm_works,
- [
- nm_works_tmp_dir="$(mktemp -d "./confXXXXXX")"
- AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
- $TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_works_tmp_dir/ef"
- if $TARGET_NM "$nm_works_tmp_dir/ef" > /dev/null; then
- grub_cv_prog_nm_works=yes
- else
- grub_cv_prog_nm_minus_p=no
- fi
- rm "$nm_works_tmp_dir/ef"
- rmdir "$nm_works_tmp_dir"
- ])
- AC_MSG_RESULT([$grub_cv_prog_nm_works])
- if test "x$grub_cv_prog_nm_works" != xyes; then
- AC_MSG_ERROR([nm does not work])
- fi
- ])
- dnl Supply -P to nm
- AC_DEFUN([grub_PROG_NM_MINUS_P],
- [AC_MSG_CHECKING([whether nm accepts -P])
- AC_CACHE_VAL(grub_cv_prog_nm_minus_p,
- [
- nm_minus_p_tmp_dir="$(mktemp -d "./confXXXXXX")"
- AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
- $TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_minus_p_tmp_dir/ef"
- if $TARGET_NM -P "$nm_minus_p_tmp_dir/ef" 2>&1 > /dev/null; then
- grub_cv_prog_nm_minus_p=yes
- else
- grub_cv_prog_nm_minus_p=no
- fi
- rm "$nm_minus_p_tmp_dir/ef"
- rmdir "$nm_minus_p_tmp_dir"
- ])
- AC_MSG_RESULT([$grub_cv_prog_nm_minus_p])
- if test "x$grub_cv_prog_nm_minus_p" = xyes; then
- TARGET_NMFLAGS_MINUS_P="-P"
- else
- TARGET_NMFLAGS_MINUS_P=
- fi
- ])
- dnl Supply --defined-only to nm
- AC_DEFUN([grub_PROG_NM_DEFINED_ONLY],
- [AC_MSG_CHECKING([whether nm accepts --defined-only])
- AC_CACHE_VAL(grub_cv_prog_nm_defined_only,
- [
- nm_defined_only_tmp_dir="$(mktemp -d "./confXXXXXX")"
- AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
- $TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_defined_only_tmp_dir/ef"
- if $TARGET_NM --defined-only "$nm_defined_only_tmp_dir/ef" 2>&1 > /dev/null; then
- grub_cv_prog_nm_defined_only=yes
- else
- grub_cv_prog_nm_defined_only=no
- fi
- rm "$nm_defined_only_tmp_dir/ef"
- rmdir "$nm_defined_only_tmp_dir"
- ])
- AC_MSG_RESULT([$grub_cv_prog_nm_defined_only])
- if test "x$grub_cv_prog_nm_defined_only" = xyes; then
- TARGET_NMFLAGS_DEFINED_ONLY=--defined-only
- else
- TARGET_NMFLAGS_DEFINED_ONLY=
- fi
- ])
- dnl Check what symbol is defined as a bss start symbol.
- dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
- AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
- [AC_REQUIRE([AC_PROG_CC])
- AC_MSG_CHECKING([if __bss_start is defined by the compiler])
- AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);
- ]],
- [[asm ("incl __bss_start")]])],
- [grub_cv_check_uscore_uscore_bss_start_symbol=yes],
- [grub_cv_check_uscore_uscore_bss_start_symbol=no])])
- AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])
- AC_MSG_CHECKING([if edata is defined by the compiler])
- AC_CACHE_VAL(grub_cv_check_edata_symbol,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);]],
- [[asm ("incl edata")]])],
- [grub_cv_check_edata_symbol=yes],
- [grub_cv_check_edata_symbol=no])])
- AC_MSG_RESULT([$grub_cv_check_edata_symbol])
- AC_MSG_CHECKING([if _edata is defined by the compiler])
- AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);]],
- [[asm ("incl _edata")]])],
- [grub_cv_check_uscore_edata_symbol=yes],
- [grub_cv_check_uscore_edata_symbol=no])])
- AC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol])
- if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then
- BSS_START_SYMBOL=__bss_start
- elif test "x$grub_cv_check_edata_symbol" = xyes; then
- BSS_START_SYMBOL=edata
- elif test "x$grub_cv_check_uscore_edata_symbol" = xyes; then
- BSS_START_SYMBOL=_edata
- else
- AC_MSG_ERROR([none of __bss_start, edata or _edata is defined])
- fi
- ])
- dnl Check what symbol is defined as an end symbol.
- dnl Written by Yoshinori K. Okuji.
- AC_DEFUN([grub_CHECK_END_SYMBOL],
- [AC_REQUIRE([AC_PROG_CC])
- AC_MSG_CHECKING([if end is defined by the compiler])
- AC_CACHE_VAL(grub_cv_check_end_symbol,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);]],
- [[asm ("incl end")]])],
- [grub_cv_check_end_symbol=yes],
- [grub_cv_check_end_symbol=no])])
- AC_MSG_RESULT([$grub_cv_check_end_symbol])
- AC_MSG_CHECKING([if _end is defined by the compiler])
- AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
- void __main (void) {}
- int main (void);]],
- [[asm ("incl _end")]])],
- [grub_cv_check_uscore_end_symbol=yes],
- [grub_cv_check_uscore_end_symbol=no])])
- AC_MSG_RESULT([$grub_cv_check_uscore_end_symbol])
- if test "x$grub_cv_check_end_symbol" = xyes; then
- END_SYMBOL=end
- elif test "x$grub_cv_check_uscore_end_symbol" = xyes; then
- END_SYMBOL=_end
- else
- AC_MSG_ERROR([neither end nor _end is defined])
- fi
- ])
- dnl Check if the C compiler supports `-fstack-protector'.
- AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[
- [# Smashing stack protector.
- ssp_possible=yes]
- AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector'])
- # Is this a reliable test case?
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[
- void foo (void) { volatile char a[8]; a[3]; }
- ]])])
- [# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
- # `ac_compile' like this correct, after all?
- if eval "$ac_compile -S -fstack-protector -o conftest.s" 2> /dev/null; then]
- AC_MSG_RESULT([yes])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.s
- else
- ssp_possible=no]
- AC_MSG_RESULT([no])
- [fi]
- ])
- dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin).
- AC_DEFUN([grub_CHECK_STACK_ARG_PROBE],[
- [# Smashing stack arg probe.
- sap_possible=yes]
- AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[
- void foo (void) { volatile char a[8]; a[3]; }
- ]])])
- [if eval "$ac_compile -S -mstack-arg-probe -Werror -o conftest.s" 2> /dev/null; then]
- AC_MSG_RESULT([yes])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.s
- else
- sap_possible=no]
- AC_MSG_RESULT([no])
- [fi]
- ])
- dnl Check if ln -s can handle directories properly (mingw).
- AC_DEFUN([grub_CHECK_LINK_DIR],[
- AC_MSG_CHECKING([whether ln -s can handle directories properly])
- [mkdir testdir 2>/dev/null
- case $srcdir in
- [\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
- *) reldir=../$srcdir/include/grub/util ;;
- esac
- if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then]
- AC_MSG_RESULT([yes])
- [link_dir=yes
- else
- link_dir=no]
- AC_MSG_RESULT([no])
- [fi
- rm -rf testdir]
- ])
- dnl Check if the C compiler supports `-fPIE'.
- AC_DEFUN([grub_CHECK_PIE],[
- [# Position independent executable.
- pie_possible=yes]
- AC_MSG_CHECKING([whether `$CC' has `-fPIE' as default])
- # Is this a reliable test case?
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[
- #ifdef __PIE__
- int main() {
- return 0;
- }
- #else
- #error NO __PIE__ DEFINED
- #endif
- ]])])
- [# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
- # `ac_compile' like this correct, after all?
- if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then]
- AC_MSG_RESULT([yes])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.s
- else
- pie_possible=no]
- AC_MSG_RESULT([no])
- [fi]
- ])
- AC_DEFUN([grub_CHECK_LINK_PIE],[
- [# Position independent executable.
- link_nopie_needed=no]
- AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
- [if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
- AC_MSG_RESULT([no])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.o
- else
- link_nopie_needed=yes]
- AC_MSG_RESULT([yes])
- [fi]
- ])
- dnl Check if the Linker supports `-no-pie'.
- AC_DEFUN([grub_CHECK_NO_PIE],
- [AC_MSG_CHECKING([whether linker accepts -no-pie])
- AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
- [save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_ld_no_pie=yes],
- [grub_cv_cc_ld_no_pie=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- AC_MSG_RESULT([$grub_cv_cc_ld_no_pie])
- nopie_possible=no
- if test "x$grub_cv_cc_ld_no_pie" = xyes ; then
- nopie_possible=yes
- fi
- ])
- AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
- [AC_MSG_CHECKING([whether linker accepts -nopie])
- AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
- [save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_ld_no_pie_oneword=yes],
- [grub_cv_cc_ld_no_pie_oneword=no])
- LDFLAGS="$save_LDFLAGS"
- ])
- AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword])
- nopie_oneword_possible=no
- if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then
- nopie_oneword_possible=yes
- fi
- ])
- dnl Check if the C compiler supports `-fPIC'.
- AC_DEFUN([grub_CHECK_PIC],[
- [# Position independent executable.
- pic_possible=yes]
- AC_MSG_CHECKING([whether `$CC' has `-fPIC' as default])
- # Is this a reliable test case?
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[
- #ifdef __PIC__
- int main() {
- return 0;
- }
- #else
- #error NO __PIC__ DEFINED
- #endif
- ]])])
- [# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
- # `ac_compile' like this correct, after all?
- if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then]
- AC_MSG_RESULT([yes])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.s
- else
- pic_possible=no]
- AC_MSG_RESULT([no])
- [fi]
- ])
- dnl Create an output variable with the transformed name of a GRUB utility
- dnl program.
- AC_DEFUN([grub_TRANSFORM],[dnl
- AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl
- ])
|