init repo.
This commit is contained in:
320
third_party/curl/winbuild/Makefile.vc
vendored
Normal file
320
third_party/curl/winbuild/Makefile.vc
vendored
Normal file
@ -0,0 +1,320 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 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.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.
|
||||
#
|
||||
# SPDX-License-Identifier: curl
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
!IF "$(MODE)"=="static"
|
||||
TARGET = $(LIB_NAME_STATIC)
|
||||
AS_DLL = false
|
||||
CFGSET=true
|
||||
!ELSEIF "$(MODE)"=="dll"
|
||||
TARGET = $(LIB_NAME_DLL)
|
||||
AS_DLL = true
|
||||
CFGSET=true
|
||||
!ELSE
|
||||
!MESSAGE Invalid mode: $(MODE)
|
||||
|
||||
#######################
|
||||
# Usage
|
||||
#
|
||||
|
||||
!MESSAGE See winbuild/README.md for usage
|
||||
!ERROR please choose a valid mode
|
||||
|
||||
!ENDIF
|
||||
|
||||
!INCLUDE "../lib/Makefile.inc"
|
||||
LIBCURL_OBJS=$(CSOURCES:.c=.obj)
|
||||
|
||||
!INCLUDE "../src/Makefile.inc"
|
||||
|
||||
# tool_hugehelp has a special rule
|
||||
CURL_OBJS=$(CURL_CFILES:tool_hugehelp.c=)
|
||||
|
||||
CURL_OBJS=$(CURL_OBJS:.c=.obj)
|
||||
|
||||
|
||||
# backwards compatible check for USE_SSPI
|
||||
!IFDEF USE_SSPI
|
||||
ENABLE_SSPI = $(USE_SSPI)
|
||||
!ENDIF
|
||||
|
||||
# default options
|
||||
|
||||
!IFNDEF MACHINE
|
||||
# Note: nmake magically changes the value of PROCESSOR_ARCHITECTURE from "AMD64"
|
||||
# to "x86" when building in a 32 bit build environment on a 64 bit machine.
|
||||
!IF "$(PROCESSOR_ARCHITECTURE)"=="AMD64"
|
||||
MACHINE = x64
|
||||
!ELSE
|
||||
MACHINE = x86
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_IDN
|
||||
USE_IDN = true
|
||||
!ELSEIF "$(ENABLE_IDN)"=="yes"
|
||||
USE_IDN = true
|
||||
!ELSEIF "$(ENABLE_IDN)"=="no"
|
||||
USE_IDN = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_IPV6
|
||||
USE_IPV6 = true
|
||||
!ELSEIF "$(ENABLE_IPV6)"=="yes"
|
||||
USE_IPV6 = true
|
||||
!ELSEIF "$(ENABLE_IPV6)"=="no"
|
||||
USE_IPV6 = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_SSPI
|
||||
USE_SSPI = true
|
||||
!ELSEIF "$(ENABLE_SSPI)"=="yes"
|
||||
USE_SSPI = true
|
||||
!ELSEIF "$(ENABLE_SSPI)"=="no"
|
||||
USE_SSPI = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_SCHANNEL
|
||||
!IF DEFINED(WITH_SSL) || DEFINED(WITH_MBEDTLS)
|
||||
USE_SCHANNEL = false
|
||||
!ELSE
|
||||
USE_SCHANNEL = $(USE_SSPI)
|
||||
!ENDIF
|
||||
!ELSEIF "$(ENABLE_SCHANNEL)"=="yes"
|
||||
USE_SCHANNEL = true
|
||||
!ELSEIF "$(ENABLE_SCHANNEL)"=="no"
|
||||
USE_SCHANNEL = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_OPENSSL_AUTO_LOAD_CONFIG
|
||||
ENABLE_OPENSSL_AUTO_LOAD_CONFIG = true
|
||||
!ELSEIF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="yes"
|
||||
!UNDEF ENABLE_OPENSSL_AUTO_LOAD_CONFIG
|
||||
ENABLE_OPENSSL_AUTO_LOAD_CONFIG = true
|
||||
!ELSEIF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="no"
|
||||
!UNDEF ENABLE_OPENSSL_AUTO_LOAD_CONFIG
|
||||
ENABLE_OPENSSL_AUTO_LOAD_CONFIG = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_WEBSOCKETS
|
||||
ENABLE_WEBSOCKETS = false
|
||||
!ELSEIF "$(ENABLE_WEBSOCKETS)"=="yes"
|
||||
!UNDEF ENABLE_WEBSOCKETS
|
||||
ENABLE_WEBSOCKETS = true
|
||||
!ELSEIF "$(ENABLE_WEBSOCKETS)"=="no"
|
||||
!UNDEF ENABLE_WEBSOCKETS
|
||||
ENABLE_WEBSOCKETS = false
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF ENABLE_UNICODE
|
||||
USE_UNICODE = false
|
||||
!ELSEIF "$(ENABLE_UNICODE)"=="yes"
|
||||
USE_UNICODE = true
|
||||
!ELSEIF "$(ENABLE_UNICODE)"=="no"
|
||||
USE_UNICODE = false
|
||||
!ENDIF
|
||||
|
||||
CONFIG_NAME_LIB = libcurl
|
||||
|
||||
!IF "$(WITH_SSL)"=="dll"
|
||||
USE_SSL = true
|
||||
SSL = dll
|
||||
!ELSEIF "$(WITH_SSL)"=="static"
|
||||
USE_SSL = true
|
||||
SSL = static
|
||||
!ENDIF
|
||||
|
||||
!IF "$(ENABLE_NGHTTP2)"=="yes"
|
||||
# compatibility bit, WITH_NGHTTP2 is the correct flag
|
||||
WITH_NGHTTP2 = dll
|
||||
USE_NGHTTP2 = true
|
||||
NGHTTP2 = dll
|
||||
!ELSEIF "$(WITH_NGHTTP2)"=="dll"
|
||||
USE_NGHTTP2 = true
|
||||
NGHTTP2 = dll
|
||||
!ELSEIF "$(WITH_NGHTTP2)"=="static"
|
||||
USE_NGHTTP2 = true
|
||||
NGHTTP2 = static
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF USE_NGHTTP2
|
||||
USE_NGHTTP2 = false
|
||||
!ENDIF
|
||||
|
||||
!IF "$(ENABLE_MSH3)"=="yes"
|
||||
# compatibility bit, WITH_MSH3 is the correct flag
|
||||
WITH_MSH3 = dll
|
||||
USE_MSH3 = true
|
||||
MSH3 = dll
|
||||
!ELSEIF "$(WITH_MSH3)"=="dll"
|
||||
USE_MSH3 = true
|
||||
MSH3 = dll
|
||||
!ELSEIF "$(WITH_MSH3)"=="static"
|
||||
USE_MSH3 = true
|
||||
MSH3 = static
|
||||
!ENDIF
|
||||
|
||||
!IFNDEF USE_MSH3
|
||||
USE_MSH3 = false
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
|
||||
USE_MBEDTLS = true
|
||||
MBEDTLS = $(WITH_MBEDTLS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_CARES)"=="dll"
|
||||
USE_CARES = true
|
||||
CARES = dll
|
||||
!ELSEIF "$(WITH_CARES)"=="static"
|
||||
USE_CARES = true
|
||||
CARES = static
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_ZLIB)"=="dll"
|
||||
USE_ZLIB = true
|
||||
ZLIB = dll
|
||||
!ELSEIF "$(WITH_ZLIB)"=="static"
|
||||
USE_ZLIB = true
|
||||
ZLIB = static
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_SSH2)"=="dll"
|
||||
USE_SSH2 = true
|
||||
SSH2 = dll
|
||||
!ELSEIF "$(WITH_SSH2)"=="static"
|
||||
USE_SSH2 = true
|
||||
SSH2 = static
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_SSH)"=="dll"
|
||||
USE_SSH = true
|
||||
SSH = dll
|
||||
!ELSEIF "$(WITH_SSH)"=="static"
|
||||
USE_SSH = true
|
||||
SSH = static
|
||||
!ENDIF
|
||||
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-vc$(VC)-$(MACHINE)
|
||||
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug
|
||||
!ELSE
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release
|
||||
!ENDIF
|
||||
|
||||
!IF "$(AS_DLL)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll
|
||||
!ELSE
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSL)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MBEDTLS)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-mbedtls-$(MBEDTLS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_CARES)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-cares-$(CARES)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_ZLIB)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSH2)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSH)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh-$(SSH)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_IPV6)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSPI)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SCHANNEL)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-schannel
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_NGHTTP2)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-nghttp2-$(NGHTTP2)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MSH3)"=="true"
|
||||
CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-msh3
|
||||
!ENDIF
|
||||
|
||||
!MESSAGE configuration name: $(CONFIG_NAME_LIB)
|
||||
|
||||
# Note these directories are removed by this makefile's 'clean' so they should
|
||||
# not be changed to point to user-specified directories that may contain other
|
||||
# data. MakefileBuild.vc uses the same variable names but allows some user
|
||||
# changes and therefore does not remove the directories.
|
||||
BUILD_DIR=../builds/$(CONFIG_NAME_LIB)
|
||||
LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
|
||||
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
|
||||
DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\
|
||||
|
||||
$(MODE):
|
||||
@SET DIROBJ=$(LIBCURL_DIROBJ)
|
||||
@SET MACRO_NAME=LIBCURL_OBJS
|
||||
@SET OUTFILE=LIBCURL_OBJS.inc
|
||||
@CALL gen_resp_file.bat $(LIBCURL_OBJS)
|
||||
|
||||
@SET DIROBJ=$(CURL_DIROBJ)
|
||||
@SET MACRO_NAME=CURL_OBJS
|
||||
@SET OUTFILE=CURL_OBJS.inc
|
||||
@CALL gen_resp_file.bat $(CURL_OBJS)
|
||||
|
||||
@SET CONFIG_NAME_LIB=$(CONFIG_NAME_LIB)
|
||||
@SET MACHINE=$(MACHINE)
|
||||
@SET USE_NGHTTP2=$(USE_NGHTTP2)
|
||||
@SET USE_MSH3=$(USE_MSH3)
|
||||
@SET USE_IDN=$(USE_IDN)
|
||||
@SET USE_IPV6=$(USE_IPV6)
|
||||
@SET USE_SSPI=$(USE_SSPI)
|
||||
@SET USE_SCHANNEL=$(USE_SCHANNEL)
|
||||
@SET USE_UNICODE=$(USE_UNICODE)
|
||||
# compatibility bit
|
||||
@SET WITH_NGHTTP2=$(WITH_NGHTTP2)
|
||||
|
||||
@$(MAKE) /NOLOGO /F MakefileBuild.vc
|
||||
|
||||
copy_from_lib:
|
||||
echo copying .c...
|
||||
FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\
|
||||
|
||||
clean:
|
||||
@if exist $(LIBCURL_DIROBJ) rd /s /q $(LIBCURL_DIROBJ)
|
||||
@if exist $(CURL_DIROBJ) rd /s /q $(CURL_DIROBJ)
|
||||
@if exist $(DIRDIST) rd /s /q $(DIRDIST)
|
||||
$(MAKE) /NOLOGO /F MakefileBuild.vc $@
|
714
third_party/curl/winbuild/MakefileBuild.vc
vendored
Normal file
714
third_party/curl/winbuild/MakefileBuild.vc
vendored
Normal file
@ -0,0 +1,714 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 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.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.
|
||||
#
|
||||
# SPDX-License-Identifier: curl
|
||||
#
|
||||
#***************************************************************************
|
||||
|
||||
###########################################################################
|
||||
#
|
||||
# Makefile for building libcurl with MSVC
|
||||
#
|
||||
# Usage: see README.md
|
||||
#
|
||||
##############################################################
|
||||
|
||||
CFGSET=FALSE
|
||||
WINBUILD_DIR=`cd`
|
||||
|
||||
# Utilities.
|
||||
# If a path is required that contains characters such as space, quote the path.
|
||||
MT = mt.exe
|
||||
RC = rc.exe
|
||||
ZIP = zip.exe
|
||||
|
||||
# Allow changing C compiler via environment variable CC (default cl.exe)
|
||||
# This command macro is not set by default: https://msdn.microsoft.com/en-us/library/ms933742.aspx
|
||||
!If "$(CC)" == ""
|
||||
CC = cl.exe
|
||||
!Endif
|
||||
|
||||
!IF "$(VC)"=="6"
|
||||
CC_NODEBUG = $(CC) /O2 /DNDEBUG
|
||||
CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ
|
||||
CFLAGS = /I. /I../lib /I../include /nologo /W4 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL
|
||||
!ELSE
|
||||
CC_NODEBUG = $(CC) /O2 /DNDEBUG
|
||||
CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd
|
||||
CFLAGS = /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
|
||||
!ENDIF
|
||||
|
||||
LFLAGS = /nologo /machine:$(MACHINE)
|
||||
LNKDLL = link.exe /DLL
|
||||
# Use lib.exe instead of link.exe as link.exe /lib has the following bad habits:
|
||||
# - optimizing options like /opt:ref raises warnings (at least in Visual Studio 2015)
|
||||
# - all (including Windows) dependencies are aggregated (as static parts)
|
||||
# - link.exe /lib is not documented (anymore) at MSDN
|
||||
# Instead of id: just create an archive, that contains all objects
|
||||
LNKLIB = lib.exe
|
||||
|
||||
CFLAGS_PDB = /Zi
|
||||
LFLAGS_PDB = /incremental:no /opt:ref,icf /DEBUG
|
||||
|
||||
CFLAGS_LIBCURL_STATIC = /DCURL_STATICLIB
|
||||
|
||||
WIN_LIBS = ws2_32.lib wldap32.lib advapi32.lib crypt32.lib
|
||||
|
||||
BASE_NAME = libcurl
|
||||
BASE_NAME_DEBUG = $(BASE_NAME)_debug
|
||||
BASE_NAME_STATIC = $(BASE_NAME)_a
|
||||
BASE_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC)_debug
|
||||
|
||||
LIB_NAME_STATIC = $(BASE_NAME_STATIC).lib
|
||||
LIB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).lib
|
||||
LIB_NAME_DLL = $(BASE_NAME).dll
|
||||
LIB_NAME_IMP = $(BASE_NAME).lib
|
||||
LIB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).dll
|
||||
LIB_NAME_IMP_DEBUG = $(BASE_NAME_DEBUG).lib
|
||||
|
||||
PDB_NAME_STATIC = $(BASE_NAME_STATIC).pdb
|
||||
PDB_NAME_STATIC_DEBUG = $(BASE_NAME_STATIC_DEBUG).pdb
|
||||
PDB_NAME_DLL = $(BASE_NAME).pdb
|
||||
PDB_NAME_DLL_DEBUG = $(BASE_NAME_DEBUG).pdb
|
||||
|
||||
# CURL Command section
|
||||
PROGRAM_NAME = curl.exe
|
||||
CURL_CFLAGS = /I../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c
|
||||
CURL_LFLAGS = /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console $(LFLAGS)
|
||||
CURL_RESFLAGS = /i../include
|
||||
|
||||
#############################################################
|
||||
## Nothing more to do below this line!
|
||||
LIBCURL_SRC_DIR = ..\lib
|
||||
CURL_SRC_DIR = ..\src
|
||||
|
||||
!IFNDEF WITH_DEVEL
|
||||
WITH_DEVEL = ../../deps
|
||||
!ENDIF
|
||||
DEVEL_INCLUDE= $(WITH_DEVEL)/include
|
||||
DEVEL_LIB = $(WITH_DEVEL)/lib
|
||||
|
||||
!IF EXISTS("$(DEVEL_INCLUDE)")
|
||||
CFLAGS = $(CFLAGS) /I"$(DEVEL_INCLUDE)"
|
||||
!ENDIF
|
||||
!IF EXISTS("$(DEVEL_LIB)")
|
||||
LFLAGS = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF SSL_PATH
|
||||
SSL_INC_DIR = $(SSL_PATH)\include
|
||||
SSL_LIB_DIR = $(SSL_PATH)\lib
|
||||
SSL_LFLAGS = $(SSL_LFLAGS) "/LIBPATH:$(SSL_LIB_DIR)"
|
||||
!ELSE
|
||||
SSL_INC_DIR=$(DEVEL_INCLUDE)\openssl
|
||||
SSL_LIB_DIR=$(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_SSL)"=="dll" || "$(WITH_SSL)"=="static"
|
||||
!IF EXISTS("$(SSL_LIB_DIR)\libssl.lib")
|
||||
SSL_LIBS = libssl.lib libcrypto.lib
|
||||
!ELSE
|
||||
SSL_LIBS = libeay32.lib ssleay32.lib
|
||||
!ENDIF
|
||||
USE_SSL = true
|
||||
SSL = $(WITH_SSL)
|
||||
!IF "$(WITH_SSL)"=="static"
|
||||
WIN_LIBS = $(WIN_LIBS) gdi32.lib user32.lib crypt32.lib
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_SSL
|
||||
SSL_CFLAGS = /DUSE_OPENSSL /I"$(SSL_INC_DIR)"
|
||||
!IF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false"
|
||||
SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IF "$(ENABLE_WEBSOCKETS)"=="true"
|
||||
CFLAGS = $(CFLAGS) /DUSE_WEBSOCKETS=1
|
||||
!ENDIF
|
||||
|
||||
!IFDEF NGHTTP2_PATH
|
||||
NGHTTP2_INC_DIR = $(NGHTTP2_PATH)\include
|
||||
NGHTTP2_LIB_DIR = $(NGHTTP2_PATH)\lib
|
||||
NGHTTP2_LFLAGS = $(NGHTTP2_LFLAGS) "/LIBPATH:$(NGHTTP2_LIB_DIR)"
|
||||
!ELSE
|
||||
NGHTTP2_INC_DIR = $(DEVEL_INCLUDE)
|
||||
NGHTTP2_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_NGHTTP2)"=="dll"
|
||||
NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /I"$(NGHTTP2_INC_DIR)"
|
||||
NGHTTP2_LIBS = nghttp2.lib
|
||||
!ELSEIF "$(WITH_NGHTTP2)"=="static"
|
||||
NGHTTP2_CFLAGS = /DUSE_NGHTTP2 /DNGHTTP2_STATICLIB /I"$(NGHTTP2_INC_DIR)"
|
||||
!IF EXISTS("$(NGHTTP2_LIB_DIR)\nghttp2_static.lib")
|
||||
NGHTTP2_LIBS = nghttp2_static.lib
|
||||
!ELSE
|
||||
NGHTTP2_LIBS = nghttp2.lib
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF MSH3_PATH
|
||||
MSH3_INC_DIR = $(MSH3_PATH)\include
|
||||
MSH3_LIB_DIR = $(MSH3_PATH)\lib
|
||||
MSH3_LFLAGS = $(MSH3_LFLAGS) "/LIBPATH:$(MSH3_LIB_DIR)"
|
||||
!ELSE
|
||||
MSH3_INC_DIR = $(DEVEL_INCLUDE)
|
||||
MSH3_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_MSH3)"=="dll"
|
||||
MSH3_CFLAGS = /DUSE_MSH3 /I"$(MSH3_INC_DIR)"
|
||||
MSH3_LIBS = msh3.lib
|
||||
!ELSEIF "$(WITH_MSH3)"=="static"
|
||||
MSH3_CFLAGS = /DUSE_MSH3 /DMSH3_STATICLIB /I"$(MSH3_INC_DIR)"
|
||||
!IF EXISTS("$(NGHTTP2_LIB_DIR)\msh3_static.lib")
|
||||
MSH3_LIBS = msh3_static.lib
|
||||
!ELSE
|
||||
MSH3_LIBS = msh3.lib
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
!IFDEF MBEDTLS_PATH
|
||||
MBEDTLS_INC_DIR = $(MBEDTLS_PATH)\include
|
||||
MBEDTLS_LIB_DIR = $(MBEDTLS_PATH)\lib
|
||||
MBEDTLS_LFLAGS = $(MBEDTLS_LFLAGS) "/LIBPATH:$(MBEDTLS_LIB_DIR)"
|
||||
!ELSE
|
||||
MBEDTLS_INC_DIR = $(DEVEL_INCLUDE)
|
||||
MBEDTLS_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
|
||||
USE_MBEDTLS = true
|
||||
MBEDTLS = $(WITH_MBEDTLS)
|
||||
MBEDTLS_CFLAGS = /DUSE_MBEDTLS /I"$(MBEDTLS_INC_DIR)"
|
||||
MBEDTLS_LIBS = mbedtls.lib mbedcrypto.lib mbedx509.lib
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFDEF CARES_PATH
|
||||
CARES_INC_DIR = $(CARES_PATH)\include
|
||||
CARES_LIB_DIR = $(CARES_PATH)\lib
|
||||
CARES_LFLAGS = $(CARES_LFLAGS) "/LIBPATH:$(CARES_LIB_DIR)"
|
||||
!ELSE
|
||||
CARES_INC_DIR = $(DEVEL_INCLUDE)/cares
|
||||
CARES_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_CARES)"=="dll"
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
CARES_LIBS = caresd.lib
|
||||
!ELSE
|
||||
CARES_LIBS = cares.lib
|
||||
!ENDIF
|
||||
USE_CARES = true
|
||||
CARES = dll
|
||||
!ELSEIF "$(WITH_CARES)"=="static"
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
CARES_LIBS = libcaresd.lib
|
||||
!ELSE
|
||||
CARES_LIBS = libcares.lib
|
||||
!ENDIF
|
||||
USE_CARES = true
|
||||
CARES = static
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_CARES
|
||||
CARES_CFLAGS = /DUSE_ARES /I"$(CARES_INC_DIR)"
|
||||
!IF "$(CARES)"=="static"
|
||||
CARES_CFLAGS = $(CARES_CFLAGS) /DCARES_STATICLIB
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFDEF ZLIB_PATH
|
||||
ZLIB_INC_DIR = $(ZLIB_PATH)\include
|
||||
ZLIB_LIB_DIR = $(ZLIB_PATH)\lib
|
||||
ZLIB_LFLAGS = $(ZLIB_LFLAGS) "/LIBPATH:$(ZLIB_LIB_DIR)"
|
||||
!ELSE
|
||||
ZLIB_INC_DIR = $(DEVEL_INCLUDE)
|
||||
ZLIB_LIB_DIR = $(DEVEL_LIB)
|
||||
!ENDIF
|
||||
|
||||
# Depending on how zlib is built the libraries have different names, we
|
||||
# try to handle them all.
|
||||
!IF "$(WITH_ZLIB)"=="dll"
|
||||
!IF EXISTS("$(ZLIB_LIB_DIR)\zlibwapi.lib")
|
||||
ZLIB_LIBS = zlibwapi.lib
|
||||
ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI
|
||||
!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zdll.lib")
|
||||
ZLIB_LIBS = zdll.lib
|
||||
!ELSE
|
||||
ZLIB_LIBS = zlib.lib
|
||||
!ENDIF
|
||||
USE_ZLIB = true
|
||||
ZLIB = dll
|
||||
!ELSEIF "$(WITH_ZLIB)"=="static"
|
||||
!IF EXISTS("$(ZLIB_LIB_DIR)\zlibstat.lib")
|
||||
ZLIB_LIBS = zlibstat.lib
|
||||
ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI
|
||||
!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlibstatic.lib")
|
||||
ZLIB_LIBS = zlibstatic.lib
|
||||
!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlib.lib")
|
||||
ZLIB_LIBS = zlib.lib
|
||||
!ELSE
|
||||
ZLIB_LIBS = zlib_a.lib
|
||||
!ENDIF
|
||||
USE_ZLIB = true
|
||||
ZLIB = static
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_ZLIB
|
||||
ZLIB_CFLAGS = /DHAVE_LIBZ $(ADDITIONAL_ZLIB_CFLAGS) /I"$(ZLIB_INC_DIR)"
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFDEF SSH2_PATH
|
||||
SSH2_INC_DIR= $(SSH2_PATH)\include
|
||||
SSH2_LIB_DIR= $(SSH2_PATH)\lib
|
||||
SSH2_LFLAGS = $(SSH2_LFLAGS) "/LIBPATH:$(SSH2_LIB_DIR)"
|
||||
!ELSE
|
||||
SSH2_LIB_DIR= $(DEVEL_LIB)
|
||||
SSH2_INC_DIR= $(DEVEL_INCLUDE)/libssh2
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_SSH2)"=="dll"
|
||||
SSH2_LIBS = libssh2.lib
|
||||
USE_SSH2 = true
|
||||
SSH2 = dll
|
||||
!ELSEIF "$(WITH_SSH2)"=="static"
|
||||
# libssh2 NMakefile on Windows at default creates a static library without _a suffix
|
||||
!IF EXISTS("$(SSH2_LIB_DIR)\libssh2.lib")
|
||||
SSH2_LIBS = libssh2.lib
|
||||
!ELSE
|
||||
SSH2_LIBS = libssh2_a.lib
|
||||
!ENDIF
|
||||
WIN_LIBS = $(WIN_LIBS) user32.lib
|
||||
USE_SSH2 = true
|
||||
SSH2 = static
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_SSH2
|
||||
SSH2_CFLAGS = /DUSE_LIBSSH2
|
||||
SSH2_CFLAGS = $(SSH2_CFLAGS) /I"$(SSH2_INC_DIR)"
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFDEF SSH_PATH
|
||||
SSH_INC_DIR= $(SSH_PATH)\include
|
||||
SSH_LIB_DIR= $(SSH_PATH)\lib
|
||||
SSH_LFLAGS = $(SSH_LFLAGS) "/LIBPATH:$(SSH_LIB_DIR)"
|
||||
!ELSE
|
||||
SSH_LIB_DIR= $(DEVEL_LIB)
|
||||
SSH_INC_DIR= $(DEVEL_INCLUDE)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(WITH_SSH)"=="dll" || "$(WITH_SSH)"=="static"
|
||||
SSH_LIBS = ssh.lib
|
||||
USE_SSH = true
|
||||
SSH = $(WITH_SSH)
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_SSH
|
||||
SSH_CFLAGS = /DUSE_LIBSSH
|
||||
SSH_CFLAGS = $(SSH_CFLAGS) /I"$(SSH_INC_DIR)"
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFNDEF USE_IDN
|
||||
USE_IDN = true
|
||||
!ELSEIF "$(USE_IDN)"=="yes"
|
||||
USE_IDN = true
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_IDN)"=="true"
|
||||
IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN
|
||||
WIN_LIBS = $(WIN_LIBS) Normaliz.lib
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFNDEF USE_IPV6
|
||||
USE_IPV6 = true
|
||||
!ELSEIF "$(USE_IPV6)"=="yes"
|
||||
USE_IPV6 = true
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_IPV6)"=="true"
|
||||
IPV6_CFLAGS = $(IPV6_CFLAGS) /DUSE_IPV6
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFNDEF USE_SSPI
|
||||
USE_SSPI = true
|
||||
!ELSEIF "$(USE_SSPI)"=="yes"
|
||||
USE_SSPI = true
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSPI)"=="true"
|
||||
SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_WINDOWS_SSPI
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFNDEF USE_SCHANNEL
|
||||
!IF "$(USE_SSL)"=="true"
|
||||
USE_SCHANNEL = false
|
||||
!ELSE
|
||||
USE_SCHANNEL = $(USE_SSPI)
|
||||
!ENDIF
|
||||
!ELSEIF "$(USE_SCHANNEL)"=="yes"
|
||||
USE_SCHANNEL = true
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IF "$(USE_SCHANNEL)"=="true"
|
||||
!IF "$(USE_SSPI)"!="true"
|
||||
!ERROR cannot build with Schannel without SSPI
|
||||
!ENDIF
|
||||
SSPI_CFLAGS = $(SSPI_CFLAGS) /DUSE_SCHANNEL
|
||||
WIN_LIBS = $(WIN_LIBS) Crypt32.lib
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IF "$(GEN_PDB)"=="yes"
|
||||
GEN_PDB = true
|
||||
!ENDIF
|
||||
|
||||
|
||||
!IFDEF EMBED_MANIFEST
|
||||
MANIFESTTOOL = $(MT) -manifest $(DIRDIST)\bin\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\bin\$(PROGRAM_NAME);1
|
||||
!ELSE
|
||||
CURL_RC_FLAGS = $(CURL_RC_FLAGS) /dCURL_EMBED_MANIFEST
|
||||
!ENDIF
|
||||
|
||||
# Runtime library configuration
|
||||
!IF "$(RTLIBCFG)"=="static"
|
||||
RTLIB = /MT
|
||||
RTLIB_DEBUG = /MTd
|
||||
!ELSE
|
||||
RTLIB = /MD
|
||||
RTLIB_DEBUG = /MDd
|
||||
!ENDIF
|
||||
|
||||
!IF "$(MODE)"=="static"
|
||||
TARGET = $(LIB_NAME_STATIC)
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC)
|
||||
AS_DLL = false
|
||||
CFGSET = true
|
||||
!ELSEIF "$(MODE)"=="dll"
|
||||
TARGET = $(LIB_NAME_DLL)
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
|
||||
AS_DLL = true
|
||||
CFGSET = true
|
||||
!ENDIF
|
||||
|
||||
!IF "$(CFGSET)" == "FALSE"
|
||||
!ERROR please choose a valid mode
|
||||
!ENDIF
|
||||
|
||||
|
||||
|
||||
# CURL_XX macros are for the curl.exe command
|
||||
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
RC_FLAGS = /dDEBUGBUILD=1 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc
|
||||
CURL_CC = $(CC_DEBUG) $(RTLIB_DEBUG)
|
||||
CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=1 /Fo $@ $(CURL_SRC_DIR)\curl.rc
|
||||
!ELSE
|
||||
RC_FLAGS = /dDEBUGBUILD=0 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc
|
||||
CURL_CC = $(CC_NODEBUG) $(RTLIB)
|
||||
CURL_RC_FLAGS = $(CURL_RC_FLAGS) /i../include /dDEBUGBUILD=0 /Fo $@ $(CURL_SRC_DIR)\curl.rc
|
||||
!ENDIF
|
||||
|
||||
!IF "$(AS_DLL)" == "true"
|
||||
|
||||
LNK = $(LNKDLL) $(LFLAGS) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET)
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
TARGET = $(LIB_NAME_DLL_DEBUG)
|
||||
LNK = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG)
|
||||
PDB = $(PDB_NAME_DLL_DEBUG)
|
||||
CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG)
|
||||
!ELSE
|
||||
TARGET = $(LIB_NAME_DLL)
|
||||
LNK = $(LNK) /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP)
|
||||
PDB = $(PDB_NAME_DLL)
|
||||
CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP)
|
||||
!ENDIF
|
||||
RESOURCE = $(LIB_DIROBJ)\libcurl.res
|
||||
|
||||
# AS_DLL
|
||||
!ELSE
|
||||
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
TARGET = $(LIB_NAME_STATIC_DEBUG)
|
||||
PDB = $(PDB_NAME_STATIC_DEBUG)
|
||||
!ELSE
|
||||
TARGET = $(LIB_NAME_STATIC)
|
||||
PDB = $(PDB_NAME_STATIC)
|
||||
!ENDIF
|
||||
LNK = $(LNKLIB) /out:$(LIB_DIROBJ)\$(TARGET)
|
||||
CURL_CC = $(CURL_CC) $(CFLAGS_LIBCURL_STATIC)
|
||||
|
||||
# AS_DLL
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSL)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MBEDTLS)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(MBEDTLS_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(MBEDTLS_LFLAGS) $(MBEDTLS_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_CARES)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(CARES_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(CARES_LFLAGS) $(CARES_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_ZLIB)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSH2)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(SSH2_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSH)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(SSH_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(SSH_LFLAGS) $(SSH_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_IDN)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(IDN_CFLAGS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_IPV6)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(IPV6_CFLAGS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_SSPI)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(SSPI_CFLAGS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_NGHTTP2)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(NGHTTP2_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_MSH3)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(MSH3_CFLAGS)
|
||||
LFLAGS = $(LFLAGS) $(MSH3_LFLAGS) $(MSH3_LIBS)
|
||||
!ENDIF
|
||||
|
||||
!IF "$(GEN_PDB)"=="true"
|
||||
CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)"
|
||||
LFLAGS = $(LFLAGS) $(LFLAGS_PDB)
|
||||
!ENDIF
|
||||
|
||||
!IF ( "$(USE_SSL)"=="true" && "$(USE_SCHANNEL)"=="true" ) \
|
||||
|| ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \
|
||||
|| ( "$(USE_MBEDTLS)"=="true" && "$(USE_SCHANNEL)"=="true" )
|
||||
CFLAGS = $(CFLAGS) /DCURL_WITH_MULTI_SSL
|
||||
!ENDIF
|
||||
|
||||
!IF "$(USE_UNICODE)"=="true"
|
||||
CFLAGS = $(CFLAGS) /DUNICODE /D_UNICODE
|
||||
!ENDIF
|
||||
|
||||
LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
|
||||
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
|
||||
|
||||
!IFDEF WITH_PREFIX
|
||||
DIRDIST = $(WITH_PREFIX)
|
||||
!ELSE
|
||||
DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\
|
||||
!ENDIF
|
||||
|
||||
#
|
||||
# curl.exe
|
||||
#
|
||||
CURL_LINK = link.exe /incremental:no /libpath:"$(DIRDIST)\lib"
|
||||
|
||||
!IF "$(CFGSET)" != "FALSE"
|
||||
# A mode was provided, so the library can be built.
|
||||
#
|
||||
!include CURL_OBJS.inc
|
||||
!include LIBCURL_OBJS.inc
|
||||
|
||||
!IF "$(AS_DLL)" == "true"
|
||||
LIB_OBJS = $(LIBCURL_OBJS) $(RESOURCE)
|
||||
!ELSE
|
||||
LIB_OBJS = $(LIBCURL_OBJS)
|
||||
!ENDIF
|
||||
|
||||
EXE_OBJS = $(CURL_OBJS) $(CURL_DIROBJ)\curl.res
|
||||
|
||||
all : $(TARGET) $(PROGRAM_NAME)
|
||||
|
||||
package: $(TARGET)
|
||||
@cd $(DIRDIST)
|
||||
@-$(ZIP) -9 -q -r ..\$(CONFIG_NAME_LIB).zip .>nul 2<&1
|
||||
@cd $(MAKEDIR)
|
||||
|
||||
$(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DIRDIST)
|
||||
@echo Using SSL: $(USE_SSL)
|
||||
@echo Using NGHTTP2: $(USE_NGHTTP2)
|
||||
@echo Using MSH3: $(USE_MSH3)
|
||||
@echo Using c-ares: $(USE_CARES)
|
||||
@echo Using SSH2: $(USE_SSH2)
|
||||
@echo Using SSH: $(USE_SSH)
|
||||
@echo Using ZLIB: $(USE_ZLIB)
|
||||
@echo Using IDN: $(USE_IDN)
|
||||
@echo Using IPv6: $(USE_IPV6)
|
||||
@echo Using SSPI: $(USE_SSPI)
|
||||
@echo Using Schannel: $(USE_SCHANNEL)
|
||||
@echo CFLAGS: $(CFLAGS)
|
||||
@echo LFLAGS: $(LFLAGS)
|
||||
@echo GenPDB: $(GEN_PDB)
|
||||
@echo Debug: $(DEBUG)
|
||||
@echo Machine: $(MACHINE)
|
||||
$(LNK) $(LIB_OBJS)
|
||||
@echo Copying libs...
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL) $(DIRDIST)\bin\ /y >nul 2<&1
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC) $(DIRDIST)\lib\ /y >nul 2<&1
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) $(DIRDIST)\bin\ /y >nul 2<&1
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) $(DIRDIST)\lib\ /y >nul 2<&1
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP) $(DIRDIST)\lib\ /y >nul 2<&1
|
||||
@if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) $(DIRDIST)\lib >nul 2<&1
|
||||
@-copy $(LIB_DIROBJ)\*.exp $(DIRDIST)\lib /y >nul 2<&1
|
||||
@-copy $(LIB_DIROBJ)\*.pdb $(DIRDIST)\lib /y >nul 2<&1
|
||||
@-copy ..\include\curl\*.h $(DIRDIST)\include\curl\ /y >nul 2<&1
|
||||
|
||||
$(LIB_OBJS): $(LIB_DIROBJ) $(DIRDIST)
|
||||
|
||||
$(DIRDIST):
|
||||
@if not exist "$(DIRDIST)\bin" mkdir $(DIRDIST)\bin
|
||||
@if not exist "$(DIRDIST)\include" mkdir $(DIRDIST)\include
|
||||
@if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl
|
||||
@if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib
|
||||
|
||||
$(LIB_DIROBJ):
|
||||
@if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ)
|
||||
@if not exist "$(LIB_DIROBJ)\vauth" mkdir $(LIB_DIROBJ)\vauth
|
||||
@if not exist "$(LIB_DIROBJ)\vtls" mkdir $(LIB_DIROBJ)\vtls
|
||||
@if not exist "$(LIB_DIROBJ)\vssh" mkdir $(LIB_DIROBJ)\vssh
|
||||
@if not exist "$(LIB_DIROBJ)\vquic" mkdir $(LIB_DIROBJ)\vquic
|
||||
|
||||
$(CURL_DIROBJ):
|
||||
@if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)
|
||||
# we need a lib dir for the portability functions from libcurl
|
||||
# we use the .c directly here
|
||||
@if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib
|
||||
|
||||
.SUFFIXES: .c .obj .res
|
||||
|
||||
{$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj::
|
||||
$(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\\" $<
|
||||
|
||||
{$(LIBCURL_SRC_DIR)\vauth\}.c{$(LIB_DIROBJ)\vauth\}.obj::
|
||||
$(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vauth\\" $<
|
||||
|
||||
{$(LIBCURL_SRC_DIR)\vtls\}.c{$(LIB_DIROBJ)\vtls\}.obj::
|
||||
$(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vtls\\" $<
|
||||
|
||||
{$(LIBCURL_SRC_DIR)\vssh\}.c{$(LIB_DIROBJ)\vssh\}.obj::
|
||||
$(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vssh\\" $<
|
||||
|
||||
{$(LIBCURL_SRC_DIR)\vquic\}.c{$(LIB_DIROBJ)\vquic\}.obj::
|
||||
$(CURL_CC) $(CFLAGS) /Fo"$(LIB_DIROBJ)\vquic\\" $<
|
||||
|
||||
$(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc
|
||||
$(RC) $(RC_FLAGS)
|
||||
|
||||
#
|
||||
# curl.exe
|
||||
#
|
||||
|
||||
|
||||
!IF "$(MODE)"=="static"
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG)
|
||||
!ELSE
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC)
|
||||
!ENDIF
|
||||
!ELSEIF "$(MODE)"=="dll"
|
||||
!IF "$(DEBUG)"=="yes"
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG)
|
||||
!ELSE
|
||||
CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
|
||||
!ENDIF
|
||||
!ENDIF
|
||||
|
||||
CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \
|
||||
$(CURL_DIROBJ)\nonblock.obj \
|
||||
$(CURL_DIROBJ)\strtoofft.obj \
|
||||
$(CURL_DIROBJ)\warnless.obj \
|
||||
$(CURL_DIROBJ)\curl_multibyte.obj \
|
||||
$(CURL_DIROBJ)\version_win32.obj \
|
||||
$(CURL_DIROBJ)\dynbuf.obj \
|
||||
$(CURL_DIROBJ)\base64.obj
|
||||
|
||||
$(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
|
||||
$(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
|
||||
$(MANIFESTTOOL)
|
||||
|
||||
{$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj::
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$(CURL_DIROBJ)\\" $<
|
||||
|
||||
$(CURL_DIROBJ)\tool_hugehelp.obj: $(CURL_SRC_DIR)\tool_hugehelp.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\tool_hugehelp.c
|
||||
$(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c
|
||||
$(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strtoofft.c
|
||||
$(CURL_DIROBJ)\warnless.obj: ../lib/warnless.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/warnless.c
|
||||
$(CURL_DIROBJ)\curl_multibyte.obj: ../lib/curl_multibyte.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/curl_multibyte.c
|
||||
$(CURL_DIROBJ)\version_win32.obj: ../lib/version_win32.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/version_win32.c
|
||||
$(CURL_DIROBJ)\dynbuf.obj: ../lib/dynbuf.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/dynbuf.c
|
||||
$(CURL_DIROBJ)\base64.obj: ../lib/base64.c
|
||||
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/base64.c
|
||||
$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc
|
||||
$(RC) $(CURL_RC_FLAGS)
|
||||
|
||||
!ENDIF # End of case where a config was provided.
|
||||
|
||||
# Makefile.vc's clean removes (LIB)CURL_DIROBJ and DIRDIST dirs then calls
|
||||
# this clean. Note those are the original directories we control and not the
|
||||
# directories possibly modified by this makefile to point to user-specified
|
||||
# directories.
|
||||
# For example, don't remove DIRDIST here since it may contain user files if it
|
||||
# has been changed by WITH_PREFIX to a different output dir (eg C:\usr\local).
|
||||
clean:
|
||||
@-erase /s *.dll 2> NUL
|
||||
@-erase /s *.exp 2> NUL
|
||||
@-erase /s *.idb 2> NUL
|
||||
@-erase /s *.lib 2> NUL
|
||||
@-erase /s *.obj 2> NUL
|
||||
@-erase /s *.pch 2> NUL
|
||||
@-erase /s *.pdb 2> NUL
|
||||
@-erase /s *.res 2> NUL
|
200
third_party/curl/winbuild/README.md
vendored
Normal file
200
third_party/curl/winbuild/README.md
vendored
Normal file
@ -0,0 +1,200 @@
|
||||
<!--
|
||||
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
|
||||
SPDX-License-Identifier: curl
|
||||
-->
|
||||
|
||||
# Building curl with Visual C++
|
||||
|
||||
This document describes how to compile, build and install curl and libcurl
|
||||
from sources using the Visual C++ build tool. To build with VC++, you will of
|
||||
course have to first install VC++. The minimum required version of VC is 6
|
||||
(part of Visual Studio 6). However using a more recent version is strongly
|
||||
recommended.
|
||||
|
||||
VC++ is also part of the Windows Platform SDK. You do not have to install the
|
||||
full Visual Studio or Visual C++ if all you want is to build curl.
|
||||
|
||||
The latest Platform SDK can be downloaded freely from [Windows SDK and
|
||||
emulator
|
||||
archive](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
If you wish to support zlib, OpenSSL, c-ares, ssh2, you will have to download
|
||||
them separately and copy them to the `deps` directory as shown below:
|
||||
|
||||
somedirectory\
|
||||
|_curl-src
|
||||
| |_winbuild
|
||||
|
|
||||
|_deps
|
||||
|_ lib
|
||||
|_ include
|
||||
|_ bin
|
||||
|
||||
It is also possible to create the `deps` directory in some other random places
|
||||
and tell the `Makefile` its location using the `WITH_DEVEL` option.
|
||||
|
||||
## Building straight from git
|
||||
|
||||
When you check out code git and build it, as opposed from a released source
|
||||
code archive, you need to first run the `buildconf.bat` batch file (present
|
||||
in the source code root directory) to set things up.
|
||||
|
||||
## Open a command prompt
|
||||
|
||||
Open a Visual Studio Command prompt:
|
||||
|
||||
Using the **'Developer Command Prompt for VS [version]'** menu entry: where
|
||||
[version} is the Visual Studio version. The developer prompt at default uses
|
||||
the x86 mode. It is required to call `Vcvarsall.bat` to setup the prompt for
|
||||
the machine type you want. This type of command prompt may not exist in all
|
||||
Visual Studio versions.
|
||||
|
||||
See also: [Developer Command Prompt for Visual
|
||||
Studio](https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs)
|
||||
and [How to: Enable a 64-Bit, x64 hosted MSVC toolset on the command
|
||||
line](https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line)
|
||||
|
||||
Using the **'VS [version] [platform] [type] Command Prompt'** menu entry:
|
||||
where [version] is the Visual Studio version, [platform] is e.g. x64 and
|
||||
[type] Native of Cross platform build. This type of command prompt may not
|
||||
exist in all Visual Studio versions.
|
||||
|
||||
See also: [Set the Path and Environment Variables for Command-Line Builds](https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line)
|
||||
|
||||
## Build in the console
|
||||
|
||||
Once you are in the console, go to the winbuild directory in the Curl
|
||||
sources:
|
||||
|
||||
cd curl-src\winbuild
|
||||
|
||||
Then you can call `nmake /f Makefile.vc` with the desired options (see
|
||||
below). The builds will be in the top src directory, `builds\` directory, in
|
||||
a directory named using the options given to the nmake call.
|
||||
|
||||
nmake /f Makefile.vc mode=<static or dll> <options>
|
||||
|
||||
where `<options>` is one or many of:
|
||||
|
||||
- `VC=<num>` - VC version. 6 or later.
|
||||
- `WITH_DEVEL=<path>` - Paths for the development files (SSL, zlib, etc.)
|
||||
Defaults to sibling directory: `../deps`
|
||||
- `WITH_SSL=<dll/static>` - Enable OpenSSL support, DLL or static
|
||||
- `WITH_NGHTTP2=<dll/static>` - Enable HTTP/2 support, DLL or static
|
||||
- `WITH_MSH3=<dll/static>` - Enable (experimental) HTTP/3 support, DLL or static
|
||||
- `WITH_MBEDTLS=<dll/static>` - Enable mbedTLS support, DLL or static
|
||||
- `WITH_CARES=<dll/static>` - Enable c-ares support, DLL or static
|
||||
- `WITH_ZLIB=<dll/static>` - Enable zlib support, DLL or static
|
||||
- `WITH_SSH=<dll/static>` - Enable libSSH support, DLL or static
|
||||
- `WITH_SSH2=<dll/static>` - Enable libSSH2 support, DLL or static
|
||||
- `WITH_PREFIX=<dir>` - Where to install the build
|
||||
- `ENABLE_SSPI=<yes/no>` - Enable SSPI support, defaults to yes
|
||||
- `ENABLE_IPV6=<yes/no>` - Enable IPv6, defaults to yes
|
||||
- `ENABLE_IDN=<yes or no>` - Enable use of Windows IDN APIs, defaults to yes
|
||||
Requires Windows Vista or later
|
||||
- `ENABLE_SCHANNEL=<yes/no>` - Enable native Windows SSL support, defaults
|
||||
to yes if SSPI and no other SSL library
|
||||
- `ENABLE_OPENSSL_AUTO_LOAD_CONFIG=<yes/no>`
|
||||
- Enable loading OpenSSL configuration
|
||||
automatically, defaults to yes
|
||||
- `ENABLE_UNICODE=<yes/no>` - Enable UNICODE support, defaults to no
|
||||
- `ENABLE_WEBSOCKETS=<yes/no>` - Enable Web Socket support, defaults to no
|
||||
- `GEN_PDB=<yes/no>` - Generate External Program Database
|
||||
(debug symbols for release build)
|
||||
- `DEBUG=<yes/no>` - Debug builds
|
||||
- `MACHINE=<x86/x64/arm64>` - Target architecture (default is x86)
|
||||
- `CARES_PATH=<path>` - Custom path for c-ares
|
||||
- `MBEDTLS_PATH=<path>` - Custom path for mbedTLS
|
||||
- `NGHTTP2_PATH=<path>` - Custom path for nghttp2
|
||||
- `MSH3_PATH=<path>` - Custom path for msh3
|
||||
- `SSH2_PATH=<path>` - Custom path for libSSH2
|
||||
- `SSL_PATH=<path>` - Custom path for OpenSSL
|
||||
- `ZLIB_PATH=<path>` - Custom path for zlib
|
||||
|
||||
## Static linking of Microsoft's C runtime (CRT):
|
||||
|
||||
If you are using mode=static nmake will create and link to the static build
|
||||
of libcurl but *not* the static CRT. If you must you can force nmake to link
|
||||
in the static CRT by passing `RTLIBCFG=static`. Typically you shouldn't use
|
||||
that option, and nmake will default to the DLL CRT. `RTLIBCFG` is rarely used
|
||||
and therefore rarely tested. When passing `RTLIBCFG` for a configuration that
|
||||
was already built but not with that option, or if the option was specified
|
||||
differently, you must destroy the build directory containing the
|
||||
configuration so that nmake can build it from scratch.
|
||||
|
||||
This option is not recommended unless you have enough development experience
|
||||
to know how to match the runtime library for linking (that is, the CRT). If
|
||||
`RTLIBCFG=static` then release builds use `/MT` and debug builds use `/MTd`.
|
||||
|
||||
## Building your own application with libcurl (Visual Studio example)
|
||||
|
||||
When you build curl and libcurl, nmake will show the relative path where the
|
||||
output directory is. The output directory is named from the options nmake used
|
||||
when building. You may also see temp directories of the same name but with
|
||||
suffixes -obj-curl and -obj-lib.
|
||||
|
||||
For example let's say you've built curl.exe and libcurl.dll from the Visual
|
||||
Studio 2010 x64 Win64 Command Prompt:
|
||||
|
||||
nmake /f Makefile.vc mode=dll VC=10
|
||||
|
||||
The output directory will have a name similar to
|
||||
`..\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel`.
|
||||
|
||||
The output directory contains subdirectories bin, lib and include. Those are
|
||||
the directories to set in your Visual Studio project. You can either copy the
|
||||
output directory to your project or leave it in place. Following the example,
|
||||
let's assume you leave it in place and your curl top source directory is
|
||||
`C:\curl-7.82.0`. You would set these options for configurations using the
|
||||
x64 platform:
|
||||
|
||||
~~~
|
||||
- Configuration Properties > Debugging > Environment
|
||||
PATH=C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\bin;%PATH%
|
||||
|
||||
- C/C++ > General > Additional Include Directories
|
||||
C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\include;
|
||||
|
||||
- Linker > General > Additional Library Directories
|
||||
C:\curl-7.82.0\builds\libcurl-vc10-x64-release-dll-ipv6-sspi-schannel\lib;
|
||||
|
||||
- Linker > Input > Additional Dependencies
|
||||
libcurl.lib;
|
||||
~~~
|
||||
|
||||
For configurations using the x86 platform (aka Win32 platform) you would
|
||||
need to make a separate x86 build of libcurl.
|
||||
|
||||
If you build libcurl static (`mode=static`) or debug (`DEBUG=yes`) then the
|
||||
library name will vary and separate builds may be necessary for separate
|
||||
configurations of your project within the same platform. This is discussed in
|
||||
the next section.
|
||||
|
||||
## Building your own application with a static libcurl
|
||||
|
||||
When building an application that uses the static libcurl library on Windows,
|
||||
you must define `CURL_STATICLIB`. Otherwise the linker will look for dynamic
|
||||
import symbols.
|
||||
|
||||
The static library name has an `_a` suffix in the basename and the debug
|
||||
library name has a `_debug` suffix in the basename. For example,
|
||||
`libcurl_a_debug.lib` is a static debug build of libcurl.
|
||||
|
||||
You may need a separate build of libcurl for each VC configuration combination
|
||||
(for example: Debug|Win32, Debug|x64, Release|Win32, Release|x64).
|
||||
|
||||
You must specify any additional dependencies needed by your build of static
|
||||
libcurl (for example:
|
||||
`advapi32.lib;crypt32.lib;normaliz.lib;ws2_32.lib;wldap32.lib`).
|
||||
|
||||
## Legacy Windows and SSL
|
||||
|
||||
When you build curl using the build files in this directory the default SSL
|
||||
backend will be Schannel (Windows SSPI), the native SSL library that comes
|
||||
with the Windows OS. Schannel in Windows <= XP is not able to connect to
|
||||
servers that no longer support the legacy handshakes and algorithms used by
|
||||
those versions. If you will be using curl in one of those earlier versions of
|
||||
Windows you should choose another SSL backend like OpenSSL.
|
34
third_party/curl/winbuild/gen_resp_file.bat
vendored
Executable file
34
third_party/curl/winbuild/gen_resp_file.bat
vendored
Executable file
@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
rem ***************************************************************************
|
||||
rem * _ _ ____ _
|
||||
rem * Project ___| | | | _ \| |
|
||||
rem * / __| | | | |_) | |
|
||||
rem * | (__| |_| | _ <| |___
|
||||
rem * \___|\___/|_| \_\_____|
|
||||
rem *
|
||||
rem * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
rem *
|
||||
rem * This software is licensed as described in the file COPYING, which
|
||||
rem * you should have received as part of this distribution. The terms
|
||||
rem * are also available at https://curl.se/docs/copyright.html.
|
||||
rem *
|
||||
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
rem * copies of the Software, and permit persons to whom the Software is
|
||||
rem * furnished to do so, under the terms of the COPYING file.
|
||||
rem *
|
||||
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
rem * KIND, either express or implied.
|
||||
rem *
|
||||
rem * SPDX-License-Identifier: curl
|
||||
rem *
|
||||
rem ***************************************************************************
|
||||
|
||||
if exist %OUTFILE% (
|
||||
del %OUTFILE%
|
||||
)
|
||||
|
||||
echo %MACRO_NAME% = \> %OUTFILE%
|
||||
for %%i in (%*) do echo %DIROBJ%/%%i \>> %OUTFILE%
|
||||
echo. >> %OUTFILE%
|
||||
|
||||
:END
|
36
third_party/curl/winbuild/makedebug.cmd
vendored
Normal file
36
third_party/curl/winbuild/makedebug.cmd
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
@echo off
|
||||
rem ***************************************************************************
|
||||
rem * _ _ ____ _
|
||||
rem * Project ___| | | | _ \| |
|
||||
rem * / __| | | | |_) | |
|
||||
rem * | (__| |_| | _ <| |___
|
||||
rem * \___|\___/|_| \_\_____|
|
||||
rem *
|
||||
rem * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
rem *
|
||||
rem * This software is licensed as described in the file COPYING, which
|
||||
rem * you should have received as part of this distribution. The terms
|
||||
rem * are also available at https://curl.se/docs/copyright.html.
|
||||
rem *
|
||||
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
rem * copies of the Software, and permit persons to whom the Software is
|
||||
rem * furnished to do so, under the terms of the COPYING file.
|
||||
rem *
|
||||
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
rem * KIND, either express or implied.
|
||||
rem *
|
||||
rem * SPDX-License-Identifier: curl
|
||||
rem *
|
||||
rem ***************************************************************************
|
||||
|
||||
where.exe nmake.exe >nul 2>&1
|
||||
|
||||
IF %ERRORLEVEL% == 1 (
|
||||
ECHO Error: Can't find `nmake.exe` - be sure to run this script from within a Developer Command-Prompt
|
||||
ECHO.
|
||||
) ELSE (
|
||||
nmake /f Makefile.vc mode=static DEBUG=yes GEN_PDB=yes
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO "Error: Build Failed"
|
||||
)
|
||||
)
|
Reference in New Issue
Block a user