Improve PGXS makefile system to allow the module's makefile to specify
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 4 Jan 2010 16:34:11 +0000 (16:34 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 4 Jan 2010 16:34:11 +0000 (16:34 +0000)
where to install DATA and DOCS files.  This is mainly intended to allow
versioned installation, eg, install into contrib/fooM.N/ rather than
directly into contrib/.

Mark Cave-Ayland

doc/src/sgml/xfunc.sgml
src/makefiles/pgxs.mk

index d8caa9893d6908fe202f32bb3465ea29744263f9..93f880cc63ee7cfd538cb1f48126802658884626 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.143 2009/12/10 06:32:28 petere Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.144 2010/01/04 16:34:11 tgl Exp $ -->
 
  <sect1 id="xfunc">
   <title>User-Defined Functions</title>
@@ -2414,105 +2414,122 @@ include $(PGXS)
    </para>
 
    <para>
-    The following variables can be set:
+    Set one of these three variables to specify what is built:
 
     <variablelist>
      <varlistentry>
       <term><varname>MODULES</varname></term>
       <listitem>
        <para>
-        list of shared objects to be built from source file with same
+        list of shared objects to be built from source files with same
         stem (do not include suffix in this list)
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>DATA</varname></term>
+      <term><varname>MODULE_big</varname></term>
       <listitem>
        <para>
-        random files to install into <literal><replaceable>prefix</replaceable>/share/contrib</literal>
+        a shared object to build from multiple source files
+        (list object files in <varname>OBJS</varname>)
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>DATA_built</varname></term>
+      <term><varname>PROGRAM</varname></term>
       <listitem>
        <para>
-        random files to install into
-        <literal><replaceable>prefix</replaceable>/share/contrib</literal>,
-        which need to be built first
+        a binary program to build
+        (list object files in <varname>OBJS</varname>)
        </para>
       </listitem>
      </varlistentry>
+    </variablelist>
 
+    The following variables can also be set:
+
+    <variablelist>
      <varlistentry>
-      <term><varname>DOCS</varname></term>
+      <term><varname>MODULEDIR</varname></term>
       <listitem>
        <para>
-        random files to install under
-        <literal><replaceable>prefix</replaceable>/doc/contrib</literal>
+        subdirectory into which DATA and DOCS files should be
+        installed (if not set, default is <literal>contrib</literal>)
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>SCRIPTS</varname></term>
+      <term><varname>DATA</varname></term>
       <listitem>
        <para>
-        script files (not binaries) to install into
-        <literal><replaceable>prefix</replaceable>/bin</literal>
+        random files to install into <literal><replaceable>prefix</replaceable>/share/$MODULEDIR</literal>
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>SCRIPTS_built</varname></term>
+      <term><varname>DATA_built</varname></term>
       <listitem>
        <para>
-        script files (not binaries) to install into
-        <literal><replaceable>prefix</replaceable>/bin</literal>,
+        random files to install into
+        <literal><replaceable>prefix</replaceable>/share/$MODULEDIR</literal>,
         which need to be built first
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>REGRESS</varname></term>
+      <term><varname>DATA_TSEARCH</varname></term>
       <listitem>
        <para>
-        list of regression test cases (without suffix), see below
+        random files to install under
+        <literal><replaceable>prefix</replaceable>/share/tsearch_data</literal>
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
 
-    or at most one of these two:
-
-    <variablelist>
      <varlistentry>
-      <term><varname>PROGRAM</varname></term>
+      <term><varname>DOCS</varname></term>
       <listitem>
        <para>
-        a binary program to build (list objects files in <varname>OBJS</varname>)
+        random files to install under
+        <literal><replaceable>prefix</replaceable>/doc/$MODULEDIR</literal>
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>MODULE_big</varname></term>
+      <term><varname>SCRIPTS</varname></term>
       <listitem>
        <para>
-        a shared object to build (list object files in <varname>OBJS</varname>)
+        script files (not binaries) to install into
+        <literal><replaceable>prefix</replaceable>/bin</literal>
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
 
-    The following can also be set:
+     <varlistentry>
+      <term><varname>SCRIPTS_built</varname></term>
+      <listitem>
+       <para>
+        script files (not binaries) to install into
+        <literal><replaceable>prefix</replaceable>/bin</literal>,
+        which need to be built first
+       </para>
+      </listitem>
+     </varlistentry>
 
-    <variablelist>
+     <varlistentry>
+      <term><varname>REGRESS</varname></term>
+      <listitem>
+       <para>
+        list of regression test cases (without suffix), see below
+       </para>
+      </listitem>
+     </varlistentry>
 
      <varlistentry>
       <term><varname>EXTRA_CLEAN</varname></term>
index f950a717aedc1deeab05b798f5f466cc6df8ca2a..db89546b0376996b3f1c2fd33faa6863e15094a5 100644 (file)
@@ -1,6 +1,6 @@
 # PGXS: PostgreSQL extensions makefile
 
-# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.17 2009/08/26 22:24:43 petere Exp $ 
+# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.18 2010/01/04 16:34:11 tgl Exp $ 
 
 # This file contains generic rules to build many kinds of simple
 # extension modules.  You only need to set a few variables and include
 #   PGXS := $(shell $(PG_CONFIG) --pgxs)
 #   include $(PGXS)
 #
-# The following variables can be set:
+# Set one of these three variables to specify what is built:
 #
-#   MODULES -- list of shared objects to be build from source file with
+#   MODULES -- list of shared objects to be built from source files with
 #     same stem (do not include suffix in this list)
-#   DATA -- random files to install into $PREFIX/share/contrib
-#   DATA_built -- random files to install into $PREFIX/share/contrib,
+#   MODULE_big -- a shared object to build from multiple source files
+#     (list object files in OBJS)
+#   PROGRAM -- a binary program to build (list object files in OBJS)
+#
+# The following variables can also be set:
+#
+#   MODULEDIR -- subdirectory into which DATA and DOCS files should be
+#     installed (if not set, default is "contrib")
+#   DATA -- random files to install into $PREFIX/share/$MODULEDIR
+#   DATA_built -- random files to install into $PREFIX/share/$MODULEDIR,
 #     which need to be built first
 #   DATA_TSEARCH -- random files to install into $PREFIX/share/tsearch_data
-#   DOCS -- random files to install under $PREFIX/doc/contrib
+#   DOCS -- random files to install under $PREFIX/doc/$MODULEDIR
 #   SCRIPTS -- script files (not binaries) to install into $PREFIX/bin
 #   SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin,
 #     which need to be built first
 #   REGRESS -- list of regression test cases (without suffix)
-#
-# or at most one of these two:
-#
-#   PROGRAM -- a binary program to build (list objects files in OBJS)
-#   MODULE_big -- a shared object to build (list object files in OBJS)
-#
-# The following can also be set:
-#
 #   EXTRA_CLEAN -- extra files to remove in 'make clean'
 #   PG_CPPFLAGS -- will be added to CPPFLAGS
 #   PG_LIBS -- will be added to PROGRAM link line
@@ -71,6 +71,14 @@ override CFLAGS += $(CFLAGS_SL)
 SHLIB_LINK += $(BE_DLLLIBS)
 endif
 
+ifdef MODULEDIR
+datamoduledir = $(MODULEDIR)
+docmoduledir = $(MODULEDIR)
+else
+datamoduledir = contrib
+docmoduledir = contrib
+endif
+
 ifdef PG_CPPFLAGS
 override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS)
 endif
@@ -90,8 +98,8 @@ endif # MODULE_big
 install: all installdirs
 ifneq (,$(DATA)$(DATA_built))
    @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \
-     echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/contrib'"; \
-     $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/contrib'; \
+     echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'"; \
+     $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'; \
    done
 endif # DATA
 ifneq (,$(DATA_TSEARCH))
@@ -109,8 +117,8 @@ endif # MODULES
 ifdef DOCS
 ifdef docdir
    @for file in $(addprefix $(srcdir)/, $(DOCS)); do \
-     echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/contrib'"; \
-     $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/contrib'; \
+     echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'"; \
+     $(INSTALL_DATA) $$file '$(DESTDIR)$(docdir)/$(docmoduledir)'; \
    done
 endif # docdir
 endif # DOCS
@@ -137,7 +145,7 @@ endif # MODULE_big
 
 installdirs:
 ifneq (,$(DATA)$(DATA_built))
-   $(MKDIR_P) '$(DESTDIR)$(datadir)/contrib'
+   $(MKDIR_P) '$(DESTDIR)$(datadir)/$(datamoduledir)'
 endif
 ifneq (,$(DATA_TSEARCH))
    $(MKDIR_P) '$(DESTDIR)$(datadir)/tsearch_data'
@@ -147,7 +155,7 @@ ifneq (,$(MODULES))
 endif
 ifdef DOCS
 ifdef docdir
-   $(MKDIR_P) '$(DESTDIR)$(docdir)/contrib'
+   $(MKDIR_P) '$(DESTDIR)$(docdir)/$(docmoduledir)'
 endif # docdir
 endif # DOCS
 ifneq (,$(PROGRAM)$(SCRIPTS)$(SCRIPTS_built))
@@ -161,16 +169,16 @@ endif # MODULE_big
 
 uninstall:
 ifneq (,$(DATA)$(DATA_built))
-   rm -f $(addprefix '$(DESTDIR)$(datadir)'/contrib/, $(notdir $(DATA) $(DATA_built)))
+   rm -f $(addprefix '$(DESTDIR)$(datadir)/$(datamoduledir)'/, $(notdir $(DATA) $(DATA_built)))
 endif
 ifneq (,$(DATA_TSEARCH))
-   rm -f $(addprefix '$(DESTDIR)$(datadir)'/tsearch_data/, $(notdir $(DATA_TSEARCH)))
+   rm -f $(addprefix '$(DESTDIR)$(datadir)/tsearch_data'/, $(notdir $(DATA_TSEARCH)))
 endif
 ifdef MODULES
    rm -f $(addprefix '$(DESTDIR)$(pkglibdir)'/, $(addsuffix $(DLSUFFIX), $(MODULES)))
 endif
 ifdef DOCS
-   rm -f $(addprefix '$(DESTDIR)$(docdir)'/contrib/, $(DOCS))
+   rm -f $(addprefix '$(DESTDIR)$(docdir)/$(docmoduledir)'/, $(DOCS))
 endif
 ifdef PROGRAM
    rm -f '$(DESTDIR)$(bindir)/$(PROGRAM)$(X)'