8c3fb41eb7
Per #257, the configure test used to check: ```c ``` But out in the code base, we actually do this: ```c // ... ``` This commit updates the configure test to ```#define``` a string and then use that with the various ident strategies. Fixes #257
100 строки
3.8 KiB
Bash
100 строки
3.8 KiB
Bash
dnl -*- shell-script -*-
|
|
dnl
|
|
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
|
dnl Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
|
|
dnl $COPYRIGHT$
|
|
dnl
|
|
dnl Additional copyrights may follow
|
|
dnl
|
|
dnl $HEADER$
|
|
dnl
|
|
dnl defines:
|
|
dnl OPAL_$1_USE_PRAGMA_IDENT
|
|
dnl OPAL_$1_USE_IDENT
|
|
dnl OPAL_$1_USE_CONST_CHAR_IDENT
|
|
dnl
|
|
|
|
# OPAL_CHECK_IDENT(compiler-env, compiler-flags,
|
|
# file-suffix, lang) Try to compile a source file containing
|
|
# a #pragma ident, and determine whether the ident was
|
|
# inserted into the resulting object file
|
|
# -----------------------------------------------------------
|
|
AC_DEFUN([OPAL_CHECK_IDENT], [
|
|
AC_MSG_CHECKING([for $4 ident string support])
|
|
|
|
opal_pragma_ident_happy=0
|
|
opal_ident_happy=0
|
|
opal_static_const_char_happy=0
|
|
_OPAL_CHECK_IDENT(
|
|
[$1], [$2], [$3],
|
|
[[#]pragma ident], [],
|
|
[opal_pragma_ident_happy=1
|
|
opal_message="[#]pragma ident"],
|
|
_OPAL_CHECK_IDENT(
|
|
[$1], [$2], [$3],
|
|
[[#]ident], [],
|
|
[opal_ident_happy=1
|
|
opal_message="[#]ident"],
|
|
_OPAL_CHECK_IDENT(
|
|
[$1], [$2], [$3],
|
|
[[#]pragma comment(exestr, ], [)],
|
|
[opal_pragma_comment_happy=1
|
|
opal_message="[#]pragma comment"],
|
|
[opal_static_const_char_happy=1
|
|
opal_message="static const char[[]]"])))
|
|
|
|
AC_DEFINE_UNQUOTED([OPAL_$1_USE_PRAGMA_IDENT],
|
|
[$opal_pragma_ident_happy], [Use #pragma ident strings for $4 files])
|
|
AC_DEFINE_UNQUOTED([OPAL_$1_USE_IDENT],
|
|
[$opal_ident_happy], [Use #ident strings for $4 files])
|
|
AC_DEFINE_UNQUOTED([OPAL_$1_USE_PRAGMA_COMMENT],
|
|
[$opal_pragma_comment_happy], [Use #pragma comment for $4 files])
|
|
AC_DEFINE_UNQUOTED([OPAL_$1_USE_CONST_CHAR_IDENT],
|
|
[$opal_static_const_char_happy], [Use static const char[] strings for $4 files])
|
|
|
|
AC_MSG_RESULT([$opal_message])
|
|
|
|
unset opal_pragma_ident_happy opal_ident_happy opal_static_const_char_happy opal_message
|
|
])
|
|
|
|
# _OPAL_CHECK_IDENT(compiler-env, compiler-flags,
|
|
# file-suffix, header_prefix, header_suffix, action-if-success, action-if-fail)
|
|
# Try to compile a source file containing a #-style ident,
|
|
# and determine whether the ident was inserted into the
|
|
# resulting object file
|
|
# -----------------------------------------------------------
|
|
AC_DEFUN([_OPAL_CHECK_IDENT], [
|
|
eval opal_compiler="\$$1"
|
|
eval opal_flags="\$$2"
|
|
|
|
opal_ident="string_not_coincidentally_inserted_by_the_compiler"
|
|
cat > conftest.$3 <<EOF
|
|
#define IDENT_MSG "$opal_ident"
|
|
$4 IDENT_MSG $5
|
|
int main(int argc, char** argv);
|
|
int main(int argc, char** argv) { return 0; }
|
|
EOF
|
|
|
|
# "strings" won't always return the ident string. objdump isn't
|
|
# universal (e.g., OS X doesn't have it), and ...other
|
|
# complications. So just try to "grep" for the string in the
|
|
# resulting object file. If the ident is found in "strings" or
|
|
# the grep succeeds, rule that we have this flavor of ident.
|
|
|
|
OPAL_LOG_COMMAND([$opal_compiler $opal_flags -c conftest.$3 -o conftest.${OBJEXT}],
|
|
[AS_IF([test -f conftest.${OBJEXT}],
|
|
[opal_output="`strings -a conftest.${OBJEXT} | grep $opal_ident`"
|
|
grep $opal_ident conftest.${OBJEXT} 2>&1 1>/dev/null
|
|
opal_status=$?
|
|
AS_IF([test "$opal_output" != "" -o "$opal_status" = "0"],
|
|
[$6],
|
|
[$7])],
|
|
[OPAL_LOG_MSG([the failed program was:])
|
|
OPAL_LOG_FILE([conftest.$3])
|
|
$7]
|
|
[$7])])
|
|
|
|
unset opal_compiler opal_flags opal_output opal_status
|
|
rm -rf conftest.* conftest${EXEEXT}
|
|
])dnl
|