#
#  Watcom / OpenWatcom / Win32 makefile for cURL.
#  G. Vanem <gvanem@broadpark.no>
#
# $Id$

CC = wcc386

CFLAGS = -3r -mf -d3 -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm     &
         -bt=nt -d+ -dWIN32 -dHAVE_STRTOLL                                  &
         -dSIZEOF_CURL_OFF_T=8 -dCURLDEBUG -dENABLE_IPV6 -dHAVE_WINSOCK2_H  &
         -I..\include -I..\lib

OBJ_DIR = WC_Win32.obj

OBJS = $(OBJ_DIR)\getpass.obj  $(OBJ_DIR)\homedir.obj $(OBJ_DIR)\hugehelp.obj &
       $(OBJ_DIR)\main.obj     $(OBJ_DIR)\urlglob.obj $(OBJ_DIR)\writeenv.obj &
       $(OBJ_DIR)\writeout.obj $(OBJ_DIR)\curlutil.obj

RESOURCE = $(OBJ_DIR)\curl.res

all: hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC
	@echo Welcome to cURL

hugehelp.c: hugehelp.c.cvs
	copy hugehelp.c.cvs hugehelp.c

$(OBJ_DIR):
	mkdir $(OBJ_DIR)

curl.exe: $(OBJS) $(RESOURCE)
	wlink name $@ system nt file { $(OBJS) }                   &
	  option quiet, map, caseexact, eliminate, res=$(RESOURCE) &
	  libpath $(%watcom)\lib386;$(%watcom)\lib386\nt           &
	  library ..\lib\libcurl_wc_imp.lib, clib3r.lib, ws2_32.lib

clean: .SYMBOLIC
	- rm -f $(OBJS) $(RESOURCE)

vclean realclean: clean .SYMBOLIC
 	- rm -f curl.exe curl.map hugehelp.c
	- rmdir $(OBJ_DIR)

$(RESOURCE): curl.rc
	wrc -dCURLDEBUG=1 -q -r -zm -I..\include -fo=$@ curl.rc

.ERASE
.c{$(OBJ_DIR)}.obj:
	$(CC) $[@ $(CFLAGS) -fo=$@

#
# Dependencies based on "gcc -MM .."
#
$(OBJ_DIR)\getpass.obj: getpass.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h getpass.h ..\lib\memdebug.h ..\lib\setup.h &
  ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
  ..\include\curl\multi.h ..\include\curl\curl.h

$(OBJ_DIR)\homedir.obj: homedir.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h homedir.h ..\lib\memdebug.h ..\lib\setup.h &
  ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h &
  ..\include\curl\multi.h ..\include\curl\curl.h

$(OBJ_DIR)\hugehelp.obj: hugehelp.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h hugehelp.h

$(OBJ_DIR)\main.obj: main.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h &
  ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
  urlglob.h writeout.h getpass.h homedir.h hugehelp.h version.h &
  ..\include\curl\curlver.h ..\lib\curlx.h ..\include\curl\mprintf.h &
  ..\lib\strequal.h ..\lib\strtoofft.h ..\lib\setup.h curlutil.h &
  ..\lib\memdebug.h

$(OBJ_DIR)\urlglob.obj: urlglob.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h &
  ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
  ..\include\curl\mprintf.h urlglob.h ..\lib\memdebug.h ..\lib\setup.h

$(OBJ_DIR)\writeenv.obj: writeenv.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h

$(OBJ_DIR)\writeout.obj: writeout.c setup.h config-win32.h ..\lib\setup.h &
  ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h &
  ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h &
  ..\include\curl\mprintf.h writeout.h

$(OBJ_DIR)\curlutil.obj: curlutil.c curlutil.h ..\lib\setup.h &
  ..\lib\config-win32.h
