# this Makefile generates C code for similar SHT functions,
# from one generic code + tags (reduced code maintenance).

SFX=

#default sed program
SED=sed

#first char : V,Q,S,T
# Spheroidal and Toroidal (V,S,T)
vect=-e "/^[3Q\#]/d" -e "s/^[VST]X*//"
# Spheroidal component only (V,S)
sph=-e "/^[3QT\#]/d" -e "s/^[VS]X*//"
# Toroidal component only (V,T)
tor=-e "/^[3QS\#]/d" -e "s/^[VT]X*//"
# Scalar component (Q)
scal=-e "/^[3VST\#]/d" -e "s/^QX*//"
# 3D Vector component (VQST3) but not exclusive (.X) lines.
v3d=-e "/^[\#]/d" -e "/^.X/d" -e "s/^[QVST3]//"

# second char : 1BEO
# even (1,E)
ev=-e "s/^\(.\)[1E]/\1/" -e "/^.[BO]/d"
# odd (1,O)
od=-e "s/^\(.\)[1O]/\1/" -e "/^.[BE]/d"
# both (B,E,O)
eo=-e "s/^\(.\)[EOB]/\1/" -e "/^.1/d"

# second char : 3 components or solo.


ifeq ($(strip $(SFX)),)
  GSH=hyb_SH_to_spat.gen.c
  GSP=hyb_spat_to_SH.gen.c
  ST=SHst_to_spat.c
  Q=SH_to_spat.c
  S=SHs_to_spat.c
  T=SHt_to_spat.c
  QST=SHqst_to_spat.c
  SC=spat_to_SH.c
  VE=spat_to_SHst.c
  V3=spat_to_SHqst.c
  VS0=spat_to_SHs.c
  VT0=spat_to_SHt.c
else
  GSH=$(SFX)_SH_to_spat.gen.c
  GSP=$(SFX)_spat_to_SH.gen.c
  ST=SHst_to_spat_$(SFX).c
  Q=SH_to_spat_$(SFX).c
  S=SHs_to_spat_$(SFX).c
  T=SHt_to_spat_$(SFX).c
  QST=SHqst_to_spat_$(SFX).c
  SC=spat_to_SH_$(SFX).c
  VE=spat_to_SHst_$(SFX).c
  V3=spat_to_SHqst_$(SFX).c
endif

all: $(GSH) $(GSP)
	$(MAKE) $(SC)
	$(MAKE) $(Q)

# SH_to_spat generation
$(Q) : $(GSH) Makefile
	@echo "// This file was automatically generated by 'make' from file '$(GSH)'." > $(ST)
	@echo "// To modify it, please consider modifying $(GSH)" >> $(ST)
	@cp $(ST) $(S)
	@cp $(ST) $(T)
	@cp $(ST) $(Q)
	@cp $(ST) $(QST)
#EVEN/ODD
	@$(SED) $(eo) $(vect) $(GSH) >> $(ST)
	@$(SED) $(eo) $(sph)  $(GSH) >> $(S)
	@$(SED) $(eo) $(tor)  $(GSH) >> $(T)
	@$(SED) $(eo) $(scal) $(GSH) >> $(Q)
	@$(SED) $(eo) $(v3d)  $(GSH) >> $(QST)
	@echo "SH*_to_spat code generated."

# spat_to_SH generation
$(SC) : $(GSP) Makefile
	@echo "// This file was automatically generated by 'make' from file '$(GSP)'." > $(SC)
	@echo "// To modify it, please consider modifying $(GSP)" >> $(SC)
	@cp $(SC) $(VE)
	@cp $(SC) $(V3)
#	@cp $(SC) $(VS0)
#	@cp $(SC) $(VT0)
#EVEN/ODD
	@$(SED) $(eo) $(scal) $(GSP) >> $(SC)
	@$(SED) $(eo) $(vect) $(GSP) >> $(VE)
	@$(SED) $(eo) $(v3d)  $(GSP) >> $(V3)
#	@$(SED) $(eo) $(sph)  $(GSP) >> $(VS0)
#	@$(SED) $(eo) $(tor)  $(GSP) >> $(VT0)
	@echo "spat_to_SH* code generated."

clean:
	rm -f spat_to_SH* SH*

.PHONY: clean
