Plugin tests are currently only enabled for build-tree testing.
Enable them for installed testing as well, using
-print-file-name=plugin/include to locate the installed headers in
that case.

Support is also added to contrib/test_installed for the associated
site.exp settings.  Installed testing also shows up that some plugin
tests are using text-art/*.h headers that aren't currently installed,
so add those to PLUGIN_HEADERS.

Bootstrapped with no regressions for x86_64-pc-linux-gnu, and also ran
plugin tests for an installed compiler with contrib/test_installed.

contrib/
        * test_installed (--enable-plugin, --with-plugincc=)
        (--with-plugincflags=, --with-gmpinc=): New options.

gcc/
        * Makefile.in (PLUGIN_HEADERS): Add $(srcdir)/text-art/*.h.
        (install-plugin): Preserve directory structure for text-art
        headers.

gcc/testsuite/
        * lib/plugin-support.exp (plugin-test-execute): Support installed
        testing.
        * g++.dg/plugin/plugin.exp, gcc.dg/plugin/plugin.exp,
        obj-c++.dg/plugin/plugin.exp, objc.dg/plugin/plugin.exp: Do not
        disable for installed testing.

diff --git a/contrib/test_installed b/contrib/test_installed
index 42c3f12b7d78..e573e1ffbe9d 100755
--- a/contrib/test_installed
+++ b/contrib/test_installed
@@ -49,6 +49,7 @@ while true; do
   --srcdir=*) srcdir=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --target=*) target=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --prefix=*) prefix=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+  --enable-plugin) ENABLE_PLUGIN=1; shift;;
   --with-gcc=*) GCC_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --with-g++=*) GXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --with-gfortran=*) GFORTRAN_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; 
shift;;
@@ -56,6 +57,9 @@ while true; do
   --with-alt-cxx=*) ALT_CXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --with-compat-options=*) COMPAT_OPTIONS=`echo "$1" | sed 's/[^=]*=//'`; 
shift;;
   --with-libiconv=*) libiconv=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+  --with-plugincc=*) PLUGINCC=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+  --with-plugincflags=*) PLUGINCFLAGS=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+  --with-gmpinc=*) GMPINC=`echo "$1" | sed 's/[^=]*=//'`; shift;;
   --without-gcc) GCC_UNDER_TEST=no; shift;;
   --without-g++) GXX_UNDER_TEST=no; shift;;
   --without-gfortran) GFORTRAN_UNDER_TEST=no; shift;;
@@ -80,6 +84,7 @@ Supported arguments:
                               tested if different than the host.
 
 --prefix=/some/dir            use gcc, g++ and gfortran from /some/dir/bin 
[PATH]
+--enable-plugin               run GCC plugin tests
 --with-gcc=/some/dir/bin/gcc  use specified gcc program [gcc]
 --with-g++=/some/dir/bin/g++  use specified g++ program [g++]
 --with-gfortran=/some/dir/bin/gfortran  use specified gfortran program 
[gfortran]
@@ -87,6 +92,9 @@ Supported arguments:
 --with-alt-cxx=/some/compiler use specified alternative compiler in compat 
tests
 --with-compat-options=opts    use specified COMPAT_OPTIONS in compat tests
 --with-libiconv=linker-args   use given arguments to link with iconv [-liconv]
+--with-plugincc=/some/cc      use given host compiler to build plugins [g++]
+--with-plugincflags=args      use given options to build plugins [-g -O2]
+--with-gmpinc=args            use given options to find GMP for host []
 --without-gcc                 do not run gcc testsuite
 --without-g++                 do not run g++ testsuite
 --without-gfortran            do not run gfortran testsuite
@@ -142,6 +150,12 @@ fi
 if test x"$COMPAT_OPTIONS" != x; then
   echo "set COMPAT_OPTIONS \"${COMPAT_OPTIONS}\"" >> site.exp
 fi
+if test x"$ENABLE_PLUGIN" != x; then
+    echo "set ENABLE_PLUGIN \"${ENABLE_PLUGIN}\"" >> site.exp
+    echo "set PLUGINCC \"${PLUGINCC-g++}\"" >> site.exp
+    echo "set PLUGINCFLAGS \"${PLUGINCFLAGS--g -O2}\"" >> site.exp
+    echo "set GMPINC \"${GMPINC}\"" >> site.exp
+fi
 
 test x"${GCC_UNDER_TEST}" = x"no" || runtest --tool gcc ${1+"$@"}
 test x"${GXX_UNDER_TEST}" = x"no" || runtest --tool g++ ${1+"$@"}
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index d62314505c95..ac58c593ffd3 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -4136,7 +4136,8 @@ PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) 
coretypes.h $(TM_H) \
   hash-set.h dominance.h cfg.h cfgrtl.h cfganal.h cfgbuild.h cfgcleanup.h \
   lcm.h cfgloopmanip.h file-prefix-map.h builtins.def $(INSN_ATTR_H) \
   pass-instances.def params.list $(srcdir)/../include/gomp-constants.h \
-  $(EXPR_H) $(srcdir)/analyzer/*.h $(srcdir)/diagnostics/*.h
+  $(EXPR_H) $(srcdir)/analyzer/*.h $(srcdir)/diagnostics/*.h \
+  $(srcdir)/text-art/*.h
 
 # generate the 'build fragment' b-header-vars
 s-header-vars: Makefile
@@ -4175,6 +4176,7 @@ install-plugin: installdirs lang.install-plugin 
s-header-vars install-gengtype
          case $$path in \
          "$(srcdir)"/analyzer/* \
          | "$(srcdir)"/diagnostics/* \
+         | "$(srcdir)"/text-art/* \
          | "$(srcdir)"/config/* | "$(srcdir)"/common/config/* \
          | "$(srcdir)"/c-family/* | "$(srcdir)"/*.def ) \
            base=`echo "$$path" | sed -e "s|$$srcdirstrip/||"`;; \
diff --git a/gcc/testsuite/g++.dg/plugin/plugin.exp 
b/gcc/testsuite/g++.dg/plugin/plugin.exp
index 9410fea6d7d9..2615f31158cb 100644
--- a/gcc/testsuite/g++.dg/plugin/plugin.exp
+++ b/gcc/testsuite/g++.dg/plugin/plugin.exp
@@ -19,12 +19,10 @@
 load_lib target-supports.exp
 load_lib g++-dg.exp
 
-global TESTING_IN_BUILD_TREE
 global ENABLE_PLUGIN
 
-# The plugin testcases currently only work when the build tree is available.
-# Also check whether the host supports plugins.
-if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
+# Check whether the host supports plugins.
+if { ![info exists ENABLE_PLUGIN] } {
     return
 }
 
diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp 
b/gcc/testsuite/gcc.dg/plugin/plugin.exp
index 83ef1b2dd939..9894b4a46157 100644
--- a/gcc/testsuite/gcc.dg/plugin/plugin.exp
+++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp
@@ -19,12 +19,10 @@
 load_lib target-supports.exp
 load_lib gcc-dg.exp
 
-global TESTING_IN_BUILD_TREE
 global ENABLE_PLUGIN
 
-# The plugin testcases currently only work when the build tree is available.
-# Also check whether the host supports plugins.
-if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
+# Check whether the host supports plugins.
+if { ![info exists ENABLE_PLUGIN] } {
     return
 }
 
diff --git a/gcc/testsuite/lib/plugin-support.exp 
b/gcc/testsuite/lib/plugin-support.exp
index 9188adbdf2f7..b2e76a799314 100644
--- a/gcc/testsuite/lib/plugin-support.exp
+++ b/gcc/testsuite/lib/plugin-support.exp
@@ -62,9 +62,11 @@ proc plugin-get-options { src } {
 proc plugin-test-execute { plugin_src plugin_tests } {
     global srcdir objdir
     global verbose
+    global tool
     global GMPINC
     global PLUGINCC
     global PLUGINCFLAGS
+    global TESTING_IN_BUILD_TREE
 
     set basename [file tail $plugin_src]
     set base [file rootname $basename]
@@ -76,16 +78,17 @@ proc plugin-test-execute { plugin_src plugin_tests } {
     # Build the plugin itself
     set extra_flags [plugin-get-options $plugin_src]
 
-    # Note that the plugin test support currently only works when the GCC
-    # build tree is available. (We make sure that is the case in plugin.exp.)
-    # Once we have figured out how/where to package/install GCC header files
-    # for general plugin support, we should modify the following include paths
-    # accordingly.
-    set gcc_srcdir "$srcdir/../.."
-    set gcc_objdir "$objdir/../../.."
-    set includes "-I. -I${srcdir} -I${gcc_srcdir}/gcc -I${gcc_objdir}/gcc \
+    if { [info exists TESTING_IN_BUILD_TREE] } {
+       set gcc_srcdir "$srcdir/../.."
+       set gcc_objdir "$objdir/../../.."
+       set includes "-I. -I${srcdir} -I${gcc_srcdir}/gcc -I${gcc_objdir}/gcc \
                   -I${gcc_srcdir}/include -I${gcc_srcdir}/libcpp/include \
                   $GMPINC -I${gcc_objdir}/gettext/intl"
+    } else {
+       set options [list "additional_flags=-print-file-name=plugin/include"]
+       set plugin_inc [lindex [${tool}_target_compile "" "" "none" $options] 0]
+       set includes "-I. -I${srcdir} -I${plugin_inc} $GMPINC"
+    }
 
     if { [ ishost *-*-darwin* ] } {
        # -mdynamic-no-pic is incompatible with -fPIC.
diff --git a/gcc/testsuite/obj-c++.dg/plugin/plugin.exp 
b/gcc/testsuite/obj-c++.dg/plugin/plugin.exp
index ad2ca18bf20b..1de7df886c02 100644
--- a/gcc/testsuite/obj-c++.dg/plugin/plugin.exp
+++ b/gcc/testsuite/obj-c++.dg/plugin/plugin.exp
@@ -19,12 +19,10 @@
 load_lib target-supports.exp
 load_lib obj-c++-dg.exp
 
-global TESTING_IN_BUILD_TREE
 global ENABLE_PLUGIN
 
-# The plugin testcases currently only work when the build tree is available.
-# Also check whether the host supports plugins.
-if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
+# Check whether the host supports plugins.
+if { ![info exists ENABLE_PLUGIN] } {
     return
 }
 
diff --git a/gcc/testsuite/objc.dg/plugin/plugin.exp 
b/gcc/testsuite/objc.dg/plugin/plugin.exp
index d03ec729aa7e..a508a433fcf2 100644
--- a/gcc/testsuite/objc.dg/plugin/plugin.exp
+++ b/gcc/testsuite/objc.dg/plugin/plugin.exp
@@ -19,12 +19,10 @@
 load_lib target-supports.exp
 load_lib objc-dg.exp
 
-global TESTING_IN_BUILD_TREE
 global ENABLE_PLUGIN
 
-# The plugin testcases currently only work when the build tree is available.
-# Also check whether the host supports plugins.
-if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
+# Check whether the host supports plugins.
+if { ![info exists ENABLE_PLUGIN] } {
     return
 }
 

-- 
Joseph S. Myers
[email protected]

Reply via email to