# -*-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_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

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
