# -*- Mode: makefile -*-
#      CVS: $Id: Makefile,v 1.2 2005/07/15 22:24:39 rijsman Exp $
#      Tag: $name$
#     Info: $CVSROOT/Copyright.txt

target: install

ifndef IDEA_DIR
   IDEA_DIR= ./../../../
endif 

include $(IDEA_DIR)/Modules/IPC/ipcMakeOptions.imake

INCLUDE_DIRS := -I./Includes
INCLUDE_DIRS += -I$(IDEA_DIR)/Core/Utilities/Includes
INCLUDE_DIRS += -I$(IDEA_DIR)/TimingService/Includes
INCLUDE_DIRS += -I$(IDEA_DIR)/MetaTimingService/Includes
INCLUDE_DIRS += -I$(IPC_INC_DIR)
INCLUDE_DIRS += -I$(ACE_ROOT)

LIBS += -L$(ACE_ROOT)/ace -lACE

INCLUDE_DIR :=./Includes

LIBRARY := metaipcrelay

STATIC_LIB_NAME = $(LIB_PREFIX)$(LIBRARY)$(IDEA_EXT).$(STEXT)
SHARED_LIB_NAME = $(LIB_PREFIX)$(LIBRARY)$(IDEA_EXT).$(SHEXT)

LIBRARY_SOURCES := IPCCommunicationRelay.cc
LIBRARY_INCLUDES := ./Includes/IPCCommunicationRelay.hh
STRIPPED_LIBRARY_INCLUDES := $(subst $(INCLUDE_DIR)/,,$(LIBRARY_INCLUDES) )

LIBRARY_ST_OBJECTS := $(LIBRARY_SOURCES:.cc=$(IDEA_EXT).o)
LIBRARY_SH_OBJECTS := $(LIBRARY_SOURCES:.cc=$(IDEA_EXT)_sh.o)

SHARED_BINARY := synchronize_sh$(IDEA_EXT)
STATIC_BINARY := synchronize_st$(IDEA_EXT)

SYNC_SOURCES= Synchronize.cc
SYNC_OBJECTS := $(SYNC_SOURCES:.cc=$(IDEA_EXT).o)

SHARED_LISTENER_BINARY := synchlistener_sh$(IDEA_EXT)
STATIC_LISTENER_BINARY := synchlistener_st$(IDEA_EXT)

SYNC_LISTENER_SOURCES= SyncListener.cc
SYNC_LISTENER_OBJECTS := $(SYNC_LISTENER_SOURCES:.cc=$(IDEA_EXT).o)

CFLAGS += $(INCLUDE_DIRS)

$(STATIC_LIB_NAME): $(LIBRARY_ST_OBJECTS)
	$(AR) $@ $?
	$(RANLIB) $@

$(SHARED_LIB_NAME): $(LIBRARY_SH_OBJECTS)
	$(LD) $(SHARE_LINK_FLAG) -o $@.$(IDEA_VERSION_MAJOR).$(IDEA_VERSION_MINOR) $(LIBRARY_SH_OBJECTS) 

$(LIBRARY_ST_OBJECTS): %$(IDEA_EXT).o : %.cc
	$(CCC) $(CFLAGS) -c $< -o $@

$(LIBRARY_SH_OBJECTS): %$(IDEA_EXT)_sh.o : %.cc
	$(CCC) $(SHARE_FLAG) $(CFLAGS) -c $< -o $@

$(SYNC_OBJECTS): %$(IDEA_EXT).o : %.cc
	$(CCC) $(CFLAGS) -c $< -o $@

$(SHARED_BINARY): utilities_sh $(SYNC_OBJECTS)
	$(CCC) $(SYNC_OBJECTS) $(LIBS) -L$(IPC_LIB_DIR) -lipc -L$(INSTALL_LIB_DIR) -lutils$(IDEA_EXT) -o $@ -Wl,--rpath,$(shell pwd)/$(INSTALL_LIB_DIR)/

$(STATIC_BINARY): utilities_st $(SYNC_OBJECTS)
	$(CCC) $(SYNC_OBJECTS) $(LIBS) $(IPC_LIB_DIR)/libipc.a $(INSTALL_LIB_DIR)/libutils$(IDEA_EXT).a  -o $@

$(SYNC_LISTENER_OBJECTS): %$(IDEA_EXT).o : %.cc
	$(CCC) $(CFLAGS) -c $< -o $@

$(SHARED_LISTENER_BINARY): utilities_sh metacomrelay_sh $(SHARED_LIB_NAME) $(SYNC_LISTENER_OBJECTS)
	$(CCC) $(SYNC_LISTENER_OBJECTS) $(LIBS) -L$(INSTALL_LIB_DIR) -lutils$(IDEA_EXT) -lmetacomrelay$(IDEA_EXT) -lmetaipcrelay$(IDEA_EXT) -lsharedtimingservice$(IDEA_EXT) -L$(IPC_LIB_DIR) -lipc -o $@ -Wl,--rpath,$(shell pwd)/$(INSTALL_LIB_DIR)/

$(STATIC_LISTENER_BINARY): utilities_st metacomrelay_st $(STATIC_LIB_NAME) $(SYNC_LISTENER_OBJECTS)
	$(CCC) $(SYNC_LISTENER_OBJECTS) $(LIBS) $(IPC_LIB_DIR)/libipc.a $(INSTALL_LIB_DIR)/libutils$(IDEA_EXT).a $(INSTALL_LIB_DIR)/libmetacomrelay$(IDEA_EXT).a $(INSTALL_LIB_DIR)/libmetaipcrelay$(IDEA_EXT).a  $(INSTALL_LIB_DIR)/libsharedtimingservice$(IDEA_EXT).a  -o $@

metacomrelay_sh:
	$(MAKE) -C $(IDEA_DIR)/MetaTimingService install-shared

metacomrelay_st:
	$(MAKE) -C $(IDEA_DIR)/MetaTimingService install-static

utilities_sh:
	$(MAKE) -C $(IDEA_DIR)/Core/Utilities install-shared

utilities_st:
	$(MAKE) -C $(IDEA_DIR)/Core/Utilities install-static

install: checkace install-static install-shared
	@echo 'Finished installing IPC meta timing service.'

install-static-libraries:checkace installdirs  $(STATIC_LIB_NAME) 
	$(CP) $(STATIC_LIB_NAME) $(INSTALL_LIB_DIR)/.
	$(CP) -u $(LIBRARY_INCLUDES) $(INSTALL_INCLUDE_DIR)/.

install-static: install-static-libraries $(STATIC_BINARY) $(STATIC_LISTENER_BINARY) 
	$(CP) $(STATIC_BINARY) $(INSTALL_BIN_DIR)/.
	$(CP) $(STATIC_LISTENER_BINARY) $(INSTALL_BIN_DIR)/.

install-shared-libraries: checkace installdirs $(SHARED_LIB_NAME)
	$(CP) $(SHARED_LIB_NAME).$(IDEA_VERSION_MAJOR).$(IDEA_VERSION_MINOR) $(INSTALL_LIB_DIR)/.
	$(LDCONFIG) -n $(INSTALL_LIB_DIR)
	$(CP) -u $(LIBRARY_INCLUDES) $(INSTALL_INCLUDE_DIR)/.

install-shared: install-shared-libraries $(SHARED_BINARY) $(SHARED_LISTENER_BINARY) 
	$(CP) $(SHARED_BINARY) $(INSTALL_BIN_DIR)/.
	$(CP) $(SHARED_LISTENER_BINARY) $(INSTALL_BIN_DIR)/.

clean:
	$(RM) *~ *.a *.so* *.o $(SHARED_LISTENER_BINARY) $(SHARED_BINARY) $(STATIC_LISTENER_BINARY) $(STATIC_BINARY) $(SHARED_LIB_NAME) $(STATIC_LIB_NAME) $(INCLUDE_DIR)/*~

veryclean: clean
	$(RM) $(INSTALL_LIB_DIR)/$(STATIC_LIB_NAME) $(INSTALL_LIB_DIR)/$(SHARED_LIB_NAME)*
	$(CD) $(INSTALL_INCLUDE_DIR); $(RM) $(STRIPPED_LIBRARY_INCLUDES)
	$(RM) $(INSTALL_BIN_DIR)/$(STATIC_BINARY)
	$(RM) $(INSTALL_BIN_DIR)/$(SHARED_BINARY)
	$(RM) $(INSTALL_BIN_DIR)/$(STATIC_LISTENER_BINARY)
	$(RM) $(INSTALL_BIN_DIR)/$(SHARED_LISTENER_BINARY)
