########################################################
## Makefile for building curl.exe with MSVC6
## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]
##      (default is release)
## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL
## into curl.exe producing a standalone SSL-enabled executable.
##
## Comments to: Troy Engel <tengel@sonic.net>
## Updated by: Craig Davison <cd@securityfocus.com>
## release-ssl added by Miklos Nemeth <mnemeth@kfkisystems.com>

PROGRAM_NAME = curl.exe

########################################################
## Nothing more to do below this line!

## Release
CCR = cl.exe /MD /O2 /D "NDEBUG"
LINKR = link.exe /incremental:no /libpath:"../lib"

## Debug
CCD = cl.exe /MDd /Gm /ZI /Od /D "_DEBUG" /GZ
LINKD = link.exe /incremental:yes /debug /libpath:"../lib"

CFLAGS = /I "../include" /nologo /W3 /GX /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
LFLAGS = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:I386
LINKLIBS = ws2_32.lib libcurl.lib
LINKLIBS_DEBUG = ws2_32.lib libcurld.lib

RELEASE_OBJS= \
	hugehelpr.obj \
	writeoutr.obj \
	urlglobr.obj \
	mainr.obj

DEBUG_OBJS= \
	hugehelpd.obj \
	writeoutd.obj \
	urlglobd.obj \
	maind.obj
	
LINK_OBJS= \
	hugehelp.obj \
	writeout.obj \
	urlglob.obj \
	main.obj

all : release

release: $(RELEASE_OBJS)
	$(LINKR) $(LFLAGS) $(LINKLIBS) $(LINK_OBJS)

debug: $(DEBUG_OBJS)
	$(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(LINK_OBJS)

## Release
hugehelpr.obj: hugehelp.c
	$(CCR) $(CFLAGS) /Zm200 hugehelp.c
writeoutr.obj: writeout.c
	$(CCR) $(CFLAGS) writeout.c
urlglobr.obj: urlglob.c
	$(CCR) $(CFLAGS) urlglob.c
mainr.obj: main.c
	$(CCR) $(CFLAGS) main.c

## Debug
hugehelpd.obj: hugehelp.c
	$(CCD) $(CFLAGS) /Zm200 hugehelp.c
writeoutd.obj: writeout.c
	$(CCD) $(CFLAGS) writeout.c
urlglobd.obj: urlglob.c
	$(CCD) $(CFLAGS) urlglob.c
maind.obj: main.c
	$(CCD) $(CFLAGS) main.c

clean:
	-@erase hugehelp.obj
	-@erase main.obj
	-@erase vc60.idb
	-@erase vc60.pdb
	-@erase vc60.pch
	-@erase curl.ilk
	-@erase curl.pdb

distrib: clean
	-@erase $(PROGRAM_NAME)

