Summary: minor, rewrite linker checks to use the compiler front-end and XFLAG
authorSebastian Freundt <freundt@ga-group.nl>
Mon, 2 Jan 2012 12:39:13 +0000 (12:39 +0000)
committerSebastian Freundt <freundt@ga-group.nl>
Mon, 2 Jan 2012 12:39:13 +0000 (12:39 +0000)
Keywords: bldchn

* configure.ac (SXE_CHECK_LINKER_FLAGS -> SXE_CHECK_LDFLAGS): rename, in
  accordance to SXE_CHECK_CFLAGS
  use new SXE_CHECK_LINKER_FLAGS macro to check for nocombreloc

* sxe-compiler.m4 (SXE_FEATFLAGS): move linker specific stuff to
  SXE_CHECK_LDFLAGS in sxe-linker.m4

* sxe-linker.m4 (SXE_CHECK_LINKER_FLAGS): new, macro to check for flags
  passed down to the linker via the compiler front-end, just as in
  real-life
  (SXE_CHECK_LDFLAGS): also check for compiler+linker specifics like
  static-intel and static-libgcc

Signed-off-by: Sebastian Freundt <freundt@ga-group.nl>
configure.ac
m4/sxe-compiler.m4
m4/sxe-linker.m4

index 2a483f0..953dfba 100644 (file)
@@ -1138,7 +1138,7 @@ SXE_DO_CC_HACKS
 SXE_CHECK_SIMD_EXTENSIONS
 
 ## some linker flags that might come in handy
-SXE_CHECK_LINKER_FLAGS
+SXE_CHECK_LDFLAGS
 
 ## suffices to be defined late, for instance here
 SXE_CHECK_PARSER_LEXER
@@ -1151,7 +1151,7 @@ if test "$with_pdump" != "yes"; then
        ## enough.  Please report it, though.
        ## #### Should make this Solaris-friendly.
        ## Link with -z nocombreloc for now.
-       SXE_CHECK_LD_NOCOMBRELOC
+       SXE_CHECK_LD_ZFLAG([nocombreloc])
        if test "$sxe_cv_ld__z_nocombreloc" = "yes"; then
                SXE_PREPEND_LINKER_FLAG([-z nocombreloc], [ld_switch_site])
        fi
index 905fe03..01eec4e 100644 (file)
@@ -756,15 +756,6 @@ AC_DEFUN([SXE_FEATFLAGS], [dnl
        ## (and hence PIE off) and hope bug 16 remains fixed
        SXE_CHECK_COMPILER_FLAGS([-nopie],
                [featflags="$featflags -nopie"])
-
-       ## if libtool then
-       dnl XFLAG="-XCClinker"
-
-       ## default flags for needed features
-       SXE_CHECK_COMPILER_FLAGS([-static-intel], [
-               ldflags="${ldflags} ${XFLAG} -static-intel"])
-       SXE_CHECK_COMPILER_FLAGS([-static-libgcc], [
-               ldflags="${ldflags} ${XFLAG} -static-libgcc"])
 ])dnl SXE_FEATFLAGS
 
 
@@ -1688,10 +1679,6 @@ respectively
 
 NOTE: -C <directory> option is not available on all systems
                ])
-
-       LDFLAGS="${ldflags} ${ac_cv_env_LDFLAGS_value}"
-       AC_MSG_CHECKING([for preferred LDFLAGS])
-       AC_MSG_RESULT([${LDFLAGS}])
 ])dnl SXE_CHECK_CFLAGS
 
 
index 7167593..ec8966d 100644 (file)
@@ -1,6 +1,37 @@
 dnl sxe-linker.m4 -- Linker stuff, esp. dynamic linking
 dnl needed for emodules for one
 
+AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
+dnl just like SXE_CHECK_COMPILER_FLAGS but calls the linker
+       AC_MSG_CHECKING([whether linker accepts $1])
+
+       dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+       SXE_LANG_WERROR([push+on])
+       AS_LITERAL_IF([$1], [
+               AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+                       sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+                       _AC_LANG_PREFIX[]FLAGS="${XFLAG} $1"
+                       AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
+                               AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
+                       _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
+               sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+               _AC_LANG_PREFIX[]FLAGS="$1"
+               AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
+                       eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
+               _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
+       eval sxe_check_linker_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
+       SXE_LANG_WERROR([pop])
+
+       AC_MSG_RESULT([$sxe_check_linker_flags])
+       if test "$sxe_check_linker_flags" = "yes"; then
+               m4_default([$2], :)
+       else
+               m4_default([$3], :)
+       fi
+])dnl SXE_CHECK_LINKER_FLAGS
+
 
 AC_DEFUN([SXE_CHECK_LD_ZFLAG], [dnl
        pushdef([LD_ZFLAG], [$1])
@@ -18,34 +49,45 @@ AC_DEFUN([_SXE_CHECK_LD_ZFLAG], [dnl
        pushdef([LD_ZFLAG], [$1])
        pushdef([cv_zflag], [sxe_cv_ld__z_]translit(LD_ZFLAG,[-.=],[___]))
 
-       if test "$GCC" = "yes"; then
-               if test "($CC -Xlinker --help 2>&1 | \
-                       grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 ) "; then
-                       cv_zflag="yes"
-               else
-                       cv_zflag="no"
-               fi
-       elif test -n "$LD"; then
-               if test "($LD --help 2>&1 | \
-                       grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 )"; then
-                       cv_zflag="yes"
-               else
-                       cv_zflag="no"
-               fi
-       else
-               cv_zflag="no"
-       fi
+       SXE_CHECK_LINKER_FLAGS([-z ]LD_ZFLAG[])
+
+dnl    if test "$GCC" = "yes"; then
+dnl            if test "($CC -Xlinker --help 2>&1 | \
+dnl                    grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 ) "; then
+dnl                    cv_zflag="yes"
+dnl            else
+dnl                    cv_zflag="no"
+dnl            fi
+dnl    elif test -n "$LD"; then
+dnl            if test "($LD --help 2>&1 | \
+dnl                    grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 )"; then
+dnl                    cv_zflag="yes"
+dnl            else
+dnl                    cv_zflag="no"
+dnl            fi
+dnl    else
+dnl            cv_zflag="no"
+dnl    fi
 
        popdef([cv_zflag])
        popdef([LD_ZFLAG])
 ])dnl _SXE_CHECK_LD_ZFLAG
 
-AC_DEFUN([SXE_CHECK_LD_NOCOMBRELOC], [dnl
-       SXE_CHECK_LD_ZFLAG([nocombreloc])
-])dnl SXE_CHECK_LD_NOCOMBRELOC
 
+AC_DEFUN([SXE_CHECK_LDFLAGS], [dnl
+       ## if libtool then
+       case "${LD}" in
+       *"libtool"*)
+               XFLAG="-XCClinker"
+               ;;
+       *"ld"*)
+               ## no XFLAG needed
+               ;;
+       *)
+               XFLAG="-Xlinker"
+               ;;
+       esac
 
-AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
        ## relocation
        SXE_CHECK_LD_ZFLAG([combreloc])
        SXE_CHECK_LD_ZFLAG([nocombreloc])
@@ -57,7 +99,33 @@ AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
        ## binding policy
        SXE_CHECK_LD_ZFLAG([lazy])
        SXE_CHECK_LD_ZFLAG([now])
-])dnl SXE_CHECK_LINKER_FLAGS
+
+       ## icc related
+       ## default flags for needed features
+       SXE_CHECK_LINKER_FLAGS([-static-intel], [
+               ldflags="${ldflags} ${XFLAG} -static-intel"])
+       SXE_CHECK_LINKER_FLAGS([-static-libgcc], [
+               ldflags="${ldflags} ${XFLAG} -static-libgcc"])
+
+       LDFLAGS="${ldflags} ${ac_cv_env_LDFLAGS_value}"
+       AC_MSG_CHECKING([for preferred LDFLAGS])
+       AC_MSG_RESULT([${LDFLAGS}])
+
+       AC_MSG_NOTICE([
+If you wish to ADD your own flags you want to stop here and rerun the
+configure script like so:
+  configure LDFLAGS=<to-be-added-flags>
+
+You can always override the determined LDFLAGS, partially or totally,
+using
+  make -C <directory> LDFLAGS=<your-own-flags> [target]
+or
+  make LDFLAGS=<your-own-flags> [target]
+respectively
+
+NOTE: -C <directory> option is not available on all systems
+               ])
+])dnl SXE_CHECK_LDFLAGS
 
 AC_DEFUN([SXE_PREPEND_LINKER_FLAG], [dnl
        ## a convenience function to add such linker flags to variables