Commit cfbb351e authored by Guenter Knauf's avatar Guenter Knauf
Browse files

Watcom makefiles overhaul.

- make both libcurl and curl makefiles use register calling convention
  (previously libcurl had stack calling convention).
- added include paths to the Watcom headers so its no longer required
  to set the environment vars for this.
- added -wcd=201 to supress compiler warning about unreachable code.
- use macros for all tools, and removed dependency on GNU tools like rm.
- make ipv6 and debug builds controlable via env vars and so make them
  optional instead of default.
- commented WINLDAPAPI and WINBERAPI since they broke with OW 1.8, and
  it seems they're not needed (anymore?).
- added rule for hugehelp.c.cvs so that it will be created when not
  already exist - this is required for building from a release tarball
  since there we have no hugehelp.c.cvs, thus compilation broke.
- removed C_ARG creation from lib/Makefile.Watcom and use CFLAGS
  directly as done too in src/Makefile.Watcom - this has the benefit
  that we will see all active cflags and defines during compile.
- added LINK-ARG to src/Makefile.Watcom in order to better control
  linker input.
- a couple of other minor makefile tweaks here and there ...
- added largefile support for Watcom builds to config-win32.h. Not yet
  tested if it really works, but should since Win32 supports it.
- added loaddll stuff to speed up builds if supported.
parent 11f53b9a
Loading
Loading
Loading
Loading
+78 −40
Original line number Diff line number Diff line
@@ -3,38 +3,76 @@
#  G. Vanem <gvanem@broadpark.no>
#

!ifndef %watcom
!error WATCOM environment variable not set!
!else
SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h
SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386
!endif

TARGETS = libcurl_wc.dll libcurl_wc_imp.lib libcurl_wc.lib

CC = wcc386
LD = wlink
RC = wrc
AR = wlib

!ifdef __LOADDLL__
!  loaddll wcc386  wccd386
!  loaddll wpp386  wppd386
!  loaddll wlink   wlinkd
!  loaddll wlib    wlibd
!endif

CFLAGS = -3s -mf -d3 -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm -bt=nt &
         -bd -d+ -dWIN32 -dCURL_CA_BUNDLE=getenv("CURL_CA_BUNDLE")                 &
         -dBUILDING_LIBCURL -dHAVE_SPNEGO=1 -dENABLE_IPV6                          &
         -dDEBUG=1 -dDEBUGBUILD -d_WIN32_WINNT=0x0501 -dWINBERAPI=__declspec(cdecl) &
         -dWINLDAPAPI=__declspec(cdecl) -I. -I..\include
MD = mkdir
RM = del /q /f >NUL 2>&1
RD = rmdir /q /s >NUL 2>&1
CP = copy

CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm &
         -wcd=201 -bt=nt -bd -d+ -dWIN32 -dCURL_WANTS_CA_BUNDLE_ENV     &
         -dBUILDING_LIBCURL -dHAVE_SPNEGO=1 -I. -I..\include $(SYS_INCL)
#CFLAGS += -dWINBERAPI=__declspec(cdecl) -dWINLDAPAPI=__declspec(cdecl)

!ifdef %debug
DEBUG  = -dDEBUG=1 -dDEBUGBUILD
CFLAGS += -d3 $(DEBUG)
!else
CFLAGS += -d0
!endif

!ifdef %use_ipv6
CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
!endif

#
# Change to suite.
#
ZLIB_ROOT  = ..\..\..\zlib-1.2.3
USE_ZLIB   = 0
USE_ARES   = 0
USE_WATT32 = 0
!ifdef %zlib_root
ZLIB_ROOT  = $(%zlib_root)
!else
ZLIB_ROOT  = ..\..\zlib-1.2.5
!endif

!ifeq USE_ZLIB 1
!ifdef %ares_root
ARES_ROOT  = $(%ares_root)
!else
ARES_ROOT  = ..\ares
!endif

!ifdef %use_zlib
CFLAGS += -dHAVE_ZLIB_H -dHAVE_LIBZ -I$(ZLIB_ROOT)
!endif

!ifeq USE_ARES 1
CFLAGS += -dUSE_ARES -I..\ares
!ifdef %use_ares
CFLAGS += -dUSE_ARES -I$(ARES_ROOT)
!endif

!ifeq USE_WATT32 1
!ifdef %use_watt32
CFLAGS += -dUSE_WATT32 -I$(%watt_root)\inc
!endif

OBJ_BASE = WC_Win32.obj
C_ARG    = $(OBJ_BASE)\wcc386.arg
LINK_ARG = $(OBJ_BASE)\dyn\wlink.arg
LIB_ARG  = $(OBJ_BASE)\stat\wlib.arg

@@ -69,67 +107,66 @@ OBJS_DYN = $+ $(OBJS) $-

RESOURCE = $(OBJ_BASE)\dyn\libcurl.res

all: $(OBJ_BASE) $(C_ARG) $(TARGETS) .SYMBOLIC
all: $(OBJ_BASE) $(TARGETS) .SYMBOLIC
	@echo Welcome to libcurl

$(OBJ_BASE):
	- mkdir $(OBJ_BASE)
	- mkdir $(OBJ_BASE)\stat
	- mkdir $(OBJ_BASE)\dyn
	-$(MD) $^@
	-$(MD) $^@\stat
	-$(MD) $^@\dyn

libcurl_wc.dll libcurl_wc_imp.lib: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG)
	wlink name libcurl_wc.dll @$(LINK_ARG)
	$(LD) name libcurl_wc.dll @$(LINK_ARG)

libcurl_wc.lib: $(OBJS_STAT) $(LIB_ARG)
	wlib -q -b- c $@ @$(LIB_ARG)
	$(AR) -q -b- c $^@ @$(LIB_ARG)

clean: .SYMBOLIC
	- rm -f $(OBJS_STAT) $(OBJS_DYN) $(RESOURCE) $(C_ARG) $(LINK_ARG) $(LIB_ARG)
	-$(RM) $(OBJS_STAT)
	-$(RM) $(OBJS_DYN)
	-$(RM) $(RESOURCE) $(LINK_ARG) $(LIB_ARG)

vclean realclean: clean .SYMBOLIC
	- rm -f $(TARGETS) libcurl_wc.map
	- rmdir $(OBJ_BASE)\stat
	- rmdir $(OBJ_BASE)\dyn
	- rmdir $(OBJ_BASE)
	-$(RM) $(TARGETS) libcurl_wc.map
	-$(RD) $(OBJ_BASE)\stat
	-$(RD) $(OBJ_BASE)\dyn
	-$(RD) $(OBJ_BASE)

.ERASE
$(RESOURCE): libcurl.rc
        wrc -dDEBUGBUILD=1 -q -r -zm -I..\include -fo=$@ libcurl.rc
	$(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@

.ERASE
.c{$(OBJ_BASE)\dyn}.obj:
	$(CC) $[@ @$(C_ARG) -fo=$@
	$(CC) $(CFLAGS) $[@ -fo=$^@

.ERASE
.c{$(OBJ_BASE)\stat}.obj:
	$(CC) $[@ @$(C_ARG) -DCURL_STATICLIB -fo=$@

$(C_ARG): $(__MAKEFILES__)
	%create $^@
	%append $^@ $(CFLAGS)
	$(CC) $(CFLAGS) -DCURL_STATICLIB $[@ -fo=$^@

$(LINK_ARG): $(__MAKEFILES__)
	%create $^@
	@%append $^@ system nt dll
	@%append $^@ file { $(OBJS_DYN) }
	@%append $^@ option quiet, map, caseexact, eliminate, implib=libcurl_wc_imp.lib,
	@%append $^@ res=$(RESOURCE) libpath $(%watcom)\lib386;$(%watcom)\lib386\nt
	@%append $^@ library clib3s.lib, wldap32.lib
!ifeq USE_WATT32 1
	@%append $^@ res=$(RESOURCE) libpath $(SYS_LIBS)
#	@%append $^@ library clib3r.lib
	@%append $^@ library wldap32.lib
!ifdef %use_watt32
	@%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib
!else
	@%append $^@ library ws2_32.lib
!endif
!ifeq USE_ZLIB 1
!ifdef %use_zlib
	@%append $^@ library $(ZLIB_ROOT)\zlib.lib
!endif
!ifeq USE_ARES 1
	@%append $^@ library ..\ares\cares.lib
!ifdef %use_ares
	@%append $^@ library $(ARES_ROOT)\cares.lib
!endif

$(LIB_ARG): $(__MAKEFILES__)
	%create $^@
	for %f in ($(OBJS_STAT)) do @%append $^@ +- %f
	@for %f in ($(OBJS_STAT)) do @%append $^@ +- %f

#
# Dependencies based on "gcc -MM .."
@@ -564,3 +601,4 @@ $(OBJ_DIR)\pingpong.obj: pingpong.c setup.h config-win32.h &
  ..\include\curl\curlrules.h ..\include\curl\easy.h &
  ..\include\curl\multi.h ..\include\curl\curl.h pingpong.h &
  ..\include\curl\mprintf.h curl_memory.h memdebug.h
+4 −0
Original line number Diff line number Diff line
@@ -504,6 +504,10 @@
#  define USE_WIN32_LARGE_FILES
#endif

#if defined(__WATCOMC__) && !defined(USE_WIN32_LARGE_FILES)
#  define USE_WIN32_LARGE_FILES
#endif

#if defined(__POCC__)
#  undef USE_WIN32_LARGE_FILES
#endif
+82 −22
Original line number Diff line number Diff line
@@ -3,22 +3,62 @@
#  G. Vanem <gvanem@broadpark.no>
#

CC = wcc386
!ifndef %watcom
!error WATCOM environment variable not set!
!else
SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h
SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386
!endif

TARGETS = libcurl_wc.dll libcurl_wc_imp.lib libcurl_wc.lib

CFLAGS = -3r -mf -d3 -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm &
         -bt=nt -d+ -dWIN32 -dHAVE_STRTOLL -dDEBUGBUILD -dENABLE_IPV6    &
         -dHAVE_WINSOCK2_H -I..\include -I..\lib
CC = wcc386
LD = wlink
RC = wrc
AR = wlib

!ifdef __LOADDLL__
!  loaddll wcc386  wccd386
!  loaddll wpp386  wppd386
!  loaddll wlink   wlinkd
!  loaddll wlib    wlibd
!endif

MD = mkdir
RM = del /q /f >NUL 2>&1
RD = rmdir /q /s >NUL 2>&1
CP = copy

CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm &
         -wcd=201 -bt=nt -d+ -dWIN32 -dHAVE_STRTOLL                 &
         -I..\include -I..\lib $(SYS_INCL)

!ifdef %debug
DEBUG  = -dDEBUG=1 -dDEBUGBUILD
CFLAGS += -d3 $(DEBUG)
!else
CFLAGS += -d0
!endif

!ifdef %use_ipv6
CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
!endif

OBJ_DIR  = WC_Win32.obj
LINK_ARG = $(OBJ_DIR)\wlink.arg

# Unfortunately, we can't include Makefile.inc here because wmake doesn't
# use backslash as the line continuation character by default
CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c &
	getpass.c homedir.c curlutil.c os-specific.c

CURLX_SOURCES = rawstr.c
CURLX_SOURCES = rawstr.c nonblock.c

OBJS = $(CURL_SOURCES:.c=.obj) $(CURLX_SOURCES:.c=.obj)
OBJS = $(CURL_SOURCES:.c=.obj)
!ifndef %curl_static
CFLAGS += -DCURL_STATICLIB
OBJS += $(CURLX_SOURCES:.c=.obj)
!endif
OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\)

RESOURCE = $(OBJ_DIR)\curl.res
@@ -27,38 +67,57 @@ all: hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC
	@echo Welcome to cURL

hugehelp.c: hugehelp.c.cvs
	copy hugehelp.c.cvs hugehelp.c
	$(CP) $[@ $^@

$(OBJ_DIR):
	mkdir $(OBJ_DIR)
hugehelp.c.cvs: .EXISTSONLY
	$(CP) hugehelp.c $^@

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
$(OBJ_DIR):
	-$(MD) $^@

curl.exe: $(OBJS) $(RESOURCE) $(LINK_ARG)
	$(LD) name $^@ @$(LINK_ARG)

$(LINK_ARG): $(__MAKEFILES__)
	%create $^@
	@%append $^@ system nt
	@%append $^@ file { $(OBJS) }
	@%append $^@ option quiet, map, caseexact, eliminate,
	@%append $^@ res=$(RESOURCE) libpath $(SYS_LIBS)
#	@%append $^@ library clib3r.lib
!ifdef %curl_static
	@%append $^@ library ..\lib\libcurl_wc.lib
!else
	@%append $^@ library ..\lib\libcurl_wc_imp.lib
!endif
!ifeq USE_WATT32 1
	@%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib
!else
	@%append $^@ library ws2_32.lib
!endif

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

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

$(RESOURCE): curl.rc
	wrc -dDEBUGBUILD=1 -q -r -zm -I..\include -fo=$@ curl.rc
	$(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@

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

.ERASE
$(OBJ_DIR)\rawstr.obj: ..\lib\rawstr.c
	$(CC) $[@ $(CFLAGS) -fo=$@
	$(CC) $(CFLAGS) $[@ -fo=$^@

.ERASE
$(OBJ_DIR)\nonblock.obj: ..\lib\nonblock.c
	$(CC) $[@ $(CFLAGS) -fo=$@
	$(CC) $(CFLAGS) $[@ -fo=$^@

#
# Dependencies based on "gcc -MM .."
@@ -127,3 +186,4 @@ $(OBJ_DIR)\nonblock.obj: ..\lib\nonblock.c ..\lib\setup.h ..\lib\config-win32.h
  ..\lib\strerror.h ..\lib\urldata.h ..\lib\cookie.h ..\lib\formdata.h &
  ..\lib\timeval.h ..\lib\http_chunks.h ..\lib\hostip.h ..\lib\hash.h &
  ..\lib\llist.h ..\lib\splay.h ..\include\curl\mprintf.h ..\lib\nonblock.h
+4 −0
Original line number Diff line number Diff line
@@ -385,6 +385,10 @@
#  define USE_WIN32_LARGE_FILES
#endif

#if defined(__WATCOMC__) && !defined(USE_WIN32_LARGE_FILES)
#  define USE_WIN32_LARGE_FILES
#endif

#if defined(__POCC__)
#  undef USE_WIN32_LARGE_FILES
#endif