Expand test coverage support to entire tree

Test coverage support now covers the entire source tree, including
contrib, instead of just src/backend.  In a related but independent
development, the commands make coverage and make coverage-html can be run
in any directory.

This turned out to be much easier than feared.  Besides a few ad hoc fixes
to pass the make target down the tree, change all affected makefiles to
list their directories in the SUBDIRS variable, changed from variants like
DIRS and WANTED_DIRS.  MSVC build fix was attempted as well.
This commit is contained in:
Peter Eisentraut 2009-08-07 20:50:22 +00:00
parent e605fbcccd
commit 7798147a76
12 changed files with 57 additions and 62 deletions

View File

@ -1,7 +1,7 @@
#
# PostgreSQL top level makefile
#
# $PostgreSQL: pgsql/GNUmakefile.in,v 1.50 2009/01/15 01:53:49 momjian Exp $
# $PostgreSQL: pgsql/GNUmakefile.in,v 1.51 2009/08/07 20:50:21 petere Exp $
#
subdir =
@ -20,7 +20,7 @@ install:
$(MAKE) -C config $@
@echo "PostgreSQL installation complete."
installdirs uninstall:
installdirs uninstall coverage:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
@ -61,25 +61,6 @@ GNUmakefile: GNUmakefile.in $(top_builddir)/config.status
./config.status $@
##########################################################################
coverage:
$(MAKE) -C src/backend $@
.PHONY: coverage-html
coverage-html: coverage
rm -rf coverage
mkdir coverage
$(GENHTML) --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=$(abs_top_srcdir)/src `find src/backend -name lcov.info -print`
ifeq ($(enable_coverage),yes)
clean distclean maintainer-clean: clean-coverage-local
.PHONY: clean-coverage-local
clean-coverage-local:
rm -rf coverage
endif
##########################################################################
distdir = postgresql-$(VERSION)

View File

@ -1,10 +1,10 @@
# $PostgreSQL: pgsql/contrib/Makefile,v 1.87 2009/03/25 23:20:01 tgl Exp $
# $PostgreSQL: pgsql/contrib/Makefile,v 1.88 2009/08/07 20:50:21 petere Exp $
subdir = contrib
top_builddir = ..
include $(top_builddir)/src/Makefile.global
WANTED_DIRS = \
SUBDIRS = \
adminpack \
auto_explain \
btree_gin \
@ -42,15 +42,15 @@ WANTED_DIRS = \
vacuumlo
ifeq ($(with_openssl),yes)
WANTED_DIRS += sslinfo
SUBDIRS += sslinfo
endif
ifeq ($(with_ossp_uuid),yes)
WANTED_DIRS += uuid-ossp
SUBDIRS += uuid-ossp
endif
ifeq ($(with_libxml),yes)
WANTED_DIRS += xml2
SUBDIRS += xml2
endif
# Missing:
@ -58,13 +58,13 @@ endif
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(WANTED_DIRS); do \
@for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || exit; \
done
# We'd like check operations to run all the subtests before failing.
check installcheck:
@CHECKERR=0; for dir in $(WANTED_DIRS); do \
@CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \
exit $$CHECKERR

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.63 2009/04/27 16:27:36 momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/regress.sgml,v 1.64 2009/08/07 20:50:21 petere Exp $ -->
<chapter id="regress">
<title id="regress-title">Regression Tests</title>
@ -476,6 +476,7 @@ gmake coverage-html
</screen>
Then point your HTML browser
to <filename>coverage/index.html</filename>.
The <command>gmake</command> commands also work in subdirectories.
</para>
<para>

View File

@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/Makefile,v 1.45 2009/02/24 10:06:32 petere Exp $
# $PostgreSQL: pgsql/src/Makefile,v 1.46 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -73,5 +73,14 @@ distclean maintainer-clean:
$(MAKE) -C test/thread $@
rm -f Makefile.port Makefile.global
coverage:
$(MAKE) -C timezone $@
$(MAKE) -C backend $@
$(MAKE) -C backend/utils/mb/conversion_procs $@
$(MAKE) -C backend/snowball $@
$(MAKE) -C interfaces $@
$(MAKE) -C bin $@
$(MAKE) -C pl $@
.PHONY: install-local installdirs-local uninstall-local

View File

@ -1,5 +1,5 @@
# -*-makefile-*-
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.255 2009/08/04 22:04:37 petere Exp $
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.256 2009/08/07 20:50:22 petere Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
@ -617,12 +617,22 @@ lcov.info: $(gcda_files)
%.c.gcov: %.gcda | lcov.info
$(GCOV) -b -f -p -o . $(GCOVFLAGS) $*.c >$*.c.gcov.out
coverage: $(gcda_files:.gcda=.c.gcov) lcov.info
$(if $(SUBDIRS),for dir in $(SUBDIRS); do $(MAKE) -C $$dir coverage || exit; done)
.PHONY: coverage-html
coverage-html: coverage
rm -rf coverage
mkdir coverage
$(GENHTML) --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=$(abs_top_srcdir) `find . -name lcov.info -print`
# hook for clean-up
clean distclean maintainer-clean: clean-coverage
.PHONY: clean-coverage
clean-coverage:
rm -rf coverage
rm -f *.gcda *.gcno lcov.info *.gcov *.gcov.out

View File

@ -1,7 +1,7 @@
#
# Common make rules for backend
#
# $PostgreSQL: pgsql/src/backend/common.mk,v 1.8 2008/09/05 12:11:18 petere Exp $
# $PostgreSQL: pgsql/src/backend/common.mk,v 1.9 2009/08/07 20:50:22 petere Exp $
#
# When including this file, set OBJS to the object files created in
@ -46,9 +46,3 @@ ifdef SUBDIRS
for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit; done
endif
rm -f $(subsysfilename) $(OBJS)
coverage: $(gcda_files:.gcda=.c.gcov) lcov.info
ifdef SUBDIRS
for dir in $(SUBDIRS); do $(MAKE) -C $$dir coverage || exit; done
endif

View File

@ -4,7 +4,7 @@
# Makefile for utils/mb/conversion_procs
#
# IDENTIFICATION
# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.21 2009/02/10 19:29:39 petere Exp $
# $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/Makefile,v 1.22 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -17,7 +17,7 @@ SQLSCRIPT = conversion_create.sql
# This file can be placed as src/test/regress/conversion.sql
REGRESSION_SCRIPT = conversion.sql
DIRS = \
SUBDIRS = \
ascii_and_mic cyrillic_and_mic euc_cn_and_mic euc_jp_and_sjis \
euc_kr_and_mic euc_tw_and_big5 latin2_and_win1250 latin_and_mic \
utf8_and_ascii utf8_and_big5 utf8_and_cyrillic utf8_and_euc_cn \
@ -162,7 +162,7 @@ CONVERSIONS = \
shift_jis_2004_to_euc_jis_2004 SHIFT_JIS_2004 EUC_JIS_2004 shift_jis_2004_to_euc_jis_2004 euc_jis_2004_and_shift_jis_2004
all: $(SQLSCRIPT)
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
$(SQLSCRIPT): Makefile
ifeq ($(enable_shared), yes)
@ -205,16 +205,16 @@ $(REGRESSION_SCRIPT): Makefile
install: $(SQLSCRIPT) installdirs
$(INSTALL_DATA) $(SQLSCRIPT) '$(DESTDIR)$(datadir)'
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
installdirs:
$(mkinstalldirs) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(pkglibdir)'
uninstall:
rm -f '$(DESTDIR)$(datadir)/$(SQLSCRIPT)'
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
clean distclean maintainer-clean:
rm -f $(SQLSCRIPT)
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done

View File

@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/bin/Makefile,v 1.54 2009/01/01 17:23:53 momjian Exp $
# $PostgreSQL: pgsql/src/bin/Makefile,v 1.55 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -13,11 +13,11 @@ subdir = src/bin
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
DIRS = initdb pg_ctl pg_dump \
SUBDIRS = initdb pg_ctl pg_dump \
psql scripts pg_config pg_controldata pg_resetxlog
ifeq ($(PORTNAME), win32)
DIRS+=pgevent
SUBDIRS+=pgevent
endif
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done

View File

@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/interfaces/Makefile,v 1.56 2008/03/18 16:24:50 petere Exp $
# $PostgreSQL: pgsql/src/interfaces/Makefile,v 1.57 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -12,7 +12,7 @@ subdir = src/interfaces
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
DIRS = libpq ecpg
SUBDIRS = libpq ecpg
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done

View File

@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/pl/Makefile,v 1.27 2008/03/18 16:24:50 petere Exp $
# $PostgreSQL: pgsql/src/pl/Makefile,v 1.28 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -12,26 +12,26 @@ subdir = src/pl
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
DIRS = plpgsql
SUBDIRS = plpgsql
ifeq ($(with_perl), yes)
DIRS += plperl
SUBDIRS += plperl
endif
ifeq ($(with_python), yes)
DIRS += plpython
SUBDIRS += plpython
endif
ifeq ($(with_tcl), yes)
DIRS += tcl
SUBDIRS += tcl
endif
all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
# We'd like check operations to run all the subtests before failing.
check installcheck:
@CHECKERR=0; for dir in $(DIRS); do \
@CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \
exit $$CHECKERR

View File

@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/pl/plpgsql/Makefile,v 1.9 2008/03/18 16:24:50 petere Exp $
# $PostgreSQL: pgsql/src/pl/plpgsql/Makefile,v 1.10 2009/08/07 20:50:22 petere Exp $
#
#-------------------------------------------------------------------------
@ -12,5 +12,5 @@ subdir = src/pl/plpgsql
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
all install installdirs uninstall distprep clean distclean maintainer-clean:
all install installdirs uninstall distprep clean distclean maintainer-clean coverage:
$(MAKE) -C src $@

View File

@ -3,7 +3,7 @@ package Mkvcbuild;
#
# Package that generates build files for msvc build
#
# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.41 2009/07/16 17:43:52 tgl Exp $
# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.42 2009/08/07 20:50:22 petere Exp $
#
use Carp;
use Win32;
@ -321,7 +321,7 @@ sub mkvcbuild
$mf = Project::read_file('src\backend\utils\mb\conversion_procs\Makefile');
$mf =~ s{\\s*[\r\n]+}{}mg;
$mf =~ m{DIRS\s*=\s*(.*)$}m || die 'Could not match in conversion makefile' . "\n";
$mf =~ m{SUBDIRS\s*=\s*(.*)$}m || die 'Could not match in conversion makefile' . "\n";
foreach my $sub (split /\s+/,$1)
{
my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile');