# @configure_input@
#
# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
# Copyright (C) 2004-2014 Red Hat, Inc. All rights reserved.
#
# This file is part of LVM2.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

SHELL = /bin/sh

@SET_MAKE@

# Allow environment to override any built-in default value for CC.
# If there is a built-in default, CC is NOT set to @CC@ here.
CC ?= @CC@

# If $(CC) holds the usual built-in default value of 'cc' then replace it with
# the configured value.
# (To avoid this and force the use of 'cc' from the environment, supply its
# full path.)
ifeq ($(CC), cc)
  CC = @CC@
endif

RANLIB = @RANLIB@
INSTALL = @INSTALL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
LCOV = @LCOV@
GENHTML = @GENHTML@
LN_S = @LN_S@
SED = @SED@
CFLOW_CMD = @CFLOW_CMD@
AWK = @AWK@
CHMOD = @CHMOD@
PYTHON2 = @PYTHON2@
PYTHON3 = @PYTHON3@
PYCOMPILE = $(top_srcdir)/autoconf/py-compile

LIBS = @LIBS@
# Extra libraries always linked with static binaries
STATIC_LIBS = $(SELINUX_LIBS) $(UDEV_LIBS) $(BLKID_LIBS)
DEFS += @DEFS@
# FIXME set this only where it's needed, not globally?
CFLAGS ?= @COPTIMISE_FLAG@ @CFLAGS@
LDFLAGS ?= @COPTIMISE_FLAG@ @LDFLAGS@
CLDFLAGS += @CLDFLAGS@
ELDFLAGS += @ELDFLAGS@
LDDEPS += @LDDEPS@
LIB_SUFFIX = @LIB_SUFFIX@
LVMINTERNAL_LIBS = -llvm-internal $(DAEMON_LIBS) $(UDEV_LIBS) $(DL_LIBS) $(BLKID_LIBS)
DL_LIBS = @DL_LIBS@
M_LIBS = @M_LIBS@
PTHREAD_LIBS = @PTHREAD_LIBS@
READLINE_LIBS = @READLINE_LIBS@
SELINUX_LIBS = @SELINUX_LIBS@
UDEV_CFLAGS = @UDEV_CFLAGS@
UDEV_LIBS = @UDEV_LIBS@
BLKID_CFLAGS = @BLKID_CFLAGS@
BLKID_LIBS = @BLKID_LIBS@
VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
TESTING = @TESTING@

# Setup directory variables
prefix = @prefix@
exec_prefix = @exec_prefix@
udev_prefix = @udev_prefix@
sysconfdir = @sysconfdir@
rootdir = $(DESTDIR)/
bindir = $(DESTDIR)@bindir@
confdir = $(DESTDIR)@CONFDIR@/lvm
includedir = $(DESTDIR)@includedir@
libdir = $(DESTDIR)@libdir@
libexecdir = $(DESTDIR)@libexecdir@
usrlibdir = $(DESTDIR)@usrlibdir@
sbindir = $(DESTDIR)@sbindir@
usrsbindir = $(DESTDIR)@usrsbindir@
datarootdir = @datarootdir@
datadir = $(DESTDIR)@datadir@
infodir = $(DESTDIR)@infodir@
mandir = $(DESTDIR)@mandir@
localedir = $(DESTDIR)@localedir@
staticdir = $(DESTDIR)@STATICDIR@
udevdir = $(DESTDIR)@udevdir@
pkgconfigdir = $(usrlibdir)/pkgconfig
initdir = $(DESTDIR)$(sysconfdir)/rc.d/init.d
dbusconfdir = $(DESTDIR)$(sysconfdir)/dbus-1/system.d
dbusservicedir = $(datadir)/dbus-1/system-services
systemd_unit_dir = $(DESTDIR)@systemdsystemunitdir@
systemd_generator_dir = $(DESTDIR)$(SYSTEMD_GENERATOR_DIR)
systemd_dir = $(DESTDIR)@systemdutildir@
tmpfiles_dir = $(DESTDIR)@tmpfilesdir@
ocf_scriptdir = $(DESTDIR)@OCFDIR@
pythonprefix = $(DESTDIR)$(prefix)

# N.B. No $(DESTDIR) prefix here.
python2dir = @PYTHON2DIR@
python3dir = @PYTHON3DIR@

USRLIB_RELPATH = $(shell echo $(abspath $(usrlibdir) $(libdir)) | \
  $(AWK) -f $(top_srcdir)/scripts/relpath.awk)

SYSTEMD_GENERATOR_DIR = @systemdutildir@/system-generators
DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@
DEFAULT_ARCHIVE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_ARCHIVE_SUBDIR@
DEFAULT_BACKUP_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_BACKUP_SUBDIR@
DEFAULT_CACHE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_CACHE_SUBDIR@
DEFAULT_PROFILE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_PROFILE_SUBDIR@
DEFAULT_LOCK_DIR = @DEFAULT_LOCK_DIR@
DEFAULT_RUN_DIR = @DEFAULT_RUN_DIR@
DEFAULT_MANGLING = @MANGLING@

# Setup vpath search paths for some suffixes
vpath %.c $(srcdir)
vpath %.cpp $(srcdir)
vpath %.in $(srcdir)
vpath %.po $(srcdir)
vpath %.exported_symbols $(srcdir)

interface = @interface@
interfacebuilddir = $(top_builddir)/libdm/$(interface)
rpmbuilddir = $(abs_top_builddir)/build

# The number of jobs to run, if blank, defaults to the make standard
ifndef MAKEFLAGS
MAKEFLAGS = @JOBS@
endif

# Handle installation of files
ifeq ("@WRITE_INSTALL@", "yes")
# leaving defaults
M_INSTALL_SCRIPT =
M_INSTALL_DATA = -m 644
else
M_INSTALL_PROGRAM = -m 555
M_INSTALL_DATA = -m 444
endif
INSTALL_PROGRAM = $(INSTALL) $(M_INSTALL_PROGRAM) $(STRIP)
INSTALL_DATA = $(INSTALL) -p $(M_INSTALL_DATA)
INSTALL_WDATA = $(INSTALL) -p -m 644

INSTALL_DIR = $(INSTALL) -m 755 -d
INSTALL_ROOT_DIR = $(INSTALL) -m 700 -d
INSTALL_ROOT_DATA = $(INSTALL) -m 600
INSTALL_SCRIPT = $(INSTALL) -p $(M_INSTALL_PROGRAM)

.SUFFIXES: .c .cpp .d .o .so .a .po .pot .mo .dylib

WFLAGS +=\
 -Wall\
 -Wcast-align\
 -Wfloat-equal\
 -Wformat-security\
 -Winline\
 -Wmissing-format-attribute\
 -Wmissing-include-dirs\
 -Wmissing-noreturn\
 -Wpointer-arith\
 -Wredundant-decls\
 -Wshadow\
 -Wundef\
 -Wwrite-strings

WCFLAGS +=\
 -Wmissing-declarations\
 -Wmissing-prototypes\
 -Wnested-externs\
 -Wold-style-definition\
 -Wstrict-prototypes\
 -Wuninitialized

ifeq ("@HAVE_WJUMP@", "yes")
WCFLAGS += -Wjump-misses-init
endif

ifeq ("@HAVE_WCLOBBERED@", "yes")
WFLAGS +=\
 -Wclobbered\
 -Wempty-body\
 -Wignored-qualifiers\
 -Wlogical-op\
 -Wtype-limits

WCFLAGS +=\
 -Wmissing-parameter-type\
 -Wold-style-declaration\
 -Woverride-init
endif

ifeq ("@HAVE_WSYNCNAND@", "yes")
WFLAGS += -Wsync-nand
endif

ifneq ("@STATIC_LINK@", "yes")
ifeq ("@HAVE_PIE@", "yes")
ifeq ("@HAVE_FULL_RELRO@", "yes")
  EXTRA_EXEC_CFLAGS += -fPIE
  EXTRA_EXEC_LDFLAGS += -Wl,-z,relro,-z,now -pie -fPIE
  CLDFLAGS += -Wl,-z,relro
endif
endif
endif

#WFLAGS += -W -Wno-sign-compare -Wno-unused-parameter -Wno-missing-field-initializers
#WFLAGS += -Wsign-compare -Wunused-parameter -Wmissing-field-initializers
#WFLAGS += -Wconversion -Wbad-function-cast -Wcast-qual -Waggregate-return -Wpacked
#WFLAGS += -pedantic -std=gnu99
#DEFS += -DDEBUG_CRC32

#
# Avoid recursive extension of CFLAGS
# by checking whether CFLAGS already has fPIC string
#
ifeq (,$(findstring fPIC,$(CFLAGS)))

CFLAGS += -fPIC

ifeq ("@DEBUG@", "yes")
  CFLAGS += -g -fno-omit-frame-pointer
  DEFS += -DDEBUG
  # memory debugging is not thread-safe yet
  ifneq ("@DMEVENTD@", "yes")
    DEFS += -DDEBUG_MEM
  endif
endif

# end of fPIC protection
endif

LDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib
CLDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib

DAEMON_LIBS = -ldaemonclient
LDFLAGS += -L$(top_builddir)/libdaemon/client
CLDFLAGS += -L$(top_builddir)/libdaemon/client

ifeq ("@DMEVENTD@", "yes")
  LDFLAGS += -L$(top_builddir)/daemons/dmeventd
  CLDFLAGS += -L$(top_builddir)/daemons/dmeventd
endif

# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not suppored.
#DEFS += -DDEBUG_POOL
# Default pool locking is using the crc checksum. With mprotect memory
# enforcing compilation faulty memory write could be easily found.
#DEFS += -DDEBUG_ENFORCE_POOL_LOCKING
#DEFS += -DBOUNDS_CHECK

# LVM is not supposed to use mmap while devices are suspended.
# This code causes a core dump if gets called.
#DEFS += -DDEBUG_MEMLOCK

#CFLAGS += -pg
#LDFLAGS += -pg

STRIP=
#STRIP = -s

LVM_VERSION := $(shell cat $(top_srcdir)/VERSION)

LIB_VERSION_LVM := $(shell $(AWK) -F '.' '{printf "%s.%s",$$1,$$2}' $(top_srcdir)/VERSION)

LIB_VERSION_DM := $(shell $(AWK) -F '.' '{printf "%s.%s",$$1,$$2}' $(top_srcdir)/VERSION_DM)

LIB_VERSION_APP := $(shell $(AWK) -F '[(). ]' '{printf "%s.%s",$$1,$$4}' $(top_srcdir)/VERSION)

INCLUDES += -I$(srcdir) -I$(top_builddir)/include

INC_LNS = $(top_builddir)/include/.symlinks_created

DEPS = $(top_builddir)/make.tmpl $(top_srcdir)/VERSION \
       $(top_builddir)/Makefile $(INC_LNS)

OBJECTS = $(SOURCES:%.c=%.o) $(CXXSOURCES:%.cpp=%.o)
POTFILES = $(SOURCES:%.c=%.pot)

.PHONY: all pofile distclean clean cleandir cflow device-mapper
.PHONY: install install_cluster install_device-mapper install_lvm2
.PHONY: install_dbus_service
.PHONY: install_lib_shared install_dm_plugin install_lvm2_plugin
.PHONY: install_ocf install_systemd_generators install_all_man all_man man help
.PHONY: python_bindings install_python_bindings
.PHONY: $(SUBDIRS) $(SUBDIRS.install) $(SUBDIRS.clean) $(SUBDIRS.distclean)
.PHONY: $(SUBDIRS.pofile) $(SUBDIRS.install_cluster) $(SUBDIRS.cflow)
.PHONY: $(SUBDIRS.device-mapper) $(SUBDIRS.install-device-mapper)
.PHONY: $(SUBDIRS.generate) generate

SUBDIRS.device-mapper := $(SUBDIRS:=.device-mapper)
SUBDIRS.install := $(SUBDIRS:=.install)
SUBDIRS.install_cluster := $(SUBDIRS:=.install_cluster)
SUBDIRS.install_device-mapper := $(SUBDIRS:=.install_device-mapper)
SUBDIRS.install_lvm2 := $(SUBDIRS:=.install_lvm2)
SUBDIRS.install_ocf := $(SUBDIRS:=.install_ocf)
SUBDIRS.pofile := $(SUBDIRS:=.pofile)
SUBDIRS.cflow := $(SUBDIRS:=.cflow)
SUBDIRS.clean := $(SUBDIRS:=.clean)
SUBDIRS.distclean := $(SUBDIRS:=.distclean)

TARGETS += $(LIB_SHARED) $(LIB_STATIC)

all: $(SUBDIRS) $(TARGETS)

install: all $(SUBDIRS.install)
install_cluster: all $(SUBDIRS.install_cluster)
install_device-mapper: $(SUBDIRS.install_device-mapper)
install_lvm2: $(SUBDIRS.install_lvm2)
install_ocf: $(SUBDIRS.install_ocf)
cflow: $(SUBDIRS.cflow)

$(SUBDIRS): $(SUBDIRS.device-mapper)
	$(MAKE) -C $@

$(SUBDIRS.device-mapper):
	$(MAKE) -C $(@:.device-mapper=) device-mapper

$(SUBDIRS.install): $(SUBDIRS)
	$(MAKE) -C $(@:.install=) install

$(SUBDIRS.install_cluster): $(SUBDIRS)
	$(MAKE) -C $(@:.install_cluster=) install_cluster

$(SUBDIRS.install_device-mapper): device-mapper
	$(MAKE) -C $(@:.install_device-mapper=) install_device-mapper

$(SUBDIRS.install_lvm2): $(SUBDIRS)
	$(MAKE) -C $(@:.install_lvm2=) install_lvm2

$(SUBDIRS.install_ocf):
	$(MAKE) -C $(@:.install_ocf=) install_ocf

$(SUBDIRS.clean):
	-$(MAKE) -C $(@:.clean=) clean

$(SUBDIRS.distclean):
	-$(MAKE) -C $(@:.distclean=) distclean

$(SUBDIRS.cflow):
	$(MAKE) -C $(@:.cflow=) cflow

ifeq ("@INTL@", "yes")
pofile: $(SUBDIRS.pofile) $(POTFILES)

$(SUBDIRS.pofile):
	$(MAKE) -C $(@:.pofile=) pofile
endif

$(SUBDIRS.generate):
	$(MAKE) -C $(@:.generate=) generate

ifneq ("$(CFLOW_LIST_TARGET)", "")
CLEAN_CFLOW += $(CFLOW_LIST_TARGET)
$(CFLOW_LIST_TARGET): $(CFLOW_LIST)
	echo "CFLOW_SOURCES += $(addprefix \
		\$$(top_srcdir)$(subst $(top_srcdir),,$(srcdir))/, $(CFLOW_LIST))" > $@
cflow: $(CFLOW_LIST_TARGET)
endif

ifneq ("$(CFLOW_TARGET)", "")
CLEAN_CFLOW += \
	$(CFLOW_TARGET).cflow \
	$(CFLOW_TARGET).xref \
	$(CFLOW_TARGET).tree \
	$(CFLOW_TARGET).rtree \
	$(CFLOW_TARGET).rxref

ifneq ("$(CFLOW_CMD)", "")
CFLOW_FLAGS +=\
 --cpp="$(CC) -E" \
 --symbol _ISbit:wrapper \
 --symbol __attribute__:wrapper \
 --symbol __const__:wrapper \
 --symbol __const:type \
 --symbol __restrict:type \
 --symbol __extension__:wrapper \
 --symbol __nonnull:wrapper \
 --symbol __nothrow__:wrapper \
 --symbol __pure__:wrapper \
 --symbol __REDIRECT:wrapper \
 --symbol __REDIRECT_NTH:wrapper \
 --symbol __wur:wrapper \
 -I$(top_srcdir)/libdm \
 -I$(top_srcdir)/libdm/ioctl \
 -I$(top_srcdir)/daemons/dmeventd/plugins/lvm2/ \
 $(INCLUDES) $(DEFS)

$(CFLOW_TARGET).cflow: $(CFLOW_SOURCES)
	$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) $(CFLOW_SOURCES)
$(CFLOW_TARGET).rxref: $(CFLOW_SOURCES)
	$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) -r --omit-arguments $(CFLOW_SOURCES)
$(CFLOW_TARGET).tree: $(CFLOW_SOURCES)
	$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) --omit-arguments -T -b $(CFLOW_SOURCES)
$(CFLOW_TARGET).xref: $(CFLOW_SOURCES)
	$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) --omit-arguments -x $(CFLOW_SOURCES)
#$(CFLOW_TARGET).rtree:  $(CFLOW_SOURCES)
#	$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) -r --omit-arguments -T -b $(CFLOW_SOURCES)
cflow: $(CFLOW_TARGET).cflow $(CFLOW_TARGET).tree $(CFLOW_TARGET).rxref $(CFLOW_TARGET).xref
#$(CFLOW_TARGET).rtree
endif
endif

%.o: %.c
	$(CC) -c $(INCLUDES) $(DEFS) $(WFLAGS) $(WCFLAGS) $(CFLAGS) $(CFLAGS_$@) $< -o $@

%.o: %.cpp
	$(CXX) -c $(INCLUDES) $(DEFS) $(WFLAGS) $(CXXFLAGS) $(CXXFLAGS_$@) $< -o $@

%.pot: %.c Makefile
	$(CC) -E $(INCLUDES) $(BLKID_CFLAGS) $(VALGRIND_CFLAGS) $(UDEV_CFLAGS) -include $(top_builddir)/include/pogen.h \
		$(DEFS) $(WFLAGS) $(CFLAGS) $< > $@

%.so: %.o
	$(CC) -c $(CFLAGS) $(CLDFLAGS) $< $(LIBS) -o $@

ifneq (,$(LIB_SHARED))

TARGETS += $(LIB_SHARED).$(LIB_VERSION)
$(LIB_SHARED).$(LIB_VERSION): $(OBJECTS) $(LDDEPS)
ifeq ("@LIB_SUFFIX@","so")
	$(CC) -shared -Wl,-soname,$(notdir $@) \
		$(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
endif
ifeq ("@LIB_SUFFIX@","dylib")
	$(CC) -dynamiclib -dylib_current_version,$(LIB_VERSION) \
		$(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
endif

$(LIB_SHARED): $(LIB_SHARED).$(LIB_VERSION)
	$(LN_S) -f $(<F) $@

CLEAN_TARGETS += $(LDDEPS) .exported_symbols_generated

install_lib_shared: $(LIB_SHARED)
	$(INSTALL_PROGRAM) -D $< $(libdir)/$(<F).$(LIB_VERSION)
	$(INSTALL_DIR) $(usrlibdir)
	$(LN_S) -f $(USRLIB_RELPATH)$(<F).$(LIB_VERSION) $(usrlibdir)/$(<F)

# FIXME: plugins are installed to subdirs
#        and for compatibility links in libdir are created
#        when the code is fixed links could be removed.
install_dm_plugin: $(LIB_SHARED)
	$(INSTALL_PROGRAM) -D $< $(libdir)/device-mapper/$(<F)
	$(LN_S) -f device-mapper/$(<F) $(libdir)/$(<F)

install_lvm2_plugin: $(LIB_SHARED)
	$(INSTALL_PROGRAM) -D $< $(libdir)/lvm2/$(<F)
	$(LN_S) -f lvm2/$(<F) $(libdir)/$(<F)
	$(LN_S) -f $(<F) $(libdir)/$(<F).$(LIB_VERSION)
endif

$(LIB_STATIC): $(OBJECTS)
	$(RM) $@
	$(AR) rs $@ $(OBJECTS)

%.d: %.c $(INC_LNS)
	$(MKDIR_P) $(dir $@); \
	set -e; \
	FILE=`echo $@ | sed 's/\\//\\\\\\//g;s/\\.d//g'`; \
	DEPS=`echo $(DEPS) | sed -e 's/\\//\\\\\\//g'`; \
	$(CC) -MM $(INCLUDES) $(BLKID_CFLAGS) $(VALGRIND_CFLAGS) $(UDEV_CFLAGS) $(DEFS) -o $@ $<; \
	sed -i "s/\(.*\)\.o[ :]*/$$FILE.o $$FILE.d $$FILE.pot: $$DEPS /g" $@; \
	DEPLIST=`sed 's/ \\\\//;s/.*://;' < $@`; \
	echo $$DEPLIST | fmt -1 | sed 's/ //g;s/\(.*\)/\1:/' >> $@; \
	[ -s $@ ] || $(RM) $@

%.mo: %.po
	$(MSGFMT) -o $@ $<

CLEAN_TARGETS += \
	$(SOURCES:%.c=%.d) $(SOURCES:%.c=%.gcno) $(SOURCES:%.c=%.gcda) \
	$(SOURCES2:%.c=%.o) $(SOURCES2:%.c=%.d) $(SOURCES2:%.c=%.gcno) $(SOURCES2:%.c=%.gcda) \
	$(POTFILES) $(CLEAN_CFLOW)

cleandir:
ifneq (,$(firstword $(CLEAN_DIRS)))
	$(RM) -r $(CLEAN_DIRS)
endif
	$(RM) $(OBJECTS) $(TARGETS) $(CLEAN_TARGETS) core

clean: $(SUBDIRS.clean) cleandir

distclean: cleandir $(SUBDIRS.distclean)
ifneq (,$(firstword $(DISTCLEAN_DIRS)))
	$(RM) -r $(DISTCLEAN_DIRS)
endif
	$(RM) $(DISTCLEAN_TARGETS) Makefile

.exported_symbols_generated: $(EXPORTED_HEADER) .exported_symbols $(DEPS)
	set -e; \
	( cat $(srcdir)/.exported_symbols; \
	  if test -n "$(EXPORTED_HEADER)"; then \
		$(CC) -E -P $(INCLUDES) $(DEFS) $(EXPORTED_HEADER) | \
		$(SED) -ne "/^typedef|}/!s/.*[ *]\($(EXPORTED_FN_PREFIX)_[a-z0-9_]*\)(.*/\1/p"; \
	  fi \
	) > $@

EXPORTED_UC := $(shell echo $(EXPORTED_FN_PREFIX) | tr '[a-z]' '[A-Z]')
EXPORTED_SYMBOLS := $(wildcard $(srcdir)/.exported_symbols.Base $(srcdir)/.exported_symbols.$(EXPORTED_UC)_[0-9_]*[0-9])

.export.sym: .exported_symbols_generated $(EXPORTED_SYMBOLS)
ifeq (,$(firstword $(EXPORTED_SYMBOLS)))
	set -e; (echo "Base {"; echo "	global:";\
		 $(SED) "s/^/		/;s/$$/;/" $<;\
		 echo "};";\
		 echo "Local {"; echo "	local:"; echo "		*;"; echo "};";\
		 ) > $@
else
	set -e;\
	R=$$(sort $^ | uniq -u);\
	test -z "$$R" || { echo "Mismatch between symbols in shared library and lists in .exported_symbols.* files: $$R"; false; } ;\
	( for i in $$(echo $(EXPORTED_SYMBOLS) | tr ' ' '\n' | sort -rnt_ -k5 ); do\
		echo "$${i##*.} {"; echo "	global:";\
		$(SED) "s/^/		/;s/$$/;/" $$i;\
		echo "};";\
	  done;\
	  echo "Local {"; echo "	local:"; echo "		*;"; echo "};";\
	) > $@
endif

ifeq ("@USE_TRACKING@","yes")
ifeq (,$(findstring $(MAKECMDGOALS),cscope.out cflow clean distclean lcov \
 help check check_local check_cluster check_lvmetad check_lvmpolld))
    ifdef SOURCES
       -include $(SOURCES:.c=.d) $(CXXSOURCES:.cpp=.d)
    endif
    ifdef SOURCES2
       -include $(SOURCES2:.c=.d)
    endif
endif
endif
