#
# Copyright (C) 2006-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@

ifeq ("@APPLIB@", "yes")
	SOURCES = lvm2_activation_generator_systemd_red_hat.c
	TARGETS = lvm2_activation_generator_systemd_red_hat
endif

include $(top_builddir)/make.tmpl

ifeq ("@APPLIB@", "yes")
	DEPLIBS += $(top_builddir)/liblvm/liblvm2app.so $(top_builddir)/libdm/libdevmapper.so
	LDFLAGS += -L$(top_builddir)/liblvm
ifeq ("@DMEVENTD@", "yes")
	LDFLAGS += -Wl,-rpath-link,$(top_builddir)/daemons/dmeventd
endif
	LVMLIBS = @LVM2APP_LIB@ -ldevmapper
endif

LVM_SCRIPTS = lvmdump.sh lvmconf.sh
DM_SCRIPTS =

ifeq ("@FSADM@", "yes")
	LVM_SCRIPTS += fsadm.sh
endif

ifeq ("@BLKDEACTIVATE@", "yes")
	DM_SCRIPTS += blkdeactivate.sh
endif

OCF_SCRIPTS =
ifeq ("@OCF@", "yes")
        OCF_SCRIPTS += VolumeGroup.ocf
endif

vpath %.sh $(srcdir)
vpath %.ocf $(srcdir)

%_install: %.sh
	$(INSTALL_PROGRAM) -D $< $(sbindir)/$(basename $(<F))

%_install: %.ocf
	$(INSTALL_DIR) $(ocf_scriptdir)
	$(INSTALL_SCRIPT) $< $(ocf_scriptdir)/$(basename $(<F))

install_lvm2: $(LVM_SCRIPTS:.sh=_install)
install_device-mapper: $(DM_SCRIPTS:.sh=_install)

install_ocf: $(OCF_SCRIPTS:.ocf=_install)

install: install_lvm2 install_ocf install_device-mapper

# FIXME Customise for other distributions
install_initscripts:
	$(INSTALL_DIR) $(initdir)
ifeq ("@BUILD_DMEVENTD@", "yes")
	$(INSTALL_SCRIPT) lvm2_monitoring_init_red_hat $(initdir)/lvm2-monitor
endif
ifeq ("@BUILD_LVMETAD@", "yes")
	$(INSTALL_SCRIPT) lvm2_lvmetad_init_red_hat $(initdir)/lvm2-lvmetad
endif
ifeq ("@BUILD_LVMPOLLD@", "yes")
	$(INSTALL_SCRIPT) lvm2_lvmpolld_init_red_hat $(initdir)/lvm2-lvmpolld
endif
ifneq ("@CLVMD@", "none")
	$(INSTALL_SCRIPT) clvmd_init_red_hat $(initdir)/clvmd
endif
ifeq ("@BUILD_CMIRRORD@", "yes")
	$(INSTALL_SCRIPT) cmirrord_init_red_hat $(initdir)/cmirrord
endif
ifeq ("@BLKDEACTIVATE@", "yes")
	$(INSTALL_SCRIPT) blk_availability_init_red_hat $(initdir)/blk-availability
endif

CFLAGS_lvm2_activation_generator_systemd_red_hat.o += $(EXTRA_EXEC_CFLAGS)

lvm2_activation_generator_systemd_red_hat: $(OBJECTS) $(DEPLIBS)
	$(CC) -o $@ $(OBJECTS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) $(LVMLIBS)

install_systemd_generators:
	$(INSTALL_DIR) $(systemd_generator_dir)
ifeq ("@APPLIB@", "yes")
	$(INSTALL_PROGRAM) lvm2_activation_generator_systemd_red_hat $(systemd_generator_dir)/lvm2-activation-generator
else
	@echo "WARNING: LVM2 activation systemd generator not installed." \
	      "It requires the LVM2 application library to be built as well."
endif

install_systemd_units:	install_dbus_service
	$(INSTALL_DIR) $(systemd_unit_dir)
ifeq ("@BUILD_DMEVENTD@", "yes")
	$(INSTALL_DATA) dm_event_systemd_red_hat.socket $(systemd_unit_dir)/dm-event.socket
	$(INSTALL_DATA) dm_event_systemd_red_hat.service $(systemd_unit_dir)/dm-event.service
	$(INSTALL_DATA) lvm2_monitoring_systemd_red_hat.service $(systemd_unit_dir)/lvm2-monitor.service
endif
ifeq ("@BLKDEACTIVATE@", "yes")
	$(INSTALL_DATA) blk_availability_systemd_red_hat.service $(systemd_unit_dir)/blk-availability.service
endif
ifeq ("@BUILD_LVMETAD@", "yes")
	$(INSTALL_DATA) lvm2_lvmetad_systemd_red_hat.socket $(systemd_unit_dir)/lvm2-lvmetad.socket
	$(INSTALL_DATA) lvm2_lvmetad_systemd_red_hat.service $(systemd_unit_dir)/lvm2-lvmetad.service
	$(INSTALL_DATA) lvm2_pvscan_systemd_red_hat@.service $(systemd_unit_dir)/lvm2-pvscan@.service
endif
ifeq ("@BUILD_LVMPOLLD@", "yes")
	$(INSTALL_DATA) lvm2_lvmpolld_systemd_red_hat.socket $(systemd_unit_dir)/lvm2-lvmpolld.socket
	$(INSTALL_DATA) lvm2_lvmpolld_systemd_red_hat.service $(systemd_unit_dir)/lvm2-lvmpolld.service
endif
ifeq ("@BUILD_LVMLOCKD@", "yes")
	$(INSTALL_DATA) lvm2_lvmlockd_systemd_red_hat.service $(systemd_unit_dir)/lvm2-lvmlockd.service
	$(INSTALL_DATA) lvm2_lvmlocking_systemd_red_hat.service $(systemd_unit_dir)/lvm2-lvmlocking.service
endif
ifneq ("@CLVMD@", "none")
	$(INSTALL_DATA) lvm2_clvmd_systemd_red_hat.service $(systemd_unit_dir)/lvm2-clvmd.service
	$(INSTALL_DATA) lvm2_cluster_activation_systemd_red_hat.service $(systemd_unit_dir)/lvm2-cluster-activation.service
	$(INSTALL_SCRIPT) lvm2_cluster_activation_red_hat.sh $(systemd_dir)/lvm2-cluster-activation
endif
ifeq ("@BUILD_CMIRRORD@", "yes")
	$(INSTALL_DATA) lvm2_cmirrord_systemd_red_hat.service $(systemd_unit_dir)/lvm2-cmirrord.service
endif
ifeq ("@BUILD_LVMDBUSD@", "yes")
	$(INSTALL_DATA) lvm2_lvmdbusd_systemd_red_hat.service $(systemd_unit_dir)/lvm2-lvmdbusd.service
endif

ifeq ("@BUILD_LVMDBUSD@", "yes")
install_dbus_service:
	$(INSTALL_DIR) $(dbusconfdir)
	$(INSTALL_DIR) $(dbusservicedir)
	$(INSTALL_DATA) $(top_srcdir)/scripts/com.redhat.lvmdbus1.conf $(dbusconfdir)
	$(INSTALL_DATA) com.redhat.lvmdbus1.service $(dbusservicedir)

install_systemd_units:	install_dbus_service
endif

install_tmpfiles_configuration:
	$(INSTALL_DIR) $(tmpfiles_dir)
	$(INSTALL_DATA) lvm2_tmpfiles_red_hat.conf $(tmpfiles_dir)/lvm2.conf

DISTCLEAN_TARGETS += \
	blkdeactivate.sh \
	blk_availability_init_red_hat \
	blk_availability_systemd_red_hat.service \
	clvmd_init_red_hat \
	cmirrord_init_red_hat \
	com.redhat.lvmdbus1.service \
	dm_event_systemd_red_hat.service \
	dm_event_systemd_red_hat.socket \
	lvm2_cluster_activation_red_hat.sh \
	lvm2_cluster_activation_systemd_red_hat.service \
	lvm2_clvmd_systemd_red_hat.service \
	lvm2_cmirrord_systemd_red_hat.service \
	lvm2_lvmdbusd_systemd_red_hat.service \
	lvm2_lvmetad_init_red_hat \
	lvm2_lvmpolld_init_red_hat \
	lvm2_lvmetad_systemd_red_hat.service \
	lvm2_lvmetad_systemd_red_hat.socket \
	lvm2_lvmpolld_systemd_red_hat.service \
	lvm2_lvmpolld_systemd_red_hat.socket \
	lvm2_lvmlockd_systemd_red_hat.service \
	lvm2_lvmlocking_systemd_red_hat.service \
	lvm2_monitoring_init_red_hat \
	lvm2_monitoring_systemd_red_hat.service \
	lvm2_pvscan_systemd_red_hat@.service \
	lvm2_tmpfiles_red_hat.conf
