Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Clean up installation directory choices for extensions.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Feb 2011 03:53:43 +0000 (22:53 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Feb 2011 03:53:43 +0000 (22:53 -0500)
Arrange for the control files to be in $SHAREDIR/extension not
$SHAREDIR/contrib, since we're generally trying to deprecate the term
"contrib" and this is a once-in-many-moons opportunity to get rid of it in
install paths.  Fix PGXS to install the $EXTENSION file into that directory
no matter what MODULEDIR is set to; a nondefault MODULEDIR should only
affect the script and secondary extension files.  Fix the control file
directory parameter to be interpreted relative to $SHAREDIR, to avoid a
surprising disconnect between how you specify that and what you set
MODULEDIR to.

Per discussion with David Wheeler.

doc/src/sgml/extend.sgml
doc/src/sgml/ref/create_extension.sgml
src/backend/commands/extension.c
src/makefiles/pgxs.mk

index 93bcba9a10cfb299074747eca8052e9451f1f05e..90248e59e78fec8f5fdff985c6b5813d87974a5e 100644 (file)
      The <xref linkend="sql-createextension"> command relies on a control
      file for each extension, which must be named the same as the extension
      with a suffix of <literal>.control</>, and must be placed in the
-     installation's <literal>SHAREDIR/contrib</literal> directory.  There
+     installation's <literal>SHAREDIR/extension</literal> directory.  There
      must also be at least one <acronym>SQL</> script file, which follows the
      naming pattern
      <literal><replaceable>extension</>-<replaceable>version</>.sql</literal>
      (for example, <literal>foo-1.0.sql</> for version <literal>1.0</> of
      extension <literal>foo</>).  By default, the script file(s) are also
-     placed in the <literal>SHAREDIR/contrib</literal> directory; but the
+     placed in the <literal>SHAREDIR/extension</literal> directory; but the
      control file can specify a different directory for the script file(s).
     </para>
 
        <para>
         The directory containing the extension's <acronym>SQL</> script
         file(s).  Unless an absolute path is given, the name is relative to
-        the <literal>SHAREDIR/contrib</literal> directory.
+        the installation's <literal>SHAREDIR</literal> directory.  The
+        default behavior is equivalent to specifying
+        <literal>directory = 'extension'</>.
        </para>
       </listitem>
      </varlistentry>
@@ -905,23 +907,26 @@ include $(PGXS)
 
     <variablelist>
      <varlistentry>
-      <term><varname>MODULEDIR</varname></term>
+      <term><varname>EXTENSION</varname></term>
       <listitem>
        <para>
-        subdirectory into which EXTENSION, DATA and DOCS files should be
-        installed (if not set, default is <literal>contrib</literal>)
+        extension name(s); for each name you must provide an
+        <literal><replaceable>extension</replaceable>.control</literal> file,
+        which will be installed into
+        <literal><replaceable>prefix</replaceable>/share/extension</literal>
        </para>
       </listitem>
      </varlistentry>
 
      <varlistentry>
-      <term><varname>EXTENSION</varname></term>
+      <term><varname>MODULEDIR</varname></term>
       <listitem>
        <para>
-        extension name(s); for each name you must provide an
-        <literal><replaceable>extension</replaceable>.control</literal> file,
-        which will be installed into
-        <literal><replaceable>prefix</replaceable>/share/$MODULEDIR</literal>
+        subdirectory of <literal><replaceable>prefix</>/share</literal>
+        into which DATA and DOCS files should be installed
+        (if not set, default is <literal>extension</literal> if
+        <varname>EXTENSION</varname> is set,
+        or <literal>contrib</literal> if not)
        </para>
       </listitem>
      </varlistentry>
index 9e0e3c440b6d7b11461a095372c53cdbb327f0ef..d3b5fb009b34f1ba821b3cceefdb86d9c7920ab5 100644 (file)
@@ -67,7 +67,7 @@ CREATE EXTENSION <replaceable class="parameter">extension_name</replaceable>
         The name of the extension to be
         installed. <productname>PostgreSQL</productname> will create the
         extension using details from the file
-        <literal>SHAREDIR/contrib/</literal><replaceable class="parameter">extension</replaceable><literal>.control</literal>.
+        <literal>SHAREDIR/extension/</literal><replaceable class="parameter">extension_name</replaceable><literal>.control</literal>.
        </para>
       </listitem>
      </varlistentry>
index 5d8b36b0966962048221380e5b6f5bfd788c0e1c..702f24a35d5050715a5188ba576027799ad27905 100644 (file)
@@ -278,7 +278,7 @@ get_extension_control_directory(void)
 
    get_share_path(my_exec_path, sharepath);
    result = (char *) palloc(MAXPGPATH);
-   snprintf(result, MAXPGPATH, "%s/contrib", sharepath);
+   snprintf(result, MAXPGPATH, "%s/extension", sharepath);
 
    return result;
 }
@@ -291,7 +291,7 @@ get_extension_control_filename(const char *extname)
 
    get_share_path(my_exec_path, sharepath);
    result = (char *) palloc(MAXPGPATH);
-   snprintf(result, MAXPGPATH, "%s/contrib/%s.control",
+   snprintf(result, MAXPGPATH, "%s/extension/%s.control",
             sharepath, extname);
 
    return result;
@@ -305,7 +305,7 @@ get_extension_script_directory(ExtensionControlFile *control)
 
    /*
     * The directory parameter can be omitted, absolute, or relative to the
-    * control-file directory.
+    * installation's share directory.
     */
    if (!control->directory)
        return get_extension_control_directory();
@@ -315,8 +315,7 @@ get_extension_script_directory(ExtensionControlFile *control)
 
    get_share_path(my_exec_path, sharepath);
    result = (char *) palloc(MAXPGPATH);
-    snprintf(result, MAXPGPATH, "%s/contrib/%s",
-            sharepath, control->directory);
+    snprintf(result, MAXPGPATH, "%s/%s", sharepath, control->directory);
 
    return result;
 }
index 655c5f9e3828a7cd75277a23c830a3f87256d6a2..412bf5c93010e896c77f817db6a2eb567bc5abf1 100644 (file)
 #
 # The following variables can also be set:
 #
-#   MODULEDIR -- subdirectory into which EXTENSION, DATA and DOCS files
-#     should be installed (if not set, default is "contrib")
 #   EXTENSION -- name of extension (there must be a $EXTENSION.control file)
+#   MODULEDIR -- subdirectory of $PREFIX/share into which DATA and DOCS files
+#     should be installed (if not set, default is "extension" if EXTENSION
+#     is set, or "contrib" if not)
 #   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
@@ -72,11 +73,16 @@ override CFLAGS += $(CFLAGS_SL)
 endif
 
 ifdef MODULEDIR
-datamoduledir = $(MODULEDIR)
-docmoduledir = $(MODULEDIR)
+datamoduledir := $(MODULEDIR)
+docmoduledir := $(MODULEDIR)
 else
-datamoduledir = contrib
-docmoduledir = contrib
+ifdef EXTENSION
+datamoduledir := extension
+docmoduledir := extension
+else
+datamoduledir := contrib
+docmoduledir := contrib
+endif
 endif
 
 ifdef PG_CPPFLAGS
@@ -96,8 +102,14 @@ endif # MODULE_big
 
 
 install: all installdirs
-ifneq (,$(DATA)$(DATA_built)$(EXTENSION))
-   @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built) $(addsuffix .control, $(EXTENSION)); do \
+ifneq (,$(EXTENSION))
+   @for file in $(addprefix $(srcdir)/, $(addsuffix .control, $(EXTENSION))); do \
+     echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/extension'"; \
+     $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/extension'; \
+   done
+endif # EXTENSION
+ifneq (,$(DATA)$(DATA_built))
+   @for file in $(addprefix $(srcdir)/, $(DATA)) $(DATA_built); do \
      echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'"; \
      $(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/$(datamoduledir)'; \
    done
@@ -168,8 +180,11 @@ endif # MODULE_big
 
 
 uninstall:
-ifneq (,$(DATA)$(DATA_built)$(EXTENSION))
-   rm -f $(addprefix '$(DESTDIR)$(datadir)/$(datamoduledir)'/, $(notdir $(DATA) $(DATA_built) $(addsuffix .control, $(EXTENSION))))
+ifneq (,$(EXTENSION))
+   rm -f $(addprefix '$(DESTDIR)$(datadir)/extension'/, $(notdir $(addsuffix .control, $(EXTENSION))))
+endif
+ifneq (,$(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)))