From 8ffb046649d5d4222d3792ee175fe1375a8e7323 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Sat, 23 Oct 2010 14:32:44 +0000 Subject: [PATCH] Fix a few problems with the compiler visibility test: * Update to be safe for AC 2.68 by using AC_LINK_IFELSE instead of AC_TRY_LINK * If enable visibility was used, ensure we fail if the compiler doesn't support it * Rename OMPI_CHECK_VISIBILITY -> OPAL_CHECK_VISIBILITY (and all internal variables) This commit was SVN r23923. --- configure.ac | 2 +- opal/config/opal_check_visibility.m4 | 65 +++++++++++++--------------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/configure.ac b/configure.ac index e8a5c61aad..beca807704 100644 --- a/configure.ac +++ b/configure.ac @@ -1009,7 +1009,7 @@ AC_CACHE_SAVE # the visibility feature. ompi_show_title "Symbol visibility feature" -OMPI_CHECK_VISIBILITY +OPAL_CHECK_VISIBILITY diff --git a/opal/config/opal_check_visibility.m4 b/opal/config/opal_check_visibility.m4 index 992cc08b18..ca679d4c11 100644 --- a/opal/config/opal_check_visibility.m4 +++ b/opal/config/opal_check_visibility.m4 @@ -10,7 +10,7 @@ # University of Stuttgart. All rights reserved. # Copyright (c) 2004-2005 The Regents of the University of California. # All rights reserved. -# Copyright (c) 2006-2007 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2006-2010 Cisco Systems, Inc. All rights reserved. # Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. # $COPYRIGHT$ # @@ -19,19 +19,18 @@ # $HEADER$ # - -# OMPI_CHECK_VISIBILITY +# OPAL_CHECK_VISIBILITY # -------------------------------------------------------- -AC_DEFUN([OMPI_CHECK_VISIBILITY],[ +AC_DEFUN([OPAL_CHECK_VISIBILITY],[ AC_REQUIRE([AC_PROG_GREP]) # Check if the compiler has support for visibility, like some versions of gcc, icc Sun Studio cc. AC_ARG_ENABLE(visibility, AC_HELP_STRING([--enable-visibility], [enable visibility feature of certain compilers/linkers (default: enabled)])) - if test "$enable_visibility" = "no" -o "$opal_cv___attribute__visibility" = "0"; then - AC_MSG_CHECKING([enable symbol visibility]) - AC_MSG_RESULT([no]) + if test "$enable_visibility" = "no"; then + AC_MSG_CHECKING([whether to enable symbol visibility]) + AC_MSG_RESULT([no (disabled)]) have_visibility=0 else CFLAGS_orig="$CFLAGS" @@ -40,71 +39,69 @@ AC_DEFUN([OMPI_CHECK_VISIBILITY],[ # check using gcc -fvisibility=hidden flag CFLAGS="$CFLAGS_orig -fvisibility=hidden" AC_CACHE_CHECK([if $CC supports -fvisibility], - [ompi_cv_cc_fvisibility], - [AC_TRY_LINK([ - #include + [opal_cv_cc_fvisibility], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ __attribute__((visibility("default"))) int foo; - void bar(void) { fprintf(stderr, "bar\n"); } - ],[], + ]],[[int i;]])], + [opal_cv_cc_fvisibility=yes], [if test -s conftest.err ; then $GREP -iq "visibility" conftest.err if test "$?" = "0" ; then - ompi_cv_cc_fvisibility="no" + opal_cv_cc_fvisibility=no else - ompi_cv_cc_fvisibility="yes" + opal_cv_cc_fvisibility=yes fi else - ompi_cv_cc_fvisibility="yes" + opal_cv_cc_fvisibility=yes fi], - [ompi_cv_cc_fvisibility="no"]) + [opal_cv_cc_fvisibility=no]) ]) if test "$ompi_c_vendor" = "sun" ; then # Check using Sun Studio -xldscope=hidden flag CFLAGS="$CFLAGS_orig -xldscope=hidden" AC_CACHE_CHECK([if $CC supports -xldscope], - [ompi_cv_cc_xldscope], - [AC_TRY_LINK([ - #include + [opal_cv_cc_xldscope], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ __attribute__((visibility("default"))) int foo; - void bar(void) { fprintf(stderr, "bar\n"); } - ],[], + ]],[[int i;]])], + [opal_cv_cc_fvisibilty=yes], [if test -s conftest.err ; then $GREP -iq "visibility" conftest.err if test "$?" = "0" ; then - ompi_cv_cc_xldscope="no" + opal_cv_cc_xldscope="no" else - ompi_cv_cc_xldscope="yes" + opal_cv_cc_xldscope="yes" fi else - ompi_cv_cc_xldscope="yes" + opal_cv_cc_xldscope="yes" fi], - [ompi_cv_cc_xldscope="no"]) + [opal_cv_cc_xldscope="no"]) ]) fi - if test "$ompi_cv_cc_fvisibility" = "yes" ; then + if test "$opal_cv_cc_fvisibility" = "yes" ; then add=" -fvisibility=hidden" have_visibility=1 - AC_MSG_CHECKING([enable symbol visibility]) - AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([whether to enable symbol visibility]) + AC_MSG_RESULT([yes (via$add)]) AC_MSG_WARN([$add has been added to CFLAGS]) - elif test "$ompi_cv_cc_xldscope" = "yes" ; then + elif test "$opal_cv_cc_xldscope" = "yes" ; then add=" -xldscope=hidden" have_visibility=1 - AC_MSG_CHECKING([enable symbol visibility]) - AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([whether to enable symbol visibility]) + AC_MSG_RESULT([yes (via$add)]) AC_MSG_WARN([$add has been added to CFLAGS]) elif test "$enable_visibility" = "yes"; then AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting]) else - AC_MSG_CHECKING([enable symbol visibility]) - AC_MSG_RESULT([no]) + AC_MSG_CHECKING([whether enable symbol visibility]) + AC_MSG_RESULT([no (unsupported)]) have_visibility=0 fi CFLAGS="$CFLAGS_orig$add" OPAL_VISIBILITY_CFLAGS="$add" unset add fi + AC_DEFINE_UNQUOTED([OPAL_C_HAVE_VISIBILITY], [$have_visibility], [Whether C compiler supports -fvisibility]) - ])