- requires (string)
+ encoding (string)
- A list of names of extensions that this extension depends on,
- for example requires = 'foo, bar'. Those
- extensions must be installed before this one can be installed.
+ The character set encoding used by the script file(s). This should
+ be specified if the script files contain any non-ASCII characters.
+ Otherwise the files will be assumed to be in the database encoding.
- encoding (string)
+ module_pathname (string)
- The character set encoding used by the script file(s). This should
- be specified if the script files contain any non-ASCII characters.
- Otherwise the files will be assumed to be in the database encoding.
+ The value of this parameter will be substituted for each occurrence
+ of MODULE_PATHNAME> in the script file(s). If it is not
+ set, no substitution is made. Typically, this is set to
+ $libdir/shared_library_name> and
+ then MODULE_PATHNAME> is used in CREATE
+ FUNCTION> commands for C-language functions, so that the script
+ files do not need to hard-wire the name of the shared library.
+
+
+
+
+
+ requires (string)
+
+ A list of names of extensions that this extension depends on,
+ for example requires = 'foo, bar'. Those
+ extensions must be installed before this one can be installed.
char *name; /* name of the extension */
char *directory; /* directory for script files */
char *default_version; /* default install target version, if any */
+ char *module_pathname; /* string to substitute for MODULE_PATHNAME */
char *comment; /* comment, if any */
char *schema; /* target schema (allowed if !relocatable) */
bool relocatable; /* is ALTER EXTENSION SET SCHEMA supported? */
control->default_version = pstrdup(item->value);
}
+ else if (strcmp(item->name, "module_pathname") == 0)
+ {
+ control->module_pathname = pstrdup(item->value);
+ }
else if (strcmp(item->name, "comment") == 0)
{
control->comment = pstrdup(item->value);
CStringGetTextDatum(sql),
CStringGetTextDatum("@extschema@"),
CStringGetTextDatum(qSchemaName))));
+ }
+ /*
+ * If module_pathname was set in the control file, substitute its
+ * value for occurrences of MODULE_PATHNAME.
+ */
+ if (control->module_pathname)
+ {
+ sql = text_to_cstring(
+ DatumGetTextPP(
+ DirectFunctionCall3(replace_text,
+ CStringGetTextDatum(sql),
+ CStringGetTextDatum("MODULE_PATHNAME"),
+ CStringGetTextDatum(control->module_pathname))));
}
execute_sql_string(sql, filename);