summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore20
-rw-r--r--Makefile.am66
-rw-r--r--configure.ac51
-rw-r--r--tests/Makefile.am44
-rw-r--r--tests/atlocal.in1
-rw-r--r--tests/testsuite.at17
6 files changed, 145 insertions, 54 deletions
diff --git a/.gitignore b/.gitignore
index 446e759..c050477 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,25 @@
-Makefile
-Makefile.in
+*.tar.gz
+*.log
+.generated_files
aclocal.m4
+atconfig
+atlocal
autom4te.cache/
config.log
config.status
configure
+conf/postgresql*
+INSTALL
install-sh
+Makefile
+Makefile.in
missing
-*.log
-INSTALL
+package.m4
postgresql*-check-db-dir
postgresql*-ctl
+postgresql*.service
postgresql*-setup
postgresql*-setup.1
-*.tar.gz
-conf/postgresql*
-postgresql*.service
README.rpm-dist
+testsuite
+testsuite.dir/
diff --git a/Makefile.am b/Makefile.am
index 3efcc7c..1f165a7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
pkgname = postgresql$(DISTSUFF)
-SUBDIRS = . doc
+SUBDIRS = . doc tests
bin_SCRIPTS = postgresql$(DISTSUFF)-setup
@@ -14,52 +14,16 @@ nodist_systemdunits_DATA = postgresql$(DISTSUFF).service postgresql$(DISTSUFF)@.
nodist_pgdoc_DATA = README.rpm-dist
-# Encouraged by autoconf documentation itself. When we use config.status
-# directly, e.g. libexecdir may result into '${exec_prefix}/libexec' -- but we
-# need fully expanded strings there.
-SED_RULES = \
- -e 's|@__FILE__[@]|$@|g' \
- -e 's|@bindir[@]|$(bindir)|g' \
- -e 's|@DISTSUFF[@]|$(DISTSUFF)|g' \
- -e 's|@docdir[@]|$(docdir)|g' \
- -e 's|@libdir[@]|$(libdir)|g' \
- -e 's|@libexecdir[@]|$(libexecdir)|g' \
- -e 's|@PG_CTL_BIN[@]|$(PG_CTL_BIN)|g' \
- -e 's|@PGDATADIR[@]|$(PGDATADIR)|g' \
- -e 's|@pgcontribdocdir[@]|$(pgcontribdocdir)|g' \
- -e 's|@pgdocdir[@]|$(pgdocdir)|g' \
- -e 's|@PGENGINE[@]|$(PGENGINE)|g' \
- -e 's|@pkgname[@]|$(pkgname)|g' \
- -e 's|@PGMAJORVERSION[@]|$(PGMAJORVERSION)|g' \
- -e 's|@PGVERSION[@]|$(PGVERSION)|g' \
- -e 's|@PKGCONFIG_DIR[@]|$(PKGCONFIG_DIR)|g' \
- -e 's|@POSTGRES_HOMEDIR[@]|$(POSTGRES_HOMEDIR)|g' \
- -e 's|@PREVMAJORVERSION[@]|$(PREVMAJORVERSION)|g' \
- -e 's|@PREVPGENGINE[@]|$(PREVPGENGINE)|g' \
- -e 's|@README_DIST[@]|$(README_DIST)|g' \
- -e 's|@SU[@]|$(SU)|g' \
- -e 's|@systemdunitsdir[@]|$(systemdunitsdir)|' \
- -e 's|@userunitsdir[@]|$(userunitsdir)|' \
- -e 's|@VERSION[@]|$(VERSION)|g'
-
-SED_CALL = $(SED) $(SED_RULES)
-
-edit = $(SED_CALL) $< > $@
-
-c_s = $(top_srcdir)/config.status
-
-c_s_gen = $(AM_V_GEN)$(edit)
-
-c_s_script_gen = $(c_s_gen) && chmod +x $@
+noinst_DATA = $(TEST_GEN_FILES_LIST)
postgresql$(DISTSUFF)-ctl: postgresql-ctl.in $(c_s)
- $(c_s_script_gen)
+ $(INSTANTIATE_SCRIPT)
postgresql$(DISTSUFF)-setup: postgresql-setup.in $(c_s)
- $(c_s_script_gen)
+ $(INSTANTIATE_SCRIPT)
postgresql$(DISTSUFF)-check-db-dir: postgresql-check-db-dir.in $(c_s)
- $(c_s_script_gen)
+ $(INSTANTIATE_SCRIPT)
# In ideal world, postgresql@.service would be hardlink to postgresql.service.
# That would require, however, the rhbz#1141824 resolved so we could install
@@ -76,15 +40,23 @@ postgresql$(DISTSUFF).service: postgresql.service.in $(c_s)
$< > $@
README.rpm-dist: README.rpm-dist.in $(c_s)
- $(c_s_gen)
+ $(INSTANTIATE)
EXTRA_DIST = *.in
-CLEANFILES = $(bin_SCRIPTS) \
- $(libexec_SCRIPTS) \
- $(nodist_pgdoc_DATA) \
- $(pkgsysconf_DATA) \
- $(nodist_systemdunits_DATA)
+GENERATED_FILES = $(bin_SCRIPTS) \
+ $(libexec_SCRIPTS) \
+ $(nodist_pgdoc_DATA) \
+ $(pkgsysconf_DATA) \
+ $(nodist_systemdunits_DATA)
+
+CLEANFILES = $(GENERATED_FILES) $(TEST_GEN_FILES_LIST)
+
+$(TEST_GEN_FILES_LIST): $(GENERATED_FILES)
+ $(AM_V_GEN)rm -rf $(TEST_GEN_FILES_LIST) && \
+ for i in $(GENERATED_FILES); do \
+ echo $$i >> $@ ; \
+ done
install-data-hook:
test `id -u` -eq 0 && systemctl daemon-reload
diff --git a/configure.ac b/configure.ac
index a39f2f6..6abf154 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,6 +10,57 @@ AM_SILENT_RULES([yes])
AC_ARG_VAR([DISTSUFF], [Append string suffix to all binaries])
AC_SUBST([DISTSUFF])
+# Initialize the test suite.
+AC_CONFIG_TESTDIR(tests)
+AC_CONFIG_FILES([tests/Makefile])
+AM_MISSING_PROG([AUTOM4TE], [autom4te])
+AC_SUBST([TEST_GEN_FILES_LIST], [$\(top_srcdir\)/.generated_files])
+
+
+# Instatiating generated files by sed instead of config.status.
+# This is encouraged by autoconf documentation itself because if we used
+# config.status directly, e.g. libexecdir may result into
+# '${exec_prefix}/libexec' -- but we need fully expanded strings.
+m4_define([sed_subst_var_pattern], [ -e 's|@$1[[@]]|\$($1)|g' \\])
+SED_RULES="\\
+sed_subst_var_pattern(bindir)
+sed_subst_var_pattern(DISTSUFF)
+sed_subst_var_pattern(docdir)
+sed_subst_var_pattern(libdir)
+sed_subst_var_pattern(libexecdir)
+sed_subst_var_pattern(PG_CTL_BIN)
+sed_subst_var_pattern(top_srcdir)
+sed_subst_var_pattern(pgcontribdocdir)
+sed_subst_var_pattern(PGDATADIR)
+sed_subst_var_pattern(pgdocdir)
+sed_subst_var_pattern(PGENGINE)
+sed_subst_var_pattern(PGVERSION)
+sed_subst_var_pattern(PGMAJORVERSION)
+sed_subst_var_pattern(PKGCONFIG_DIR)
+sed_subst_var_pattern(pkgname)
+sed_subst_var_pattern(POSTGRES_HOMEDIR)
+sed_subst_var_pattern(PREVMAJORVERSION)
+sed_subst_var_pattern(PREVPGENGINE)
+sed_subst_var_pattern(README_DIST)
+sed_subst_var_pattern(SU)
+sed_subst_var_pattern(systemdunitsdir)
+sed_subst_var_pattern(userunitsdir)
+sed_subst_var_pattern(TEST_GEN_FILES_LIST)
+sed_subst_var_pattern(VERSION)
+ -e 's|@__FILE__[[@]]|\$@|g'"
+
+SED_CALL="\$(SED) \$(SED_RULES)"
+m4_pattern_allow(AM_V_GEN)
+INSTANTIATE="\$(AM_V_GEN)\$(SED_CALL) \$< > \$@"
+INSTANTIATE_SCRIPT="\$(INSTANTIATE) && chmod +x \$@"
+c_s='$(top_srcdir)/config.status'
+
+AC_SUBST([SED_RULES])
+AC_SUBST([SED_CALL])
+AC_SUBST([INSTANTIATE])
+AC_SUBST([INSTANTIATE_SCRIPT])
+AC_SUBST([c_s])
+
AC_PATH_PROG([SED], [sed])
test -z "$ac_cv_path_SED" &&
AC_MSG_ERROR([Sed is needed but not found.])
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..1ec404d
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,44 @@
+EXTRA_DIST = testsuite.at \
+ package.m4 \
+ $(TESTSUITE) \
+ atlocal.in
+
+$(srcdir)/package.m4: $(top_srcdir)/configure.ac
+ $(AM_V_GEN):;{ \
+ echo '# Signature of the current package.' && \
+ echo 'm4_define([AT_PACKAGE_NAME],' && \
+ echo ' [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([AT_PACKAGE_TARNAME],' && \
+ echo ' [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([AT_PACKAGE_VERSION],' && \
+ echo ' [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([AT_PACKAGE_STRING],' && \
+ echo ' [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
+ echo ' [$(PACKAGE_BUGREPORT)])'; \
+ echo 'm4_define([AT_PACKAGE_URL],' && \
+ echo ' [$(PACKAGE_URL)])'; \
+ } >'$(srcdir)/package.m4'
+
+TESTSUITE = $(srcdir)/testsuite
+CHECK_DEPS = atconfig atlocal $(TESTSUITE) $(TEST_GEN_FILES_LIST)
+
+atlocal: atlocal.in $(c_s)
+ $(INSTANTIATE)
+
+check-local: $(CHECK_DEPS)
+ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
+
+installcheck-local: $(CHECK_DEPS)
+ $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' $(TESTSUITEFLAGS)
+
+clean-local:
+ test ! -f '$(TESTSUITE)' || \
+ $(SHELL) '$(TESTSUITE)' --clean
+
+AUTOTEST = $(AUTOM4TE) --language=autotest
+
+$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
+ $(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at && \
+ mv $@.tmp $@
+
diff --git a/tests/atlocal.in b/tests/atlocal.in
new file mode 100644
index 0000000..6015f6b
--- /dev/null
+++ b/tests/atlocal.in
@@ -0,0 +1 @@
+TEST_GEN_FILES_LIST=@TEST_GEN_FILES_LIST@
diff --git a/tests/testsuite.at b/tests/testsuite.at
new file mode 100644
index 0000000..9d18b29
--- /dev/null
+++ b/tests/testsuite.at
@@ -0,0 +1,17 @@
+AT_INIT
+AT_COLOR_TESTS
+
+AT_SETUP([Check files are generated correctly])
+AT_CHECK([file_list=$top_srcdir/$at_testdir/$TEST_GEN_FILES_LIST
+test -f "$file_list" || { echo "no such file '$file_list'" ; exit 1 ; }
+
+pattern='@[[a-zA-Z0-9_]]*@'
+
+while read file; do
+ file=${top_srcdir}/$file
+ grep $pattern $file && echo "file $file is incomplete" && exit 1
+done < $file_list
+
+exit 0
+])
+AT_CLEANUP