SOCCER_LIB_TOP = ../..
LIBDIR = $(SOCCER_LIB_TOP)/generic_library
LIB_CONFIG = $(LIBDIR)/bin/library-config --prefix=$(LIBDIR)

CC  = `$(LIB_CONFIG) --cc`
CXX = `$(LIB_CONFIG) --c++`
MAKE_ARCHIVE = `$(LIB_CONFIG) --make-archive`
RM = rm
PRCS = prcs
CHDIR = cd

INCLUDES = -I../soccer_basic_lib

CFLAGS   = -g `$(LIB_CONFIG) --cflags` \
	      $(CCXXOPTFLAGS) $(COPTFLAGS) $(INCLUDES) \
	      $(CCXXADDITIONALFLAGS) $(CADDITIONALFLAGS)
CXXFLAGS = -g `$(LIB_CONFIG) --cflags` \
	      $(CCXXOPTFLAGS) $(CXXOPTFLAGS) $(INCLUDES) \
	      $(CCXXADDITIONALFLAGS) $(CXXADDITIONALFLAGS)

ARCHIVES = ../soccer_basic_lib/libsoccer_basic.a \
	   $(LIBDIR)/src/udp_connection/libudp_connection.a \
	   $(LIBDIR)/src/lisp_lex/liblisp_lex.a \
	   $(LIBDIR)/src/d2_vector/libd2_vector.a \
	   $(LIBDIR)/src/time_stamp/libtime_stamp.a \
	   $(LIBDIR)/src/prof_stopwatch/libprof_stopwatch.a \
	   $(LIBDIR)/src/debugstream/libdebugstream.a

OBJS = sserver_message_translator.o \
       sserver_player_connection.o sserver_monitor_connection.o \
       debug_client_connection.o debug_server_connection.o \
       sserver_monitor_log_format.o monitor_view_data.o

all: libsserver_connection.a

library: libsserver_connection.a
library-only: library
	$(RM) -f *.o sserver_player_connection-test \
		     sserver_monitor_connection-test \
		     sserver_message_translator-test

libsserver_connection.a: $(OBJS)
	$(MAKE_ARCHIVE) libsserver_connection.a $(OBJS)

##
../soccer_basic_lib/libsoccer_basic.a:
	($(CHDIR) ../soccer_basic_lib && $(MAKE) libsoccer_basic.a)

$(LIBDIR)/src/udp_connection/libudp_connection.a:
	($(CHDIR) $(LIBDIR)/src/udp_connection && $(MAKE) libudp_connection.a)

$(LIBDIR)/src/lisp_lex/liblisp_lex.a:
	($(CHDIR) $(LIBDIR)/src/lisp_lex && $(MAKE) liblisp_lex.a)

$(LIBDIR)/src/d2_vector/libd2_vector.a:
	($(CHDIR) $(LIBDIR)/src/d2_vector && $(MAKE) libd2_vector.a)

$(LIBDIR)/src/time_stamp/libtime_stamp.a:
	($(CHDIR) $(LIBDIR)/src/time_stamp && $(MAKE) libtime_stamp.a)

$(LIBDIR)/src/prof_stopwatch/libprof_stopwatch.a:
	($(CHDIR) $(LIBDIR)/src/prof_stopwatch && $(MAKE) libprof_stopwatch.a)

$(LIBDIR)/src/debugstream/libdebugstream.a:
	($(CHDIR) $(LIBDIR)/src/debugstream && $(MAKE) libdebugstream.a)

##
sserver_player_connection-test: sserver_player_connection.cc \
		sserver_player_connection.h \
		sserver_message_translator.o $(ARCHIVES)
	$(CXX) -o sserver_player_connection-test sserver_player_connection.cc \
		sserver_message_translator.o \
		$(CXXFLAGS) `$(LIB_CONFIG) --libs` \
		-DSSERVER_PLAYER_CONNECTION_TEST

sserver_monitor_connection-test: sserver_monitor_connection.cc \
		sserver_monitor_connection.h \
		sserver_message_translator.o $(ARCHIVES)
	$(CXX) -o sserver_monitor_connection-test \
		  sserver_monitor_connection.cc \
		  sserver_message_translator.o \
		  $(CXXFLAGS) `$(LIB_CONFIG) --libs` \
		  -DSSERVER_MONITOR_CONNECTION_TEST

sserver_message_translator-test: sserver_message_translator.cc \
		sserver_message_translator.h $(ARCHIVES)
	$(CXX) -o sserver_message_translator-test \
		sserver_message_translator.cc $(ARCHIVES) $(CXXFLAGS) \
		-DSSERVER_MESSAGE_TRANSLATOR_TEST

clean:
	$(RM) -f *.o libsserver_connection.a \
		     sserver_player_connection-test \
		     sserver_monitor_connection-test \
		     sserver_message_translator-test


#
# for Revision Control
#
diff:
	@($(CHDIR) $(SOCCER_LIB_TOP) && $(PRCS) diff || true)

populate:
	@($(CHDIR) $(SOCCER_LIB_TOP) && $(PRCS) populate)

checkin:
	@($(CHDIR) $(SOCCER_LIB_TOP) \
		&& $(PRCS) checkin && $(RM) -f .*.prcs_aux)

.PHONY: all library library-only clean diff populate checkin


##
sserver_message_translator.o: sserver_message_translator.h \
			      sserver_message_translator.cc \
			      ../soccer_basic_lib/fixed_sobject_location.h \
			      ../soccer_basic_lib/s_basic.h

sserver_player_connection.o: sserver_player_connection.h \
			     sserver_player_connection.cc \
			     communication_cannel.h \
			     communication_cannel_inline.cc

sserver_monitor_connection.o: sserver_monitor_connection.h \
			      sserver_monitor_connection.cc \
			      communication_cannel.h \
			      communication_cannel_inline.cc

debug_client_connection.o: debug_client_connection.h \
			   debug_client_connection.cc \
			   communication_cannel.h \
			   communication_cannel_inline.cc

debug_server_connection.o: debug_server_connection.h \
			   debug_server_connection.cc \
			   communication_cannel.h \
			   communication_cannel_inline.cc

sserver_monitor_log_format.o: sserver_monitor_log_format.h \
			      sserver_monitor_log_format.cc \
			      monitor_view_data.h

monitor_view_data.o: monitor_view_data.h monitor_view_data.cc \
		     sserver_monitor_log_format.h
