You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

140 lines
4.7 KiB

dnl Copyright (C) 1993-2002 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License. As a special exception to the GNU General
dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
dnl From Bruno Haible, Marcus Daniels.
AC_PREREQ(2.13)
AC_DEFUN([CL_GLOBAL_CONSTRUCTORS],
[AC_REQUIRE([CL_AS_UNDERSCORE])dnl
if test -n "$GCC"; then
AC_CACHE_CHECK(for the global constructors function prefix,
cl_cv_cplusplus_ctorprefix, [
cat > conftest.cc << EOF
struct foo { foo (); };
foo foobar;
EOF
# look for the assembly language name in the .s file
AC_TRY_COMMAND(${CXX-g++} $CXXFLAGS -S conftest.cc) >/dev/null 2>&1
if grep '_GLOBAL_\$I\$foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_ctorprefix='_GLOBAL_$I$'
else
if grep '_GLOBAL_\.I\.foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_ctorprefix='_GLOBAL_.I.'
else
if grep '_GLOBAL__I_foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_ctorprefix='_GLOBAL__I_'
else
cl_cv_cplusplus_ctorprefix=unknown
fi
fi
fi
rm -f conftest*
])
if test "$cl_cv_cplusplus_ctorprefix" '!=' unknown; then
ac_value='"'"$cl_cv_cplusplus_ctorprefix"'"'
AC_DEFINE_UNQUOTED(CL_GLOBAL_CONSTRUCTOR_PREFIX,$ac_value)
AC_CACHE_CHECK(for the global destructors function prefix,
cl_cv_cplusplus_dtorprefix, [
cat > conftest.cc << EOF
struct foo { foo (); ~ foo (); };
foo foobar;
EOF
# look for the assembly language name in the .s file
AC_TRY_COMMAND(${CXX-g++} $CXXFLAGS -S conftest.cc) >/dev/null 2>&1
if grep '_GLOBAL_\$D\$foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_dtorprefix='_GLOBAL_$D$'
else
if grep '_GLOBAL_\.D\.foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_dtorprefix='_GLOBAL_.D.'
else
if grep '_GLOBAL__D_foobar' conftest.s >/dev/null ; then
cl_cv_cplusplus_dtorprefix='_GLOBAL__D_'
else
cl_cv_cplusplus_dtorprefix=none
fi
fi
fi
rm -f conftest*
])
if test "$cl_cv_cplusplus_dtorprefix" '!=' none; then
ac_value='"'"$cl_cv_cplusplus_ctorprefix"'"'
AC_DEFINE_UNQUOTED(CL_GLOBAL_DESTRUCTOR_PREFIX,$ac_value)
fi
dnl Check whether the global constructors/destructors functions are file-scope
dnl only by default. This is the case in egcs-1.1.2 or newer.
AC_CACHE_CHECK(whether the global constructors function need to be exported,
cl_cv_cplusplus_ctorexport, [
cat > conftest1.cc << EOF
struct foo { foo (); };
foo foobar;
EOF
cat > conftest2.cc << EOF
#include "confdefs.h"
#ifdef ASM_UNDERSCORE
#define ASM_UNDERSCORE_PREFIX "_"
#else
#define ASM_UNDERSCORE_PREFIX ""
#endif
struct foo { foo (); };
foo::foo () {}
extern "C" void ctor (void) __asm__ (ASM_UNDERSCORE_PREFIX CL_GLOBAL_CONSTRUCTOR_PREFIX "foobar");
int main() { ctor(); return 0; }
EOF
if AC_TRY_COMMAND(${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest1.cc conftest2.cc $LIBS 1>&5) >/dev/null 2>&1 && test -s conftest${ac_exeext}; then
cl_cv_cplusplus_ctorexport=no
else
cl_cv_cplusplus_ctorexport=yes
fi
rm -f conftest*
])
if test "$cl_cv_cplusplus_ctorexport" = yes; then
AC_DEFINE(CL_NEED_GLOBALIZE_CTORDTOR)
fi
dnl Test what suffix to give the global ctors inside shared object files.
if test "$enable_shared" = yes; then
AC_CACHE_CHECK([for the global constructor function suffix in shared objects],
cl_cv_cplusplus_ctorsuffix_pic, [
cat > conftest.cc << EOF
extern "C" void func () {}
static struct S {
inline S () {}
} S;
EOF
AC_TRY_COMMAND(${CXX-g++} $CXXFLAGS ${lt_prog_compiler_pic_CXX-"-fPIC"} -S conftest.cc) >/dev/null 2>&1
if grep "${cl_cv_cplusplus_ctorprefix}conftest\.cc" conftest.s >/dev/null; then
cl_cv_cplusplus_ctorsuffix_pic='#module ".cc"'
else
cl_cv_cplusplus_ctorsuffix_pic='"cl_module__" #module "__firstglobalfun"'
fi
rm -f conftest*
])
AC_DEFINE_UNQUOTED([CL_GLOBAL_CONSTRUCTOR_SUFFIX_PIC(module)], [$cl_cv_cplusplus_ctorsuffix_pic])
fi
dnl Test what suffix to give the global ctors inside static object files.
if test "$enable_static" = yes; then
AC_CACHE_CHECK([for the global constructor function suffix in static objects],
cl_cv_cplusplus_ctorsuffix_nopic, [
cat > conftest.cc << EOF
extern "C" void func () {}
static struct S {
inline S () {}
} S;
EOF
AC_TRY_COMMAND(${CXX-g++} $CXXFLAGS -S conftest.cc) >/dev/null 2>&1
if grep "${cl_cv_cplusplus_ctorprefix}conftest\.cc" conftest.s >/dev/null; then
cl_cv_cplusplus_ctorsuffix_nopic='#module ".cc"'
else
cl_cv_cplusplus_ctorsuffix_nopic='"cl_module__" #module "__firstglobalfun"'
fi
rm -f conftest*
])
AC_DEFINE_UNQUOTED([CL_GLOBAL_CONSTRUCTOR_SUFFIX_NOPIC(module)], [$cl_cv_cplusplus_ctorsuffix_nopic])
fi
fi
fi
])