# @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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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@
PYTHON = @PYTHON@

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
systemd_unit_dir = $(DESTDIR)@systemdsystemunitdir@
systemd_generator_dir = $(DESTDIR)$(SYSTEMD_GENERATOR_DIR)
systemd_dir = $(DESTDIR)@systemdutildir@
tmpfiles_dir = $(DESTDIR)@tmpfilesdir@
ocf_scriptdir = $(DESTDIR)@OCFDIR@
pyexecdir = $(DESTDIR)$(prefix)

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_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 "	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
