# -*- Mode: makefile -*-
#      CVS: $Id: Makefile,v 1.10 2005/07/14 23:47:47 rijsman Exp $
#      Tag: $name$
#     Info: $CVSROOT/Copyright.txt

target: install

ifndef IDEA_DIR
   IDEA_DIR= ./../
endif 

include $(IDEA_DIR)/ideaMakeOptions.imake

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

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

INCLUDE_DIR :=./Includes

LIBRARY := sharedtimingservice

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

LIBRARY_SOURCES := SharedTimingService.cc TimingServiceStopper.cc
LIBRARY_INCLUDES := ./Includes/SharedTimingService.hh ./Includes/TimingServiceStopper.hh

STRIPPED_LIBRARY_INCLUDES := $(subst $(INCLUDE_DIR)/,,$(LIBRARY_INCLUDES) )

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

SHARED_BINARY := timingservice_sh$(IDEA_EXT)
STATIC_BINARY := timingservice_st$(IDEA_EXT)

BINARY_SOURCES := Main.cc  TimerHandler.cc  TimingService.cc 
BINARY_OBJECTS := $(BINARY_SOURCES:.cc=$(IDEA_EXT).o)
BINARY_SH_OBJECTS := $(BINARY_SOURCES:.cc=_sh$(IDEA_EXT).o)

CFLAGS += $(INCLUDE_DIRS)

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

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

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

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

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

$(SHARED_BINARY): utilities_sh sharedtimingservice-shared $(BINARY_OBJECTS)
	$(CCC)  $(BINARY_OBJECTS) $(LIBS) -L$(INSTALL_LIB_DIR) -lsharedtimingservice$(IDEA_EXT) -lutils$(IDEA_EXT) -o $@ -Wl,--rpath,$(shell pwd)/$(INSTALL_LIB_DIR)/

$(STATIC_BINARY): utilities_st sharedtimingservice-static $(BINARY_OBJECTS)
	$(CCC) $(BINARY_OBJECTS) $(LIBS) $(INSTALL_LIB_DIR)/libsharedtimingservice$(IDEA_EXT).a $(INSTALL_LIB_DIR)/libutils$(IDEA_EXT).a  -o $@

sharedtimingservice-static: $(STATIC_LIB_NAME)
	$(CP) $(STATIC_LIB_NAME) $(INSTALL_LIB_DIR)/.
	$(CP) -u $(LIBRARY_INCLUDES) $(INSTALL_INCLUDE_DIR)/.

sharedtimingservice-shared: $(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)/.

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

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

install: install-static install-shared

install-static: checkace sharedtimingservice-static $(STATIC_BINARY) 
	$(CP) $(STATIC_BINARY) $(INSTALL_BIN_DIR)/.

install-shared: checkace sharedtimingservice-shared $(SHARED_BINARY)
	$(CP) $(SHARED_BINARY) $(INSTALL_BIN_DIR)/.

clean:
	$(RM) *~ *.a *.so* *.o timingservice* $(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)/timingservice_*
