# -*-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@
with_magma_sanitize = @with_magma_sanitize@

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$(DEPENDENCY_PATH)/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 += -g
ifeq ($(findstring clang, $(shell $(CC) --version)), clang)
CFLAGS += -fno-limit-debug-info
CFLAGS += -glldb

ifeq ($(shell uname), Darwin)
	CFLAGS += -flat_namespace -Wl,-undefined,suppress
else ifeq ($(shell uname), Linux)
	CFLAGS += -Wl,--unresolved-symbols=ignore-all
endif

endif
CFLAGS += -fno-omit-frame-pointer
CFLAGS_SSE42 = @CFLAGS_SSE42@
CXXFLAGS = @CXXFLAGS@
CXXFLAGS += -g
ifeq ($(findstring clang, $(shell $(CXX) --version)), clang)
CXXFLAGS += -stdlib=libc++
CXXFLAGS += -fno-limit-debug-info
CXXFLAGS += -glldb
endif
CXXFLAGS += -fno-omit-frame-pointer

# 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$(DEPENDENCY_PATH)/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

##########################################################################
# Add uuid support

LIBS := $(LIBS) -luuid

##########################################################################
# Add sanitize check option in linkage flag
ifeq ($(with_magma_sanitize),yes)
LIBASAN = -fno-optimize-sibling-calls -fno-omit-frame-pointer -fsanitize=address
endif

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