#
#	This is Sub Makefile for loop of SmallTools.(for include)
#


#### Input extention ####

#### Suffixes rule ####
# Defined at Main
.SUFFIXES: .$(INPUT_EXT) .$(OUTPUT_EXT)

#### INCLUDE ####
-include $(INPUT_EXT)_LIST

#### Definition ####
### Define the following essential data at Main Makefile.
## For LoopCommand::
# EXE_COMMAND:		Loop Command Name (e.g. mrcImageNoiseAdd)
# FIXED_OPTION:		No Change Option (e.g. "-i Input.mrc -SD 1")
# VARIABLE_OPTION:	Change Option by Loop (e.g. "-NS $(VAR) -SD $(CALC_S)$(VAR) / 7 $(CALC_E)")
# CALC_SCALE:		Calculation Scale (e.g. 15.6)
# LOOP_MIN:			LoopMinValue
# LOOP_MAX:			LoopMaxValue
# LOOP_DELTA:		LoopDeltaValue

## For LoopCommandEachFile::
# INPUT_EXT:		Extention of input files
# OUTPUT_EXT:		Extention of ouput files

## For InputList::
# INPUT_EXT:		Extention of input files
# LIST_EXT:			Extention of input list

## For SubMakefile
VAR=LoopNumber
CALC_SCALE=15.6
CALC_S=CalculationStart
CALC_E=CalculationEnd
CALC_VAR=$$(echo $$VARIABLE_OPTION | sed s/$(VAR)/'$$$$loopnum'/g | sed s/$(CALC_S)/'$$$$(echo "scale=$(CALC_SCALE);'/g | sed s/$(CALC_E)/'" | bc)'/g)

#### Rules of the list created ####
$(OUTPUT_EXT):$($(INPUT_EXT)_LIST:.$(INPUT_EXT)=.$(OUTPUT_EXT))

$(INPUT_EXT)_LIST::
	touch $(INPUT_EXT)_LIST
	echo "$(INPUT_EXT)_LIST=\\" > $(INPUT_EXT)_LIST
	ls -1 *.$(INPUT_EXT) |  sed s/$(INPUT_EXT)/$(INPUT_EXT)\\\\/ >> $(INPUT_EXT)_LIST
	echo "" >> $(INPUT_EXT)_LIST

##### Commands #####
LoopCommand::
	@for (( loopnum = $(LOOP_MIN); loopnum <= $(LOOP_MAX); loopnum += $(LOOP_DELTA) )) \
	do	\
		echo "Loop: $$loopnum ($(EXE_COMMAND))"; \
		$(EXE_COMMAND) $(FIXED_OPTION) $(VARIABLE_OPTION);	\
	done;
	
LoopCommandEachFile::
	make $(INPUT_EXT)_LIST;
	make $(OUTPUT_EXT);

InputList::
	touch $(INPUT_EXT).$(LIST_EXT)
	rm $(INPUT_EXT).$(LIST_EXT)
	ls -1 *.$(INPUT_EXT) >> $(INPUT_EXT).$(LIST_EXT)

LoopCommandHelp::
	@echo 'Define the following essential data at Main Makefile.'
	@echo '	For LoopCommand::'
	@echo '		EXE_COMMAND:		Loop Command Name (e.g. mrcImageNoiseAdd)'
	@echo '		FIXED_OPTION:		No Change Option (e.g. "-i Input.mrc -SD 1")'
	@echo '		VARIABLE_OPTION:	Change Option by Loop (e.g. "-NS $$(VAR) -SD $$(CALC_S)$$(VAR) / 7 $$(CALC_E)")'
	@echo '		CALC_SCALE:		Calculation Scale (e.g. 15.6)'
	@echo '		LOOP_MIN:			LoopMinValue'
	@echo '		LOOP_MAX:			LoopMaxValue'
	@echo '		LOOP_DELTA:		LoopDeltaValue'
	@echo
	@echo '	For LoopCommandEachFile::'
	@echo '		INPUT_EXT:		Extention of input files'
	@echo '		OUTPUT_EXT:		Extention of ouput files'
	@echo
	@echo '	For InputList::'
	@echo '		INPUT_EXT:		Extention of input files'
	@echo '		LIST_EXT:		Extention of input list'

##### Commands(Input to Output) #####

