#######################################################
# MAKEFILE for building ccgnu2.dll and ccext2.dll     #
#                                                     #
# (c) 2004 by Darko Miletic                           #
# e-mail: kiklop@fibertel.com.ar                      # 
#                                                     #
# Modified 24-Aug-2005 by Conrad T. Pino              #
# e-mail: Conrad@Pino.com                             # 
# Compile with Borland C++ Builder 6.0                #
#######################################################
.autodepend

!ifndef CC
CC=bcc32
!endif

ILINK32=ilink32

!ifndef BMODE
BMODE = RELEASE
!endif

!if $(BMODE) != RELEASE && $(BMODE) != DEBUG
!  error Illegal value for BMODE option
!endif

#C++ compile flags
!if $(BMODE) == RELEASE
CPPFLAGS=-q -v- -O2 -k- -tWD -tWM -w-inl -w-par -w-aus -w-pia -w-ccc -w-rch -w-csu -w-hid -w-pro -D$(USERDEFINES);$(SYSDEFINES) -I$(INCDIR)
LINKFLAGS=-v- -Tpd -aa -Gn -Gi -c -L$(LIBDIR)
USERDEFINES=_WINVER=0x0400;_WIN32_WINNT=0x0400;STRICT;_MBCS;NODEBUG;WIN32;_USRDLL;_WINDOWS;CCGNU2_EXPORTS;CCEXT2_EXPORTS
OUTDIR=Release
DBG=
!message Building release version of dll'S
!else
CPPFLAGS=-q -v -Od -k -tWD -tWM -Q+ -D$(USERDEFINES);$(SYSDEFINES) -I$(INCDIR)
LINKFLAGS=-v -Tpd -aa -Gn -Gi -c -L$(LIBDIR)
USERDEFINES=_WINVER=0x0400;_WIN32_WINNT=0x0400;STRICT;_MBCS;_DEBUG;WIN32;_USRDLL;_WINDOWS;CCGNU2_EXPORTS;CCEXT2_EXPORTS
OUTDIR=Debug
DBG=D
!message Building debug version of dll'S
!endif

.cpp.obj:
      @$(CC) $(CPPFLAGS) -I$(INCDIR) /c -o$@ $<

.c.obj:
      @$(CC) $(CPPFLAGS) -I$(INCDIR) /c -o$@ $<

LIBBASE1=ccgnu2$(DBG)
LIBBASE2=ccext2$(DBG)

LIBNAME1=$(LIBBASE1).dll
LIBNAME2=$(LIBBASE2).dll
INCDIR=..\w32;..\include
LIBDIR=.\$(OUTDIR)
SRC=..\src
OBJ=.\$(OUTDIR)\obj
BIN=.\$(OUTDIR)
#RESFILE=CCXX2.res
SYSDEFINES=

################################
# Target
################################
PROJECT1=$(BIN)\$(LIBNAME1)
PROJECT2=$(BIN)\$(LIBNAME2)

OBJFILES1=$(OBJ)\dir.obj        \
	$(OBJ)\dso.obj          \
	$(OBJ)\event.obj        \
	$(OBJ)\exception.obj    \
	$(OBJ)\file.obj         \
	$(OBJ)\friends.obj      \
	$(OBJ)\in6addr.obj      \
	$(OBJ)\inaddr.obj       \
	$(OBJ)\keydata.obj      \
	$(OBJ)\mempager.obj     \
	$(OBJ)\missing.obj      \
	$(OBJ)\mutex.obj        \
	$(OBJ)\nat.obj          \
	$(OBJ)\peer.obj         \
	$(OBJ)\process.obj      \
	$(OBJ)\semaphore.obj    \
	$(OBJ)\simplesocket.obj \
	$(OBJ)\slog.obj         \
	$(OBJ)\socket.obj       \
	$(OBJ)\strchar.obj      \
	$(OBJ)\string.obj       \
	$(OBJ)\thread.obj       \
	$(OBJ)\threadkey.obj

OBJFILES2=$(OBJ)\buffer.obj     \
          $(OBJ)\cmdoptns.obj   \
          $(OBJ)\date.obj       \
          $(OBJ)\digest.obj     \
          $(OBJ)\engine.obj     \
          $(OBJ)\getopt.obj     \
          $(OBJ)\getopt1.obj    \
          $(OBJ)\md5.obj        \
          $(OBJ)\network.obj    \
          $(OBJ)\numbers.obj    \
          $(OBJ)\persist.obj    \
          $(OBJ)\serial.obj     \
          $(OBJ)\unix.obj       \
          $(OBJ)\url.obj        \
          $(OBJ)\urlstring.obj  \
          $(OBJ)\xml.obj

RESFILES=
LIBFILES=ws2_32.lib
DEFFILE=
BCC32STARTUP=c0d32.obj
BCC32RTLIB=cw32mt.lib
ALLOBJS1=$(BCC32STARTUP) $(OBJFILES1)
ALLOBJS2=$(BCC32STARTUP) $(OBJFILES2)
ALLLIBS=$(LIBFILES) import32.lib $(BCC32RTLIB)
ALLLIBS1=$(ALLLIBS)
ALLLIBS2=$(ALLLIBS) $(LIBBASE1).lib

all: dirs $(RESFILE) $(PROJECT1) $(PROJECT2) cleansym

cleanobj:: 
	-@echo Deleting intermediate files for project
	-@if exist $(OBJ)\*.obj del $(OBJ)\*.obj

cleansym:: 
!if $(BMODE) == DEBUG
	-@echo Keeping symbol files for project
!elif $(BMODE) == RELEASE
	-@echo Deleting symbol files for project
	-@if exist $(BIN)\*.tds del $(BIN)\*.tds
	-@if exist $(BIN)\*.map del $(BIN)\*.map
!endif

cleantgt::
	-@echo Deleting output files for project
	-@if exist $(BIN)\$(LIBBASE1).* del $(BIN)\$(LIBBASE1).*
	-@if exist $(BIN)\$(LIBBASE2).* del $(BIN)\$(LIBBASE2).*

clean: cleanobj cleantgt
	-@echo Deleting output directory
	-@if exist $(OBJ) rd $(OBJ)
	-@if exist $(BIN) rd $(BIN)

dirs::
	-@echo Creating output directory
	-@if not exist $(BIN) md $(BIN)
	-@if not exist $(OBJ) md $(OBJ)
	
##################################
# Output
##################################
$(PROJECT1):: $(OBJFILES1)
    $(ILINK32) @&&|
    $(LINKFLAGS) $(ALLOBJS1)
    $<,$*
    $(ALLLIBS1)
    $(DEFFILE)
    $(RESFILE)

|

$(PROJECT2):: $(PROJECT) $(OBJFILES2)
    $(ILINK32) @&&|
    $(LINKFLAGS) $(ALLOBJS2)
    $<,$*
    $(ALLLIBS2)
    $(DEFFILE)
    $(RESFILE)

|

#Dependencies - explicit rules
$(OBJ)\dir.obj: $(SRC)\dir.cpp
$(OBJ)\dso.obj: $(SRC)\dso.cpp
$(OBJ)\event.obj: $(SRC)\event.cpp
$(OBJ)\exception.obj: $(SRC)\exception.cpp
$(OBJ)\file.obj: $(SRC)\file.cpp
$(OBJ)\friends.obj: $(SRC)\friends.cpp
$(OBJ)\in6addr.obj: $(SRC)\in6addr.cpp
$(OBJ)\inaddr.obj: $(SRC)\inaddr.cpp
$(OBJ)\keydata.obj: $(SRC)\keydata.cpp
$(OBJ)\mempager.obj: $(SRC)\mempager.cpp
$(OBJ)\missing.obj: $(SRC)\missing.cpp
$(OBJ)\mutex.obj: $(SRC)\mutex.cpp
$(OBJ)\nat.obj: $(SRC)\nat.cpp
$(OBJ)\peer.obj: $(SRC)\peer.cpp
$(OBJ)\process.obj: $(SRC)\process.cpp
$(OBJ)\semaphore.obj: $(SRC)\semaphore.cpp
$(OBJ)\simplesocket.obj: $(SRC)\simplesocket.cpp
$(OBJ)\slog.obj: $(SRC)\slog.cpp
$(OBJ)\socket.obj: $(SRC)\socket.cpp
$(OBJ)\strchar.obj: $(SRC)\strchar.cpp
$(OBJ)\string.obj: $(SRC)\string.cpp
$(OBJ)\thread.obj: $(SRC)\thread.cpp
$(OBJ)\threadkey.obj: $(SRC)\threadkey.cpp

$(OBJ)\buffer.obj: $(SRC)\buffer.cpp
$(OBJ)\cmdoptns.obj: $(SRC)\cmdoptns.cpp
$(OBJ)\date.obj: $(SRC)\date.cpp
$(OBJ)\digest.obj: $(SRC)\digest.cpp
$(OBJ)\engine.obj: $(SRC)\engine.cpp
$(OBJ)\getopt.obj: $(SRC)\getopt.c
$(OBJ)\getopt1.obj: $(SRC)\getopt1.c
$(OBJ)\md5.obj: $(SRC)\md5.cpp
$(OBJ)\network.obj: $(SRC)\network.cpp
$(OBJ)\numbers.obj: $(SRC)\numbers.cpp
$(OBJ)\persist.obj: $(SRC)\persist.cpp
$(OBJ)\serial.obj: $(SRC)\serial.cpp
$(OBJ)\unix.obj: $(SRC)\unix.cpp
$(OBJ)\url.obj: $(SRC)\url.cpp
$(OBJ)\urlstring.obj: $(SRC)\urlstring.cpp
$(OBJ)\xml.obj: $(SRC)\xml.cpp

#$(RESFILE):
#   @brcc32 -d__MINGW32__ CCXX2.rc
   
