#
#  Common makefile for SCSI target mid-level and its drivers
#
#  Copyright (C) 2015 - 2018 Vladislav Bolkhovitin <vst@vlnb.net>
#  Copyright (C) 2004 - 2005 Leonid Stoljar
#  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
# Decide to use which kernel src. If not specified, is current running kernel.
#export KDIR=/usr/src/linux-2.6

SCST_DIR=src

# Set variable $(2) to value $(3) in file $(1) if $(2)=$(3) does not yet occur
# in file $(1).
set_var = $(shell if grep -q '^$(2)=' '$(1)' 2>/dev/null; then	\
		    grep -q '^$(2)=$(3)$$' '$(1)' ||		\
		      sed -i 's/^$(2)=.*/$(2)=$(3)/' '$(1)';	\
		  else						\
		    echo '$(2)=$(3)' >> '$(1)';			\
		  fi)

all: include/build_mode.h
	cd $(SCST_DIR) && $(MAKE) $@

install: include/build_mode.h
	cd $(SCST_DIR) && $(MAKE) $@

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

clean:
	rm -f include/build_mode.h
	cd $(SCST_DIR) && $(MAKE) $@

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

2debug:
	$(call set_var,build_mode,BUILD_MODE,)
	@true

2release:
	$(call set_var,build_mode,BUILD_MODE,RELEASE)
	@true

2perf:
	$(call set_var,build_mode,BUILD_MODE,PERF)
	@true

release-archive:
	../scripts/generate-release-archive scst \
	  "$$(sed -n 's/^#define[[:blank:]]SCST_VERSION_NAME[[:blank:]]*\"\([^\"]*\)\".*/\1/p' include/scst_const.h)"

build_mode:
	$(call set_var,build_mode,BUILD_MODE,)

include/build_mode.h: build_mode
	@rm -f $@.tmp;							\
	touch $@.tmp;							\
	source build_mode;						\
	case "$${BUILD_MODE}" in					\
	"")      defines="CONFIG_SCST_TRACING CONFIG_SCST_DEBUG		\
			  CONFIG_SCST_EXTRACHECKS";;			\
	RELEASE) defines=CONFIG_SCST_TRACING;;				\
	PERF)    defines="";;						\
	*)	 echo "Error: unsupported build mode $$(<build_mode)";	\
		 exit 1;;						\
	esac;								\
	for d in $$defines; do						\
		echo "#define $$d" >>$@.tmp;				\
	done;								\
	if [ ! -e $@ ] || ! diff -q $@.tmp $@ >&/dev/null; then		\
		mv $@.tmp $@;						\
	else								\
		rm -f $@.tmp;						\
	fi

help:
	@echo "		all (the default) : make all"
	@echo "		clean             : clean files"
	@echo "		extraclean        : clean + clean dependencies"
	@echo "		install           : install"
	@echo "		uninstall         : uninstall"
	@echo "	Notes :"
	@echo "		- install and uninstall must be made as root."
	@echo "         - be sure to compile qla against the correct initiator"
	@echo "           driver. Read its README for details."

.PHONY: all install uninstall clean extraclean help 2release 2debug 2perf
