################################################################################
# Common settings
AR      = ar
RANLIB  = ranlib
CC      = g++
C       = gcc
PREC    = cpp
LD      = g++
MAKE    = make


################################################################################
# OS definition
# LINUX, FREEBSD, OSX55, SOLARIS
ifndef os
	os = LINUX
endif


################################################################################
# Standard Configuration
STD_CCFLAGS += -O2 -Wall -fPIC
STD_CCFLAGS += -D_REENTRANT
STD_INC += -I/usr/local/include
STD_LIBS += -L/usr/local/lib

################################################################################
# External Library Definitions
ifeq ($(os), LINUX)
	OPENSSLDIR		= ../external/linux/openssl-1.0.2j
else ifeq ($(os), SOLARIS)
	OPENSSLDIR		= ../external/solaris/openssl-1.0.2j
endif

OPENSSL_INCDIR = $(OPENSSLDIR)/include


################################################################################
# Include Definitions
INCDIR += $(STD_INC)
INCDIR += -I$(OPENSSL_INCDIR)

#ifeq ($(use_curl), true)
    #INCDIR += -I../external/curl/include
#endif

################################################################################
# c++ flags Definitions
CCFLAGS	+= $(INCDIR)
CCFLAGS	+= $(STD_CCFLAGS)


################################################################################
# Library Definitions
LIBS += $(STD_LIBS)

ifeq ($(use_curl), true)
	#LIBS += -L../external/curl/lib -lcurl
	#LIBS += -lcurl
endif


################################################################################
# obj generation directory flags Definitions
OBJDIR      = huslib
OBJDIR_PATH = ../tmp/obj/$(OBJDIR)


################################################################################
# Source file names
SOURCES = Common.cpp Config.cpp Global.cpp hsparser.cpp HttpHandler.cpp HusApp.cpp inifile.cpp Logger.cpp MultiplexSocket.cpp MultiplexSslSocket.cpp NetUtil.cpp stringex.cpp TelnetHandler.cpp TelnetServer.cpp Timer.cpp WebServer.cpp VspHandler.cpp SohHandler.cpp

ifeq ($(use_curl), true)
    SOURCES += curl_manager.cpp
endif

################################################################################
# Target file names
LIB_TOOL   = libhuslib.a
LIB_SHARED = libhuslib.so


OBJS    := $(SOURCES:%.c=$(OBJDIR_PATH)/%.o)
OBJS    := $(OBJS:%.cxx=$(OBJDIR_PATH)/%.o)
OBJS    := $(OBJS:%.cpp=$(OBJDIR_PATH)/%.o)

DEPENDS := $(SOURCES:%.c=$(OBJDIR_PATH)/%.dep)
DEPENDS	:= $(DEPENDS:%.cxx=$(OBJDIR_PATH)/%.dep)
DEPENDS	:= $(DEPENDS:%.cpp=$(OBJDIR_PATH)/%.dep)

$(OBJDIR_PATH)/%.o:%.c
	$(CC) $(CCFLAGS) -c -o $@ -g $<
$(OBJDIR_PATH)/%.o:%.cxx
	$(CC) $(CCFLAGS) -c -o $@ -g $<
$(OBJDIR_PATH)/%.o:%.cpp
	$(CC) $(CCFLAGS) -c -o $@ -g $<
$(OBJDIR_PATH)/%.dep:%.c
	@mkdir -p $(OBJDIR_PATH)
	$(CC) -c $(CCFLAGS) -MM $< > $@
	@sed -e "s/.o:/.c:/" $@ | sed -e "s/$<:/$(OBJDIR)\/$<:/" | sed -e "s/.c:/.o:/" > $@
	@rm $@
$(OBJDIR_PATH)/%.dep:%.cxx
	@mkdir -p $(OBJDIR_PATH)
	$(CC) -c $(CCFLAGS) -MM $< > $@
	@sed -e "s/.o:/.cxx:/" $@ | sed -e "s/$<:/$(OBJDIR)\/$<:/" | sed -e "s/.cxx:/.o:/" > $@
	@rm $@
$(OBJDIR_PATH)/%.dep:%.cpp
	@mkdir -p $(OBJDIR_PATH)
	$(CC) -c $(CCFLAGS) -MM $< > $@
	@sed -e "s/.o:/.cpp:/" $@ | sed -e "s/$<:/$(OBJDIR)\/$<:/" | sed -e "s/.cpp:/.o:/" > $@
	@rm $@


#all : $(LIB_TOOL) $(LIB_SHARED)
all : $(LIB_TOOL)

$(LIB_TOOL) : $(DEPENDS) $(OBJS)
	$(AR) rcv $@ $(OBJS)
 
$(LIB_SHARED) : $(DEPENDS) $(OBJS)
	$(LD) -shared -o $(LIB_SHARED) $(OBJS) $(LIBS)

clean :
	rm -f $(DEPENDS) $(OBJS)
	rm -f $(LIB_TOOL) $(LIB_SHARED)
