#
# Copyright (C) 2004-2015 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

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@

CONFSRC=example.conf
CONFDEST=lvm.conf
CONFLOCAL=lvmlocal.conf

PROFILE_TEMPLATES=command_profile_template.profile metadata_profile_template.profile
PROFILES=$(PROFILE_TEMPLATES) \
	$(srcdir)/cache-mq.profile \
	$(srcdir)/cache-smq.profile \
	$(srcdir)/thin-generic.profile \
	$(srcdir)/thin-performance.profile

include $(top_builddir)/make.tmpl

.PHONY: install_conf install_localconf install_profiles

generate:
	(cat $(top_srcdir)/conf/example.conf.base && LD_LIBRARY_PATH=$(top_builddir)/libdm:$(LD_LIBRARY_PATH) $(top_builddir)/tools/lvm dumpconfig --type default --unconfigured --withcomments --ignorelocal --withspaces) > example.conf.in
	(cat $(top_srcdir)/conf/lvmlocal.conf.base && LD_LIBRARY_PATH=$(top_builddir)/libdm:$(LD_LIBRARY_PATH) $(top_builddir)/tools/lvm dumpconfig --type default --unconfigured --withcomments --withspaces local) > lvmlocal.conf.in

install_conf: $(CONFSRC)
	@if [ ! -e $(confdir)/$(CONFDEST) ]; then \
		echo "$(INSTALL_WDATA) -D $< $(confdir)/$(CONFDEST)"; \
		$(INSTALL_WDATA) -D $< $(confdir)/$(CONFDEST); \
	fi

install_localconf: $(CONFLOCAL)
	@if [ ! -e $(confdir)/$(CONFLOCAL) ]; then \
		echo "$(INSTALL_WDATA) -D $< $(confdir)/$(CONFLOCAL)"; \
		$(INSTALL_WDATA) -D $< $(confdir)/$(CONFLOCAL); \
	fi

install_profiles: $(PROFILES)
	$(INSTALL_DIR) $(DESTDIR)$(DEFAULT_PROFILE_DIR)
	$(INSTALL_DATA) $(PROFILES) $(DESTDIR)$(DEFAULT_PROFILE_DIR)/

install_lvm2: install_conf install_localconf install_profiles

install: install_lvm2

DISTCLEAN_TARGETS += $(CONFSRC) $(CONFLOCAL) $(PROFILE_TEMPLATES)
