diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-03-22 10:25:20 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-03-22 10:25:20 +0100 |
commit | fe508576ef1f815b22177d7597796886b91ea0c8 (patch) | |
tree | 885adbb929453bbbee04db48bdbbafec4e29205e /config/gcc-plugin.m4 | |
parent | 445036bb9882485133750a14a5b3da30efeae2df (diff) | |
download | cygnal-fe508576ef1f815b22177d7597796886b91ea0c8.tar.gz cygnal-fe508576ef1f815b22177d7597796886b91ea0c8.tar.bz2 cygnal-fe508576ef1f815b22177d7597796886b91ea0c8.zip |
Sync toplevel with upstream GCC.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'config/gcc-plugin.m4')
-rw-r--r-- | config/gcc-plugin.m4 | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/config/gcc-plugin.m4 b/config/gcc-plugin.m4 new file mode 100644 index 000000000..dd06a58cd --- /dev/null +++ b/config/gcc-plugin.m4 @@ -0,0 +1,113 @@ +# gcc-plugin.m4 -*- Autoconf -*- +# Check whether GCC is able to be built with plugin support. + +dnl Copyright (C) 2014 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. + +# Check for plugin support. +# Respects --enable-plugin. +# Sets the shell variables enable_plugin and pluginlibs. +AC_DEFUN([GCC_ENABLE_PLUGINS], + [# Check for plugin support + AC_ARG_ENABLE(plugin, + [AS_HELP_STRING([--enable-plugin], [enable plugin support])], + enable_plugin=$enableval, + enable_plugin=yes; default_plugin=yes) + + pluginlibs= + + case "${host}" in + *-*-darwin*) + if test x$build = x$host; then + export_sym_check="nm${exeext} -g" + elif test x$host = x$target; then + export_sym_check="$gcc_cv_nm -g" + else + export_sym_check= + fi + ;; + *) + if test x$build = x$host; then + export_sym_check="objdump${exeext} -T" + elif test x$host = x$target; then + export_sym_check="$gcc_cv_objdump -T" + else + export_sym_check= + fi + ;; + esac + + if test x"$enable_plugin" = x"yes"; then + + AC_MSG_CHECKING([for exported symbols]) + if test "x$export_sym_check" != x; then + echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c + ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1 + if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then + : # No need to use a flag + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([for -rdynamic]) + ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1 + if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then + plugin_rdynamic=yes + pluginlibs="-rdynamic" + else + plugin_rdynamic=no + enable_plugin=no + fi + AC_MSG_RESULT([$plugin_rdynamic]) + fi + else + AC_MSG_RESULT([unable to check]) + fi + + # Check -ldl + saved_LIBS="$LIBS" + AC_SEARCH_LIBS([dlopen], [dl]) + if test x"$ac_cv_search_dlopen" = x"-ldl"; then + pluginlibs="$pluginlibs -ldl" + fi + LIBS="$saved_LIBS" + + # Check that we can build shared objects with -fPIC -shared + saved_LDFLAGS="$LDFLAGS" + saved_CFLAGS="$CFLAGS" + case "${host}" in + *-*-darwin*) + CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g` + CFLAGS="$CFLAGS -fPIC" + LDFLAGS="$LDFLAGS -shared -undefined dynamic_lookup" + ;; + *) + CFLAGS="$CFLAGS -fPIC" + LDFLAGS="$LDFLAGS -fPIC -shared" + ;; + esac + AC_MSG_CHECKING([for -fPIC -shared]) + AC_TRY_LINK( + [extern int X;],[return X == 0;], + [AC_MSG_RESULT([yes]); have_pic_shared=yes], + [AC_MSG_RESULT([no]); have_pic_shared=no]) + if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then + pluginlibs= + enable_plugin=no + fi + LDFLAGS="$saved_LDFLAGS" + CFLAGS="$saved_CFLAGS" + + # If plugin support had been requested but not available, fail. + if test x"$enable_plugin" = x"no" ; then + if test x"$default_plugin" != x"yes"; then + AC_MSG_ERROR([ + Building GCC with plugin support requires a host that supports + -fPIC, -shared, -ldl and -rdynamic.]) + fi + fi + fi +]) |