#
#  Common makefile for SCSI target mid-level and its drivers
#
#  Copyright (C) 2015 - 2018 Vladislav Bolkhovitin <vst@vlnb.net>
#  Copyright (C) 2007 - 2018 Western Digital Corporation
#
#  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.
#
#

SHELL = /bin/bash

# Define the location to the kernel src. Can be defined here or on
# the command line during the build process. If KDIR is defined,
# we will determine an appropriate value for KVER from the kernel
# source tree. KVER can still be overridden by the user via the
# command line or by defining it in this Makefile. If KDIR and KVER
# are not defined by the user, the current running kernel version is
# used to define KVER.

#export KDIR=/usr/src/linux-2.6
#export KVER=2.6.x

ifdef KDIR
     ifndef KVER
          export KVER = $(strip $(shell					 \
		cat $(KDIR)/include/config/kernel.release 2>/dev/null || \
		make -s -C $(KDIR) kernelversion))
     endif
endif

SCST_DIR=scst
DOC_DIR=doc
SCSTADM_DIR=scstadmin
QLA_INI_DIR=qla2x00t
QLA_DIR=qla2x00t/qla2x00-target
USR_DIR=usr
SRP_DIR=srpt
SCST_LOCAL_DIR=scst_local
FCST_DIR=fcst
EMULEX_DIR=emulex

ISCSI_DIR=iscsi-scst

REVISION ?= $(shell if [ -e .svn ]; then				\
		      svn info | sed -n 's/^Revision:[[:blank:]]*/./p';	\
		    elif [ -e .git ]; then				\
		      git log | grep -c ^commit;			\
		    fi)
VERSION = $(shell echo -n "$$(sed -n 's/^\#define[[:blank:]]SCST_VERSION_NAME[[:blank:]]*\"\([^-]*\).*\"/\1/p' scst/include/scst_const.h)")
DEBIAN_REVISION=1
RPMTOPDIR ?= $(shell if [ $$(id -u) = 0 ]; then echo /usr/src/packages;\
		else echo $$PWD/rpmbuilddir; fi)

help:
	@echo "		all               : make all"
	@echo "		clean             : clean files"
	@echo "		extraclean        : clean + clean dependencies"
	@echo "		install           : install"
	@echo "		uninstall         : uninstall"
	@echo ""
	@echo "		scst              : make scst only"
	@echo "		scst_clean        : scst: clean "
	@echo "		scst_extraclean   : scst: clean + clean dependencies"
	@echo "		scst_install      : scst: install"
	@echo "		scst_uninstall    : scst: uninstall"
	@echo ""
	@echo "		scstadm_install   : scstadmin: install"
	@echo "		scstadm_uninstall : scstadmin: uninstall"
	@echo ""
	@echo "		qla               : make QLA target driver"
	@echo "		qla_clean         : qla target: clean "
	@echo "		qla_extraclean    : qla target: clean + clean dependencies"
	@echo "		qla_install       : qla target: install"
	@echo "		qla_uninstall     : qla target: uninstall"
	@echo ""
	@echo "		iscsi             : make iSCSI target"
	@echo "		iscsi_clean       : ISCSI target: clean "
	@echo "		iscsi_extraclean  : ISCSI target: clean + clean dependencies"
	@echo "		iscsi_install     : ISCSI target: install"
	@echo "		iscsi_uninstall   : ISCSI target: uninstall"
	@echo ""
	@echo "		emulex             : make Emulex target"
	@echo "		emulex_clean       : Emulex target: clean "
	@echo "		emulex_extraclean  : Emulex target: clean + clean dependencies"
	@echo "		emulex_install     : Emulex target: install"
	@echo "		emulex_uninstall   : Emulex target: uninstall"
	@echo ""
	@echo "		srpt              : make SRP target"
	@echo "		srpt_clean        : srp target: clean "
	@echo "		srpt_extraclean   : srp target: clean + clean dependencies"
	@echo "		srpt_install      : srp target: install"
	@echo "		srpt_uninstall    : srp target: uninstall"
	@echo ""
	@echo "		fcst              : make FCoE target"
	@echo "		fcst_clean        : FCoE target: clean "
	@echo "		fcst_extraclean   : FCoE target: clean + clean dependencies"
	@echo "		fcst_install      : FCoE target: install"
	@echo "		fcst_uninstall    : FCoE target: uninstall"
	@echo ""
	@echo "		scst_local	  : make scst_local target"
	@echo "		scst_local_install : scst_local target: install"
	@echo "		scst_local_uninstall : scst_local target: uninstall"
	@echo ""
	@echo "		usr               : make user space targets"
	@echo "		usr_clean         : usr target: clean "
	@echo "		usr_extraclean    : usr target: clean + clean dependencies"
	@echo "		usr_install       : usr target: install"
	@echo "		usr_uninstall     : usr target: uninstall"
	@echo ""
	@echo "		2perf             : changes debug state to full performance"
	@echo "		2release          : changes debug state to release"
	@echo "		2debug            : changes debug state to full debug"
	@echo ""
	@echo "	Note:"
	@echo "		- install and uninstall may need root privileges"

all install uninstall clean extraclean:
	-if [ $@ = extraclean ]; then rm -f TAGS tags cscope.out; fi
	-for d in $(SCST_DIR) $(ISCSI_DIR) $(QLA_DIR) $(SRP_DIR)	    \
		$(SCST_LOCAL_DIR) $(FCST_DIR) $(USR_DIR) $(SCSTADM_DIR); do \
		$(MAKE) -j$$(nproc) -C "$$d" $@ || break;		    \
	done
	find . -type d -name "rpmbuilddir" | xargs rm -rf

tags:
	find . -type f -name "*.[ch]" | ctags --c-kinds=+p --fields=+iaS --extra=+q -e -L-

scst:
	cd $(SCST_DIR) && $(MAKE) all

scst_install:
	cd $(SCST_DIR) && $(MAKE) install

scst_uninstall:
	cd $(SCST_DIR) && $(MAKE) uninstall

scst_clean:
	cd $(SCST_DIR) && $(MAKE) clean

scst_extraclean:
	cd $(SCST_DIR) && $(MAKE) extraclean

docs:
	cd $(DOC_DIR) && $(MAKE) all

docs_clean:
	cd $(DOC_DIR) && $(MAKE) clean

docs_extraclean:
	cd $(DOC_DIR) && $(MAKE) extraclean

scstadm:
	cd $(SCSTADM_DIR) && $(MAKE) all

scstadm_install:
	cd $(SCSTADM_DIR) && $(MAKE) install

scstadm_uninstall:
	cd $(SCSTADM_DIR) && $(MAKE) uninstall

scstadm_clean:
	cd $(SCSTADM_DIR) && $(MAKE) clean

scstadm_extraclean:
	cd $(SCSTADM_DIR) && $(MAKE) extraclean

qla:
	cd $(QLA_DIR) && $(MAKE) all

qla_install:
	cd $(QLA_DIR) && $(MAKE) install

qla_uninstall:
	cd $(QLA_DIR) && $(MAKE) uninstall

qla_clean:
	cd $(QLA_DIR) && $(MAKE) clean

qla_extraclean:
	cd $(QLA_DIR) && $(MAKE) extraclean

iscsi:
	cd $(ISCSI_DIR) && $(MAKE) all

iscsi_install:
	cd $(ISCSI_DIR) && $(MAKE) install

iscsi_uninstall:
	cd $(ISCSI_DIR) && $(MAKE) uninstall

iscsi_clean:
	cd $(ISCSI_DIR) && $(MAKE) clean

iscsi_extraclean:
	cd $(ISCSI_DIR) && $(MAKE) extraclean

emulex:
	cd $(EMULEX_DIR) && $(MAKE) all

emulex_install:
	cd $(EMULEX_DIR) && $(MAKE) install

emulex_uninstall:
	cd $(EMULEX_DIR) && $(MAKE) uninstall

emulex_clean:
	cd $(EMULEX_DIR) && $(MAKE) clean

emulex_extraclean:
	cd $(EMULEX_DIR) && $(MAKE) extraclean

srpt:
	cd $(SRP_DIR) && $(MAKE) all

srpt_install:
	cd $(SRP_DIR) && $(MAKE) install

srpt_uninstall:
	cd $(SRP_DIR) && $(MAKE) uninstall

srpt_clean:
	cd $(SRP_DIR) && $(MAKE) clean

srpt_extraclean:
	cd $(SRP_DIR) && $(MAKE) extraclean

scst_local:
	cd $(SCST_LOCAL_DIR) && $(MAKE) all

scst_local_install:
	cd $(SCST_LOCAL_DIR) && $(MAKE) install

scst_local_uninstall:
	cd $(SCST_LOCAL_DIR) && $(MAKE) uninstall

scst_local_clean:
	cd $(SCST_LOCAL_DIR) && $(MAKE) clean

scst_local_extraclean:
	cd $(SCST_LOCAL_DIR) && $(MAKE) extraclean

usr:
	cd $(USR_DIR) && $(MAKE)

usr_install:
	cd $(USR_DIR) && $(MAKE) install

usr_uninstall:
	cd $(USR_DIR) && $(MAKE) uninstall

usr_clean:
	cd $(USR_DIR) && $(MAKE) clean

usr_extraclean:
	cd $(USR_DIR) && $(MAKE) extraclean

fcst:
	cd $(FCST_DIR) && $(MAKE) all

fcst_install:
	cd $(FCST_DIR) && $(MAKE) install

fcst_uninstall:
	cd $(FCST_DIR) && $(MAKE) uninstall

fcst_clean:
	cd $(FCST_DIR) && $(MAKE) clean

fcst_extraclean:
	cd $(FCST_DIR) && $(MAKE) extraclean

# Make an SCST source code archive. $(1) is the tar compression option, $(2)
# is the tar filename compression suffix, $(3) is the version and $(4) is the
# source file filter.
make-scst-dist =							\
	[ -n "$(1)" ] && [ -n "$(2)" ] && [ -n "$(3)" ] &&		\
	[ -n "$(4)" ] &&						\
	name=scst &&							\
	mkdir "$${name}-$(3)" &&					\
	{								\
	  {								\
	    scripts/list-source-files &&				\
	    if [ -e debian/changelog ]; then echo debian/changelog; fi;	\
	  } |								\
	  $(4) |							\
	  tar -T- -cf- |						\
	  tar -C "$${name}-$(3)" -xf-;					\
	} &&								\
	rm -f "$${name}-$(3).tar.$(2)" &&				\
	tar -c$(1) -f "$${name}-$(3).tar.$(2)" "$${name}-$(3)" &&	\
	rm -rf "$${name}-$(3)"

scst-dist-gzip:
	$(call make-scst-dist,j,bz2,$(VERSION),grep -E '^doc/|^fcst/|^iscsi-scst/|^Makefile|^qla2x00t(|_git)/|^scripts/|^scst.spec|^scst/|^scst_local/|^srpt/|^usr/|^scstadmin/')

scst-rpm:
	name=scst &&							\
	rpmtopdir=$(RPMTOPDIR) &&					\
	$(MAKE) scst-dist-gzip &&					\
	for d in BUILD RPMS SOURCES SPECS SRPMS; do			\
	  mkdir -p $${rpmtopdir}/$$d;					\
	done &&								\
	cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES &&		\
	sed -e "s/@rpm_version@/$(VERSION)/g"				\
	    -e "s|@depmod@|$(shell which depmod)|g"			\
		<$${name}.spec.in >$${name}.spec &&			\
	MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}"	\
					--define="%rpm_release $(REVISION)"                     \
	    $(if $(KVER),--define="%kversion $(KVER)")			\
	    $(if $(KDIR),--define="%kdir $(KDIR)")			\
	    -ba $${name}.spec &&					\
	rm -f $${name}-$(VERSION).tar.bz2

scst-dkms-rpm:
	name=scst-dkms &&						\
	rpmtopdir=$(RPMTOPDIR) &&					\
	$(MAKE) scst-dist-gzip &&					\
	for d in BUILD RPMS SOURCES SPECS SRPMS; do			\
	  mkdir -p $${rpmtopdir}/$$d;					\
	done &&								\
	cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES &&		\
	sed "s/@rpm_version@/$(VERSION)/g"				\
		<$${name}.spec.in >$${name}.spec &&			\
	MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}"	\
	    $(if $(KVER),--define="%kversion $(KVER)")			\
	    $(if $(KDIR),--define="%kdir $(KDIR)")			\
	    -ba $${name}.spec &&					\
	rm -f $${name}-$(VERSION).tar.bz2

rpm:
	$(MAKE) scst-rpm
	$(MAKE) -C scstadmin rpm
	# generate version file for fileio_tgt
	$(MAKE) -C scst/src ../include/scst_itf_ver.h
	$(MAKE) -C usr/fileio rpm

	@if [ "$$(id -u)" != 0 ]; then			\
	    echo;					\
	    echo "The following RPMs have been built:";	\
	    find -name '*.rpm';				\
	fi

debian/changelog: debian/changelog.in
	sed 's/%{scst_version}/$(VERSION)-$(DEBIAN_REVISION)/'		\
	  <debian/changelog.in >debian/changelog

../scst_$(VERSION).orig.tar.gz: debian/changelog Makefile
	$(call make-scst-dist,z,gz,$(VERSION),cat) &&			\
	mv "scst-$(VERSION).tar.gz" "$@"

../scst_$(VERSION).orig.tar.xz: debian/changelog Makefile
	$(call make-scst-dist,J,xz,$(VERSION),cat) &&			\
	mv "scst-$(VERSION).tar.xz" "$@"

dpkg: ../scst_$(VERSION).orig.tar.gz
	@if [ -z "$$DEBEMAIL" ]; then					\
	  echo "Error: \$$DEBEMAIL has not been set";			\
	  false;							\
	fi &&								\
	if [ -z "$$DEBFULLNAME" ]; then					\
	  echo "Error: \$$DEBFULLNAME has not been set";		\
	  false;							\
	fi &&								\
	sed 's/%{scst_version}/$(VERSION)/'				\
	  <debian/scst.dkms.in >debian/scst.dkms &&			\
	output_files=(							\
		../*_$(VERSION)-$(DEBIAN_REVISION)_*.deb		\
		../*_$(VERSION)-$(DEBIAN_REVISION)_*.ddeb		\
		../scst_$(VERSION)-$(DEBIAN_REVISION).debian.tar.[gx]z	\
		../scst_$(VERSION)-$(DEBIAN_REVISION).dsc		\
		../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.build	\
		../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.buildinfo	\
		../scst_$(VERSION)-$(DEBIAN_REVISION)_amd64.changes	\
	) &&								\
	rm -f "$${output_files[@]}" &&					\
	buildopts=(-uc -us) &&						\
	if dpkg-buildpackage --help 2>&1 | grep -q -- '-ui'; then	\
	  buildopts+=(-ui);						\
	fi &&								\
	if dpkg-buildpackage --help 2>&1 |				\
	   grep -q -- '--jobs\[=<number>|auto\]'; then			\
	  buildopts+=(-jauto);						\
	else								\
	  buildopts+=(-j4);						\
	fi &&								\
	if false; then							\
	  dpkg-buildpackage "$${buildopts[@]}";				\
	else								\
	  debuild "$${buildopts[@]}" --lintian-opts --profile debian;	\
	fi &&								\
	mkdir -p dpkg &&						\
	for f in "$${output_files[@]}" ../scst_$(VERSION).orig.tar.[gx]z; do\
		mv $$f dpkg || true;					\
	done &&								\
	echo "Output files:" &&						\
	ls -l dpkg

release-archive:
	$(MAKE) 2release
	for m in $$(find -name Makefile |			\
		    xargs grep -l '^release-archive:' |		\
		    grep -v '^\./Makefile');			\
	do							\
	    (cd $$(dirname $$m) && $(MAKE) release-archive)	\
	done
	$(MAKE) 2debug

2perf:
	cd $(SCST_DIR) && $(MAKE) $@

2release:
	cd $(SCST_DIR) && $(MAKE) $@

2debug:
	cd $(SCST_DIR) && $(MAKE) $@

.PHONY: all install uninstall clean extraclean tags help \
	qla qla_install qla_uninstall qla_clean qla_extraclean \
	iscsi iscsi_install iscsi_uninstall iscsi_clean iscsi_extraclean \
	emulex emulex_install emulex_uninstall emulex_clean emulex_extraclean \
	scst scst_install scst_uninstall scst_clean scst_extraclean \
	docs docs_clean docs_extraclean \
	scstadm scstadm_install scstadm_uninstall scstadm_clean scstadm_extraclean \
	srpt srpt_install srpt_uninstall srpt_clean srpt_extraclean \
	usr usr_install usr_uninstall usr_clean usr_extraclean \
	scst_local scst_local_install scst_local_uninstall scst_local_clean scst_local_extraclean \
	fcst fcst_install fcst_uninstall fcst_clean fcst_extraclean \
	scst-rpm scst-dkms-rpm dpkg \
	2perf 2release 2debug
