#!/bin/sh
all: lib
lib: xml bkcheckout ports componentstubs  CCAFERC CCAFERC_gui
libfast: xml bkcheckout ports componentstubs  CCAFERC CCAFERC_gui

PORTS = $(foreach l,$(SIDL_CLIENT_LANGUAGES),OptimizationPorts-$l) 
COMPONENTS = TaoDriver TaoSolver Minsurf PetscFactory $(GAFACTORY_SIDL:.sidl=)
DIRS = $(PORTS) 
#$(COMPONENTS)
VPATH = sidlfiles
SIDLFILES = OptimizationPorts.sidl Minsurf.sidl TaoDriver.sidl TaoSolver.sidl PetscFactory.sidl $(GAFACTORY_SIDL)
REPOSITORY = -R$(TAO_DIR)/src/sidl/xml
EXCLUDES=--exclude="^sidl.*" --exclude="^gov.*" --exclude="^Optimize.*"\
         --exclude="^Solver.*" --exclude="^LinearAlgebra.*"

CLEANFILES = .xml .bkcheckout .stubs .ports .templates .componentstubs

xml: .xml
.xml: $(SIDLFILES) ../.xml
	@$(RM) -f ../xml/*.xml ../.xml
	@cd .. && $(MAKE) xml
	@cd sidlfiles && $(BABEL) --text=xml -o ../../xml $(SIDLFILES) -R$(CCA_XML_DIR) $(REPOSITORY) > /dev/null
	@touch .xml


bkcheckout: .bkcheckout
.bkcheckout:
	-@bk sfiles -g | grep Impl | xargs bk edit 2>&1 | grep -v "skipping"
	@touch .bkcheckout

ports: .ports templates
.ports: .xml  .bkcheckout 
	@$(foreach l, $(SIDL_CLIENT_LANGUAGES), \
            if [ "$lx" = "Pythonx" ]; then \
            $(BABEL) --suppress-timestamp -c$(l) -oOptimizationPorts-$(l)/ $(REPOSITORY) OptimizationPorts.SolverPort OptimizationPorts.ModelPort OptimizationPorts.LAFactoryPort > /dev/null; \
	    else  \
            $(BABEL) $(EXCLUDES) --suppress-timestamp -c$(l) -oOptimizationPorts-$(l)/ $(REPOSITORY) OptimizationPorts.SolverPort OptimizationPorts.ModelPort OptimizationPorts.LAFactoryPort > /dev/null; \
            fi;)

	@touch .ports


templates: .templates 
.templates:
	@$(foreach l, $(SIDL_CLIENT_LANGUAGES), \
	 mkdir -p OptimizationPorts-$l; \
         sed "s^@SIDL_PACKAGE_NAME@^OptimizationPorts^g"  \
         $(TAO_DIR)/src/sidl/clients/makefile_templates/makefile-$(l)\
         > $(TAO_DIR)/src/sidl/components/OptimizationPorts-$(l)/makefile;)
	-@sed "s^OptimizationPorts/^^" OptimizationPorts-Python/makefile > tempMK
	-@sed "s^-client^^" tempMK  > OptimizationPorts-Python/makefile
	-@${RM} tempMK

	@touch .templates

componentstubs: .componentstubs
.componentstubs: .xml .bkcheckout 
	@$(BABEL) $(EXCLUDES) --exclude="^OptimizationPorts.*" --suppress-timestamp -sC++ -oMinsurf $(REPOSITORY) Minsurf.Component > /dev/null
	@$(BABEL) $(EXCLUDES) --exclude="^OptimizationPorts.*" --suppress-timestamp -sC++ -oTaoDriver $(REPOSITORY) TaoDriver.Component > /dev/null
	@$(BABEL) $(EXCLUDES) --exclude="^OptimizationPorts.*" --suppress-timestamp -sC++ -oTaoSolver $(REPOSITORY) TaoSolver.Component > /dev/null
	@$(BABEL) $(EXCLUDES) --exclude="^OptimizationPorts.*" --suppress-timestamp -sC++ -oPetscFactory $(REPOSITORY) PetscLA.Factory > /dev/null
#	@$(BABEL) $(EXCLUDES) --exclude="^OptimizationPorts.*" --suppress-timestamp -sC++ -oGAFactory $(REPOSITORY) GA.Factory > /dev/null

	-@${foreach i, ./TaoSolver/TaoSolver_Component_IOR.c ./PetscFactory/PetscLA_Factory_IOR.c ./Minsurf/Minsurf_Component_IOR.c ./TaoDriver/TaoDriver_Component_IOR.c, \
	if [ "`grep c++-enable $i`foo" = foo ] ; then  \
        sed s^'\#include "sidl_thread.h"'^'/*c++-enable*/\n\#ifdef __cplusplus\nextern "C" {\n\#include "sidl_thread.h"\n}\n\#endif'^g $i > tmp; mv tmp $i; \
	fi; }


	@touch .componentstubs

components:
	@$(foreach c,${COMPONENTS}, \
	  cd ${TAO_DIR}/src/sidl/components/$c && ${OMAKE};)



CCAFERC: CCAFERC.in tao_chkopts
	-@cat $(TAO_DIR)/src/sidl/components/CCAFERC.in | \
            sed s^@TAO_DIR@^$(TAO_DIR)^g |\
            sed s^@PETSC_ARCH@^$(PETSC_ARCH)^g \
            > $(TAO_DIR)/src/sidl/components/CCAFERC 


#cca: .cca
#.cca:
#	-@if ! [ -f ${TAO_DIR}/lib/${PETSC_ARCH}/components.cca ]; then\
#	 /bin/cp -f components.cca $(TAO_DIR)/lib/${PETSC_ARCH};\
#	 chmod u+w ${TAO_DIR}/lib/${PETSC_ARCH}/components.cca;\
#	fi;

CCAFERC_gui: CCAFERC_gui.in
	-@cat $(TAO_DIR)/src/sidl/components/CCAFERC_gui.in | \
            sed s^@TAO_DIR@^$(TAO_DIR)^g |\
            sed s^@PETSC_ARCH@^$(PETSC_ARCH)^g \
            > $(TAO_DIR)/src/sidl/components/CCAFERC_gui

include ${TAO_DIR}/bmake/tao_common
