#===========================================================================
#
# Top SHARE Makefile
#
# author: Scott Binegar 
#
# Modification History:
#
#   Date       OPR         Who       Reason
# --------   -------   ------------  -----------------------------------------
# 09/20/01   n/a       S. Binegar    first version
# 02/20/02   44741     S. Binegar    add jar files to install
# 01/16/03   47179     Chris H.      blindly made changes for Jill
# 01/31/03   47450     Sontag        Added lines for AIX
# 03/31/05   53337     Sontag        Get ACE/TAO libs during make install
# 07/07/05   53718     MSwam         Let os defs set ACE/TAO version
# 11/17/05   53718     MSwam         New ACE/TAO not yet ready for Ops
# 12/07/05   54864     MSwam         Try again with ACE/TAO 541/141
# 04/24/06   55700     Sontag        Define TOPDIR; revamp TAO lib install
# 05/05/06   54226     Sontag        Add use of ACE_INST
# 09/28/06   52073     Sontag        Port GUI's to OSX
# 01/29/08   57952     Sontag        Handle x86_osx
# 11/12/09   63939     MSwam         Export some values to sub-makes
# 02/11/11   64549     RBelt         Added more autotools to install_auto_tools
#===========================================================================
#
# Eliminate implicit rules
.SUFFIXES:

# determine the operating system type and related parameters
include platform.defs

ifndef TOPDIR
  export TOPDIR:=$(shell pwd)
endif

# Build source and sddl files
all: src 
	@echo "Finished build"

# Build the source
src : FORCE
	@echo "Building Source..."
	@cd src && $(MAKE)

# Make clean
clean:
	@cd src && $(MAKE) clean

FORCE:

#======================= Install definitions ======================
#
# Make sure the Installation directory is defined
#
ifneq ($(INSTALL_DIR),)

bin_files = $(filter-out %/CVS , $(wildcard bin/$(OS_SUB_DIR)/*))
dest_bin_files = $(addprefix $(INSTALL_DIR)/, $(bin_files))

com_files = $(filter-out %/CVS , $(wildcard com/*))
dest_com_files = $(addprefix $(INSTALL_DIR)/, $(com_files))

dat_files = $(filter-out %/CVS , $(wildcard dat/*))
dest_dat_files = $(addprefix $(INSTALL_DIR)/, $(dat_files))

definitions_files = $(filter-out %/CVS %/unix, $(wildcard definitions/*)) \
	            $(filter-out %/CVS , $(wildcard definitions/unix/*))
dest_definitions_files = $(addprefix $(INSTALL_DIR)/, $(definitions_files))

hlp_files = $(filter-out %/CVS %/gif, $(wildcard hlp/*)) \
            $(filter-out %/CVS, $(wildcard hlp/gif/*)) 
dest_hlp_files = $(addprefix $(INSTALL_DIR)/, $(hlp_files))

Install_files = $(filter-out %/CVS , $(wildcard install/*))
dest_Install_files = $(addprefix $(INSTALL_DIR)/, $(Install_files))

lib_files = $(filter-out %/CVS , $(wildcard lib/$(OS_SUB_DIR)/*))
dest_lib_files = $(addprefix $(INSTALL_DIR)/, $(lib_files))

java_files = $(wildcard bin/java/*.jar)
dest_java_files = $(addprefix $(INSTALL_DIR)/, $(java_files))

java_installer_files = $(wildcard bin/JavaMgrs/unix/*) $(wildcard bin/JavaMgrs/windows/*)
dest_java_installer_files = $(addprefix $(INSTALL_DIR)/, $(java_installer_files))

update_dirs =  bin com dat definitions hlp Install lib java java_installer

#
# Copy the ACE/TAO libraries to the build tree
#
include ./src/$(OS_SUB_DIR).defs
ace_inst_files0 = $(addprefix libACE, $(ACE_INST))
ace_inst_files = $(addsuffix .$(SO_EXT), $(ace_inst_files0))

tao_inst_files0 = $(addprefix libTAO_, $(TAO_INST))
tao_inst_files = $(addsuffix .$(SO_EXT), $(tao_inst_files0))

#
LBDR = $(INSTALL_DIR)/lib/$(OS_SUB_DIR)
.PHONY : install
install : $(update_dirs)
	@echo "Installing ACE$(ACE_VERSION)/TAO$(TAO_VERSION) libs from $(ACE_LIBLOC)"
# libACE
	@echo "libACE.$(SO_EXT)"
	@cd $(LBDR); /bin/rm -f libACE.$(SO_EXT)*
	@cd $(LBDR); cp $(ACE_LIBLOC)/libACE.$(SO_EXT) libACE.$(SO_EXT).$(ACE_VERSION)
	@cd $(LBDR); ln -f -s  libACE.$(SO_EXT).$(ACE_VERSION) libACE.$(SO_EXT)
# libTAO
	@echo "libTAO.$(SO_EXT)"
	@cd $(LBDR); /bin/rm -f libTAO.$(SO_EXT)*
	@cd $(LBDR); cp $(ACE_LIBLOC)/libTAO.$(SO_EXT) libTAO.$(SO_EXT).$(TAO_VERSION)
	@cd $(LBDR); ln -f -s  libTAO.$(SO_EXT).$(TAO_VERSION) libTAO.$(SO_EXT)
# libACE*
	@cd $(LBDR); for file in $(ace_inst_files) ; do echo $$file ; /bin/rm -f $$file* ; /bin/cp $(ACE_LIBLOC)/$$file $$file.$(ACE_VERSION) ; /bin/ln -f -s $$file.$(ACE_VERSION) $$file ; done
# libTAO_*
	@cd $(LBDR); for file in $(tao_inst_files) ; do echo $$file ; /bin/rm -f $$file* ; /bin/cp $(ACE_LIBLOC)/$$file $$file.$(TAO_VERSION) ; /bin/ln -f -s $$file.$(TAO_VERSION) $$file ; done
	@echo "Done ACE/TAO libs, about to chmod"
	@chmod -fR go-w $(INSTALL_DIR)
	@echo "Tree chmod done"
	@chmod -f ugo+rx $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/*
	@chmod -f ugo+r $(INSTALL_DIR)/lib/$(OS_SUB_DIR)/*
	@chmod -f ugo+rx $(INSTALL_DIR)/bin/java/*
	@echo "Install/Update complete"

.PHONY : install_auto_tools
install_auto_tools :
	@echo "Installing AUTO tools from TOOL_ROOT: $(TOOL_ROOT)"
	@cp $(TOOL_ROOT)/build_*.py $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/.
	@cp $(TOOL_ROOT)/verify_*.py $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/.
	@cp $(TOOL_ROOT)/Pipeline*.py $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/.
	@cp $(TOOL_ROOT)/Start*.py $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/.
	@cp $(TOOL_ROOT)/Stop*.py $(INSTALL_DIR)/bin/$(OS_SUB_DIR)/.
	@cp $(TOOL_ROOT)/../docs/build_*.html $(INSTALL_DIR)/hlp/.

#
# Create all of the destination directories
#

.PHONY : dirs
dirs :
	@echo "INSTALL_DIR = $(INSTALL_DIR)"
	@sleep 5
	@echo "Building dirs..."
	[ -d  $(INSTALL_DIR)/bin/$(OS_SUB_DIR) ] || mkdir -p $(INSTALL_DIR)/bin/$(OS_SUB_DIR)
	[ -d  $(INSTALL_DIR)/bin/java ] || mkdir -p $(INSTALL_DIR)/bin/java
	[ -d  $(INSTALL_DIR)/bin/JavaMgrs/unix ] || mkdir -p $(INSTALL_DIR)/bin/JavaMgrs/unix
	[ -d  $(INSTALL_DIR)/bin/JavaMgrs/windows ] || mkdir -p $(INSTALL_DIR)/bin/JavaMgrs/windows
	[ -d  $(INSTALL_DIR)/com ] || mkdir -p $(INSTALL_DIR)/com
	[ -d  $(INSTALL_DIR)/dat ] || mkdir -p $(INSTALL_DIR)/dat
	[ -d  $(INSTALL_DIR)/definitions/unix ] || mkdir -p $(INSTALL_DIR)/definitions/unix
	[ -d  $(INSTALL_DIR)/hlp/gif ] || mkdir -p $(INSTALL_DIR)/hlp/gif
	[ -d  $(INSTALL_DIR)/install ] || mkdir -p $(INSTALL_DIR)/install
	[ -d  $(INSTALL_DIR)/lib/$(OS_SUB_DIR) ] || mkdir -p $(INSTALL_DIR)/lib/$(OS_SUB_DIR)

bin : $(dest_bin_files)
com : $(dest_com_files)
dat : $(dest_dat_files)
definitions : $(dest_definitions_files)
hlp : $(dest_hlp_files)
Install : $(dest_Install_files)
lib : $(dest_lib_files)
java : $(dest_java_files)
java_installer : $(dest_java_installer_files)

dest_files := $(foreach dir, $(update_dirs), $(dest_$(dir)_files))

$(dest_files) : $(INSTALL_DIR)/% : %
	@echo 'Installing: $(<)'
	@cp -f '$(<)' '$(@)'

print:
	@echo $(lib_files)
	@echo $(bin_script_files)
	@echo $(dest_files)
	@echo $(dest_dat_files)

else # INSTALL_DIR not defined

ERR = $(error ERROR)

.PHONY: install
install:
	@echo "INSTALL_DIR not defined"
	$(ERR)

endif 
