Joseph> I don't see anything obvious that would disable the plugin if Joseph> plugins are unsupported (e.g. on Windows host) or disabled Joseph> (--disable-plugin). Probably the relevant support from Joseph> gcc/configure.ac needs to go somewhere it can be used at Joseph> toplevel.
Here's the patch to pull this out to a separate file. I've omitted generated code from this mail. Tom b/config/ChangeLog: 2014-06-19 Tom Tromey <tro...@redhat.com> * gcc-plugin.m4: New file. b/gcc/ChangeLog: 2014-06-19 Tom Tromey <tro...@redhat.com> * aclocal.m4, configure: Rebuild. * Makefile.in (aclocal_deps): Add gcc-plugin.m4. * configure.ac: Use GCC_ENABLE_PLUGINS. --- config/ChangeLog | 4 ++ config/gcc-plugin.m4 | 113 +++++++++++++++++++++++++++++++++ gcc/ChangeLog | 6 ++ gcc/Makefile.in | 1 + gcc/aclocal.m4 | 89 +------------------------- gcc/configure | 172 +++++++++++++++++++++++++-------------------------- gcc/configure.ac | 100 +----------------------------- 7 files changed, 212 insertions(+), 273 deletions(-) create mode 100644 config/gcc-plugin.m4 diff --git a/config/gcc-plugin.m4 b/config/gcc-plugin.m4 new file mode 100644 index 0000000..dd06a58 --- /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 +]) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 5587b75..b17530a 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1672,6 +1672,7 @@ aclocal_deps = \ $(srcdir)/../config/codeset.m4 \ $(srcdir)/../config/extensions.m4 \ $(srcdir)/../config/gettext-sister.m4 \ + $(srcdir)/../config/gcc-plugin.m4 \ $(srcdir)/../config/iconv.m4 \ $(srcdir)/../config/lcmessage.m4 \ $(srcdir)/../config/lib-ld.m4 \ diff --git a/gcc/configure.ac b/gcc/configure.ac index a1cf901..b9eedc5 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -5443,105 +5443,7 @@ if test "x${CLOOGLIBS}" != "x" ; then AC_DEFINE(HAVE_cloog, 1, [Define if cloog is in use.]) fi -# 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 - +GCC_ENABLE_PLUGINS AC_SUBST(pluginlibs) AC_SUBST(enable_plugin) if test x"$enable_plugin" = x"yes"; then -- 1.9.3