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

lvmdbusdir = $(python3dir)/lvmdbusd

LVMDBUS_SRCDIR_FILES = \
	automatedproperties.py \
	background.py \
	cfg.py \
	cmdhandler.py \
	fetch.py \
	__init__.py \
	job.py \
	loader.py \
	lvmdb.py \
	main.py \
	lvm_shell_proxy.py \
	lv.py \
	manager.py \
	objectmanager.py \
	pv.py \
	refresh.py \
	request.py \
	state.py \
	udevwatch.py \
	utils.py \
	vg.py

LVMDBUS_BUILDDIR_FILES = \
	path.py

LVMDBUSD = $(srcdir)/lvmdbusd

include $(top_builddir)/make.tmpl

.PHONY: install_lvmdbusd

install_lvmdbusd:
	$(INSTALL_DIR) $(sbindir)
	$(INSTALL_SCRIPT) $(LVMDBUSD) $(sbindir)
	$(INSTALL_DIR) $(DESTDIR)$(lvmdbusdir)
	(cd $(srcdir); $(INSTALL_DATA) $(LVMDBUS_SRCDIR_FILES) $(DESTDIR)$(lvmdbusdir))
	$(INSTALL_DATA) $(LVMDBUS_BUILDDIR_FILES) $(DESTDIR)$(lvmdbusdir)
	PYTHON=$(PYTHON3) $(PYCOMPILE) --destdir "$(DESTDIR)" --basedir "$(lvmdbusdir)" $(LVMDBUS_SRCDIR_FILES) $(LVMDBUS_BUILDDIR_FILES)
	$(CHMOD) 755 $(DESTDIR)$(lvmdbusdir)/__pycache__
	$(CHMOD) 444 $(DESTDIR)$(lvmdbusdir)/__pycache__/*.py[co]

install_lvm2: install_lvmdbusd

install: install_lvm2

DISTCLEAN_TARGETS+= \
	$(LVMDBUS_BUILDDIR_FILES)
