mirror of
				https://git.proxmox.com/git/grub2
				synced 2025-10-31 19:15:14 +00:00 
			
		
		
		
	 b53f595b3e
			
		
	
	
		b53f595b3e
		
	
	
	
	
		
			
			We don't use lgcc_s but missing lgcc_s or another library cause test to fail. So use -nostdlib. We need to use -Werror to avoid warning-generated case to be accepted. Clang uses -nopie rather than -no-pie. Check both and use whichever one works. Additionally android clang passes -pie to the linker even though it doesn't define __PIE__. So if compilation without no-pie logic fails add -nopie/-no-pie even if __PIE__ is not defined.
		
			
				
	
	
		
			478 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			478 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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
 | ||
| ])
 |