include sophyamake.inc

defaut: libs

all: libs extlibs PI
libs: cxxlibs
extlibs : cxxextlibs

cxxlibs::
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/BaseTools.conf ] ; then cd  ../BaseTools ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/SysTools.conf ] ; then cd  ../SysTools ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/SUtils.conf ] ; then cd  ../SUtils ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/TArray.conf ] ; then cd  ../TArray ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/NTools.conf ] ; then cd  ../NTools ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/HiStats.conf ] ; then cd  ../HiStats ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/SkyMap.conf ] ; then cd  ../SkyMap ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/Samba.conf ] ; then cd  ../Samba ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/SkyT.conf ] ; then cd  ../SkyT ; $(MAKE) ; fi

cxxextlibs::
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/FitsIOServer.conf ] ; then cd  ../FitsIOServer ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/IFFTW.conf ] ; then cd  ../IFFTW ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/LinAlg.conf ] ; then cd  ../LinAlg ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/XAstroPack.conf ] ; then cd  ../XAstroPack ; $(MAKE) ; fi
 
PI::
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/PI.conf ] ; then cd ../PI ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/PIGcont.conf ] ; then cd ../PIGcont ; $(MAKE) ; fi
	if [ -f $(SOPHYAINCP)/SophyaConfInfo/PIext.conf ] ; then cd ../PIext ; $(MAKE) ; fi

#  Shared library creation part of the Makefile

#  main dependence list
slball : slb slbext slbpi 
slb : $(SOPHYASLBP)libsophya.$(SLEXT)
slbext : $(SOPHYASLBP)libextsophya.$(SLEXT)    
slbpi : $(SOPHYASLBP)libPI.$(SLEXT)
#  All object modules in a single shared library
slballinone : $(SOPHYASLBP)libAsophyaextPI.$(SLEXT) 

# List of .o files for SOPHYA  module
ALLOBJSF = $(SOPHYAINCP)/SophyaConfInfo/libsophya.objlist
 
# List of .o files modules with reference to external libraries
ALLEXTOBJSF = $(SOPHYAINCP)/SophyaConfInfo/libextsophya.objlist

# List of .o files for PI modules 
ALLPIOBJSF = $(SOPHYAINCP)/SophyaConfInfo/libPI.objlist
 
# Building Sophya shared library
$(SOPHYASLBP)libsophya.$(SLEXT) : $(ALLOBJSF)
	echo `cat $(ALLOBJSF)` ; \
	cd  $(SOPHYAOBJP); \
	$(CMDSHLCXX) -o $@  `cat $(ALLOBJSF) ` $(SOPBASELIBS)
 
# Building ExtSophya shared library
$(SOPHYASLBP)libextsophya.$(SLEXT) : $(ALLEXTOBJSF)
	echo `cat $(ALLEXTOBJSF)` ; \
	cd  $(SOPHYAOBJP); \
	$(CMDSHLCXX) -o $@  `cat $(ALLEXTOBJSF) ` \
	$(SOPHYASLBLIST) $(SOPEXTLIBS)

# Building PI shared library
$(SOPHYASLBP)libPI.$(SLEXT) : $(ALLPIOBJSF)
	echo `cat $(ALLPIOBJSF)` ; \
	cd  $(SOPHYAOBJP); \
	$(CMDSHLCXX) -o $@ `cat $(ALLPIOBJSF) ` \
	$(SOPHYASLBLIST) $(PILIBS)

# Building a single shared library with all modules Sophya+ExtSophya+PI
$(SOPHYASLBP)libAsophyaextPI.$(SLEXT) : $(ALLOBJSF) $(ALLEXTOBJSF) $(ALLPIOBJSF)
	echo `cat $(ALLOBJSF)` ; \
	echo `cat $(ALLEXTOBJSF)` ; \
	echo `cat $(ALLPIOBJSF)` ; \
	cd  $(SOPHYAOBJP); \
	$(CMDSHLCXX) -o $@ \
	`cat $(ALLOBJSF) ` \
	`cat $(ALLEXTOBJSF) ` \
	`cat $(ALLPIOBJSF) ` \
	$(PILIBS) $(SOPEXTLIBS) $(SOPBASELIBS)


#  Cleaning targets
clean:
	if [ -d $(SOPHYALIBP) ] ; then cd $(SOPHYALIBP)/. ; rm -f *.a  ; fi
	if [ -d $(SOPHYASLBP) ] ; then cd $(SOPHYASLBP)/. ; rm -f *.so ; fi
	if [ -d $(SOPHYAEXEP) ] ; then cd $(SOPHYAEXEP)/. ; rm -f * ; fi
	if [ -d $(SOPHYAOBJP) ] ; then cd $(SOPHYAOBJP)/. ; rm -rf *.o cxxrep templateregistry ; fi

cleanobj:
	if [ -d $(SOPHYAOBJP) ] ; then rm -rf $(SOPHYAOBJP) ; fi

#  Various main program builds
prgall : tests prgutil prgmap progpi
piapp : progpi
spiapp : progpi

basetests:
	cd ../Tests/ ; make arrt carrt tnt tobjio spar tparlex 

tests:
	cd ../Tests/ ; make

prgutil:
	cd ../PrgUtil/ ; make

progpi:
	cd ../ProgPI/ ; make

prgmap:
	cd ../PrgMap/ ; make

pmixer:
	cd ../PMixer/ ; make



