From 66e68ca47f7fd00dff2cb7c45ba6725d40099585 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 11 Oct 2022 07:56:01 +0000 Subject: [PATCH] Makefile.m32: support more options [ci skip] - Add support for these options: `-wolfssl`, `-wolfssh`, `-mbedtls`, `-libssh`, `-psl` Caveats: - `-wolfssh` requires `-wolfssl`. - `-wolfssl` cannot be used with OpenSSL backends in parallel. - `-libssh` has build issues with BoringSSL and LibreSSL, and also what looks like a world-writable-config vulnerability on Windows. Consider it experimental. - `-psl` requires `-idn2` and extra libs passed via `LIBS=-liconv -lunistring`. - Detect BoringSSL/wolfSSL and set ngtcp2 crypto lib accordingly. - Generalize MultiSSL detection. - Use else-if syntax. Requires GNU Make 3.81 (2006-04-01). - Document more customization options. This brings over some configuration logic from `curl-for-win`. Closes #9680 --- lib/Makefile.m32 | 131 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 91 insertions(+), 40 deletions(-) diff --git a/lib/Makefile.m32 b/lib/Makefile.m32 index 8807828a79..4ba04f8396 100644 --- a/lib/Makefile.m32 +++ b/lib/Makefile.m32 @@ -28,9 +28,9 @@ # Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn # # Set component roots via envvar _PATH. Also available for -# customization: CPPFLAGS, LDFLAGS, LIBS, CFLAGS, RCFLAGS, ARCH[=custom], -# CURL_LDFLAGS_BIN, CURL_LDFLAGS_LIB, CURL_DLL_SUFFIX, and more for individual -# components. +# customization: CC, RC, AR, CROSSPREFIX, CPPFLAGS, LDFLAGS, LIBS, CFLAGS, +# RCFLAGS, ARCH[=custom], CURL_LDFLAGS_BIN, CURL_LDFLAGS_LIB, CURL_DLL_SUFFIX, +# and more for individual components (see below). # This script is reused by 'src' and 'docs/examples' Makefile.m32 scripts. # Skip lib-specific parts when called through them. @@ -113,15 +113,14 @@ _LIBS := ifneq ($(findstring -sync,$(CFG)),) CPPFLAGS += -DUSE_SYNC_DNS -else - ifneq ($(findstring -ares,$(CFG)),) - LIBCARES_PATH ?= $(PROOT)/../c-ares - CPPFLAGS += -DUSE_ARES - CPPFLAGS += -I"$(LIBCARES_PATH)/include" - _LDFLAGS += -L"$(LIBCARES_PATH)/lib" - _LIBS += -lcares - endif +else ifneq ($(findstring -ares,$(CFG)),) + LIBCARES_PATH ?= $(PROOT)/../c-ares + CPPFLAGS += -DUSE_ARES + CPPFLAGS += -I"$(LIBCARES_PATH)/include" + _LDFLAGS += -L"$(LIBCARES_PATH)/lib" + _LIBS += -lcares endif + ifneq ($(findstring -rtmp,$(CFG)),) LIBRTMP_PATH ?= $(PROOT)/../librtmp CPPFLAGS += -DUSE_LIBRTMP @@ -130,6 +129,7 @@ ifneq ($(findstring -rtmp,$(CFG)),) _LIBS += -lrtmp -lwinmm ZLIB := 1 endif + ifneq ($(findstring -ssh2,$(CFG)),) LIBSSH2_PATH ?= $(PROOT)/../libssh2 CPPFLAGS += -DUSE_LIBSSH2 @@ -137,30 +137,20 @@ ifneq ($(findstring -ssh2,$(CFG)),) _LDFLAGS += -L"$(LIBSSH2_PATH)/lib" _LDFLAGS += -L"$(LIBSSH2_PATH)/win32" _LIBS += -lssh2 +else ifneq ($(findstring -libssh,$(CFG)),) + LIBSSH_PATH ?= $(PROOT)/../libssh + CPPFLAGS += -DUSE_LIBSSH + CPPFLAGS += -I"$(LIBSSH_PATH)/include" + _LDFLAGS += -L"$(LIBSSH_PATH)/lib" + _LIBS += -lssh +else ifneq ($(findstring -wolfssh,$(CFG)),) + WOLFSSH_PATH ?= $(PROOT)/../wolfssh + CPPFLAGS += -DUSE_WOLFSSH + CPPFLAGS += -I"$(WOLFSSH_PATH)/include" + _LDFLAGS += -L"$(WOLFSSH_PATH)/lib" + _LIBS += -lwolfssh endif -ifneq ($(findstring -nghttp2,$(CFG)),) - NGHTTP2_PATH ?= $(PROOT)/../nghttp2 - CPPFLAGS += -DUSE_NGHTTP2 - CPPFLAGS += -I"$(NGHTTP2_PATH)/include" - _LDFLAGS += -L"$(NGHTTP2_PATH)/lib" - _LIBS += -lnghttp2 -endif -ifneq ($(findstring -nghttp3,$(CFG)),) - ifneq ($(findstring -ngtcp2,$(CFG)),) - NGHTTP3_PATH ?= $(PROOT)/../nghttp3 - CPPFLAGS += -DUSE_NGHTTP3 - CPPFLAGS += -I"$(NGHTTP3_PATH)/include" - _LDFLAGS += -L"$(NGHTTP3_PATH)/lib" - _LIBS += -lnghttp3 - - NGTCP2_PATH ?= $(PROOT)/../ngtcp2 - CPPFLAGS += -DUSE_NGTCP2 - CPPFLAGS += -I"$(NGTCP2_PATH)/include" - _LDFLAGS += -L"$(NGTCP2_PATH)/lib" - NGTCP2_LIBS ?= -lngtcp2 -lngtcp2_crypto_openssl - _LIBS += $(NGTCP2_LIBS) - endif -endif + ifneq ($(findstring -ssl,$(CFG)),) OPENSSL_PATH ?= $(PROOT)/../openssl CPPFLAGS += -DUSE_OPENSSL @@ -172,20 +162,68 @@ ifneq ($(findstring -ssl,$(CFG)),) OPENSSL_LIBS ?= -lssl -lcrypto _LIBS += $(OPENSSL_LIBS) + ifneq ($(wildcard $(OPENSSL_INCLUDE)/openssl/aead.h),) + OPENSSL := boringssl + else + # including libressl + OPENSSL := openssl + endif + ifneq ($(findstring -srp,$(CFG)),) ifneq ($(wildcard $(OPENSSL_INCLUDE)/openssl/srp.h),) # OpenSSL 1.0.1 and later. CPPFLAGS += -DHAVE_OPENSSL_SRP -DUSE_TLS_SRP endif endif - SSL := 1 + SSLLIBS += 1 +else ifneq ($(findstring -wolfssl,$(CFG)),) + WOLFSSL_PATH ?= $(PROOT)/../zlib + CPPFLAGS += -DUSE_WOLFSSL + CPPFLAGS += -DSIZEOF_LONG_LONG=8 + CPPFLAGS += -I"$(WOLFSSL_PATH)/include" + _LDFLAGS += -L"$(WOLFSSL_PATH)/lib" + _LIBS += -lwolfssl + OPENSSL := wolfssl + SSLLIBS += 1 +endif +ifneq ($(findstring -mbedtls,$(CFG)),) + MBEDTLS_PATH ?= $(PROOT)/../zlib + CPPFLAGS += -DUSE_MBEDTLS + CPPFLAGS += -I"$(MBEDTLS_PATH)/include" + _LDFLAGS += -L"$(MBEDTLS_PATH)/lib" + _LIBS += -lmbedtls -lmbedx509 -lmbedcrypto + SSLLIBS += 1 endif ifneq ($(findstring -schannel,$(CFG)),) CPPFLAGS += -DUSE_SCHANNEL - ifdef SSL - CPPFLAGS += -DCURL_WITH_MULTI_SSL + SSLLIBS += 1 +endif + +ifneq ($(findstring -nghttp2,$(CFG)),) + NGHTTP2_PATH ?= $(PROOT)/../nghttp2 + CPPFLAGS += -DUSE_NGHTTP2 + CPPFLAGS += -I"$(NGHTTP2_PATH)/include" + _LDFLAGS += -L"$(NGHTTP2_PATH)/lib" + _LIBS += -lnghttp2 +endif + +ifeq ($(findstring -nghttp3,$(CFG))$(findstring -ngtcp2,$(CFG)),-nghttp3-ngtcp2) + NGHTTP3_PATH ?= $(PROOT)/../nghttp3 + CPPFLAGS += -DUSE_NGHTTP3 + CPPFLAGS += -I"$(NGHTTP3_PATH)/include" + _LDFLAGS += -L"$(NGHTTP3_PATH)/lib" + _LIBS += -lnghttp3 + + NGTCP2_PATH ?= $(PROOT)/../ngtcp2 + CPPFLAGS += -DUSE_NGTCP2 + CPPFLAGS += -I"$(NGTCP2_PATH)/include" + _LDFLAGS += -L"$(NGTCP2_PATH)/lib" + ifneq ($(OPENSSL),) + NGTCP2_LIBS ?= -lngtcp2_crypto_$(OPENSSL) endif + _LIBS += -lngtcp2 $(NGTCP2_LIBS) endif + ifneq ($(findstring -zlib,$(CFG))$(ZLIB),) ZLIB_PATH ?= $(PROOT)/../zlib # These CPPFLAGS are also required when compiling the curl tool via 'src'. @@ -217,19 +255,27 @@ ifneq ($(findstring -gsasl,$(CFG)),) _LDFLAGS += -L"$(LIBGSASL_PATH)/lib" _LIBS += -lgsasl endif + ifneq ($(findstring -idn2,$(CFG)),) LIBIDN2_PATH ?= $(PROOT)/../libidn2 CPPFLAGS += -DUSE_LIBIDN2 CPPFLAGS += -I"$(LIBIDN2_PATH)/include" _LDFLAGS += -L"$(LIBIDN2_PATH)/lib" _LIBS += -lidn2 -else -ifneq ($(findstring -winidn,$(CFG)),) + +ifneq ($(findstring -psl,$(CFG)),) + LIBPSL_PATH ?= $(PROOT)/../libpsl + CPPFLAGS += -DUSE_LIBPSL + CPPFLAGS += -I"$(LIBPSL_PATH)/include" + _LDFLAGS += -L"$(LIBPSL_PATH)/lib" + _LIBS += -lpsl +endif +else ifneq ($(findstring -winidn,$(CFG)),) CPPFLAGS += -DUSE_WIN32_IDN CPPFLAGS += -DWANT_IDN_PROTOTYPES _LIBS += -lnormaliz endif -endif + ifneq ($(findstring -sspi,$(CFG)),) CPPFLAGS += -DUSE_WINDOWS_SSPI endif @@ -239,11 +285,16 @@ endif ifneq ($(findstring -ldaps,$(CFG)),) CPPFLAGS += -DHAVE_LDAP_SSL endif + ifeq ($(findstring -lldap,$(LIBS)),) _LIBS += -lwldap32 endif _LIBS += -lws2_32 -lcrypt32 -lbcrypt +ifneq ($(findstring 11,$(subst $() ,,$(SSLLIBS))),) + CPPFLAGS += -DCURL_WITH_MULTI_SSL +endif + ifndef DYN LDFLAGS += $(_LDFLAGS) LIBS += $(_LIBS) -- 2.47.3