#*******************************************************************************
# E.S.O. - VLT project
#
# "@(#) $Id: idlMakefile,v 1.3 2012/01/13 18:54:47 tstaig Exp $"
#
# who       when      what
# --------  --------  ----------------------------------------------
# psivera  05/06/02  created
#

#************************************************************************
#   NAME
#
#   SYNOPSIS
#
#   DESCRIPTION
#
#   FILES
#
#   ENVIRONMENT
#
#   RETURN VALUES
#
#   CAUTIONS
#
#   EXAMPLES
#
#   SEE ALSO
#
#   BUGS
#
#------------------------------------------------------------------------
#
#
#  CHECK THE FOLLOWING VARIABLES!!!
#  IDL_PATH_LIST
#  VLTIDL, MODIDL, IDL_PATH
# 

######################################
# phony section
######################################
.PHONY : install_idl
.PHONY : do_idl


######################################
# variables settings
######################################
TAO_IDL = $(TAO_ROOT)/TAO_IDL/tao_idl
OMNI_IDL = $(OMNI_ROOT)/bin/$(FARCH)/omniidl
ORBACUS_IDL = $(ALMASW_ROOTDIR)/$(ALMASW_RELEASE)/Orbacus/local/bin/jidl
# set search path for idl files

vpath %.idl $(IDL_PATH_LIST)
vpath %.fake ../object

SHELL=/bin/bash

######################################
# incrementing tasks
######################################
ifneq ($(strip $(IDL_FILES)),)
    CLEAN_TARGET := $(CLEAN_TARGET) clean_idl
endif

ifneq ($(strip $(IDL_FILES)),)
    INSTALL_TARGET := $(INSTALL_TARGET) install_idl
endif

ifneq ($(strip $(IDL_FILES)),)
ifeq (,$(findstring do_idl,$(ALL_TARGET)))
#    ALL_TARGET := do_idl $(ALL_TARGET) 
endif
endif



######################################
# targets specification
######################################

## clean
##
clean_idl:
	-$(AT)$(RM) vltMake_clean_idl       $(foreach member, $(IDL_FILES), ../object/$(member).didl $(member)C.cpp ../include/$(member)C.h ../include/$(member)C.i $(member)S.cpp ../include/$(member)S.h ../include/$(member)S.i ../include/$(member)S_T.cpp ../include/$(member)S_T.h ../include/$(member)S_T.i ../lib/$(member).jar ../object/.$(member).fake)  $(OUTPUT)
	-$(AT)if [ -f .idl-compilation-start ]; then \
	cd ../lib/python/site-packages;\
	find . ! -name . -type d -depth -newer ../../../src/.idl-compilation-start ! -newer ../../../src/.idl-compilation-end -exec $(RM) {} \; ; \
	find . -type f -newer ../../../src/.idl-compilation-start ! -newer ../../../src/.idl-compilation-end -exec $(RM) {} \;   ;\
	cd ../../../src ; \
	$(RM) .idl-compilation-start .idl-compilation-end ;\
	fi
	-$(AT)find ../object -type d ! -name object | xargs -i $(RM) {}
	-@$(ECHO)  " .\c"

## install
##
install_idl:
ifneq ($(strip $(IDL_FILES)),)
	-@$(ECHO) "install_idl: idl_begin $(foreach member, $(IDL_FILES), $(VLTTOP)/idl/$(member).idl $(VLTTOP)/include/$(member)C.h $(VLTTOP)/include/$(member)C.i $(VLTTOP)/include/$(member)S.h $(VLTTOP)/include/$(member)S.i $(VLTTOP)/include/$(member)S_T.h $(VLTTOP)/include/$(member)S_T.i $(VLTTOP)/include/$(member)S_T.cpp  $(VLTTOP)/lib/$(member).jar) " >>$(FILE)
	-@$(ECHO) "idl_begin:" >>$(FILE)
	-@$(ECHO) "	-@echo \"\"; $(ECHO) \".......idl:\"" >>$(FILE)

	-@$(ECHO) "	\$$(AT)(cd ../lib/python/site-packages; find . -type f -newer ../../../src/.idl-compilation-start ! -newer ../../../src/.idl-compilation-end | gtar cf -  --files-from=- | tar xf - -C$(VLTTOP)/lib/python/site-packages )" >>$(FILE)
	-$(AT) for member in  $(foreach name, $(IDL_FILES), $(name) ) ; do \
		    $(ECHO) "$(VLTTOP)/idl/$${member}.idl $(VLTTOP)/include/$${member}C.h $(VLTTOP)/include/$${member}C.i $(VLTTOP)/include/$${member}S.h $(VLTTOP)/include/$${member}S.i $(VLTTOP)/include/$${member}S_T.h $(VLTTOP)/include/$${member}S_T.i $(VLTTOP)/include/$${member}S_T.cpp $(VLTTOP)/lib/$${member}.jar: ../idl/$${member}.idl" >>$(FILE);\
		    $(ECHO) "	-\$$(AT)echo \"\t$${member}\";\\" >>$(FILE);\
		    $(ECHO) "	cp ../idl/$${member}.idl $(VLTTOP)/idl/$${member}.idl;\\" >>$(FILE);\
		    $(ECHO) "	chmod $(P755) $(VLTTOP)/idl/$${member}.idl;\\" >>$(FILE);\
		    if[ "$(OSYSTEM)" = "$(CYGWIN_VER)" ]; then extensions="C.h C.i S.h S.i S_T.h S_T.i S_T.cpp StubsExport.h"; else; \
		    extensions="C.h C.i S.h S.i S_T.h S_T.i S_T.cpp"; fi; for ext in $$extensions ; do \
		                if [ -f ../include/$${member}$${ext} ]; then \
			           	$(ECHO) "	cp ../include/$${member}$${ext} $(VLTTOP)/include/$${member}$${ext};\\" >>$(FILE);\
			    	   	$(ECHO) "	chmod $(P755) $(VLTTOP)/include/$${member}$${ext};\\" >>$(FILE);\
				fi;\
			   done; \
		    if [ -f ../lib/$${member}.jar ]; then \
		    	$(ECHO) "	cp ../lib/$${member}.jar $(VLTTOP)/lib/$${member}.jar;\\" >>$(FILE);\
		    	$(ECHO) "	chmod $(P755) $(VLTTOP)/lib/$${member}.jar" >>$(FILE);\
		    fi;\
	done
	$(AT)$(ECHO) "" >>$(FILE);
endif


## all
##

ifeq($(OSYSTEM),$(CYGWIN_VER))
../object/.%.fake %S.cpp %C.cpp ../include/%C.h ../include/%C.i ../include/%S.h ../include/%S.i ../include/%S_T.cpp ../include/%S_T.h ../include/%S_T.i ../include/%StubsExport.h: %.idl
else
../object/.%.fake %S.cpp %C.cpp ../include/%C.h ../include/%C.i ../include/%S.h ../include/%S.i ../include/%S_T.cpp ../include/%S_T.h ../include/%S_T.i : %.idl
endif
#	ls -a ../object/ . ../include 
# beginning - preparing IDL compilation
#	$(AT) echo "****>>> $(ALL_TARGET) <<<<<<<<<< "
	$(AT) $(RM) -f .$(*F).fake
	$(AT) if [ ! -f .idl-compilation-start ]; then touch .idl-compilation-start ; fi
ifndef MAKE_VXWORKS
	$(shell if [ ! -d ../lib/python/site-packages ]; then mkdir -p ../lib/python/site-packages; fi)
# - generating idl file depending files
	- @echo "== IDL Compiling for TAO (C++): $(<F)"
ifeq($(OSYSTEM),$(CYGWIN_VER))
	$(AT) $(TAO_IDL) $(IDL_PATH) -Wb,export_macro=$(*F)Stubs_Export -Wb,export_include=$(*F)StubsExport.h -Gxhst -Gxhsk -Gxhsv -Gxhex -Gxhcn -o ../object $(TAO_IDLFLAGS) $<
else
	$(AT) $(TAO_IDL) $(IDL_PATH) -o ../object $(TAO_IDLFLAGS) $<
endif
	$(AT) mv ../object/$(*F)C.h ../include/$(*F)C.h
	$(AT) mv ../object/$(*F)S.h ../include/$(*F)S.h
	$(AT) mv ../object/$(*F)S_T.h ../include/$(*F)S_T.h
ifeq($(OSYSTEM),$(CYGWIN_VER))
	$(AT) mv ../object/$(*F)StubsExport.h ../include/$(*F)StubsExport.h
endif
	$(AT) mv ../object/$(*F)C.i ../include/$(*F)C.i
	$(AT) mv ../object/$(*F)S.i ../include/$(*F)S.i
	$(AT) mv ../object/$(*F)S_T.i ../include/$(*F)S_T.i
	$(AT) mv ../object/$(*F)C.cpp $(*F)C.cpp
	$(AT) mv ../object/$(*F)S.cpp $(*F)S.cpp
	$(AT) mv ../object/$(*F)S_T.cpp ../include/$(*F)S_T.cpp

#
#  There is a compatibility problem with the tao/Policy.idl file and both
#  Orbacus and OmniOrb, since this TAO idl file uses the keyword 
#  "local", that is not recognized
#  For the time being, we put then by hand the Orbacus and OmniOrb IDL directories in the IDL_PATH
#  BEFORE the TAO once when building java and Python.
#
# java
	- @echo "== IDL Compiling for Orbacus (Java): $(<F)"
	$(AT) $(ORBACUS_IDL) -I../idl -I$(ALMASW_ROOTDIR)/$(ALMASW_RELEASE)/Orbacus/local/idl/ -I$(ALMASW_ROOTDIR)/$(ALMASW_RELEASE)/Orbacus/local/idl/OB $(IDL_PATH) --auto-package --output-dir ../object  $< 
	$(AT) CLASSPATH=`vltMakeJavaClasspath`; export CLASSPATH; javac -d ../object `find ../object -name \*.java`
	$(AT) cd ../object; CLASSES=`find . -name \*.class`; export CLASSES;  if [ "$$CLASSES" != "" ] ; then jar cf ../lib/$(basename $(<F)).jar $$CLASSES ; fi
	$(AT) find ../object -type d ! -name object | xargs -i $(RM) {}
#
# Python
	- @echo "== IDL Compiling for OmniOrb (Python): $(<F)"
	$(AT) $(OMNI_IDL)  -I../idl -I$(OMNI_ROOT)/idl/ $(IDL_PATH) $(IDL_PATH) -bpython -C../lib/python/site-packages $<
endif # MAKE_VXWORKS

# the end
	$(AT) touch ../object/.$(*F).fake
	$(AT) touch .idl-compilation-end
#	echo "********* VERIFICATION *******************"
#	ls ../object/.baci.fake baciC.cpp ../include/baciC.h ../include/baciC.i baciS.cpp ../include/baciS.h ../include/baciS.i ../include/baciS_T.cpp ../include/baciS_T.h ../include/baciS_T.i

# - for Automatic Dependencies for idl files
#   a "../object/xxxx.didl" containing the dependencies structure of a idl
#   file is created using a special script that receives in input what 
#   specified by the caller in the Makefile
#
../object/%.didl:
	- @echo "== Dependencies: $@"
	$(AT)vltMakeIdlDependencies $(*F) >../object/$*.didl

TMP_DEP_IDL := $(addprefix ../object/, $(addsuffix .didl, $(IDL_FILES)))
TMP_DEP_IDL := $(TMP_DEP_IDL) $(addprefix ../object/., $(addsuffix .fake, $(IDL_FILES)))
do_idl: $(TMP_DEP_IDL)
#
#___oOo___
