#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2005 - 2009, Gisle Vanem <gvanem@yahoo.no>.
# Copyright (C) 2005 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
#***************************************************************************

#
#  Watcom / OpenWatcom / Win32 makefile for libcurl.
#

.ERASE

!if $(__VERSION__) < 1280
!message !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!message ! This Open Watcom version is too old and is no longer supported !
!message !     Please download latest version from www.openwatcom.org     !
!message !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!error Unsupported version of Open Watcom
!endif

!ifndef %watcom
!error WATCOM environment variable not set!
!endif

# In order to process Makefile.inc wmake must be called with -u switch!
!ifndef %MAKEFLAGS
!error You MUST call wmake with the -u switch!
!endif

!ifdef %libname
LIBNAME = $(%libname)
!else
LIBNAME = libcurl
!endif
TARGETS = $(LIBNAME).dll $(LIBNAME).lib

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

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

!ifdef __LINUX__
CP = cp
MD = mkdir -p
!else
CP = copy 2>NUL
MD = mkdir
!endif
!if $(__VERSION__) > 1290
RD = rm -rf
!else ifdef __UNIX__
RD = rm -rf
!else
RD = rmdir /q /s 2>NUL
!endif

SYS_INCL = -I"$(%watcom)/h/nt" -I"$(%watcom)/h"

CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm &
         -wcd=201 -bt=nt -d+ -dWIN32 &
         -dBUILDING_LIBCURL -I. -I"../include" $(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

!ifdef %use_sspi
CFLAGS += -dUSE_WINDOWS_SSPI
!endif

!ifdef %use_winssl
CFLAGS += -dUSE_WINDOWS_SSPI
CFLAGS += -DUSE_SCHANNEL
!endif

!ifdef %use_winidn
CFLAGS += -dWINVER=0x0600 -dUSE_WIN32_IDN
!  if $(__VERSION__) <= 1290
CFLAGS += -dWANT_IDN_PROTOTYPES
!  endif
!endif

#
# Change to suite.
#
!ifdef %zlib_root
ZLIB_ROOT = $(%zlib_root)
!else
ZLIB_ROOT = ../../zlib-1.2.8
!endif

!ifdef %libssh2_root
LIBSSH2_ROOT = $(%libssh2_root)
!else
LIBSSH2_ROOT = ../../libssh2-1.5.0
!endif

!ifdef %librtmp_root
LIBRTMP_ROOT = $(%librtmp_root)
!else
LIBRTMP_ROOT = ../../rtmpdump-2.3
!endif

!ifdef %openssl_root
OPENSSL_ROOT = $(%openssl_root)
!else
OPENSSL_ROOT = ../../openssl-1.0.2a
!endif

!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

!ifdef %use_rtmp
CFLAGS += -dUSE_LIBRTMP -I"$(LIBRTMP_ROOT)"
!endif

!ifdef %use_ssh2
CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H -I"$(LIBSSH2_ROOT)/include" -I"$(LIBSSH2_ROOT)/win32"
!endif

!ifdef %use_ssl
CFLAGS += -wcd=138 -dUSE_OPENSSL -I"$(OPENSSL_ROOT)/inc32"
!endif

!ifdef %use_ares
CFLAGS += -dUSE_ARES -I"$(ARES_ROOT)"
!endif

!ifdef %use_watt32
CFLAGS += -dUSE_WATT32 -I"$(%watt_root)/inc"
!endif

OBJ_BASE = WC_Win32.obj
!if $(__VERSION__) > 1290
OBJ_STAT = $(OBJ_BASE)/stat
OBJ_DYN  = $(OBJ_BASE)/dyn
!else ifdef __UNIX__
OBJ_STAT = $(OBJ_BASE)/stat
OBJ_DYN  = $(OBJ_BASE)/dyn
!else
OBJ_STAT = $(OBJ_BASE)\stat
OBJ_DYN  = $(OBJ_BASE)\dyn
!endif

LINK_ARG = $(OBJ_DYN)/wlink.arg
LIB_ARG  = $(OBJ_STAT)/wlib.arg

!include Makefile.inc

OBJS1 = ./$(CSOURCES:.c=.obj)
OBJS2 = $(OBJS1:vtls/=)
OBJS3 = $(OBJS2:vauth/=)
OBJS4 = $(OBJS3: = ./)
OBJS_STAT = $(OBJS4:./=$(OBJ_STAT)/)
OBJS_DYN  = $(OBJS4:./=$(OBJ_DYN)/)

RESOURCE   = $(OBJ_DYN)/libcurl.res

DIRS = $(OBJ_BASE) $(OBJ_BASE)/stat $(OBJ_BASE)/dyn

.c : vauth vtls

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

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

vclean distclean: clean .SYMBOLIC
	-rm -f $(TARGETS) $(LIBNAME).map $(LIBNAME).sym
	-$(RD) $(OBJ_STAT)
	-$(RD) $(OBJ_DYN)
	-$(RD) $(OBJ_BASE)

$(DIRS):
	-$(MD) $^@

$(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(__MAKEFILES__)
	%create $(LINK_ARG)
	@%append $(LINK_ARG) system nt dll
!ifdef %debug
	@%append $(LINK_ARG) debug all
	@%append $(LINK_ARG) option symfile
!endif
	@%append $(LINK_ARG) option quiet, caseexact, eliminate
	@%append $(LINK_ARG) option map=$(OBJ_DYN)/$(LIBNAME).map
	@%append $(LINK_ARG) option implib=$(LIBNAME)_imp.lib
	@%append $(LINK_ARG) option res=$(RESOURCE)
	@for %f in ($(OBJS_DYN)) do @%append $(LINK_ARG) file %f
	@%append $(LINK_ARG) library wldap32.lib
!ifdef %use_watt32
	@%append $(LINK_ARG) library '$(%watt_root)/lib/wattcpw_imp.lib'
!else
	@%append $(LINK_ARG) library ws2_32.lib
!endif
!ifdef %use_zlib
	@%append $(LINK_ARG) library '$(ZLIB_ROOT)/zlib.lib'
!endif
!ifdef %use_rtmp
	@%append $(LINK_ARG) library '$(LIBRTMP_ROOT)/librtmp/librtmp.lib'
!endif
!ifdef %use_ssh2
	@%append $(LINK_ARG) library '$(LIBSSH2_ROOT)/win32/libssh2.lib'
!endif
!ifdef %use_ssl
	@%append $(LINK_ARG) library '$(OPENSSL_ROOT)/out32/libeay32.lib'
	@%append $(LINK_ARG) library '$(OPENSSL_ROOT)/out32/ssleay32.lib'
!endif
!ifdef %use_ares
	@%append $(LINK_ARG) library '$(ARES_ROOT)/cares.lib'
!endif
!ifdef %use_winidn
!  if $(__VERSION__) > 1290
	@%append $(LINK_ARG) library normaliz.lib
!  else
	@%append $(LINK_ARG) import '_IdnToAscii@20' 'NORMALIZ.DLL'.'IdnToAscii'
	@%append $(LINK_ARG) import '_IdnToUnicode@20' 'NORMALIZ.DLL'.'IdnToUnicode'
!  endif
!endif
	$(LD) name $^@ @$(LINK_ARG)

$(LIBNAME).lib: $(OBJS_STAT)
	%create $(LIB_ARG)
	@for %f in ($<) do @%append $(LIB_ARG) +- %f
	$(AR) -q -b -c -pa $^@ @$(LIB_ARG)

$(RESOURCE): libcurl.rc
	$(RC) $(DEBUG) -q -r -zm -bt=nt -I"../include" $(SYS_INCL) $[@ -fo=$^@

.c{$(OBJ_DYN)}.obj:
	$(CC) $(CFLAGS) -bd -br $[@ -fo=$^@

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