This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

export more plugin headers


Hi,
This patch exports enough headers such that my plugin can compile without using the build directory. The hard part was figuring out how to export C++ headers.


Joseph, thanks explaining how to add a new target to language makefiles.

2009-06-22  Taras Glek  <tglek@mozilla.com>
b/gcc/ChangeLog
   * doc/sourcebuild.texi: Document install-plugin target.
   * configure.ac: Added install-plugin target to language makefiles.
   * Makefile.in: (install-plugin): Install more headers,
   depend on lang.install-plugin.

b/gcc/ada/ChangeLog
   * gcc-interface/Make-lang.in (ada.install-plugin): New target for
   installing plugin headers.

b/gcc/cp/ChangeLog
   * Make-lang.in: Added CP_PLUGIN_HEADERS ands c.install-target to
   export cp-tree.h cxx-pretty-print.h name-lookup.h headers for plugins.

b/gcc/fortran/ChangeLog
   * Make-lang.in (fortran.install-plugin): New target for installing
   plugin headers.

b/gcc/java/ChangeLog
   * Make-lang.in (java.install-plugin): New target for
   installing plugin headers.

b/gcc/objc/ChangeLog
   * Make-lang.in (objc.install-plugin): New target for
   installing plugin headers.

b/gcc/objcp/ChangeLog
   * Make-lang.in (obj-c.install-plugin): New target for
   installing plugin headers.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -4042,10 +4042,11 @@ installdirs:
 
 PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
   $(TOPLEV_H) $(BASIC_BLOCK_H) $(GIMPLE_H) $(TREE_PASS_H) $(GCC_PLUGIN_H) \
-  intl.h $(PLUGIN_VERSION_H)
+  intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) $(C_COMMON_H) $(C_PRETTY_PRINT_H) \
+  tree-iterator.h $(PLUGIN_H) $(TREE_FLOW_H) langhooks.h
 
 # Install the headers needed to build a plugin.
-install-plugin: installdirs
+install-plugin: installdirs lang.install-plugin
 # We keep the directory structure for files in config and .def files. All
 # other files are flattened to a single directory.
 	$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -715,6 +715,7 @@ install-gnatlib-obj:
 	$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib-obj
 
 ada.install-man:
+ada.install-plugin:
 
 ada.uninstall:
 	-$(RM) $(DESTDIR)$(bindir)/gnatbind$(exeext)
diff --git a/gcc/configure.ac b/gcc/configure.ac
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3893,7 +3893,7 @@ touch Make-hooks
 target_list="all.cross start.encap rest.encap tags \
 	install-common install-man install-info install-pdf dvi pdf \
 	html uninstall info man srcextra srcman srcinfo \
-	mostlyclean clean distclean maintainer-clean"
+	mostlyclean clean distclean maintainer-clean install-plugin"
 
 for t in $target_list
 do
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -41,6 +41,7 @@ CXX_INSTALL_NAME := $(shell echo c++|sed
 GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)')
 CXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo c++|sed '$(program_transform_name)')
 GXX_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo g++|sed '$(program_transform_name)')
+CP_PLUGIN_HEADERS := cp-tree.h cxx-pretty-print.h name-lookup.h
 
 #
 # Define the names for selecting c++ in LANGUAGES.
@@ -189,6 +190,24 @@ c++.install-man: $(DESTDIR)$(man1dir)/$(
 	-$(INSTALL_DATA) $< $@
 	-chmod a-x $@
 
+c++.install-plugin: installdirs
+# We keep the directory structure for files in config and .def files. All
+# other files are flattened to a single directory.
+	headers=`echo $(CP_PLUGIN_HEADERS) | tr ' ' '\n' | sort -u`; \
+	for file in $$headers; do \
+	  if [ -f $$file ] ; then \
+	    path=$$file; \
+	  elif [ -f $(srcdir)/cp/$$file ]; then \
+	    path=$(srcdir)/cp/$$file; \
+	  else continue; \
+	  fi; \
+	  dest=$(plugin_includedir)/$$file; \
+	  echo $(INSTALL_DATA) $$path $(DESTDIR)/$$dest; \
+	  dir=`dirname $$dest`; \
+	  $(mkinstalldirs) $$dir; \
+	  $(INSTALL_DATA) $$path $(DESTDIR)/$$dest; \
+	done
+
 c++.uninstall:
 	-rm -rf $(DESTDIR)$(bindir)/$(CXX_INSTALL_NAME)$(exeext)
 	-rm -rf $(DESTDIR)$(bindir)/$(GXX_INSTALL_NAME)$(exeext)
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -615,6 +615,8 @@ that should be installed.
 @item install-man
 Install man pages for the front end.  This target should ignore
 errors.
+@item install-plugin
+Install headers needed for plugins.
 @item srcextra
 Copies its dependencies into the source directory.  This generally should
 be used for generated files such as Bison output files which are not
diff --git a/gcc/fortran/Make-lang.in b/gcc/fortran/Make-lang.in
--- a/gcc/fortran/Make-lang.in
+++ b/gcc/fortran/Make-lang.in
@@ -234,6 +234,8 @@ fortran.install-common: install-finclude
 	  fi ; \
 	fi
 
+fortran.install-plugin:
+
 fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info
 
 fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)
diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in
--- a/gcc/java/Make-lang.in
+++ b/gcc/java/Make-lang.in
@@ -180,6 +180,7 @@ java.install-common: installdirs
           fi ; \
        done
 
+java.install-plugin:
 java.install-man:
 
 java.uninstall:
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -98,6 +98,7 @@ objc.html:
 objc.man:
 objc.srcinfo:
 objc.srcman:
+objc.install-plugin:
 
 objc.tags: force
 	cd $(srcdir)/objc; etags -o TAGS.sub *.c *.h; \
diff --git a/gcc/objcp/Make-lang.in b/gcc/objcp/Make-lang.in
--- a/gcc/objcp/Make-lang.in
+++ b/gcc/objcp/Make-lang.in
@@ -107,6 +107,7 @@ obj-c++.html:
 obj-c++.srcinfo:
 obj-c++.srcextra:
 obj-c++.man:
+obj-c++.install-plugin:
 
 obj-c++.tags: force
 	cd $(srcdir)/objcp; etags -o TAGS.sub *.y *.c *.h; \

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]