# ----------------------------------------------------------------------------
# HtDig Win32 Makefile
# 
# TODO:  Fix up this file.  There is lots of stuff in here that can be tossed.
#

ifeq ($(PRODUCT),htdig)
#BUILD_VER  = 3.2.2
#BUILD_NUM = b5
BUILD_VER = 3.2.0b5
endif

#CMN_BUILD_VER = 3.2.0.0

#ifeq ($(RNT_PRODUCT),common)
#BUILD_VER  = $(CMN_BUILD_VER)
#BUILD_NUM  = 2
#endif

#BUILD_CE_VER = 0

BUILD_DATE =`date "+%m/%d/%Y"`
BUILD_TIME =`date "+%H:%M"`

# ----------------------------------------------------------------------------

ifndef RNTBASE
RNTBASE   = ..
endif


# ----------------------------------------------------------------------------
# Need to set arch based upon host system

ifdef WINDIR  # Win32 (includes Win2000) ---------------------------------

ARCH        = win32

DLLSFX      = .$(BUILD_VER).dll
CDLLSFX     = .$(CMN_BUILD_VER).dll
EXESFX      = .exe
LIBSFX      = .lib
OBJSFX      = .obj
ROSFX       = .xxx

CC          = cl
CXX         = cl
EXELD       = link
DLLLD       = link
LD          = lib

CCDEBUG     = -Yd -ZI -FD -D_DEBUG -Fd"./"
LDDEBUG     = -debug /pdbtype:sept 

YACC        = bison -y
LEX         = flex

CFLAGS      = -nologo -W3 -DZLIB_DLL
CXXFLAGS    = -GX 

ifdef DEBUG
  CFLAGS   += -MDd     # The MDd is to link with the debug multithread dynamic library
  LDDEBUG  += /NODEFAULTLIB:LIBCMD
else
ifdef RNM
  CFLAGS   += -MT      # The MT is to link with the multithread library
else
  CFLAGS   += -MD      # The MD is to link with the multithread dynamic library
endif
endif

AR          = lib
ARFLAGS     = /nologo /out:$@

CCDLLFLAGS	= -DCOMPILE_DL=1
LDFLAGS     = -nologo /out:$@
LDLLFLAGS   = -dll -machine:x86 -subsystem:windows
LDROFLAGS   = $(ARFLAGS)

OTHERLIBS   = ws2_32.lib advapi32.lib

else          # Unix -----------------------------------------------------

DLLSFX  = .so
CDLLSFX = .so
EXESFX  =
LIBSFX  = .a
OBJSFX  = .o
ROSFX   = .o

SYS     = $(shell uname -s)

CC      = gcc
CXX     = g++
EXELD   = gcc
DLLLD   = gcc
LD      = ld

CCDLLFLAGS = -DCOMPILE_DL=1
LDLLFLAGS  = -Xlinker -h -Xlinker $(notdir $(TARGET)).$(BUILD_VER)
LDROFLAGS  = -r

CCDEBUG = -g
LDDEBUG = -g

YACC    = bison -y
LEX     = flex

AR      = ar
ARFLAGS = rcs $@

COPY    = cp -f
RM      = rm -f

CCVERS = $(shell $(CC) -v 2>&1 | sed -e '/^R.*$$/d' -e 's/gcc version [a-zA-Z-]*\([0-9\.]*\).*$$/\1/)

# begin platform dependent settings ---------------------------

ifeq ($(SYS), Linux)
	ARCH        = linux

	CCOPT       = -O2
	CCDLLFLAGS += -fPIC
	CDEFS      += -DLINUX -DUNIX

    LDLLFLAGS  += -shared

    OTHERLIBS  += -lstdc++ -lm -ldl

	ifeq ($(findstring $(DLLSFX), $(TARGET)),)
		OTHERLIBS += -lpthread
	endif

	# newer versions have the resolver in libc
	ifeq ($(shell ls /usr/lib/libresolv.a > /dev/null 2>&1 && echo y), y)
		OTHERLIBS += -lresolv
	else
		OTHERLIBS += -lfl
	endif

    ifdef INSURE
        CC  = insure gcc
        CXX = insure g++
        EXELD = insure gcc
        DLLLD = insure gcc
        DEBUG = y
    endif

    BASIS_LIB_VERS = RH62-gcc-$(CCVERS)
endif

ifeq ($(SYS), SunOS)
	ARCH        =  sunos

	ifeq ($(shell uname -n), boulder)
		ifneq ($(TARGET), $(BINDIR)/olpp$(EXESFX))
			ifeq ($(findstring $(DLLSFX), $(TARGET)),)
  				PURIFY = purify -log-file=/home/httpd/cgi-bin/$(LOGNAME).cfg/purify -chain-length=14 -thread-report-at-exit=no -windows=no -fds-inuse-at-exit=no
				#PURIFY = quantify -record-system-calls=yes
			endif
		endif
	endif

	ifdef DEBUG
		EXELD = $(PURIFY) gcc
	endif

	CCOPT       = -O2
	CCDLLFLAGS += -fPIC
	CDEFS      += -DSOLARIS -DUNIX

    LDLLFLAGS  += -G

    OTHERLIBS   = -lsocket -lnsl -lstdc++ -ldl

	ifeq ($(findstring $(DLLSFX), $(TARGET)),)
		OTHERLIBS += -lpthread
	endif

    # newer versions have the resolver in libc
    ifeq ($(shell ls /usr/lib/libresolv.*[oa] > /dev/null 2>&1 && echo y), y)
        OTHERLIBS += -lresolv -lm
    endif

    BASIS_LIB_VERS = sol-gcc-$(CCVERS)
endif

LDFLAGS  = -o $@

endif  # Unix

# end of platform specific settings -------------------------------

ifneq ($(findstring $(DLLSFX),$(TARGET)),)
    CFLAGS  += $(CCDLLFLAGS)
    LDFLAGS += $(LDLLFLAGS)
endif

ifneq ($(findstring $(ROSFX),$(TARGET)),)
    CFLAGS  += $(CCDLLFLAGS)
    LDFLAGS += $(LDROFLAGS)
	ifeq ($(SYS), SunOS)
		LDDEBUG =
	endif
endif

# ----------------------------------------------------------------------------

ifeq ($(CC), gcc)
	CFLAGS += -Wall -Wmissing-prototypes -Wmissing-declarations
    ifndef NOWERROR
        CFLAGS += -Werror
    endif                                                                                                                              
endif


# compile with ElectricFence malloc debugging library (man efence)

ifdef EFENCE
	OTHERLIBS += -lefence
	DEBUG      = 1
endif

ifdef DEBUG
	CFLAGS  += $(CCDEBUG)
	LDFLAGS += $(LDDEBUG)
else
	CFLAGS  += $(CCOPT)
endif

# ----------------------------------------------------------------------------
# Set appropriate database defines

ifndef RNTDB
	ifdef WINDIR
		RNTDB = 
	else
		RNTDB = mysql
	endif
endif

ifeq ($(RNTDB),mysql) # ----------------------------------------------
	ifndef MYSQLLIB
		MYSQLLIB  = /home/mysql/current/lib
	endif

	ifndef MYSQLINC
		MYSQLINC  = /home/mysql/current/include
	endif

	CDEFS    += -DMY_SQL
	CPPFLAGS += -I$(MYSQLINC)
	LIBS      = $(RNTLIBS)
	DBLIBS    = $(MYSQLLIB)/libmysqlclient.a
#	DBLIBS    = -L$(MYSQLLIB) -lmysqlclient
endif

ifeq ($(RNTDB),ib) # InterBase --------------------------------------
	ifndef 	INTERBASE_LIB
		INTERBASE_LIB  = /home/interbase/lib
	endif

	ifndef 	INTERBASE_INC
        	INTERBASE_INC  = /home/interbase/include
	endif

	CDEFS    += -DINTERBASE
	CPPFLAGS += -I$(INTERBASE_INC)
	LIBS      = $(RNTLIBS)
	DBLIBS    = -L$(INTERBASE_LIB) -lgds -ldl -lcrypt

endif

ifeq ($(RNTDB),odbc) # -----------------------------------------------
	CDEFS  += -DODBC
	LIBS    = $(RNTLIBS)
	DBLIBS  = odbc32.lib
endif

ifneq ($(findstring $(RNTDB),oci oracle),) # -------------------------
    RNTDB = oci

	ifdef WINDIR
		ifndef ORACLE_HOME
			ORACLE_HOME = l:/oracle/win32ora816
		endif
#        LDFLAGS += /LIBPATH:/rnt/oraclent/lib
		DBLIBS   = $(ORACLE_HOME)/lib/oci.lib
		CPPFLAGS += -I $(ORACLE_HOME)/include
	else
		ifndef ORACLE_HOME
			ORACLE_HOME = /home/oracle
		endif
		LDFLAGS  += -L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib \
					-L$(ORACLE_HOME)/network/lib
		CPPFLAGS += -I$(ORACLE_HOME)/rdbms/demo \
					-I$(ORACLE_HOME)/rdbms/public \
					-I$(ORACLE_HOME)/plsql/public \
					-I$(ORACLE_HOME)/network/public
    endif

    ifeq ($(ARCH),sunos)
		DBLIBS = -lclntsh -lpsa -lcore4 -lnlsrtl3 -lclntsh 
    endif

    # 8.1.5
    ifeq ($(shell ls $(ORACLE_HOME)/lib/libsql8.a > /dev/null 2>&1 && echo y), y)
		DBLIBS = -lclntsh 
	endif

	ifndef DBLIBS
		DBLIBS = -lclntsh -lpsa -lcore4 -lnlsrtl3 -lclntsh 
    endif

	CDEFS   += -DORACLE
	LIBS     = $(RNTLIBS)
endif

# ----------------------------------------------------------------------------
# PHP specific

ifdef WINDIR
      ifndef PHP_INCLUDE
              PHP_INCLUDE = L:/win32/include/php-4.1.2
      endif

      ifndef PHP_LIBPATH
              PHP_LIBPATH = L:/win32/lib
      endif
      PHP_LIB = $(PHP_LIBPATH)/php-4.1.2ts.lib

else # Unix
	ifndef PHP_INCLUDE
		PHP_INCLUDE = $(NFSDIR)/$(ARCH)/include/php-4.1.2
	endif
endif


# ----------------------------------------------------------------------------
# check whether we are building for a hosted environment or not.

ifdef HOSTED
	CDEFS += -DHOSTED
endif

# ----------------------------------------------------------------------------
# check whether we are building for a Metrics environment or not.

ifdef RNM
	CDEFS += -DRNM
endif

# ---------------------------------------------------------------------------
# check whether we are building for production environment or not.

ifdef PRODUCT
	CDEFS += -DPRODUCT
endif

# ----------------------------------------------------------------------------
# compile eval version

BUILDTARGET = $(ARCH)

ifdef EVAL
	CDEFS      += -DEVAL
	BUILDTARGET = $(ARCH)_$(RNTDB)_eval
endif

# ----------------------------------------------------------------------------

ifdef WINDIR
ROOTDIR   = $(RNTBASE)
else
ROOTDIR   = $(shell cd $(RNTBASE); pwd)
endif
BINDIR    = $(ROOTDIR)/bin/$(BUILDTARGET)
LIBDIR    = $(ROOTDIR)/lib/$(BUILDTARGET)
OBJDIR    = $(BUILDTARGET)
DEPDIR   := makefiles/$(BUILDTARGET)
CXREFDIR  = $(RNTBASE)/cxrefs

ifndef WINDIR
	export LD_LIBRARY_PATH = $(LIBDIR)
endif

.PRECIOUS: $(DEPDIR)/.CREATED 

%/.CREATED:
	@echo Creating directory $(@D)...
	@mkdir -p $(@D)
	@touch $@

OBJDIRDEP   = $(OBJDIR)/.CREATED
BINDIRDEP   = $(BINDIR)/.CREATED
LIBDIRDEP   = $(LIBDIR)/.CREATED
DEPDIRDEP   = $(DEPDIR)/.CREATED
CXREFDIRDEP = $(CXREFDIR)/.CREATED

# ----------------------------------------------------------------------------

OBJS    = $(addprefix $(OBJDIR)/, $(notdir $(patsubst %.c,%$(OBJSFX), $(SRC)) \
                                  $(patsubst %.cc,%$(OBJSFX), $(CXXSRC)) \
                                  $(patsubst %.yxx,%$(OBJSFX), $(YXXSRC)) \
                                  $(patsubst %.lxx,%$(OBJSFX), $(LXXSRC)) \
                                  $(patsubst %.y,%$(OBJSFX), $(YSRC)) \
                                  $(patsubst %.l,%$(OBJSFX), $(LSRC))))

DEPLIBS = $(addprefix $(LIBDIR)/lib, $(addsuffix $(LIBSFX), $(LIBS)) \
			$(addsuffix $(DLLSFX), $(RNWDLLS)) \
			$(addsuffix $(CDLLSFX), $(CMNDLLS)))

ifeq ($(findstring $(DLLSFX), $(TARGET)),)
	LDLIBS  = $(OBJDIR)/cmdline$(OBJSFX)
endif

ifdef WINDIR
LDLIBS  += /LIBPATH:$(LIBDIR) $(subst dll,lib,$(addprefix lib, $(addsuffix $(LIBSFX), $(LIBS)) $(addsuffix $(CDLLSFX), $(CMNDLLS)) $(addsuffix $(DLLSFX), $(RNWDLLS))))
else
LDLIBS  += -L$(LIBDIR) $(addprefix -l, $(LIBS)) $(addprefix -l, $(RNWDLLS) $(CMNDLLS))
endif

# ----------------------------------------------------------------------------

ifndef BASIS_INSTALL
    ifdef WINDIR
        BASIS_INSTALL=L:/win32/basis/version_4
    else
        BASIS_INSTALL=/nfs/local/$(ARCH)/basis/version_4
    endif
endif
#ROSETTE_VER = 3.0.7
ROSETTE_LIBS = -L $(BASIS_INSTALL)/rosette/lib/$(BASIS_LIB_VERS) -lbtunicode

#    CPPFLAGS += -I$(BASIS_INSTALL)/rosette/include \
#                -I$(BASIS_INSTALL)/euclid/include
 
#ifdef WINDIR
#    LDLIBS += $(BASIS_INSTALL)/jma/lib/w32-msvc-60/btjma.lib
#    LDLIBS += $(BASIS_INSTALL)/xma/lib/w32-msvc-60/btxma.lib
#    LDLIBS += $(BASIS_INSTALL)/utilities/lib/w32-msvc-60/bttrie.lib
#    LDLIBS += $(BASIS_INSTALL)/utilities/lib/w32-msvc-60/btutilities.lib
#    LDLIBS += $(BASIS_INSTALL)/utilities/lib/w32-msvc-60/btopts.lib
#    LDLIBS += $(BASIS_INSTALL)/euclid/bin/w32-msvc-60/bteuclid.lib
#    LDLIBS += $(BASIS_INSTALL)/rosette/bin/w32-msvc-60/btuc.lib
#else
#    LDFLAGS += -L$(BASIS_INSTALL)/rosette/lib \
#               -L$(BASIS_INSTALL)/euclid/lib
 
#    LDLIBS += -lbtunicode -lpthread -ldl
#endif

CFLAGS += -I../include -DDBUG_OFF -D_WIN32 -DWIN32 -D__WIN32__ 

# ZLIB
CFLAGS += -IL:/win32/include/zlib

#HtDig default defines
CFLAGS += -DDEFAULT_CONFIG_FILE=\"c:\htdig\demo.conf\" -DCOMMON_DIR=\"c:\htdig\demo.db\templates\" -DBIN_DIR=\"c:\htdig\demo.db\bin\" -DCONFIG_DIR=\"c:\htdig\"  -DIMAGE_URL_PREFIX=\"/rnt/rnm/img\" -DDATABASE_DIR=\"c:\htdig\demo.db\"


ifdef TARGET
all: $(TARGET)
endif

