# LXCF - LXC Facility
# Copyright (C) 2013-2014 FUJITSU LIMITED

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# 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.

VERSION=0.10

prefix ?= /usr
exec_prefix ?= ${prefix}
datarootdir ?= ${prefix}/share
sbindir ?= ${exec_prefix}/sbin
libdir ?= ${exec_prefix}/lib64
systemddir ?= ${prefix}/lib/systemd
sysconfdir ?= /etc
localstatedir ?= /var
mandir ?= ${prefix}/share/man
docdir ?= ${datarootdir}/doc/lxcf-${VERSION}

all: src/lxcf-resource1 src/lxcf-sched doc/lxcf.1.gz

.PHONY: all install install_lib_lxcf install_sbin_lxcf install_conf \
		install_hooks install_man clean uninstall

.prepare:
	@if [ ! -f $@ ] ; then touch $@ ; fi
ifneq ($(strip $(sbindir)),/usr/sbin)
	sed -i "s@/usr/sbin@$(sbindir)@g" cmd/*
endif
ifneq ($(strip $(libdir)),/usr/lib64)
	sed -i "s@/usr/lib64@$(libdir)@g" cmd/* conf/* lib/*
endif
ifneq ($(strip $(systemddir)),/usr/lib/systemd)
	sed -i "s@/usr/lib/systemd@$(systemddir)@g" lib/*
endif
ifneq ($(strip $(sysconfdir)),/etc)
	@touch -r src/lxcf-resource1.c .stamp-h1
	@touch -r doc/lxcf.1 .stamp-h2
	sed -i "s@/etc/lxcf@$(sysconfdir)/lxcf@g" cmd/* doc/* lib/* src/*
	@touch -r .stamp-h1 src/lxcf-resource1.c ; rm -f .stamp-h1
	@touch -r .stamp-h2 doc/lxcf.1 ; rm -f .stamp-h2
endif
ifneq ($(strip $(localstatedir)),/var)
	@touch -r src/lxcf-sched.c .stamp-h3
	sed -i "s@/var/\(\(log\|tmp\)/lxcf\)@$(localstatedir)/\1@g" \
	    cmd/* lib/* src/*
	@touch -r .stamp-h3 src/lxcf-sched.c ; rm -f .stamp-h3
endif

install: src/lxcf-resource1 src/lxcf-sched doc/lxcf.1.gz install_lib_lxcf \
		install_sbin_lxcf install_conf install_hooks install_man
ifeq ($(strip $(DESTDIR)),)
	@echo "Please reboot this system."
endif

src/lxcf-resource1: src/lxcf-resource1.c .prepare
	$(CC) $(CFLAGS) -o $@ src/lxcf-resource1.c

src/lxcf-sched: src/lxcf-sched.c .prepare
	$(CC) $(CFLAGS) -o $@ src/lxcf-sched.c

doc/lxcf.1.gz: doc/lxcf.1 .prepare
	gzip -c doc/lxcf.1 > $@

install_lib_lxcf: .prepare
	install -d -m 755 $(DESTDIR)$(libdir)/lxcf
	install -m 755 lib/lxcf-init $(DESTDIR)$(libdir)/lxcf/lxcf-init
	install -m 755 lib/lxcf-keygen $(DESTDIR)$(libdir)/lxcf/lxcf-keygen
	install -m 755 lib/lxcf-rc $(DESTDIR)$(libdir)/lxcf/lxcf-rc
	install -m 755 lib/lxcf-config $(DESTDIR)$(libdir)/lxcf/lxcf-config
	install -m 755 lib/lxcf-maintenance $(DESTDIR)$(libdir)/lxcf/lxcf-maintenance
	install -m 755 lib/lxcf-resource $(DESTDIR)$(libdir)/lxcf/lxcf-resource
	install -m 755 src/lxcf-resource1 $(DESTDIR)$(libdir)/lxcf/lxcf-resource1
	install -m 755 lib/lxcf-resource2 $(DESTDIR)$(libdir)/lxcf/lxcf-resource2
	install -m 755 src/lxcf-sched $(DESTDIR)$(libdir)/lxcf/lxcf-sched
	install -m 755 lib/lxcf-collection-broken-container $(DESTDIR)$(libdir)/lxcf/lxcf-collection-broken-container
	install -m 755 lib/lxcf-sysgen $(DESTDIR)$(libdir)/lxcf/lxcf-sysgen
	install -m 755 lib/lxcf-check-json $(DESTDIR)$(libdir)/lxcf/lxcf-check-json
	install -m 755 lib/lxcf-clearlog $(DESTDIR)$(libdir)/lxcf/lxcf-clearlog
	install -m 755 lib/lxcf-define $(DESTDIR)$(libdir)/lxcf/lxcf-define
	install -m 755 lib/lxcf-load $(DESTDIR)$(libdir)/lxcf/lxcf-load
	install -m 755 lib/lxcf-clone $(DESTDIR)$(libdir)/lxcf/lxcf-clone
	install -m 755 lib/lxcf-kill-container $(DESTDIR)$(libdir)/lxcf/lxcf-kill-container
	install -m 755 lib/lxcf-erase $(DESTDIR)$(libdir)/lxcf/lxcf-erase
	install -m 755 lib/lxcf-reboot $(DESTDIR)$(libdir)/lxcf/lxcf-reboot
	install -m 755 lib/lxcf-createfile $(DESTDIR)$(libdir)/lxcf/lxcf-createfile
	install -m 755 lib/lxcf-stop $(DESTDIR)$(libdir)/lxcf/lxcf-stop
	install -m 755 lib/lxcf-restore $(DESTDIR)$(libdir)/lxcf/lxcf-restore
	#
	install -m 755 lib/lxcf-clone-setup-u $(DESTDIR)$(libdir)/lxcf/lxcf-clone-setup-u
	install -m 755 lib/lxcf-clone-setup-f $(DESTDIR)$(libdir)/lxcf/lxcf-clone-setup-f
	install -m 755 lib/lxcf-setup-u $(DESTDIR)$(libdir)/lxcf/lxcf-setup-u
	install -m 755 lib/lxcf-setup-f $(DESTDIR)$(libdir)/lxcf/lxcf-setup-f
	#
	install -m 755 lib/lxcf-erase-setup $(DESTDIR)$(libdir)/lxcf/lxcf-erase-setup
	install -m 755 lib/lxcf-list $(DESTDIR)$(libdir)/lxcf/lxcf-list
	install -m 755 lib/lxcf-update $(DESTDIR)$(libdir)/lxcf/lxcf-update
	install -m 755 lib/lxcf-update1 $(DESTDIR)$(libdir)/lxcf/lxcf-update1
	install -m 755 lib/lxcf-update2 $(DESTDIR)$(libdir)/lxcf/lxcf-update2
	install -m 755 lib/lxcf-deploy $(DESTDIR)$(libdir)/lxcf/lxcf-deploy
	install -m 755 lib/lxcf-start $(DESTDIR)$(libdir)/lxcf/lxcf-start
	install -m 755 lib/lxcf-suspend $(DESTDIR)$(libdir)/lxcf/lxcf-suspend
	install -m 755 lib/lxcf-resume $(DESTDIR)$(libdir)/lxcf/lxcf-resume
	install -m 755 lib/lxcf-run $(DESTDIR)$(libdir)/lxcf/lxcf-run
	install -m 755 lib/lxcf-autostart $(DESTDIR)$(libdir)/lxcf/lxcf-autostart
	install -m 755 lib/lxcf-submit $(DESTDIR)$(libdir)/lxcf/lxcf-submit
	install -m 755 lib/lxcf-snapshot $(DESTDIR)$(libdir)/lxcf/lxcf-snapshot
	install -m 755 lib/lxcf-snapshot-cluster $(DESTDIR)$(libdir)/lxcf/lxcf-snapshot-cluster
	install -m 755 lib/lxcf-uuid $(DESTDIR)$(libdir)/lxcf/lxcf-uuid
	install -m 755 lib/lxcf-syncusr $(DESTDIR)$(libdir)/lxcf/lxcf-syncusr
	install -m 755 lib/lxcf-log $(DESTDIR)$(libdir)/lxcf/lxcf-log
	install -m 755 lib/lxcf-queue-list $(DESTDIR)$(libdir)/lxcf/lxcf-queue-list
	install -m 755 lib/lxcf-queue-clear $(DESTDIR)$(libdir)/lxcf/lxcf-queue-clear
	install -m 755 lib/lxcf-queue-cancel $(DESTDIR)$(libdir)/lxcf/lxcf-queue-cancel
	install -m 755 lib/lxcf-queue-move $(DESTDIR)$(libdir)/lxcf/lxcf-queue-move
	install -m 755 lib/lxcf-queue-multi $(DESTDIR)$(libdir)/lxcf/lxcf-queue-multi
	install -m 755 lib/lxcf-parmchk-num $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-num
	install -m 755 lib/lxcf-parmchk-num-kmg $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-num-kmg
	install -m 755 lib/lxcf-parmchk-cname $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-cname
	install -m 755 lib/lxcf-parmchk-float $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-float
	install -m 755 lib/lxcf-parmchk-float-kmg $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-float-kmg
	install -m 755 lib/lxcf-parmchk-hexdig $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-hexdig
	install -m 755 lib/lxcf-parmchk-MJMI $(DESTDIR)$(libdir)/lxcf/lxcf-parmchk-MJMI
	install -m 755 lib/lxcf-console $(DESTDIR)$(libdir)/lxcf/lxcf-console
	install -m 755 lib/lxcf-export-docker $(DESTDIR)$(libdir)/lxcf/lxcf-export-docker
	install -m 755 lib/lxcf-distro $(DESTDIR)$(libdir)/lxcf/lxcf-distro
	install -m 755 lib/lxcf-rename $(DESTDIR)$(libdir)/lxcf/lxcf-rename

install_sbin_lxcf: .prepare
	install -d -m 755 $(DESTDIR)$(sbindir)
	install -m 755 cmd/lxcf $(DESTDIR)$(sbindir)/lxcf
	install -d -m 755 $(DESTDIR)$(libdir)/lxcf/sbin
	install -m 755 cmd/update-alert $(DESTDIR)$(libdir)/lxcf/sbin/update-alert
	install -m 755 cmd/cpun $(DESTDIR)$(libdir)/lxcf/sbin/cpun
	install -m 755 cmd/cpurate $(DESTDIR)$(libdir)/lxcf/sbin/cpurate
	install -m 755 cmd/numa $(DESTDIR)$(libdir)/lxcf/sbin/numa
	install -m 755 cmd/memlimit $(DESTDIR)$(libdir)/lxcf/sbin/memlimit
	install -m 755 cmd/memswlimit $(DESTDIR)$(libdir)/lxcf/sbin/memswlimit
	install -m 755 cmd/blkio_r $(DESTDIR)$(libdir)/lxcf/sbin/blkio_r
	install -m 755 cmd/blkio_w $(DESTDIR)$(libdir)/lxcf/sbin/blkio_w
	install -m 755 cmd/blkiops_r $(DESTDIR)$(libdir)/lxcf/sbin/blkiops_r
	install -m 755 cmd/blkiops_w $(DESTDIR)$(libdir)/lxcf/sbin/blkiops_w
	install -m 755 cmd/net_cls $(DESTDIR)$(libdir)/lxcf/sbin/net_cls
	install -m 755 cmd/set $(DESTDIR)$(libdir)/lxcf/sbin/set
	install -m 755 cmd/set-n $(DESTDIR)$(libdir)/lxcf/sbin/set-n
	install -m 755 cmd/show $(DESTDIR)$(libdir)/lxcf/sbin/show
	install -m 755 cmd/sysgen $(DESTDIR)$(libdir)/lxcf/sbin/sysgen
	install -m 755 cmd/sysgen-n $(DESTDIR)$(libdir)/lxcf/sbin/sysgen-n
	install -m 755 cmd/clone $(DESTDIR)$(libdir)/lxcf/sbin/clone
	install -m 755 cmd/clone-n $(DESTDIR)$(libdir)/lxcf/sbin/clone-n
	install -m 755 cmd/erase $(DESTDIR)$(libdir)/lxcf/sbin/erase
	install -m 755 cmd/erase-n $(DESTDIR)$(libdir)/lxcf/sbin/erase-n
	install -m 755 cmd/list $(DESTDIR)$(libdir)/lxcf/sbin/list
	install -m 755 cmd/log $(DESTDIR)$(libdir)/lxcf/sbin/log
	install -m 755 cmd/update $(DESTDIR)$(libdir)/lxcf/sbin/update
	install -m 755 cmd/deploy $(DESTDIR)$(libdir)/lxcf/sbin/deploy
	install -m 755 cmd/start $(DESTDIR)$(libdir)/lxcf/sbin/start
	install -m 755 cmd/start-n $(DESTDIR)$(libdir)/lxcf/sbin/start-n
	install -m 755 cmd/stop $(DESTDIR)$(libdir)/lxcf/sbin/stop
	install -m 755 cmd/stop-n $(DESTDIR)$(libdir)/lxcf/sbin/stop-n
	install -m 755 cmd/reboot $(DESTDIR)$(libdir)/lxcf/sbin/reboot
	install -m 755 cmd/suspend $(DESTDIR)$(libdir)/lxcf/sbin/suspend
	install -m 755 cmd/suspend-n $(DESTDIR)$(libdir)/lxcf/sbin/suspend-n
	install -m 755 cmd/resume $(DESTDIR)$(libdir)/lxcf/sbin/resume
	install -m 755 cmd/resume-n $(DESTDIR)$(libdir)/lxcf/sbin/resume-n
	install -m 755 cmd/run $(DESTDIR)$(libdir)/lxcf/sbin/run
	install -m 755 cmd/autostart $(DESTDIR)$(libdir)/lxcf/sbin/autostart
	install -m 755 cmd/autostart-n $(DESTDIR)$(libdir)/lxcf/sbin/autostart-n
	install -m 755 cmd/submit $(DESTDIR)$(libdir)/lxcf/sbin/submit
	install -m 755 cmd/queue $(DESTDIR)$(libdir)/lxcf/sbin/queue
	install -m 755 cmd/q $(DESTDIR)$(libdir)/lxcf/sbin/q
	install -m 755 cmd/snapshot $(DESTDIR)$(libdir)/lxcf/sbin/snapshot
	install -m 755 cmd/restore $(DESTDIR)$(libdir)/lxcf/sbin/restore
	install -m 755 cmd/console $(DESTDIR)$(libdir)/lxcf/sbin/console
	install -m 755 cmd/helpcmd $(DESTDIR)$(libdir)/lxcf/sbin/helpcmd
	install -m 755 cmd/version $(DESTDIR)$(libdir)/lxcf/sbin/version
	install -m 755 cmd/export-docker $(DESTDIR)$(libdir)/lxcf/sbin/export-docker
	install -m 755 cmd/rename $(DESTDIR)$(libdir)/lxcf/sbin/rename

install_conf: .prepare
	install -m 644 conf/helpfile.txt $(DESTDIR)$(libdir)/lxcf/helpfile.txt
	install -d -m 755 $(DESTDIR)$(sysconfdir)/lxcf
	install -m 644 conf/lxcf.conf $(DESTDIR)$(sysconfdir)/lxcf/lxcf.conf
	install -m 644 conf/lxcf.conf $(DESTDIR)$(libdir)/lxcf/lxcf.conf
	install -d -m 755 $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks
	install -m 644 conf/etc/lxcfnet1.xml \
	    $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/lxcfnet1.xml
	install -d -m 755 $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart
	ln -f -s $(sysconfdir)/libvirt/qemu/networks/lxcfnet1.xml \
	    $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/lxcfnet1.xml
	if [ ! /etc/redhat-release ] ; then \
		install -d -m 755 $(DESTDIR)/etc/init ; \
		install -m 644 conf/lxcf-init.conf  $(DESTDIR)/etc/init/lxcf-init.conf; \
		install -m 644 conf/lxcf-sched.conf $(DESTDIR)/etc/init/lxcf-sched.conf; \
	fi
	install -d -m 755 $(DESTDIR)$(systemddir)/system; \
	install -m 644 conf/lxcf.service $(DESTDIR)$(systemddir)/system/lxcf.service; \
	install -m 644 conf/lxcf-sched.service $(DESTDIR)$(systemddir)/system/lxcf-sched.service; \
	install -d -m 755 $(DESTDIR)$(sysconfdir)/systemd/system/multi-user.target.wants; \
	#ln -f -s $(systemddir)/system/lxcf.service \
	#    $(DESTDIR)$(sysconfdir)/systemd/system/multi-user.target.wants/lxcf.service
	#ln -f -s $(systemddir)/system/lxcf-sched.service \
	#    $(DESTDIR)$(sysconfdir)/systemd/system/multi-user.target.wants/lxcf-sched.service
	install -d -m 755 $(DESTDIR)$(localstatedir)/lib/libvirt/network
	install -m 644 conf/var/lxcfnet1.xml \
	    $(DESTDIR)$(localstatedir)/lib/libvirt/network/lxcfnet1.xml
	install -d -m 755 $(DESTDIR)$(localstatedir)/log/lxcf
ifeq ($(strip $(DESTDIR)),)
	$(DESTDIR)$(libdir)/lxcf/lxcf-init
endif

install_hooks: .prepare
	install -d -m 755 $(DESTDIR)$(sysconfdir)/libvirt/hooks
	install -m 755 conf/lxcf-hook $(DESTDIR)$(sysconfdir)/libvirt/hooks/lxc
	install -m 755 conf/lxcf-hook $(DESTDIR)$(sysconfdir)/libvirt/hooks/qemu

install_man: ChangeLog
	install -d -m 755 $(DESTDIR)$(mandir)/man1
	install -m 644 doc/lxcf.1.gz $(DESTDIR)$(mandir)/man1/lxcf.1.gz
	install -d -m 755 $(DESTDIR)$(docdir)
	install -m 644 README $(DESTDIR)$(docdir)/README
	install -m 644 COPYING $(DESTDIR)$(docdir)/COPYING
	install -m 644 ChangeLog $(DESTDIR)$(docdir)/ChangeLog
	install -m 644 AUTHORS $(DESTDIR)$(docdir)/AUTHORS
	install -d -m 755 $(DESTDIR)$(docdir)/example
	install -m 644 example/README $(DESTDIR)$(docdir)/example/README
	install -m 755 example/HA10 $(DESTDIR)$(docdir)/example/HA10
	install -m 755 example/ops-script $(DESTDIR)$(docdir)/example/ops-script

ChangeLog:
	if [ ! -f $@ ] ; then touch $@ ; fi

clean:
	rm -f src/lxcf-resource1
	rm -f src/lxcf-sched
	rm -f doc/lxcf.1.gz
	rm -f ChangeLog
ifneq ($(strip $(sbindir)),/usr/sbin)
	sed -i "s@$(sbindir)@/usr/sbin@g" cmd/*
endif
ifneq ($(strip $(libdir)),/usr/lib64)
	sed -i "/\(\/usr\/lib64\|systemd\|libexec\)/!s@$(libdir)@/usr/lib64@g" \
	    cmd/* conf/* lib/*
endif
ifneq ($(strip $(systemddir)),/usr/lib/systemd)
	sed -i "s@$(systemddir)@/usr/lib/systemd@g" lib/*
endif
ifneq ($(strip $(sysconfdir)),/etc)
	@touch -r src/lxcf-resource1.c .stamp-h1
	@touch -r doc/lxcf.1 .stamp-h2
	sed -i "s@$(sysconfdir)/lxcf@/etc/lxcf@g" cmd/* doc/* lib/* src/*
	@touch -r .stamp-h1 src/lxcf-resource1.c ; rm -f .stamp-h1
	@touch -r .stamp-h2 doc/lxcf.1 ; rm -f .stamp-h2
endif
ifneq ($(strip $(localstatedir)),/var)
	@touch -r src/lxcf-sched.c .stamp-h3
	sed -i "s@/$(sysconfdir)/\(\(log\|tmp\)/lxcf\)@/var/\1@g" \
	    cmd/* lib/* src/*
	@touch -r .stamp-h3 src/lxcf-sched.c ; rm -f .stamp-h3
endif
	@rm -f .prepare

uninstall:
ifeq ($(strip $(DESTDIR)),)
	systemctl disable lxcf-sched
endif
	rm -f $(DESTDIR)$(sbindir)/lxcf
	rm -rf $(DESTDIR)$(libdir)/lxcf
	rm -rf $(DESTDIR)$(sysconfdir)/libvirt/hooks
	rm -f $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/lxcfnet1.xml
	rm -f $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/lxcfnet1.xml
	rm -f $(DESTDIR)$(systemddir)/system/lxcf.service
	rm -f $(DESTDIR)$(systemddir)/system/lxcf-sched.service
	rm -f $(DESTDIR)$(sysconfdir)/systemd/system/multi-user.target.wants/lxcf.service
	rm -f $(DESTDIR)$(sysconfdir)/systemd/system/multi-user.target.wants/lxcf-sched.service
	rm -f $(DESTDIR)$(localstatedir)/lib/libvirt/network/lxcfnet1.xml
	rm -rf $(DESTDIR)$(localstatedir)/log/lxcf
	rm -rf $(DESTDIR)$(localstatedir)/tmp/lxcf
	rm -f $(DESTDIR)$(mandir)/man1/lxcf.1.gz
	rm -rf $(DESTDIR)$(docdir)
