#=============================================================================
#
# file :        Makefile
#
# description : Include for the KiKe class.
#
# project :     Makefile to generate a Tango server
#
# $Author: meyer $
#
# $Revision: 1.1.1.1 $
#
# $Log: Makefile,v $
# Revision 1.1.1.1  2008/07/10 08:41:16  meyer
# Imported using TkCVS
#
#
# copyleft :    European Synchrotron Radiation Facility
#               BP 220, Grenoble 38043
#               FRANCE
#
#=============================================================================
#  		This file is generated by POGO
#	(Program Obviously used to Generate tango Object)
#
#         (c) - Software Engineering Group - ESRF
#=============================================================================
#

CLASS      	 = KiKe
MODBUS_CLASS = Modbus
MAJOR_VERS = 1
MINOR_VERS = 0
RELEASE    = Release_$(MAJOR_VERS)_$(MINOR_VERS)
OS         = $(shell /csadmin/common/scripts/get_os)
PROCESSOR  = $(shell uname -p)

#-----------------------------------------
#	Set default home directories
#-----------------------------------------

TANGO_HOME   =  /segfs/tango/release
CPP_SERVERS  =  $(TANGO_HOME)/../cppserver

ifdef no_debug
	DEBUG = -O
else
	DEBUG = -g
endif

ifdef _solaris
CC = CC 
BIN_DIR=$(OS)_CC

AR_SL = $(CC) -mt -G
VERS_OPT = -h
SL_EXT = so
endif

ifdef linux
CC = c++
CC_SHLIB = $(CC)  -fPIC

$(PROCESSOR)=1
ifdef x86_64
NBITS=_64
endif
BIN_DIR=$(OS)$(NBITS)

AR_SL = $(CC) -fPIC -shared 
SL_EXT = so
VERS_OPT = -Wl,-soname,
endif

SUPER_HOME	=   /segfs/tango/templates/AbstractClasses/Powersupply
MODBUS_DIR	=	/segfs/tango/cppserver/protocols/Modbus

INCLUDE_DIRS =  -I$(TANGO_HOME)/$(BIN_DIR)/include	-I$(MODBUS_DIR) -I.	 -I$(SUPER_HOME) \
                -I$(CPP_SERVERS)/include 

OBJS_DIR    = 	obj/$(BIN_DIR)
LIB_DIRS    =   -L $(CPP_SERVERS)/lib/$(BIN_DIR) \
				-L $(TANGO_HOME)/$(BIN_DIR)/lib 

TARGET_LIB = $(CPP_SERVERS)/lib/$(BIN_DIR)/libtgclasses.a


#-----------------------------------------
#	Set  CXXFLAGS and LFLAGS
#-----------------------------------------
ifdef _solaris
CXXFLAGS =  $(DEBUG) -mt -D_PTHREADS -DNOSERIAL $(INCLUDE_DIRS)
LFLAGS =  $(DEBUG) $(LIB_DIRS)  		\
				-ltango			\
				-llog4tango		\
				-lomniORB4 		\
				-lomniDynamic4	\
				-lomnithread	\
				-lCOS4			\
				-lpthread		\
				-ltgclasses    \
				-lposix4 -lsocket -lnsl
endif

ifdef linux
CXXFLAGS =  $(DEBUG) -D_REENTRANT -DNOSERIAL $(INCLUDE_DIRS)
LFLAGS =  $(DEBUG) $(LIB_DIRS)  		\
				-ltango			\
				-llog4tango		\
				-lomniORB4 		\
				-lomniDynamic4	\
				-lomnithread	\
				-lCOS4			\
				-ldl -lpthread 				
#				-ltgclasses    
endif


#-----------------------------------------
#	Set  dependences
#-----------------------------------------

SVC_OBJS = $(OBJS_DIR)/$(CLASS).o	\
		$(OBJS_DIR)/$(CLASS)StateMachine.o	\
		$(OBJS_DIR)/$(CLASS)Class.o	\
		$(OBJS_DIR)/ClassFactory.o	\
		$(OBJS_DIR)/KiKeThread.o \
		$(OBJS_DIR)/main.o \
		\
		$(OBJS_DIR)/$(MODBUS_CLASS).o \
		$(OBJS_DIR)/$(MODBUS_CLASS)Class.o \
		$(OBJS_DIR)/$(MODBUS_CLASS)StateMachine.o	\
		$(OBJS_DIR)/$(MODBUS_CLASS)Core.o \
		$(OBJS_DIR)/$(MODBUS_CLASS)CoreSL.o \
		$(OBJS_DIR)/CacheThread.o

SHLIB_OBJS = $(OBJS_DIR)/$(CLASS)Class.so.o	\
		$(OBJS_DIR)/$(CLASS)StateMachine.so.o	\
		$(OBJS_DIR)/$(CLASS).so.o


SVC_INC = $(CLASS)Class.h \
		$(CLASS).h


#-----------------------------------------
#	 Make Entry
#-----------------------------------------
all: $(CLASS)
	
$(CLASS):	make_obj_dir make_bin_dir	$(SVC_OBJS)
	$(CC) $(SVC_OBJS) -o $(CLASS) $(LFLAGS)
	@mv $(CLASS) bin/$(BIN_DIR)/$(CLASS)

shlib:	make_obj_dir make_shlib_dir $(SHLIB_OBJS)
	$(AR_SL) -o \
		shlib/$(BIN_DIR)/$(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) \
		$(VERS_OPT)$(CLASS).$(SL_EXT).$(MAJOR_VERS) \
		$(SHLIB_OBJS) $(LFLAGS)
	@rm -f shlib/$(BIN_DIR)/$(CLASS).$(SL_EXT)
	@cd  shlib/$(BIN_DIR); \
		ln -s $(CLASS).$(SL_EXT).$(MAJOR_VERS).$(MINOR_VERS) $(CLASS).$(SL_EXT)

clean:
	rm -f $(OBJS_DIR)/*.o  \
	$(OBJS_DIR)/*.so.o \
	bin/$(BIN_DIR)/$(CLASS) \
	core

make_obj_dir:
	@mkdir -p obj
	@mkdir -p obj/$(BIN_DIR)

make_bin_dir:
	@mkdir -p bin
	@mkdir -p bin/$(BIN_DIR)

make_shlib_dir:
	@mkdir -p shlib
	@mkdir -p shlib/$(BIN_DIR)


#-----------------------------------------
#	KiKe class
#-----------------------------------------

$(OBJS_DIR)/%.o: %.cpp	$(SVC_INC)
	$(CC) $(CXXFLAGS) -c $< -o $(OBJS_DIR)/$*.o

#-----------------------------------------
#	Modbus class
#-----------------------------------------
$(OBJS_DIR)/$(MODBUS_CLASS).o:	$(MODBUS_DIR)/$(MODBUS_CLASS).cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/$(MODBUS_CLASS).cpp  -o $(OBJS_DIR)/$(MODBUS_CLASS).o

$(OBJS_DIR)/$(MODBUS_CLASS)Class.o:	$(MODBUS_DIR)/$(MODBUS_CLASS)Class.cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/$(MODBUS_CLASS)Class.cpp  -o $(OBJS_DIR)/$(MODBUS_CLASS)Class.o

$(OBJS_DIR)/$(MODBUS_CLASS)StateMachine.o:	$(MODBUS_DIR)/$(MODBUS_CLASS)StateMachine.cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/$(MODBUS_CLASS)StateMachine.cpp  -o $(OBJS_DIR)/$(MODBUS_CLASS)StateMachine.o

$(OBJS_DIR)/$(MODBUS_CLASS)Core.o:	$(MODBUS_DIR)/$(MODBUS_CLASS)Core.cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/$(MODBUS_CLASS)Core.cpp  -o $(OBJS_DIR)/$(MODBUS_CLASS)Core.o

$(OBJS_DIR)/$(MODBUS_CLASS)CoreSL.o:	$(MODBUS_DIR)/$(MODBUS_CLASS)CoreSL.cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/$(MODBUS_CLASS)CoreSL.cpp  -o $(OBJS_DIR)/$(MODBUS_CLASS)CoreSL.o

$(OBJS_DIR)/CacheThread.o:	$(MODBUS_DIR)/CacheThread.cpp
	$(CC) $(CXXFLAGS) -c  $(MODBUS_DIR)/CacheThread.cpp  -o $(OBJS_DIR)/CacheThread.o

	
#-----------------------------------------
#	 Install binary file
#-----------------------------------------
install:
	cp bin/$(BIN_DIR)/$(CLASS)  $(TANGO_HOME)/$(BIN_DIR)/bin

#-----------------------------------------
#	 Update class library and header files
#	recompile without debug mode.
#-----------------------------------------
lib: clean
	@make no_debug=1
	cp *.h $(CPP_SERVERS)/include
	ar ruv $(TARGET_LIB) $(CLASS).o
	ar ruv $(TARGET_LIB) $(CLASS)Class.o
	ar ruv $(TARGET_LIB) $(CLASS)StateMachine.o
	ident  $(TARGET_LIB) | grep $(CLASS)

#----------------------------------------------------
#	Tag the CVS module corresponding to this class
#----------------------------------------------------
tag:
	@cvstag "$(CLASS)-$(RELEASE)"
	@make   $(CLASS)
	@make show_tag

show_tag:
	@cvstag -d 
