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 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 = subdir =
@ -20,7 +20,7 @@ install:
$(MAKE) -C config $@ $(MAKE) -C config $@
@echo "PostgreSQL installation complete." @echo "PostgreSQL installation complete."
installdirs uninstall: installdirs uninstall coverage:
$(MAKE) -C doc $@ $(MAKE) -C doc $@
$(MAKE) -C src $@ $(MAKE) -C src $@
$(MAKE) -C config $@ $(MAKE) -C config $@
@ -61,25 +61,6 @@ GNUmakefile: GNUmakefile.in $(top_builddir)/config.status
./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) 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 subdir = contrib
top_builddir = .. top_builddir = ..
include $(top_builddir)/src/Makefile.global include $(top_builddir)/src/Makefile.global
WANTED_DIRS = \ SUBDIRS = \
adminpack \ adminpack \
auto_explain \ auto_explain \
btree_gin \ btree_gin \
@ -42,15 +42,15 @@ WANTED_DIRS = \
vacuumlo vacuumlo
ifeq ($(with_openssl),yes) ifeq ($(with_openssl),yes)
WANTED_DIRS += sslinfo SUBDIRS += sslinfo
endif endif
ifeq ($(with_ossp_uuid),yes) ifeq ($(with_ossp_uuid),yes)
WANTED_DIRS += uuid-ossp SUBDIRS += uuid-ossp
endif endif
ifeq ($(with_libxml),yes) ifeq ($(with_libxml),yes)
WANTED_DIRS += xml2 SUBDIRS += xml2
endif endif
# Missing: # Missing:
@ -58,13 +58,13 @@ endif
all install installdirs uninstall distprep clean distclean maintainer-clean: all install installdirs uninstall distprep clean distclean maintainer-clean:
@for dir in $(WANTED_DIRS); do \ @for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || exit; \ $(MAKE) -C $$dir $@ || exit; \
done done
# We'd like check operations to run all the subtests before failing. # We'd like check operations to run all the subtests before failing.
check installcheck: check installcheck:
@CHECKERR=0; for dir in $(WANTED_DIRS); do \ @CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \ $(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \ done; \
exit $$CHECKERR 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"> <chapter id="regress">
<title id="regress-title">Regression Tests</title> <title id="regress-title">Regression Tests</title>
@ -476,6 +476,7 @@ gmake coverage-html
</screen> </screen>
Then point your HTML browser Then point your HTML browser
to <filename>coverage/index.html</filename>. to <filename>coverage/index.html</filename>.
The <command>gmake</command> commands also work in subdirectories.
</para> </para>
<para> <para>

View File

@ -4,7 +4,7 @@
# #
# Copyright (c) 1994, Regents of the University of California # 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 $@ $(MAKE) -C test/thread $@
rm -f Makefile.port Makefile.global 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 .PHONY: install-local installdirs-local uninstall-local

View File

@ -1,5 +1,5 @@
# -*-makefile-*- # -*-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, # 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 %.c.gcov: %.gcda | lcov.info
$(GCOV) -b -f -p -o . $(GCOVFLAGS) $*.c >$*.c.gcov.out $(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 # hook for clean-up
clean distclean maintainer-clean: clean-coverage clean distclean maintainer-clean: clean-coverage
.PHONY: clean-coverage .PHONY: clean-coverage
clean-coverage: clean-coverage:
rm -rf coverage
rm -f *.gcda *.gcno lcov.info *.gcov *.gcov.out rm -f *.gcda *.gcno lcov.info *.gcov *.gcov.out

View File

@ -1,7 +1,7 @@
# #
# Common make rules for backend # 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 # 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 for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit; done
endif endif
rm -f $(subsysfilename) $(OBJS) 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 # Makefile for utils/mb/conversion_procs
# #
# IDENTIFICATION # 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 # This file can be placed as src/test/regress/conversion.sql
REGRESSION_SCRIPT = conversion.sql REGRESSION_SCRIPT = conversion.sql
DIRS = \ SUBDIRS = \
ascii_and_mic cyrillic_and_mic euc_cn_and_mic euc_jp_and_sjis \ 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 \ 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 \ 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 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) all: $(SQLSCRIPT)
@for dir in $(DIRS); do $(MAKE) -C $$dir $@ || exit; done @for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit; done
$(SQLSCRIPT): Makefile $(SQLSCRIPT): Makefile
ifeq ($(enable_shared), yes) ifeq ($(enable_shared), yes)
@ -205,16 +205,16 @@ $(REGRESSION_SCRIPT): Makefile
install: $(SQLSCRIPT) installdirs install: $(SQLSCRIPT) installdirs
$(INSTALL_DATA) $(SQLSCRIPT) '$(DESTDIR)$(datadir)' $(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: installdirs:
$(mkinstalldirs) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(pkglibdir)' $(mkinstalldirs) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(pkglibdir)'
uninstall: uninstall:
rm -f '$(DESTDIR)$(datadir)/$(SQLSCRIPT)' 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: clean distclean maintainer-clean:
rm -f $(SQLSCRIPT) 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) 1996-2009, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California # 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 = ../.. top_builddir = ../..
include $(top_builddir)/src/Makefile.global 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 psql scripts pg_config pg_controldata pg_resetxlog
ifeq ($(PORTNAME), win32) ifeq ($(PORTNAME), win32)
DIRS+=pgevent SUBDIRS+=pgevent
endif endif
all install installdirs uninstall distprep clean distclean maintainer-clean: 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 # 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 = ../.. top_builddir = ../..
include $(top_builddir)/src/Makefile.global include $(top_builddir)/src/Makefile.global
DIRS = libpq ecpg SUBDIRS = libpq ecpg
all install installdirs uninstall distprep clean distclean maintainer-clean: 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 # 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 = ../.. top_builddir = ../..
include $(top_builddir)/src/Makefile.global include $(top_builddir)/src/Makefile.global
DIRS = plpgsql SUBDIRS = plpgsql
ifeq ($(with_perl), yes) ifeq ($(with_perl), yes)
DIRS += plperl SUBDIRS += plperl
endif endif
ifeq ($(with_python), yes) ifeq ($(with_python), yes)
DIRS += plpython SUBDIRS += plpython
endif endif
ifeq ($(with_tcl), yes) ifeq ($(with_tcl), yes)
DIRS += tcl SUBDIRS += tcl
endif endif
all install installdirs uninstall distprep clean distclean maintainer-clean: 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. # We'd like check operations to run all the subtests before failing.
check installcheck: check installcheck:
@CHECKERR=0; for dir in $(DIRS); do \ @CHECKERR=0; for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir $@ || CHECKERR=$$?; \ $(MAKE) -C $$dir $@ || CHECKERR=$$?; \
done; \ done; \
exit $$CHECKERR exit $$CHECKERR

View File

@ -4,7 +4,7 @@
# #
# Copyright (c) 1994, Regents of the University of California # 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 = ../../.. top_builddir = ../../..
include $(top_builddir)/src/Makefile.global 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 $@ $(MAKE) -C src $@

View File

@ -3,7 +3,7 @@ package Mkvcbuild;
# #
# Package that generates build files for msvc build # 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 Carp;
use Win32; use Win32;
@ -321,7 +321,7 @@ sub mkvcbuild
$mf = Project::read_file('src\backend\utils\mb\conversion_procs\Makefile'); $mf = Project::read_file('src\backend\utils\mb\conversion_procs\Makefile');
$mf =~ s{\\s*[\r\n]+}{}mg; $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) foreach my $sub (split /\s+/,$1)
{ {
my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile'); my $mf = Project::read_file('src\backend\utils\mb\conversion_procs\\' . $sub . '\Makefile');