# -*-makefile-*-
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.232 2006/10/08 17:15:33 tgl Exp $
#------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets,
# which in turn are put here by the configure script. There is no need for
# users to edit this file -- if it turns out to be necessary then that's a
# bug.
#
# A makefile that includes this file needs to set the variable `subdir' to
# the relative path from the top to itself and `top_builddir' to the relative
# path from itself to the top before including this file. (The "top" is the
# parent directory of the directory this file is in.)
#------------------------------------------------------------------------------


##########################################################################
#
# Meta configuration

.PHONY: all install install-strip installdirs uninstall clean distclean maintainer-clean distprep check installcheck maintainer-check coverage installcheck-good
.SILENT: installdirs

# make `all' the default target
all:

feature-test:

# Delete target files if the command fails after it has
# started to update the file.
.DELETE_ON_ERROR:

# PostgreSQL version number
VERSION = @PACKAGE_VERSION@
MAJORVERSION = @PG_MAJORVERSION@

# GPDB version number
GP_MAJORVERSION = @GP_MAJORVERSION@

# HAWQ version number
HQ_MAJORVERSION = @HQ_MAJORVERSION@

# Support for VPATH builds
vpath_build = @vpath_build@
abs_top_srcdir = @abs_top_srcdir@
abs_top_builddir = @abs_top_builddir@

ifneq ($(vpath_build),yes)
top_srcdir = $(top_builddir)
srcdir = .
else # vpath_build = yes
top_srcdir = $(abs_top_srcdir)
srcdir = $(top_srcdir)/$(subdir)
VPATH = $(srcdir)
endif

vpathsearch = `for f in $(addsuffix /$(1),$(subst :, ,. $(VPATH))); do test -r $$f && echo $$f && break; done`

# Saved arguments from configure
configure_args = @configure_args@


##########################################################################
#
# Installation directories
#
# These are set by the equivalent --xxxdir configure options.  We
# append "postgresql" to some of them, if the string does not already
# contain "pgsql" or "postgres", in order to avoid directory clutter.
#
# In a PGXS build, we cannot use the values inserted into Makefile.global
# by configure, since the installation tree may have been relocated.
# Instead get the path values from pg_config.

ifndef PGXS

# Note that prefix, exec_prefix, and datarootdir aren't defined in a PGXS build;
# makefiles may only use the derived variables such as bindir.

prefix := @prefix@
exec_prefix := @exec_prefix@
datarootdir := @datarootdir@

bindir := @bindir@
sbindir := @sbindir@

datadir := @datadir@
ifeq "$(findstring pgsql, $(datadir))" ""
ifeq "$(findstring postgres, $(datadir))" ""
override datadir := $(datadir)/postgresql
endif
endif

sysconfdir := @sysconfdir@
#ifeq "$(findstring pgsql, $(sysconfdir))" ""
#ifeq "$(findstring postgres, $(sysconfdir))" ""
#override sysconfdir := $(sysconfdir)/postgresql
#endif
#endif

libdir := @libdir@

pkglibdir = $(libdir)
ifeq "$(findstring pgsql, $(pkglibdir))" ""
ifeq "$(findstring postgres, $(pkglibdir))" ""
override pkglibdir := $(pkglibdir)/postgresql
endif
endif

includedir := @includedir@

pkgincludedir = $(includedir)
ifeq "$(findstring pgsql, $(pkgincludedir))" ""
ifeq "$(findstring postgres, $(pkgincludedir))" ""
override pkgincludedir := $(pkgincludedir)/postgresql
endif
endif

mandir := @mandir@

docdir := @docdir@
#ifeq "$(findstring pgsql, $(docdir))" ""
#ifeq "$(findstring postgres, $(docdir))" ""
#override docdir := $(docdir)/postgresql
#endif
#endif

htmldir := @htmldir@

localedir := @localedir@

else # PGXS case

# Extension makefiles should set PG_CONFIG, but older ones might not
ifndef PG_CONFIG
PG_CONFIG = pg_config
endif

bindir := $(shell $(PG_CONFIG) --bindir)
datadir := $(shell $(PG_CONFIG) --sharedir)
sysconfdir := $(shell $(PG_CONFIG) --sysconfdir)
libdir := $(shell $(PG_CONFIG) --libdir)
pkglibdir := $(shell $(PG_CONFIG) --pkglibdir)
includedir := $(shell $(PG_CONFIG) --includedir)
pkgincludedir := $(shell $(PG_CONFIG) --pkgincludedir)
mandir := $(shell $(PG_CONFIG) --mandir)
docdir := $(shell $(PG_CONFIG) --docdir)
localedir := $(shell $(PG_CONFIG) --localedir)

endif # PGXS

# These derived path variables aren't separately configurable.

includedir_server = $(pkgincludedir)/server
includedir_internal = $(pkgincludedir)/internal
includedir_internal_cdb = $(pkgincludedir)/internal/cdb
pgxsdir = $(pkglibdir)/pgxs

sqlmansect_dummy = l


##########################################################################
#
# Features
#
# Records the choice of the various --enable-xxx and --with-xxx options.

with_perl	= @with_perl@
with_python	= @with_python@
with_tcl	= @with_tcl@
with_r		= @with_r@
with_pgcrypto = @with_pgcrypto@
with_orc      = @with_orc@
with_java   = @with_java@
with_openssl	= @with_openssl@
with_system_tzdata = @with_system_tzdata@
with_zlib	= @with_zlib@
enable_shared	= @enable_shared@
enable_rpath	= @enable_rpath@
enable_nls	= @enable_nls@
enable_debug	= @enable_debug@
enable_dtrace	= @enable_dtrace@
enable_coverage	= @enable_coverage@
enable_thread_safety	= @enable_thread_safety@
enable_largefile	= @enable_largefile@
enable_snmp			= @enable_snmp@
enable_email		= @enable_email@
enable_connectemc	= @enable_connectemc@
enable_orca			= @enable_orca@
enable_gphdfs		= @enable_gphdfs@

python_includespec	= @python_includespec@
python_libdir		= @python_libdir@
python_libspec		= @python_libspec@
python_additional_libs	= @python_additional_libs@
python_configdir	= @python_configdir@
python_version		= @python_version@

krb_srvtab = @krb_srvtab@

TCLSH			= @TCLSH@
TCL_LIB_FILE		= @TCL_LIB_FILE@
TCL_LIBS		= @TCL_LIBS@
TCL_LIB_SPEC		= @TCL_LIB_SPEC@
TCL_INCLUDE_SPEC	= @TCL_INCLUDE_SPEC@
TCL_SHARED_BUILD	= @TCL_SHARED_BUILD@
TCL_SHLIB_LD_LIBS	= @TCL_SHLIB_LD_LIBS@

PTHREAD_CFLAGS		= @PTHREAD_CFLAGS@
PTHREAD_LIBS		= @PTHREAD_LIBS@

have_docbook	= @have_docbook@
DOCBOOKSTYLE	= @DOCBOOKSTYLE@
COLLATEINDEX	= @COLLATEINDEX@


##########################################################################
#
# Programs and flags

# Compilers

CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CPPFLAGS += -I$(abs_top_srcdir)/depends/libhdfs3/build/install$(prefix)/include
CPPFLAGS += -I$(abs_top_srcdir)/depends/libyarn/build/install$(prefix)/include
CPPFLAGS += -I/usr/local/hawq/include

ifdef PGXS
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
else # not PGXS
override CPPFLAGS := -I$(top_srcdir)/src/include $(CPPFLAGS)
ifdef VPATH
override CPPFLAGS := -I$(top_builddir)/src/include $(CPPFLAGS)
endif
endif # not PGXS

CC = @CC@
GCC = @GCC@
SUN_STUDIO_CC = @SUN_STUDIO_CC@
CFLAGS = @CFLAGS@
CFLAGS_SSE42 = @CFLAGS_SSE42@

# Kind-of compilers

BISON = @BISON@
BISONFLAGS = @BISONFLAGS@ $(YFLAGS)
FLEX = @FLEX@
MAVEN = @MAVEN@
FLEXFLAGS = @FLEXFLAGS@ $(LFLAGS)
DTRACE = @DTRACE@
DTRACEFLAGS = @DTRACEFLAGS@
ZIC = @ZIC@

# Linking

AR = @AR@
DLLTOOL = @DLLTOOL@
DLLWRAP = @DLLWRAP@
LIBS = @LIBS@
LDAP_LIBS_FE = @LDAP_LIBS_FE@
LDAP_LIBS_BE = @LDAP_LIBS_BE@
LD = @LD@
with_gnu_ld = @with_gnu_ld@
ld_R_works = @ld_R_works@

# We want -L for libpgport.a to be first in LDFLAGS.  We also need LDFLAGS
# to be a "recursively expanded" variable, else adjustments to rpathdir
# don't work right.  So we must NOT do LDFLAGS := something, meaning this has
# to be done first and elsewhere we must only do LDFLAGS += something.
ifdef PGXS
  LDFLAGS = -L$(libdir)
else
  LDFLAGS = -L$(top_builddir)/src/port
endif
LDFLAGS += @LDFLAGS@
LDFLAGS += -L$(abs_top_srcdir)/depends/libhdfs3/build/install$(prefix)/lib
LDFLAGS += -L$(abs_top_srcdir)/depends/libyarn/build/install$(prefix)/lib

LDFLAGS_EX = @LDFLAGS_EX@
# LDFLAGS_SL might have already been assigned by calling makefile
LDFLAGS_SL += @LDFLAGS_SL@
LDREL = -r
LDOUT = -o
RANLIB = @RANLIB@
WINDRES = @WINDRES@
X = @EXEEXT@

# Perl

ifneq (@PERL@,)
    # quoted to protect pathname with spaces
    PERL		= "@PERL@"
else
    PERL		= $(missing) perl
endif
perl_archlibexp		= @perl_archlibexp@
perl_privlibexp		= @perl_privlibexp@
perl_useshrplib		= @perl_useshrplib@
perl_embed_ldflags	= @perl_embed_ldflags@

# Java
ifneq (@JAVA@,)
    # quoted to protect pathname with spaces
	JAVA        = "@JAVA@"
	JAVAC       = "@JAVAC@"
	JAVAH       = "@JAVAH@"
	JAR         = "@JAR@"
	JAVADOC     = "@JAVADOC@"
	JAVA_HOME   = @JAVA_HOME@
	JAVAC_FLAGS = @JAVAC_FLAGS@
else
	JAVA        = $(missing) java
	JAVAC       = $(missing) javac
	JAVAH       = $(missing) javah
	JAR         = $(missing) jar
	JAVADOC     = $(missing) javadoc
endif

# R
ifeq ($(with_r), yes)
	R_HOME		= "@R_HOME@"
endif

# Miscellaneous

AWK	= @AWK@
LN_S	= @LN_S@
MSGFMT  = @MSGFMT@
MSGMERGE = @MSGMERGE@
PYTHON	= @PYTHON@
TAR	= @TAR@
XGETTEXT = @XGETTEXT@

GZIP	= gzip
BZIP2	= bzip2

PL_TESTDB = pl_regression
CONTRIB_TESTDB = contrib_regression

# Installation.

INSTALL	= $(SHELL) $(top_srcdir)/config/install-sh -c

INSTALL_SCRIPT_MODE	= 755
INSTALL_DATA_MODE	= 644
INSTALL_PROGRAM	= $(INSTALL_PROGRAM_ENV) $(INSTALL) $(INSTALL_STRIP_FLAG)
INSTALL_SCRIPT	= $(INSTALL) -m $(INSTALL_SCRIPT_MODE)
INSTALL_DATA	= $(INSTALL) -m $(INSTALL_DATA_MODE)
INSTALL_STLIB	= $(INSTALL_STLIB_ENV) $(INSTALL_DATA) $(INSTALL_STRIP_FLAG)
INSTALL_SHLIB	= $(INSTALL_SHLIB_ENV) $(INSTALL) $(INSTALL_SHLIB_OPTS) $(INSTALL_STRIP_FLAG)
# Override in Makefile.port if necessary
INSTALL_SHLIB_OPTS = -m 755

MKDIR_P = @MKDIR_P@

mkinstalldirs	= $(SHELL) $(top_srcdir)/config/mkinstalldirs
missing		= $(SHELL) $(top_srcdir)/config/missing

STRIP		= @STRIP@
STRIP_STATIC_LIB = @STRIP_STATIC_LIB@
STRIP_SHARED_LIB = @STRIP_SHARED_LIB@

# Documentation

JADE	= @JADE@
NSGMLS	= @NSGMLS@
SGMLSPL	= @SGMLSPL@

# Code coverage

GCOV = @GCOV@
LCOV = @LCOV@
GENHTML = @GENHTML@

ifeq ($(BUILD_TYPE),gcov)
	CFLAGS+=-fprofile-arcs -ftest-coverage
	CXXFLAGS+=-fprofile-arcs -ftest-coverage
	export BUILD_TYPE=gcov
endif

ifeq ($(enable_coverage),yes)
# ccache loses .gcno files
export CCACHE_DISABLE = 1
endif

# Feature settings

DEF_PGPORT = @default_port@
WANTED_LANGUAGES = @WANTED_LANGUAGES@

# catdump json
catdump_json = $(abs_top_srcdir)/tools/bin/gppylib/data/$(HQ_MAJORVERSION).json


##########################################################################
#
# Additional platform-specific settings
#

# Name of the "template"
PORTNAME= @PORTNAME@

build_os = @build_os@

host_tuple = @host@
host_os = @host_os@
host_cpu = @host_cpu@

# Make HAVE_IPV6 available for initdb script creation
HAVE_IPV6= @HAVE_IPV6@

# The HP-UX port makefile, for one, needs access to this symbol
HAVE_POSIX_SIGNALS= @HAVE_POSIX_SIGNALS@

# This is mainly for use on FreeBSD, where we have both a.out and elf
# systems now.  May be applicable to other systems to?
ELF_SYSTEM= @ELF_SYS@

# Backend stack size limit has to be hard-wired on Windows (it's in bytes)
WIN32_STACK_RLIMIT=4194304

# Pull in platform-specific magic
include $(top_builddir)/src/Makefile.port

# Set up rpath if enabled.  By default it will point to our libdir,
# but individual Makefiles can force other rpath paths if needed.
rpathdir = $(libdir)

ifeq ($(enable_rpath), yes)
LDFLAGS += $(rpath)
endif


##########################################################################
#
# Some variables needed to find some client interfaces

ifdef PGXS
# some contribs assumes headers and libs are in the source tree...
libpq_srcdir = $(includedir)
libpq_builddir = $(libdir)
else
libpq_srcdir = $(top_srcdir)/src/interfaces/libpq
libpq_builddir = $(top_builddir)/src/interfaces/libpq
endif

# This macro is for use by libraries linking to libpq.  (Because libpgport
# isn't created with the same link flags as libpq, it can't be used.)
libpq = -L$(libpq_builddir) -lpq

# If doing static linking, shared library dependency info isn't available,
# so add in the libraries that libpq depends on.
ifeq ($(enable_shared), no)
libpq += $(filter -lintl -lssl -lcrypto -lkrb5 -lcrypt, $(LIBS)) \
	$(LDAP_LIBS_FE) $(PTHREAD_LIBS)
endif

# This macro is for use by client executables (not libraries) that use libpq.
# We force clients to pull symbols from the non-shared library libpgport
# rather than pulling some libpgport symbols from libpq just because
# libpq uses those functions too.  This makes applications less
# dependent on changes in libpq's usage of pgport.  To do this we link to
# pgport before libpq.  This does cause duplicate -lpgport's to appear
# on client link lines.
ifdef PGXS
libpq_pgport = -L$(libdir) -lpgport $(libpq)
else
libpq_pgport = -L$(top_builddir)/src/port -lpgport $(libpq)
endif


submake-libpq:
	$(MAKE) -C $(libpq_builddir) all

submake-libpgport:
	$(MAKE) -C $(top_builddir)/src/port all

.PHONY: submake-libpq submake-libpgport


##########################################################################
#
# Customization
#
# This includes your local customizations if Makefile.custom exists
# in the source directory.  This file doesn't exist in the original
# distribution so that it doesn't get overwritten when you upgrade.
#
# NOTE:  Makefile.custom is from the pre-Autoconf days of PostgreSQL.
# You are liable to shoot yourself in the foot if you use it without
# knowing exactly what you're doing.  The preferred (and more
# reliable) method is to communicate what you want to do to the
# configure script, and leave the makefiles alone.

#-include $(top_srcdir)/src/Makefile.custom

ifneq ($(CUSTOM_INSTALL),)
INSTALL= $(CUSTOM_INSTALL)
endif

ifneq ($(CUSTOM_CC),)
  CC= $(CUSTOM_CC)
endif

ifneq ($(CUSTOM_COPT),)
  COPT= $(CUSTOM_COPT)
endif

ifdef COPT
   CFLAGS += $(COPT)
   LDFLAGS += $(COPT)
endif

ifdef PROFILE
   CFLAGS += $(PROFILE)
   LDFLAGS += $(PROFILE)
endif


##########################################################################
#
# substitute implementations of C library routines (see src/port/)

LIBOBJS = @LIBOBJS@

# files needed for the chosen CRC-32C implementation
PG_CRC32C_OBJS = @PG_CRC32C_OBJS@

LIBS := -lpgport $(LIBS)
# add location of libpgport.a to LDFLAGS
ifdef PGXS
override LDFLAGS := -L$(libdir) $(LDFLAGS)
else
override LDFLAGS := -L$(top_builddir)/src/port $(LDFLAGS)
endif

# to make ws2_32.lib the last library, and always link with shfolder,
# so SHGetFolderName isn't picked up from shell32.dll
ifeq ($(PORTNAME),win32)
LIBS += -lws2_32 -lshfolder
endif

# Not really standard libc functions, used by the backend.
TAS         = @TAS@


##########################################################################
# Required by HAWQ RM

ifeq ($(BLD_ARCH),osx106_x86)
LIBS := $(LIBS) -framework CoreServices -framework IOKit
endif

LIBS := $(LIBS) -lyarn -lkrb5

##########################################################################
#
# Global targets and rules

%.i: %.c
	$(CPP) $(CPPFLAGS) -o $@ $<

%.gz: %
	$(GZIP) -f --best $<

%.bz2: %
	$(BZIP2) -f $<

ifeq ($(PORTNAME),win32)
# Build rules to add versioninfo resources to win32 binaries
WIN32RES += win32ver.o
ifeq ($(PGFILESHLIB),1)
PGFTYPE=VFT_DLL
else
PGFTYPE=VFT_APP
endif
ifneq (,$(PGAPPICON))
PGICOSTR=$(subst /,\/,IDI_ICON ICON \"$(top_builddir)/src/port/$(PGAPPICON).ico\")
endif
win32ver.rc: $(top_builddir)/src/port/win32ver.rc
	sed -e 's;FILEDESC;$(PGFILEDESC);' -e 's;VFT_APP;$(PGFTYPE);' -e 's;_ICO_;$(PGICOSTR);' -e 's;\(VERSION.*\),0 *$$;\1,'`date '+%y%j' | sed 's/^0*//'`';' $(top_builddir)/src/port/win32ver.rc > win32ver.rc
win32ver.o: $(top_builddir)/src/port/win32ver.rc
	sed -e 's;FILEDESC;$(PGFILEDESC);' -e 's;VFT_APP;$(PGFTYPE);' -e 's;_ICO_;$(PGICOSTR);' -e 's;\(VERSION.*\),0 *$$;\1,'`date '+%y%j' | sed 's/^0*//'`';' $(top_builddir)/src/port/win32ver.rc > win32ver.rc
	windres -i win32ver.rc -o win32ver.o --include-dir=$(top_builddir)/src/include
	rm -f win32ver.rc
endif

ifndef PGXS

# Remake Makefile.global from Makefile.global.in if the latter
# changed. In order to trigger this rule, the including file must
# write `include $(top_builddir)/src/Makefile.global', not some
# shortcut thereof.
$(top_builddir)/src/Makefile.global: $(top_srcdir)/src/Makefile.global.in $(top_builddir)/config.status
	cd $(top_builddir) && ./config.status src/Makefile.global

# Remake pg_config.h from pg_config.h.in if the latter changed.
# config.status will not change the timestamp on pg_config.h if it
# doesn't change, so as to avoid recompiling the entire tree
# unnecessarily. Therefore we make config.status update a timestamp file
# stamp-h everytime it runs, so that we don't trigger this rule everytime.
# (We do trigger the null rule for stamp-h to pg_config.h everytime; so it's
# important for that rule to be null!)
#
# Of course you need to turn on dependency tracking to get any
# dependencies on pg_config.h.
$(top_builddir)/src/include/pg_config.h: $(top_builddir)/src/include/stamp-h

$(top_builddir)/src/include/stamp-h: $(top_srcdir)/src/include/pg_config.h.in $(top_builddir)/config.status
	cd $(top_builddir) && ./config.status src/include/pg_config.h

# Also remake ecpg_config.h from ecpg_config.h.in if the latter changed. Values in it can
# only change if pg_config.h has changed, so include this file to its dependencies.
$(top_builddir)/src/interfaces/ecpg/include/ecpg_config.h: $(top_builddir)/src/include/pg_config.h $(top_builddir)/src/interfaces/ecpg/include/ecpg_config.h.in $(top_builddir)/config.status
	cd $(top_builddir) && ./config.status src/interfaces/ecpg/include/ecpg_config.h

# When configure changes, rerun configure with the same options as
# last time. To change configure, you need to run autoconf manually.
$(top_builddir)/config.status: $(top_srcdir)/configure
	cd $(top_builddir) && ./config.status --recheck

endif # not PGXS


install-strip:
	@$(MAKE) INSTALL_PROGRAM_ENV="STRIPPROG='$(STRIP)'" \
	    INSTALL_STLIB_ENV="STRIPPROG='$(STRIP_STATIC_LIB)'" \
	    INSTALL_SHLIB_ENV="STRIPPROG='$(STRIP_SHARED_LIB)'" \
	    INSTALL_STRIP_FLAG=-s \
	    install


##########################################################################
#
# Automatic dependency generation
# -------------------------------
# When we configure with --enable-depend then we override the default
# compilation rule with the magic below. While or after creating the
# actual output file we also create a dependency list for the .c file.
# Next time we invoke make we will have top-notch information about
# whether this file needs to be updated. The dependency files are kept
# in the .deps subdirectory of each directory.

autodepend = @autodepend@

ifeq ($(autodepend), yes)

ifndef COMPILE.c
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
endif

DEPDIR = .deps

ifeq ($(GCC), yes)

# GCC allows us to create object and dependency file in one invocation.
%.o : %.c
	@if test ! -d $(DEPDIR); then mkdir -p $(DEPDIR); fi
	$(COMPILE.c) -o $@ $< -MMD -MP -MF $(DEPDIR)/$(*F).Po

endif # GCC

# Include all the dependency files generated for the current
# directory. List /dev/null as dummy because if the wildcard expands
# to nothing then make would complain.
-include $(wildcard $(DEPDIR)/*.Po) /dev/null

# hook for clean-up
clean distclean maintainer-clean: clean-deps

.PHONY: clean-deps
clean-deps:
	@rm -rf $(DEPDIR)

endif # autodepend


##########################################################################
#
# Native language support

ifeq ($(enable_nls), yes)
ifneq (,$(wildcard $(srcdir)/nls.mk))

include $(top_srcdir)/src/nls-global.mk

endif # nls.mk
endif # enable_nls

##########################################################################
#
# Coverage

# Explanation of involved files:
#   foo.c	source file
#   foo.o	object file
#   foo.gcno	gcov graph (a.k.a. "notes") file, created at compile time
#		(by gcc -ftest-coverage)
#   foo.gcda	gcov data file, created when the program is run (for
#		programs compiled with gcc -fprofile-arcs)
#   foo.c.gcov	gcov output file with coverage information, created by
#		gcov from foo.gcda (by "make coverage")
#   foo.c.gcov.out  stdout captured when foo.c.gcov is created, mildly
#		interesting
#   lcov.info	lcov tracefile, built from gcda files in one directory,
#		later collected by "make coverage-html"

ifeq ($(enable_coverage), yes)

# There is a strange interaction between lcov and existing .gcov
# output files.  Hence the rm command and the ordering dependency.

gcda_files := $(wildcard *.gcda)

lcov.info: $(gcda_files)
	rm -f *.gcov
	$(if $^,$(LCOV) -d . -c -o $@ $(LCOVFLAGS))

%.c.gcov: %.gcda | lcov.info
	$(GCOV) -b -f -p -o . $(GCOVFLAGS) $*.c >$*.c.gcov.out

# hook for clean-up
clean distclean maintainer-clean: clean-coverage

.PHONY: clean-coverage
clean-coverage:
	rm -f *.gcda *.gcno lcov.info *.gcov *.gcov.out


# User-callable target to reset counts between test runs
coverage-clean:
	rm -f `find . -name '*.gcda' -print`

endif # enable_coverage
