Peter Eisentraut wrote: > On 11/27/14 3:10 PM, Tom Lane wrote: > > I'm not too happy with that approach, because packagers are going to > > tend to think they should package any files installed by install-world. > > The entire point of this change, IMO, is that the test modules should > > *not* get installed, certainly not by normal install targets. Being > > consistent with the existing contrib packaging is exactly not what we > > want. > > I share this objection.
Okay, the attached version does it that way. I also attach some changes for the MSVC build stuff. I tested it and it builds fine AFAICT, but it doesn't install because Install.pm wants to install contrib modules from contrib/ (which seems reasonable) but my hack adds the src/test/modules/ as contrib modules also, so Install.pm goes bonkers. I'm not even sure *what* we're supposed to build -- there is no distinction in these programs as there is in the makefiles about what to install. So if some Windows developer can look into this, I'd appreciate it. > But the existing main regression tests are able to run against an > existing installation while using the modules autoinc.so and refint.so > without installing them. I think the problem is that we are able to > load a .so file from just about anywhere, but we can't load a full > extension in the same way. There have been discussions about that, in > the context of being able to test an externally developed extension > before/without installing it. This is pretty much the same case. I'm leaving that problem for someone else to solve. Andres Freund wrote: > On 2014-11-27 15:51:51 -0500, Tom Lane wrote: > > > > If we follow that reasoning we'll end up removing nothing from contrib. > > There is no reason that end users should need to be performing such > > testing; anyone who does have reason to do it will have a source tree > > at hand. > > Actually I don't think that's true for test_decoding - there's quite a > bit of actual things that you can do with it. At the very least it's > useful to roughly measure the impact logical replication would have on a > database, but it's also helpful to look at the changes. And even if the > format isn't super nice, thanks to Robert's insistence it's actually > safely parseable if necessary. Argh. Okay, the attached doesn't move test_decoding either. I think it's fine anyway -- I'm sure we will come up with a few additional test modules, such as the one for the commit_ts patch. -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
commit be4885b5ee0308909bf896298b47acbf84b38606 Author: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Fri Nov 28 17:41:29 2014 -0300 Move test modules from contrib to src/test/modules This is advance preparation for introducing even more test modules; the easy solution is to add them to contrib, but that's bloated enough that it seems a good time to think of something different. Moved modules are dummy_seclabel, test_shm_mq, test_parser and worker_spi. (test_decoding was also a candidate, but there was too much opposition to moving that one. We can always reconsider later.) diff --git a/contrib/Makefile b/contrib/Makefile index b37d0dd..195d447 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -16,7 +16,6 @@ SUBDIRS = \ dblink \ dict_int \ dict_xsyn \ - dummy_seclabel \ earthdistance \ file_fdw \ fuzzystrmatch \ @@ -51,12 +50,9 @@ SUBDIRS = \ tablefunc \ tcn \ test_decoding \ - test_parser \ - test_shm_mq \ tsearch2 \ unaccent \ - vacuumlo \ - worker_spi + vacuumlo ifeq ($(with_openssl),yes) SUBDIRS += sslinfo diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml index ec68f10..a698d0f 100644 --- a/doc/src/sgml/contrib.sgml +++ b/doc/src/sgml/contrib.sgml @@ -113,7 +113,6 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged; &dblink; &dict-int; &dict-xsyn; - &dummy-seclabel; &earthdistance; &file-fdw; &fuzzystrmatch; @@ -141,8 +140,6 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged; &tablefunc; &tcn; &test-decoding; - &test-parser; - &test-shm-mq; &tsearch2; &unaccent; &uuid-ossp; diff --git a/doc/src/sgml/dummy-seclabel.sgml b/doc/src/sgml/dummy-seclabel.sgml deleted file mode 100644 index d064705..0000000 --- a/doc/src/sgml/dummy-seclabel.sgml +++ /dev/null @@ -1,74 +0,0 @@ -<!-- doc/src/sgml/dummy-seclabel.sgml --> - -<sect1 id="dummy-seclabel" xreflabel="dummy_seclabel"> - <title>dummy_seclabel</title> - - <indexterm zone="dummy-seclabel"> - <primary>dummy_seclabel</primary> - </indexterm> - - <para> - The <filename>dummy_seclabel</> module exists only to support regression - testing of the <command>SECURITY LABEL</> statement. It is not intended - to be used in production. - </para> - - <sect2> - <title>Rationale</title> - - <para> - The <command>SECURITY LABEL</> statement allows the user to assign security - labels to database objects; however, security labels can only be assigned - when specifically allowed by a loadable module, so this module is provided - to allow proper regression testing. - </para> - - <para> - Security label providers intended to be used in production will typically be - dependent on a platform-specific feature such as - <productname>SE-Linux</productname>. This module is platform-independent, - and therefore better-suited to regression testing. - </para> - </sect2> - - <sect2> - <title>Usage</title> - - <para> - Here's a simple example of usage: - </para> - -<programlisting> -# postgresql.conf -shared_preload_libraries = 'dummy_seclabel' -</programlisting> - -<programlisting> -postgres=# CREATE TABLE t (a int, b text); -CREATE TABLE -postgres=# SECURITY LABEL ON TABLE t IS 'classified'; -SECURITY LABEL -</programlisting> - - <para> - The <filename>dummy_seclabel</> module provides only four hardcoded - labels: <literal>unclassified</>, <literal>classified</>, - <literal>secret</>, and <literal>top secret</>. - It does not allow any other strings as security labels. - </para> - <para> - These labels are not used to enforce access controls. They are only used - to check whether the <command>SECURITY LABEL</> statement works as expected, - or not. - </para> - </sect2> - - <sect2> - <title>Author</title> - - <para> - KaiGai Kohei <email>kai...@ak.jp.nec.com</email> - </para> - </sect2> - -</sect1> diff --git a/doc/src/sgml/ref/security_label.sgml b/doc/src/sgml/ref/security_label.sgml index 6e2bd25..998fe3b 100644 --- a/doc/src/sgml/ref/security_label.sgml +++ b/doc/src/sgml/ref/security_label.sgml @@ -207,7 +207,7 @@ SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_ <title>See Also</title> <simplelist type="inline"> <member><xref linkend="sepgsql"></member> - <member><xref linkend="dummy-seclabel"></member> + <member><filename>src/test/modules/dummy_seclabel</filename></member> </simplelist> </refsect1> </refentry> diff --git a/doc/src/sgml/release-9.1.sgml b/doc/src/sgml/release-9.1.sgml index 4f86b64..79a8b07 100644 --- a/doc/src/sgml/release-9.1.sgml +++ b/doc/src/sgml/release-9.1.sgml @@ -8062,7 +8062,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10; <listitem> <para> - Add <link linkend="dummy-seclabel"><filename>dummy_seclabel</></link> + Add <filename>dummy_seclabel</> contrib module (KaiGai Kohei) </para> diff --git a/doc/src/sgml/release-9.4.sgml b/doc/src/sgml/release-9.4.sgml index a249b3f..bc9347c 100644 --- a/doc/src/sgml/release-9.4.sgml +++ b/doc/src/sgml/release-9.4.sgml @@ -503,7 +503,7 @@ </para> <para> - This feature is illustrated in <xref linkend="test-shm-mq">. + This feature is illustrated in <filename>contrib/test_shm_mq</filename>. </para> </listitem> diff --git a/doc/src/sgml/test-parser.sgml b/doc/src/sgml/test-parser.sgml deleted file mode 100644 index 28b1e91..0000000 --- a/doc/src/sgml/test-parser.sgml +++ /dev/null @@ -1,90 +0,0 @@ -<!-- doc/src/sgml/test-parser.sgml --> - -<sect1 id="test-parser" xreflabel="test_parser"> - <title>test_parser</title> - - <indexterm zone="test-parser"> - <primary>test_parser</primary> - </indexterm> - - <para> - <filename>test_parser</> is an example of a custom parser for full-text - search. It doesn't do anything especially useful, but can serve as - a starting point for developing your own parser. - </para> - - <para> - <filename>test_parser</> recognizes words separated by white space, - and returns just two token types: - -<programlisting> -mydb=# SELECT * FROM ts_token_type('testparser'); - tokid | alias | description --------+-------+--------------- - 3 | word | Word - 12 | blank | Space symbols -(2 rows) -</programlisting> - - These token numbers have been chosen to be compatible with the default - parser's numbering. This allows us to use its <function>headline()</> - function, thus keeping the example simple. - </para> - - <sect2> - <title>Usage</title> - - <para> - Installing the <literal>test_parser</> extension creates a text search - parser <literal>testparser</>. It has no user-configurable parameters. - </para> - - <para> - You can test the parser with, for example, - -<programlisting> -mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser'); - tokid | token --------+-------- - 3 | That's - 12 | - 3 | my - 12 | - 3 | first - 12 | - 3 | own - 12 | - 3 | parser -</programlisting> - </para> - - <para> - Real-world use requires setting up a text search configuration - that uses the parser. For example, - -<programlisting> -mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser ); -CREATE TEXT SEARCH CONFIGURATION - -mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg -mydb-# ADD MAPPING FOR word WITH english_stem; -ALTER TEXT SEARCH CONFIGURATION - -mydb=# SELECT to_tsvector('testcfg', 'That''s my first own parser'); - to_tsvector -------------------------------- - 'that':1 'first':3 'parser':5 -(1 row) - -mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies', -mydb(# to_tsquery('testcfg', 'star')); - ts_headline ------------------------------------------------------------------ - Supernovae <b>stars</b> are the brightest phenomena in galaxies -(1 row) -</programlisting> - </para> - - </sect2> - -</sect1> diff --git a/doc/src/sgml/test-shm-mq.sgml b/doc/src/sgml/test-shm-mq.sgml deleted file mode 100644 index dd431d0..0000000 --- a/doc/src/sgml/test-shm-mq.sgml +++ /dev/null @@ -1,71 +0,0 @@ -<!-- doc/src/sgml/test-shm-mq.sgml --> - -<sect1 id="test-shm-mq" xreflabel="test_shm_mq"> - <title>test_shm_mq</title> - - <indexterm zone="test-shm-mq"> - <primary>test_shm_mq</primary> - </indexterm> - - <para> - <filename>test_shm_mq</> is an example of how to use dynamic shared memory - and the shared memory message queue facilities to coordinate a user backend - with the efforts of one or more background workers. It is not intended to - do anything useful on its own; rather, it is a demonstration of how these - facilities can be used, and a unit test of those facilities. - </para> - - <para> - The function is this extension send the same message repeatedly through - a loop of processes. The message payload, the size of the message queue - through which it is sent, and the number of processes in the loop are - configurable. At the end, the message may be verified to ensure that it - has not been corrupted in transmission. - </para> - - <sect2> - <title>Functions</title> - -<synopsis> -test_shm_mq(queue_size int8, message text, - repeat_count int4 default 1, num_workers int4 default 1) - RETURNS void -</synopsis> - - <para> - This function sends and receives messages synchronously. The user - backend sends the provided message to the first background worker using - a message queue of the given size. The first background worker sends - the message to the second background worker, if the number of workers - is greater than one, and so forth. Eventually, the last background - worker sends the message back to the user backend. If the repeat count - is greater than one, the user backend then sends the message back to - the first worker. Once the message has been sent and received by all - the coordinating processes a number of times equal to the repeat count, - the user backend verifies that the message finally received matches the - one originally sent and throws an error if not. - </para> - -<synopsis> -test_shm_mq_pipelined(queue_size int8, message text, - repeat_count int4 default 1, num_workers int4 default 1, - verify bool default true) - RETURNS void -</synopsis> - - <para> - This function sends the same message multiple times, as specified by the - repeat count, to the first background worker using a queue of the given - size. These messages are then forwarded to each background worker in - turn, in each case using a queue of the given size. Finally, the last - background worker sends the messages back to the user backend. The user - backend uses non-blocking sends and receives, so that it may begin receiving - copies of the message before it has finished sending all copies of the - message. The <literal>verify</> argument controls whether or not the - received copies are checked against the message that was sent. (This - takes nontrivial time so it may be useful to disable it for benchmarking - purposes.) - </para> - - </sect2> -</sect1> diff --git a/src/test/Makefile b/src/test/Makefile index 0fd7eab..9238860 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -12,6 +12,14 @@ subdir = src/test top_builddir = ../.. include $(top_builddir)/src/Makefile.global -SUBDIRS = regress isolation +SUBDIRS = regress isolation modules -$(recurse) +# We want to recurse to all subdirs for all standard targets, except that +# installcheck and install should not recurse into the subdirectory "modules". + +recurse_alldirs_targets := $(filter-out installcheck install, $(standard_targets)) +installable_dirs := $(filter-out modules, $(SUBDIRS)) + +$(call recurse,$(recurse_alldirs_targets)) +$(call recurse,installcheck, $(installable_dirs)) +$(call recurse,install, $(installable_dirs)) diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile new file mode 100644 index 0000000..9d5aa97 --- /dev/null +++ b/src/test/modules/Makefile @@ -0,0 +1,13 @@ +# src/test/modules/Makefile + +subdir = src/test/modules +top_builddir = ../../.. +include $(top_builddir)/src/Makefile.global + +SUBDIRS = \ + worker_spi \ + dummy_seclabel \ + test_shm_mq \ + test_parser + +$(recurse) diff --git a/contrib/dummy_seclabel/Makefile b/src/test/modules/dummy_seclabel/Makefile similarity index 73% rename from contrib/dummy_seclabel/Makefile rename to src/test/modules/dummy_seclabel/Makefile index e69aa1f..909ac9a 100644 --- a/contrib/dummy_seclabel/Makefile +++ b/src/test/modules/dummy_seclabel/Makefile @@ -1,4 +1,4 @@ -# contrib/dummy_seclabel/Makefile +# src/test/modules/dummy_seclabel/Makefile MODULES = dummy_seclabel PGFILEDESC = "dummy_seclabel - regression testing of the SECURITY LABEL statement" @@ -8,8 +8,8 @@ PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else -subdir = contrib/dummy_seclabel -top_builddir = ../.. +subdir = src/test/modules/dummy_seclabel +top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif diff --git a/src/test/modules/dummy_seclabel/README b/src/test/modules/dummy_seclabel/README new file mode 100644 index 0000000..75320aa --- /dev/null +++ b/src/test/modules/dummy_seclabel/README @@ -0,0 +1,43 @@ +The dummy_seclabel module exists only to support regression +testing of the SECURITY LABEL statement. It is not intended +to be used in production. + +Rationale +========= + +The SECURITY LABEL statement allows the user to assign security +labels to database objects; however, security labels can only be assigned +when specifically allowed by a loadable module, so this module is provided +to allow proper regression testing. + +Security label providers intended to be used in production will typically be +dependent on a platform-specific feature such as +SE-Linux. This module is platform-independent, +and therefore better-suited to regression testing. + +Usage +===== + +Here's a simple example of usage: + +# postgresql.conf +shared_preload_libraries = 'dummy_seclabel' + +postgres=# CREATE TABLE t (a int, b text); +CREATE TABLE +postgres=# SECURITY LABEL ON TABLE t IS 'classified'; +SECURITY LABEL + +The dummy_seclabel module provides only four hardcoded +labels: unclassified, classified, +secret, and top secret. +It does not allow any other strings as security labels. + +These labels are not used to enforce access controls. They are only used +to check whether the SECURITY LABEL statement works as expected, +or not. + +Author +====== + +KaiGai Kohei <kai...@ak.jp.nec.com> diff --git a/contrib/dummy_seclabel/dummy_seclabel.c b/src/test/modules/dummy_seclabel/dummy_seclabel.c similarity index 100% rename from contrib/dummy_seclabel/dummy_seclabel.c rename to src/test/modules/dummy_seclabel/dummy_seclabel.c diff --git a/contrib/test_shm_mq/.gitignore b/src/test/modules/test_parser/.gitignore similarity index 100% rename from contrib/test_shm_mq/.gitignore rename to src/test/modules/test_parser/.gitignore diff --git a/contrib/test_parser/Makefile b/src/test/modules/test_parser/Makefile similarity index 80% rename from contrib/test_parser/Makefile rename to src/test/modules/test_parser/Makefile index 7e068ab..0c755aa 100644 --- a/contrib/test_parser/Makefile +++ b/src/test/modules/test_parser/Makefile @@ -1,4 +1,4 @@ -# contrib/test_parser/Makefile +# src/test/modules/test_parser/Makefile MODULE_big = test_parser OBJS = test_parser.o $(WIN32RES) @@ -14,8 +14,8 @@ PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else -subdir = contrib/test_parser -top_builddir = ../.. +subdir = src/test/modules/test_parser +top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif diff --git a/src/test/modules/test_parser/README b/src/test/modules/test_parser/README new file mode 100644 index 0000000..0a11ec8 --- /dev/null +++ b/src/test/modules/test_parser/README @@ -0,0 +1,61 @@ +test_parser is an example of a custom parser for full-text +search. It doesn't do anything especially useful, but can serve as +a starting point for developing your own parser. + +test_parser recognizes words separated by white space, +and returns just two token types: + +mydb=# SELECT * FROM ts_token_type('testparser'); + tokid | alias | description +-------+-------+--------------- + 3 | word | Word + 12 | blank | Space symbols +(2 rows) + +These token numbers have been chosen to be compatible with the default +parser's numbering. This allows us to use its headline() +function, thus keeping the example simple. + +Usage +===== + +Installing the test_parser extension creates a text search +parser testparser. It has no user-configurable parameters. + +You can test the parser with, for example, + +mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser'); + tokid | token +-------+-------- + 3 | That's + 12 | + 3 | my + 12 | + 3 | first + 12 | + 3 | own + 12 | + 3 | parser + +Real-world use requires setting up a text search configuration +that uses the parser. For example, + +mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser ); +CREATE TEXT SEARCH CONFIGURATION + +mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg +mydb-# ADD MAPPING FOR word WITH english_stem; +ALTER TEXT SEARCH CONFIGURATION + +mydb=# SELECT to_tsvector('testcfg', 'That''s my first own parser'); + to_tsvector +------------------------------- + 'that':1 'first':3 'parser':5 +(1 row) + +mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies', +mydb(# to_tsquery('testcfg', 'star')); + ts_headline +----------------------------------------------------------------- + Supernovae <b>stars</b> are the brightest phenomena in galaxies +(1 row) diff --git a/contrib/test_parser/expected/test_parser.out b/src/test/modules/test_parser/expected/test_parser.out similarity index 100% rename from contrib/test_parser/expected/test_parser.out rename to src/test/modules/test_parser/expected/test_parser.out diff --git a/contrib/test_parser/sql/test_parser.sql b/src/test/modules/test_parser/sql/test_parser.sql similarity index 100% rename from contrib/test_parser/sql/test_parser.sql rename to src/test/modules/test_parser/sql/test_parser.sql diff --git a/contrib/test_parser/test_parser--1.0.sql b/src/test/modules/test_parser/test_parser--1.0.sql similarity index 100% rename from contrib/test_parser/test_parser--1.0.sql rename to src/test/modules/test_parser/test_parser--1.0.sql diff --git a/contrib/test_parser/test_parser--unpackaged--1.0.sql b/src/test/modules/test_parser/test_parser--unpackaged--1.0.sql similarity index 100% rename from contrib/test_parser/test_parser--unpackaged--1.0.sql rename to src/test/modules/test_parser/test_parser--unpackaged--1.0.sql diff --git a/contrib/test_parser/test_parser.c b/src/test/modules/test_parser/test_parser.c similarity index 100% rename from contrib/test_parser/test_parser.c rename to src/test/modules/test_parser/test_parser.c diff --git a/contrib/test_parser/test_parser.control b/src/test/modules/test_parser/test_parser.control similarity index 100% rename from contrib/test_parser/test_parser.control rename to src/test/modules/test_parser/test_parser.control diff --git a/contrib/test_parser/.gitignore b/src/test/modules/test_shm_mq/.gitignore similarity index 100% rename from contrib/test_parser/.gitignore rename to src/test/modules/test_shm_mq/.gitignore diff --git a/contrib/test_shm_mq/Makefile b/src/test/modules/test_shm_mq/Makefile similarity index 79% rename from contrib/test_shm_mq/Makefile rename to src/test/modules/test_shm_mq/Makefile index e3c4054..11c4e35 100644 --- a/contrib/test_shm_mq/Makefile +++ b/src/test/modules/test_shm_mq/Makefile @@ -1,4 +1,4 @@ -# contrib/test_shm_mq/Makefile +# src/test/modules/test_shm_mq/Makefile MODULE_big = test_shm_mq OBJS = test.o setup.o worker.o $(WIN32RES) @@ -14,8 +14,8 @@ PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else -subdir = contrib/test_shm_mq -top_builddir = ../.. +subdir = src/test/modules/test_shm_mq +top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif diff --git a/src/test/modules/test_shm_mq/README b/src/test/modules/test_shm_mq/README new file mode 100644 index 0000000..641407b --- /dev/null +++ b/src/test/modules/test_shm_mq/README @@ -0,0 +1,49 @@ +test_shm_mq is an example of how to use dynamic shared memory +and the shared memory message queue facilities to coordinate a user backend +with the efforts of one or more background workers. It is not intended to +do anything useful on its own; rather, it is a demonstration of how these +facilities can be used, and a unit test of those facilities. + +The function is this extension send the same message repeatedly through +a loop of processes. The message payload, the size of the message queue +through which it is sent, and the number of processes in the loop are +configurable. At the end, the message may be verified to ensure that it +has not been corrupted in transmission. + +Functions +========= + + +test_shm_mq(queue_size int8, message text, + repeat_count int4 default 1, num_workers int4 default 1) + RETURNS void + +This function sends and receives messages synchronously. The user +backend sends the provided message to the first background worker using +a message queue of the given size. The first background worker sends +the message to the second background worker, if the number of workers +is greater than one, and so forth. Eventually, the last background +worker sends the message back to the user backend. If the repeat count +is greater than one, the user backend then sends the message back to +the first worker. Once the message has been sent and received by all +the coordinating processes a number of times equal to the repeat count, +the user backend verifies that the message finally received matches the +one originally sent and throws an error if not. + + +test_shm_mq_pipelined(queue_size int8, message text, + repeat_count int4 default 1, num_workers int4 default 1, + verify bool default true) + RETURNS void + +This function sends the same message multiple times, as specified by the +repeat count, to the first background worker using a queue of the given +size. These messages are then forwarded to each background worker in +turn, in each case using a queue of the given size. Finally, the last +background worker sends the messages back to the user backend. The user +backend uses non-blocking sends and receives, so that it may begin receiving +copies of the message before it has finished sending all copies of the +message. The 'verify' argument controls whether or not the +received copies are checked against the message that was sent. (This +takes nontrivial time so it may be useful to disable it for benchmarking +purposes.) diff --git a/contrib/test_shm_mq/expected/test_shm_mq.out b/src/test/modules/test_shm_mq/expected/test_shm_mq.out similarity index 100% rename from contrib/test_shm_mq/expected/test_shm_mq.out rename to src/test/modules/test_shm_mq/expected/test_shm_mq.out diff --git a/contrib/test_shm_mq/setup.c b/src/test/modules/test_shm_mq/setup.c similarity index 100% rename from contrib/test_shm_mq/setup.c rename to src/test/modules/test_shm_mq/setup.c diff --git a/contrib/test_shm_mq/sql/test_shm_mq.sql b/src/test/modules/test_shm_mq/sql/test_shm_mq.sql similarity index 100% rename from contrib/test_shm_mq/sql/test_shm_mq.sql rename to src/test/modules/test_shm_mq/sql/test_shm_mq.sql diff --git a/contrib/test_shm_mq/test.c b/src/test/modules/test_shm_mq/test.c similarity index 100% rename from contrib/test_shm_mq/test.c rename to src/test/modules/test_shm_mq/test.c diff --git a/contrib/test_shm_mq/test_shm_mq--1.0.sql b/src/test/modules/test_shm_mq/test_shm_mq--1.0.sql similarity index 100% rename from contrib/test_shm_mq/test_shm_mq--1.0.sql rename to src/test/modules/test_shm_mq/test_shm_mq--1.0.sql diff --git a/contrib/test_shm_mq/test_shm_mq.control b/src/test/modules/test_shm_mq/test_shm_mq.control similarity index 100% rename from contrib/test_shm_mq/test_shm_mq.control rename to src/test/modules/test_shm_mq/test_shm_mq.control diff --git a/contrib/test_shm_mq/test_shm_mq.h b/src/test/modules/test_shm_mq/test_shm_mq.h similarity index 100% rename from contrib/test_shm_mq/test_shm_mq.h rename to src/test/modules/test_shm_mq/test_shm_mq.h diff --git a/contrib/test_shm_mq/worker.c b/src/test/modules/test_shm_mq/worker.c similarity index 100% rename from contrib/test_shm_mq/worker.c rename to src/test/modules/test_shm_mq/worker.c diff --git a/contrib/worker_spi/Makefile b/src/test/modules/worker_spi/Makefile similarity index 75% rename from contrib/worker_spi/Makefile rename to src/test/modules/worker_spi/Makefile index 5cce4d1..7cdb33c 100644 --- a/contrib/worker_spi/Makefile +++ b/src/test/modules/worker_spi/Makefile @@ -1,4 +1,4 @@ -# contrib/worker_spi/Makefile +# src/test/modules/worker_spi/Makefile MODULES = worker_spi @@ -11,8 +11,8 @@ PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else -subdir = contrib/worker_spi -top_builddir = ../.. +subdir = src/test/modules/worker_spi +top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif diff --git a/contrib/worker_spi/worker_spi--1.0.sql b/src/test/modules/worker_spi/worker_spi--1.0.sql similarity index 100% rename from contrib/worker_spi/worker_spi--1.0.sql rename to src/test/modules/worker_spi/worker_spi--1.0.sql diff --git a/contrib/worker_spi/worker_spi.c b/src/test/modules/worker_spi/worker_spi.c similarity index 100% rename from contrib/worker_spi/worker_spi.c rename to src/test/modules/worker_spi/worker_spi.c diff --git a/contrib/worker_spi/worker_spi.control b/src/test/modules/worker_spi/worker_spi.control similarity index 100% rename from contrib/worker_spi/worker_spi.control rename to src/test/modules/worker_spi/worker_spi.control diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile index b40b37c..77fe8b6 100644 --- a/src/test/regress/GNUmakefile +++ b/src/test/regress/GNUmakefile @@ -101,7 +101,7 @@ installdirs-tests: installdirs $(MKDIR_P) $(patsubst $(srcdir)/%/,'$(DESTDIR)$(pkglibdir)/regress/%',$(sort $(dir $(regress_data_files)))) -# Get some extra C modules from contrib/spi and contrib/dummy_seclabel... +# Get some extra C modules from contrib/spi and src/test/modules/dummy_seclabel... all: refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX) @@ -111,22 +111,22 @@ refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX) autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX) cp $< $@ -dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX) +dummy_seclabel$(DLSUFFIX): $(top_builddir)/src/test/modules/dummy_seclabel/dummy_seclabel$(DLSUFFIX) cp $< $@ $(top_builddir)/contrib/spi/refint$(DLSUFFIX): | submake-contrib-spi ; $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): | submake-contrib-spi ; -$(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX): | submake-contrib-dummy_seclabel ; +$(top_builddir)/src/test/modules/dummy_seclabel/dummy_seclabel$(DLSUFFIX): | submake-dummy_seclabel ; submake-contrib-spi: $(MAKE) -C $(top_builddir)/contrib/spi -submake-contrib-dummy_seclabel: - $(MAKE) -C $(top_builddir)/contrib/dummy_seclabel +submake-dummy_seclabel: + $(MAKE) -C $(top_builddir)/src/test/modules/dummy_seclabel -.PHONY: submake-contrib-spi submake-contrib-dummy_seclabel +.PHONY: submake-contrib-spi submake-dummy_seclabel # Tablespace setup
commit 8b0ce50790b61fef20f3a613435381bc8427a6ca Author: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Fri Nov 28 12:37:50 2014 -0300 MSVC updates diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 004942c..9530ffb 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -528,16 +528,19 @@ sub mkvcbuild my $mf = Project::read_file('contrib/pgcrypto/Makefile'); GenerateContribSqlFiles('pgcrypto', $mf); - my $D; - opendir($D, 'contrib') || croak "Could not opendir on contrib!\n"; - while (my $d = readdir($D)) + foreach my $subdir ('contrib', 'src/test/modules') { - next if ($d =~ /^\./); - next unless (-f "contrib/$d/Makefile"); - next if (grep { /^$d$/ } @contrib_excludes); - AddContrib($d); + my $D; + opendir($D, $subdir) || croak "Could not opendir on $subdir!\n"; + while (my $d = readdir($D)) + { + next if ($d =~ /^\./); + next unless (-f "$subdir/$d/Makefile"); + next if (grep { /^$d$/ } @contrib_excludes); + AddContrib($subdir, $d); + } + closedir($D); } - closedir($D); $mf = Project::read_file('src\backend\utils\mb\conversion_procs\Makefile'); @@ -649,17 +652,19 @@ sub AddSimpleFrontend return $p; } -# Add a simple contrib project +# Add a simple contrib project. First arg is the subdir on which to find +# the module; some of them reside in src/test/modules sub AddContrib { + my $subdir = shift; my $n = shift; - my $mf = Project::read_file('contrib\\' . $n . '\Makefile'); + my $mf = Project::read_file($subdir . '\\' . $n . '\Makefile'); if ($mf =~ /^MODULE_big\s*=\s*(.*)$/mg) { my $dn = $1; my $proj = - $solution->AddProject($dn, 'dll', 'contrib', 'contrib\\' . $n); + $solution->AddProject($dn, 'dll', 'contrib', $subdir . '\\' . $n); $proj->AddReference($postgres); AdjustContribProj($proj); } @@ -668,7 +673,7 @@ sub AddContrib foreach my $mod (split /\s+/, $1) { my $proj = - $solution->AddProject($mod, 'dll', 'contrib', 'contrib\\' . $n); + $solution->AddProject($mod, 'dll', 'contrib', $subdir . '\\' . $n); $proj->AddFile('contrib\\' . $n . '\\' . $mod . '.c'); $proj->AddReference($postgres); AdjustContribProj($proj); @@ -677,7 +682,7 @@ sub AddContrib elsif ($mf =~ /^PROGRAM\s*=\s*(.*)$/mg) { my $proj = - $solution->AddProject($1, 'exe', 'contrib', 'contrib\\' . $n); + $solution->AddProject($1, 'exe', 'contrib', $subdir . '\\' . $n); AdjustContribProj($proj); } else diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index b84f70d..294894f 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -31,7 +31,7 @@ if (-e "src/tools/msvc/buildenv.pl") my $what = shift || ""; if ($what =~ -/^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck|upgradecheck)$/i +/^(check|installcheck|plcheck|contribcheck|modulescheck|ecpgcheck|isolationcheck|upgradecheck)$/i ) { $what = uc $what; @@ -76,6 +76,7 @@ my %command = ( INSTALLCHECK => \&installcheck, ECPGCHECK => \&ecpgcheck, CONTRIBCHECK => \&contribcheck, + MODULESCHECK => \&modulescheck, ISOLATIONCHECK => \&isolationcheck, UPGRADECHECK => \&upgradecheck,); @@ -213,22 +214,18 @@ sub plcheck chdir "../../.."; } -sub contribcheck +sub subdircheck { - chdir "../../../contrib"; + my $topdir = shift; + my $subdir = shift; + my $module = shift; my $mstat = 0; - foreach my $module (glob("*")) - { - # these configuration-based exclusions must match Install.pm - next if ($module eq "uuid-ossp" && !defined($config->{uuid})); - next if ($module eq "sslinfo" && !defined($config->{openssl})); - next if ($module eq "xml2" && !defined($config->{xml})); - next if ($module eq "sepgsql"); - next - unless -d "$module/sql" - && -d "$module/expected" - && (-f "$module/GNUmakefile" || -f "$module/Makefile"); + { + return + unless -d "$module/sql" + && -d "$module/expected" + && (-f "$module/GNUmakefile" || -f "$module/Makefile"); chdir $module; print "============================================================\n"; @@ -236,17 +233,41 @@ sub contribcheck my @tests = fetchTests(); my @opts = fetchRegressOpts(); my @args = ( - "../../$Config/pg_regress/pg_regress", - "--psqldir=../../$Config/psql", - "--dbname=contrib_regression", @opts, @tests); + "$topdir/pg_regress/pg_regress", + "--psqldir=$topdir/psql", "--dbname=contrib", @opts, @tests); system(@args); my $status = $? >> 8; $mstat ||= $status; chdir ".."; } + exit $mstat if $mstat; } +sub contribcheck +{ + chdir "../../../contrib"; + foreach my $module (glob("*")) + { + # these configuration-based exclusions must match Install.pm + next if ($module eq "uuid-ossp" && !defined($config->{uuid})); + next if ($module eq "sslinfo" && !defined($config->{openssl})); + next if ($module eq "xml2" && !defined($config->{xml})); + next if ($module eq "sepgsql"); + + subdircheck("../../$Config", "../../../contrib", $module); + } +} + +sub modulescheck +{ + chdir "../../../src/test/modules"; + foreach my $module (glob("*")) + { + subdircheck("../../$Config", "../../../src/test/modules", $module); + } +} + sub upgradecheck { my $status;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers