Previously, -libssh2/-rtmp options assumed that OpenSSL is also enabled (and then failed with an error when not finding expected OpenSSL headers), but this isn't necessarly true, e.g. when building both libssh2 and curl against Schannel. This patch makes sure to only enable the OpenSSL backend with -libssh2/-rtmp, when there was no SSL option explicitly selected. - Re-implement the logic as a single block of script. - Also fix an indentation while there. Assisted-by: Jay Satiro Closes #7895
404 lines
10 KiB
Makefile
404 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
|
|
ZLIB = 1
|
|
endif
|
|
ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
|
|
SSH2 = 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
|
|
|
|
# SSH2 and RTMP require an SSL library; assume OpenSSL if none specified
|
|
ifneq ($(SSH2)$(RTMP),)
|
|
ifeq ($(SSL)$(WINSSL),)
|
|
SSL = 1
|
|
endif
|
|
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))
|