mirror of
https://github.com/curl/curl.git
synced 2024-12-15 06:40:09 +08:00
265b14d6b3
Warning: this will make existing curl command lines that use metalink to stop working. Reasons for removal: 1. We've found several security problems and issues involving the metalink support in curl. The issues are not detailed here. When working on those, it become apparent to the team that several of the problems are due to the system design, metalink library API and what the metalink RFC says. They are very hard to fix on the curl side only. 2. The metalink usage with curl was only very briefly documented and was not following the "normal" curl usage pattern in several ways, making it surprising and non-intuitive which could lead to further security issues. 3. The metalink library was last updated 6 years ago and wasn't so active the years before that either. An unmaintained library means there's a security problem waiting to happen. This is probably reason enough. 4. Metalink requires an XML parsing library, which is complex code (even the smaller alternatives) and to this day often gets security updates. 5. Metalink is not a widely used curl feature. In the 2020 curl user survey, only 1.4% of the responders said that they'd are using it. In 2021 that number was 1.2%. Searching the web also show very few traces of it being used, even with other tools. 6. The torrent format and associated technology clearly won for downloading large files from multiple sources in parallel. Cloes #7176
399 lines
10 KiB
Makefile
399 lines
10 KiB
Makefile
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) 1998 - 2021, 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.
|
|
#
|
|
#***************************************************************************
|
|
|
|
###########################################################################
|
|
#
|
|
## Makefile for building curl examples with MingW (GCC-3.2 or later)
|
|
## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4),
|
|
## brotli (1.0.1), zstd (1.4.5)
|
|
##
|
|
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
|
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
|
|
##
|
|
## Hint: you can also set environment vars to control the build, f.e.:
|
|
## set ZLIB_PATH=c:/zlib-1.2.8
|
|
## set ZLIB=1
|
|
#
|
|
###########################################################################
|
|
|
|
# Edit the path below to point to the base of your Zlib sources.
|
|
ifndef ZLIB_PATH
|
|
ZLIB_PATH = ../../../zlib-1.2.8
|
|
endif
|
|
# Edit the path below to point to the base of your Zstandard sources.
|
|
ifndef ZSTD_PATH
|
|
ZSTD_PATH = ../../../zstd-1.4.5
|
|
endif
|
|
# Edit the path below to point to the base of your Brotli sources.
|
|
ifndef BROTLI_PATH
|
|
BROTLI_PATH = ../../../brotli-1.0.1
|
|
endif
|
|
# Edit the path below to point to the base of your OpenSSL package.
|
|
ifndef OPENSSL_PATH
|
|
OPENSSL_PATH = ../../../openssl-1.0.2a
|
|
endif
|
|
# Edit the path below to point to the base of your LibSSH2 package.
|
|
ifndef LIBSSH2_PATH
|
|
LIBSSH2_PATH = ../../../libssh2-1.5.0
|
|
endif
|
|
# Edit the path below to point to the base of your librtmp package.
|
|
ifndef LIBRTMP_PATH
|
|
LIBRTMP_PATH = ../../../librtmp-2.4
|
|
endif
|
|
# Edit the path below to point to the base of your libexpat package.
|
|
ifndef LIBEXPAT_PATH
|
|
LIBEXPAT_PATH = ../../../expat-2.1.0
|
|
endif
|
|
# Edit the path below to point to the base of your libxml2 package.
|
|
ifndef LIBXML2_PATH
|
|
LIBXML2_PATH = ../../../libxml2-2.9.2
|
|
endif
|
|
# Edit the path below to point to the base of your libgsasl package.
|
|
ifndef LIBGSASL_PATH
|
|
LIBGSASL_PATH = ../../../libgsasl-1.10.0
|
|
endif
|
|
# Edit the path below to point to the base of your libidn2 package.
|
|
ifndef LIBIDN2_PATH
|
|
LIBIDN2_PATH = ../../../libidn2-2.0.3
|
|
endif
|
|
# Edit the path below to point to the base of your MS IDN package.
|
|
# Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
|
|
# https://www.microsoft.com/en-us/download/details.aspx?id=734
|
|
ifndef WINIDN_PATH
|
|
WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs
|
|
endif
|
|
# Edit the path below to point to the base of your Novell LDAP NDK.
|
|
ifndef LDAP_SDK
|
|
LDAP_SDK = c:/novell/ndk/cldapsdk/win32
|
|
endif
|
|
# Edit the path below to point to the base of your nghttp2 package.
|
|
ifndef NGHTTP2_PATH
|
|
NGHTTP2_PATH = ../../../nghttp2-1.0.0
|
|
endif
|
|
# Edit the path below to point to the base of your nghttp3 package.
|
|
ifndef NGHTTP3_PATH
|
|
NGHTTP3_PATH = ../../../nghttp3-1.0.0
|
|
endif
|
|
# Edit the path below to point to the base of your ngtcp2 package.
|
|
ifndef NGTCP2_PATH
|
|
NGTCP2_PATH = ../../../ngtcp2-1.0.0
|
|
endif
|
|
|
|
PROOT = ../..
|
|
|
|
# Edit the path below to point to the base of your c-ares package.
|
|
ifndef LIBCARES_PATH
|
|
LIBCARES_PATH = $(PROOT)/ares
|
|
endif
|
|
|
|
ifeq ($(CURL_CC),)
|
|
CURL_CC := $(CROSSPREFIX)gcc
|
|
endif
|
|
ifeq ($(CURL_AR),)
|
|
CURL_AR := $(CROSSPREFIX)ar
|
|
endif
|
|
|
|
CC = $(CURL_CC)
|
|
CFLAGS = $(CURL_CFLAG_EXTRAS) -g -O2 -Wall -W
|
|
CFLAGS += -fno-strict-aliasing
|
|
# comment LDFLAGS below to keep debug info
|
|
LDFLAGS = $(CURL_LDFLAG_EXTRAS) $(CURL_LDFLAG_EXTRAS_EXE) -s
|
|
RC = $(CROSSPREFIX)windres
|
|
RCFLAGS = --include-dir=$(PROOT)/include -O coff
|
|
|
|
# Set environment var ARCH to your architecture to override autodetection.
|
|
ifndef ARCH
|
|
ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)
|
|
ARCH = w64
|
|
else
|
|
ARCH = w32
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH),w64)
|
|
CFLAGS += -m64 -D_AMD64_
|
|
LDFLAGS += -m64
|
|
RCFLAGS += -F pe-x86-64
|
|
else
|
|
CFLAGS += -m32
|
|
LDFLAGS += -m32
|
|
RCFLAGS += -F pe-i386
|
|
endif
|
|
|
|
# Platform-dependent helper tool macros
|
|
ifeq ($(findstring /sh,$(SHELL)),/sh)
|
|
DEL = rm -f $1
|
|
RMDIR = rm -fr $1
|
|
MKDIR = mkdir -p $1
|
|
COPY = -cp -afv $1 $2
|
|
#COPYR = -cp -afr $1/* $2
|
|
COPYR = -rsync -aC $1/* $2
|
|
TOUCH = touch $1
|
|
CAT = cat
|
|
ECHONL = echo ""
|
|
DL = '
|
|
else
|
|
ifeq "$(OS)" "Windows_NT"
|
|
DEL = -del 2>NUL /q /f $(subst /,\,$1)
|
|
RMDIR = -rd 2>NUL /q /s $(subst /,\,$1)
|
|
else
|
|
DEL = -del 2>NUL $(subst /,\,$1)
|
|
RMDIR = -deltree 2>NUL /y $(subst /,\,$1)
|
|
endif
|
|
MKDIR = -md 2>NUL $(subst /,\,$1)
|
|
COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)
|
|
COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2)
|
|
TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,,
|
|
CAT = type
|
|
ECHONL = $(ComSpec) /c echo.
|
|
endif
|
|
|
|
########################################################
|
|
## Nothing more to do below this line!
|
|
|
|
ifeq ($(findstring -dyn,$(CFG)),-dyn)
|
|
DYN = 1
|
|
endif
|
|
ifeq ($(findstring -ares,$(CFG)),-ares)
|
|
ARES = 1
|
|
endif
|
|
ifeq ($(findstring -rtmp,$(CFG)),-rtmp)
|
|
RTMP = 1
|
|
SSL = 1
|
|
ZLIB = 1
|
|
endif
|
|
ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
|
|
SSH2 = 1
|
|
SSL = 1
|
|
ZLIB = 1
|
|
endif
|
|
ifeq ($(findstring -ssl,$(CFG)),-ssl)
|
|
SSL = 1
|
|
endif
|
|
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
|
ZLIB = 1
|
|
endif
|
|
ifeq ($(findstring -zstd,$(CFG)),-zstd)
|
|
ZSTD = 1
|
|
endif
|
|
ifeq ($(findstring -brotli,$(CFG)),-brotli)
|
|
BROTLI = 1
|
|
endif
|
|
ifeq ($(findstring -gsasl,$(CFG)),-gsasl)
|
|
GSASL = 1
|
|
endif
|
|
ifeq ($(findstring -idn2,$(CFG)),-idn2)
|
|
IDN2 = 1
|
|
endif
|
|
ifeq ($(findstring -winidn,$(CFG)),-winidn)
|
|
WINIDN = 1
|
|
endif
|
|
ifeq ($(findstring -sspi,$(CFG)),-sspi)
|
|
SSPI = 1
|
|
endif
|
|
ifeq ($(findstring -ldaps,$(CFG)),-ldaps)
|
|
LDAPS = 1
|
|
endif
|
|
ifeq ($(findstring -ipv6,$(CFG)),-ipv6)
|
|
IPV6 = 1
|
|
endif
|
|
ifeq ($(findstring -winssl,$(CFG)),-winssl)
|
|
WINSSL = 1
|
|
SSPI = 1
|
|
endif
|
|
ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2)
|
|
NGHTTP2 = 1
|
|
endif
|
|
ifeq ($(findstring -nghttp3,$(CFG)),-nghttp3)
|
|
NGHTTP3 = 1
|
|
endif
|
|
ifeq ($(findstring -ngtcp2,$(CFG)),-ngtcp2)
|
|
NGTCP2 = 1
|
|
endif
|
|
|
|
INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib
|
|
|
|
ifdef DYN
|
|
curl_DEPENDENCIES = $(PROOT)/lib/libcurldll.a $(PROOT)/lib/libcurl.dll
|
|
curl_LDADD = -L$(PROOT)/lib -lcurldll
|
|
else
|
|
curl_DEPENDENCIES = $(PROOT)/lib/libcurl.a
|
|
curl_LDADD = -L$(PROOT)/lib -lcurl
|
|
CFLAGS += -DCURL_STATICLIB
|
|
LDFLAGS += -static
|
|
endif
|
|
ifdef ARES
|
|
ifndef DYN
|
|
curl_DEPENDENCIES += $(LIBCARES_PATH)/libcares.a
|
|
endif
|
|
CFLAGS += -DUSE_ARES
|
|
curl_LDADD += -L"$(LIBCARES_PATH)" -lcares
|
|
endif
|
|
ifdef RTMP
|
|
CFLAGS += -DUSE_LIBRTMP
|
|
curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
|
|
endif
|
|
ifdef NGHTTP2
|
|
CFLAGS += -DUSE_NGHTTP2
|
|
curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2
|
|
endif
|
|
ifdef SSH2
|
|
CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
|
|
curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
|
|
ifdef WINSSL
|
|
ifndef DYN
|
|
curl_LDADD += -lbcrypt -lcrypt32
|
|
endif
|
|
endif
|
|
endif
|
|
ifdef SSL
|
|
ifdef NGHTTP3
|
|
CFLAGS += -DUSE_NGHTTP3
|
|
curl_LDADD += -L"$(NGHTTP3_PATH)/lib" -lnghttp3
|
|
ifdef NGTCP2
|
|
CFLAGS += -DUSE_NGTCP2
|
|
curl_LDADD += -L"$(NGTCP2_PATH)/lib" -lngtcp2 -lngtcp2_crypto_openssl
|
|
endif
|
|
endif
|
|
|
|
ifndef OPENSSL_INCLUDE
|
|
ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc"
|
|
OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc
|
|
endif
|
|
ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include"
|
|
OPENSSL_INCLUDE = $(OPENSSL_PATH)/include
|
|
endif
|
|
endif
|
|
ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h"
|
|
$(error Invalid path to OpenSSL package: $(OPENSSL_PATH))
|
|
endif
|
|
ifndef OPENSSL_LIBPATH
|
|
OPENSSL_LIBS = -lssl -lcrypto
|
|
ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out"
|
|
OPENSSL_LIBPATH = $(OPENSSL_PATH)/out
|
|
ifdef DYN
|
|
OPENSSL_LIBS = -lssl32 -leay32
|
|
endif
|
|
endif
|
|
ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib"
|
|
OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib
|
|
endif
|
|
endif
|
|
ifndef DYN
|
|
OPENSSL_LIBS += -lgdi32 -lcrypt32
|
|
endif
|
|
INCLUDES += -I"$(OPENSSL_INCLUDE)"
|
|
CFLAGS += -DUSE_OPENSSL
|
|
curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
|
|
endif
|
|
ifdef WINSSL
|
|
CFLAGS += -DUSE_SCHANNEL
|
|
curl_LDADD += -lcrypt32
|
|
endif
|
|
ifdef ZLIB
|
|
INCLUDES += -I"$(ZLIB_PATH)"
|
|
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
|
curl_LDADD += -L"$(ZLIB_PATH)" -lz
|
|
endif
|
|
ifdef ZSTD
|
|
INCLUDES += -I"$(ZSTD_PATH)/include"
|
|
CFLAGS += -DHAVE_ZSTD
|
|
curl_LDADD += -L"$(ZSTD_PATH)/lib"
|
|
ifdef ZSTD_LIBS
|
|
curl_LDADD += $(ZSTD_LIBS)
|
|
else
|
|
curl_LDADD += -lzstd
|
|
endif
|
|
endif
|
|
ifdef BROTLI
|
|
INCLUDES += -I"$(BROTLI_PATH)/include"
|
|
CFLAGS += -DHAVE_BROTLI
|
|
curl_LDADD += -L"$(BROTLI_PATH)/lib"
|
|
ifdef BROTLI_LIBS
|
|
curl_LDADD += $(BROTLI_LIBS)
|
|
else
|
|
curl_LDADD += -lbrotlidec
|
|
endif
|
|
endif
|
|
ifdef GSASL
|
|
CFLAGS += -DUSE_GSASL
|
|
curl_LDADD += -L"$(LIBGSASL_PATH)/lib" -lgsasl
|
|
endif
|
|
ifdef IDN2
|
|
CFLAGS += -DUSE_LIBIDN2
|
|
curl_LDADD += -L"$(LIBIDN2_PATH)/lib" -lidn2
|
|
else
|
|
ifdef WINIDN
|
|
CFLAGS += -DUSE_WIN32_IDN
|
|
curl_LDADD += -L"$(WINIDN_PATH)" -lnormaliz
|
|
endif
|
|
endif
|
|
ifdef SSPI
|
|
CFLAGS += -DUSE_WINDOWS_SSPI
|
|
endif
|
|
ifdef IPV6
|
|
CFLAGS += -DENABLE_IPV6 -D_WIN32_WINNT=0x0501
|
|
endif
|
|
ifdef LDAPS
|
|
CFLAGS += -DHAVE_LDAP_SSL
|
|
endif
|
|
ifdef USE_LDAP_NOVELL
|
|
CFLAGS += -DCURL_HAS_NOVELL_LDAPSDK
|
|
curl_LDADD += -L"$(LDAP_SDK)/lib/mscvc" -lldapsdk -lldapssl -lldapx
|
|
endif
|
|
ifdef USE_LDAP_OPENLDAP
|
|
CFLAGS += -DCURL_HAS_OPENLDAP_LDAPSDK
|
|
curl_LDADD += -L"$(LDAP_SDK)/lib" -lldap -llber
|
|
endif
|
|
ifndef USE_LDAP_NOVELL
|
|
ifndef USE_LDAP_OPENLDAP
|
|
curl_LDADD += -lwldap32
|
|
endif
|
|
endif
|
|
curl_LDADD += -lws2_32
|
|
|
|
# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
|
|
include Makefile.inc
|
|
|
|
check_PROGRAMS := $(patsubst %,%.exe,$(strip $(check_PROGRAMS)))
|
|
check_PROGRAMS += ftpuploadresume.exe synctime.exe
|
|
|
|
.PRECIOUS: %.o
|
|
|
|
|
|
all: $(check_PROGRAMS)
|
|
|
|
%.exe: %.o $(curl_DEPENDENCIES)
|
|
$(CC) $(LDFLAGS) -o $@ $< $(curl_LDADD)
|
|
|
|
%.o: %.c
|
|
$(CC) $(INCLUDES) $(CFLAGS) -c $<
|
|
|
|
%.res: %.rc
|
|
$(RC) $(RCFLAGS) -i $< -o $@
|
|
|
|
clean:
|
|
@$(call DEL, $(check_PROGRAMS:.exe=.o))
|
|
|
|
distclean vclean: clean
|
|
@$(call DEL, $(check_PROGRAMS))
|