summaryrefslogtreecommitdiff
path: root/docs/examples
diff options
context:
space:
mode:
authorViktor Szakats <commit@vsz.me>2022-10-03 19:46:56 +0000
committerViktor Szakats <commit@vsz.me>2022-10-03 19:46:56 +0000
commit10fbd8b4e3f83b967fd9ad9a41ab484c0e7e7ca3 (patch)
treeb789fa8476794d5f342767abde3c2f79602225e6 /docs/examples
parentc5d8895645203a0aafbdbb775f91d3a7af85a37d (diff)
downloadcurl-10fbd8b4e3f83b967fd9ad9a41ab484c0e7e7ca3.tar.gz
Makefile.m32: major rework [ci skip]
This patch overhauls `Makefile.m32` scripts, fixing a list of quirks, making its behaviour and customization envvars align better with other build systems, aiming for less code, that is easier to read, use and maintain. Details: - Rename customization envvars: `CURL_CC` -> `CC` `CURL_RC` -> `RC` `CURL_AR` -> `AR` `CURL_LDFLAG_EXTRAS_DLL` -> `CURL_LDFLAGS_LIB` `CURL_LDFLAG_EXTRAS_EXE` -> `CURL_LDFLAGS_BIN` - Drop `CURL_STRIP` and `CURL_RANLIB`. These tools are no longer used. - Accept `CFLAGS`, `CPPFLAGS`, `RCFLAGS`, `LDFLAGS` and `LIBS` envvars. - Drop `CURL_CFLAG_EXTRAS`, `CURL_LDFLAG_EXTRAS`, `CURL_RCFLAG_EXTRAS` in favor of the above. - Do not automatically enable `zlib` with `libssh2`. `zlib` is optional with `libssh2`. - Omit unnecessary `CPPFLAGS` options when building `curl.exe` and examples. - Drop support for deprecated `-winssl` `CFG` option. Use `-schannel` instead. - Avoid late evaluation where not necessary (`=` -> `:=`). - Drop support for `CURL_DLL_A_SUFFIX` to override the implib suffix. Instead, use the standard naming scheme by default: `libcurl.dll.a`. The toolchain recognizes the name, and selects it automatically when asking for a `-shared` vs. `-static` build. - Stop applying `strip` to `libcurl.a`. Follow-up from 16a58e9f93c7e89e1f87720199388bcfcfa148a4. There was no debug info to strip since then. - Stop setting `-O3`, `-W`, `-Wall` options. You can add these to `CFLAGS` as desired. - Always enable `-DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG` with OpenSSL, to avoid that vulnerability on Windows. - Add `-lbrotlicommon` to `LIBS` when using `brotli`. - Do not enable `-nghttp3` without `-ngtcp2`. - `-ssh2` and `-rtmp` options no longer try to auto-select a TLS-backend. You need to set the backend explicitly. This scales better and avoids issues with certain combinations (e.g. `libssh2` + `wolfssl` with no `schannel`). - Default to OpenSSL TLS-backend with `ngtcp2`. Possible to override via `NGTCP2_LIBS`. - Old, alternate method of enabling components (e.g. `SSH2=1`) no longer supported. - Delete `SPNEGO` references. They were no-ops. - Drop support for Win9x environments. - Allow setting `OPENSSL_LIBS` independently from `OPENSSL_LIBPATH`. - Support autotools/CMake `libssh2` builds by default. - Respect `CURL_DLL_SUFFIX` in `-dyn` mode when building `curl.exe` and examples. - Assume standard directory layout with `LIBCARES_PATH`. (Instead of the long gone embedded one.) - Stop static linking with c-ares by default. Add `CPPFLAGS=-DCARES_STATICLIB` to enable it. - Reorganize internal layout to avoid redundancy and emit clean diffs between src/lib and example make files. - Delete unused variables. - Code cleanups/rework. - Comment and indentation fixes. Closes #9632
Diffstat (limited to 'docs/examples')
-rw-r--r--docs/examples/Makefile.m32385
1 files changed, 109 insertions, 276 deletions
diff --git a/docs/examples/Makefile.m32 b/docs/examples/Makefile.m32
index ab07bab13..1fcb2502b 100644
--- a/docs/examples/Makefile.m32
+++ b/docs/examples/Makefile.m32
@@ -22,335 +22,168 @@
#
#***************************************************************************
-###########################################################################
-#
# Makefile for building curl examples with MinGW and optional features.
#
# 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, e.g.:
-# set ZLIB_PATH=C:/zlib
-# set ZLIB=1
-#
-###########################################################################
+# Set component roots via envvar <feature>_PATH. CPPFLAGS, LDFLAGS, LIBS,
+# CFLAGS, RCFLAGS (and more) are also available for customization.
-PROOT = ../..
+PROOT := ../..
-ifndef ZLIB_PATH
-ZLIB_PATH = $(PROOT)/../zlib
-endif
-ifndef ZSTD_PATH
-ZSTD_PATH = $(PROOT)/../zstd
-endif
-ifndef BROTLI_PATH
-BROTLI_PATH = $(PROOT)/../brotli
-endif
-ifndef OPENSSL_PATH
-OPENSSL_PATH = $(PROOT)/../openssl
-endif
-ifndef LIBSSH2_PATH
-LIBSSH2_PATH = $(PROOT)/../libssh2
-endif
-ifndef LIBRTMP_PATH
-LIBRTMP_PATH = $(PROOT)/../librtmp
-endif
-ifndef LIBGSASL_PATH
-LIBGSASL_PATH = $(PROOT)/../gsasl
-endif
-ifndef LIBIDN2_PATH
-LIBIDN2_PATH = $(PROOT)/../libidn2
-endif
-ifndef NGHTTP2_PATH
-NGHTTP2_PATH = $(PROOT)/../nghttp2
-endif
-ifndef NGHTTP3_PATH
-NGHTTP3_PATH = $(PROOT)/../nghttp3
-endif
-ifndef NGTCP2_PATH
-NGTCP2_PATH = $(PROOT)/../ngtcp2
-endif
-ifndef LIBCARES_PATH
-LIBCARES_PATH = $(PROOT)/../c-ares
-endif
-
-ifeq ($(CURL_CC),)
-CURL_CC := $(CROSSPREFIX)gcc
-endif
-ifeq ($(CURL_AR),)
-CURL_AR := $(CROSSPREFIX)ar
-endif
-ifeq ($(CURL_RC),)
-CURL_RC := $(CROSSPREFIX)windres
-endif
-
-CC = $(CURL_CC)
-CFLAGS = -O3 $(CURL_CFLAG_EXTRAS) -W -Wall
-LDFLAGS = $(CURL_LDFLAG_EXTRAS) $(CURL_LDFLAG_EXTRAS_EXE)
-RC = $(CURL_RC)
-RCFLAGS = -I$(PROOT)/include -O coff -DCURL_EMBED_MANIFEST $(CURL_RCFLAG_EXTRAS)
-
-# 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
+CPPFLAGS += -I. -I$(PROOT)/include
+RCFLAGS += -I$(PROOT)/include -DCURL_EMBED_MANIFEST
+LDFLAGS += -L$(PROOT)/lib
+LIBS += -lcurl
ifneq ($(ARCH),custom)
-ifeq ($(ARCH),w64)
-CFLAGS += -m64
-LDFLAGS += -m64
-RCFLAGS += --target=pe-x86-64
-else
-CFLAGS += -m32
-LDFLAGS += -m32
-RCFLAGS += --target=pe-i386
-endif
-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 = -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.
+ # Set environment var ARCH to your architecture to override autodetection.
+ ifndef ARCH
+ ifneq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),)
+ ARCH := w64
+ else
+ ARCH := w32
+ endif
+ endif
+ ifeq ($(ARCH),w64)
+ CFLAGS += -m64
+ LDFLAGS += -m64
+ RCFLAGS += --target=pe-x86-64
+ else
+ CFLAGS += -m32
+ LDFLAGS += -m32
+ RCFLAGS += --target=pe-i386
+ endif
endif
-########################################################
-## Nothing more to do below this line!
+### Optional features
ifneq ($(findstring -dyn,$(CFG)),)
-DYN = 1
+ curl_DEPENDENCIES := $(PROOT)/lib/libcurl$(CURL_DLL_SUFFIX).dll
+ curl_DEPENDENCIES += $(PROOT)/lib/libcurl.dll.a
+else
+ curl_DEPENDENCIES := $(PROOT)/lib/libcurl.a
+ CPPFLAGS += -DCURL_STATICLIB
+ LDFLAGS += -static
endif
-ifneq ($(findstring -ares,$(CFG)),)
-ARES = 1
+
+ifneq ($(findstring -unicode,$(CFG)),)
+ CPPFLAGS += -DUNICODE -D_UNICODE
+ LDFLAGS += -municode
endif
ifneq ($(findstring -sync,$(CFG)),)
-SYNC = 1
+else
+ ifneq ($(findstring -ares,$(CFG)),)
+ LIBCARES_PATH ?= $(PROOT)/../c-ares
+ LDFLAGS += -L"$(LIBCARES_PATH)/lib"
+ LIBS += -lcares
+ endif
endif
ifneq ($(findstring -rtmp,$(CFG)),)
-RTMP = 1
-ZLIB = 1
+ LIBRTMP_PATH ?= $(PROOT)/../librtmp
+ LDFLAGS += -L"$(LIBRTMP_PATH)/librtmp"
+ LIBS += -lrtmp -lwinmm
+ ZLIB := 1
endif
ifneq ($(findstring -ssh2,$(CFG)),)
-SSH2 = 1
-ZLIB = 1
+ LIBSSH2_PATH ?= $(PROOT)/../libssh2
+ LDFLAGS += -L"$(LIBSSH2_PATH)/lib"
+ LDFLAGS += -L"$(LIBSSH2_PATH)/win32"
+ LIBS += -lssh2
+endif
+ifneq ($(findstring -nghttp2,$(CFG)),)
+ NGHTTP2_PATH ?= $(PROOT)/../nghttp2
+ LDFLAGS += -L"$(NGHTTP2_PATH)/lib"
+ LIBS += -lnghttp2
+endif
+ifneq ($(findstring -nghttp3,$(CFG)),)
+ ifneq ($(findstring -ngtcp2,$(CFG)),)
+ NGHTTP3_PATH ?= $(PROOT)/../nghttp3
+ LDFLAGS += -L"$(NGHTTP3_PATH)/lib"
+ LIBS += -lnghttp3
+ NGTCP2_PATH ?= $(PROOT)/../ngtcp2
+ LDFLAGS += -L"$(NGTCP2_PATH)/lib"
+ NGTCP2_LIBS ?= -lngtcp2 -lngtcp2_crypto_openssl
+ LIBS += $(NGTCP2_LIBS)
+ endif
endif
ifneq ($(findstring -ssl,$(CFG)),)
-SSL = 1
+ OPENSSL_PATH ?= $(PROOT)/../openssl
+ OPENSSL_LIBPATH ?= $(OPENSSL_PATH)/lib
+ LDFLAGS += -L"$(OPENSSL_LIBPATH)"
+ OPENSSL_LIBS ?= -lssl -lcrypto
+ LIBS += $(OPENSSL_LIBS)
endif
-ifneq ($(findstring -zlib,$(CFG)),)
-ZLIB = 1
+ifneq ($(findstring -zlib,$(CFG))$(ZLIB),)
+ ZLIB_PATH ?= $(PROOT)/../zlib
+ LDFLAGS += -L"$(ZLIB_PATH)"
+ LIBS += -lz
endif
ifneq ($(findstring -zstd,$(CFG)),)
-ZSTD = 1
+ ZSTD_PATH ?= $(PROOT)/../zstd
+ LDFLAGS += -L"$(ZSTD_PATH)/lib"
+ ZSTD_LIBS ?= -lzstd
+ LIBS += $(ZSTD_LIBS)
endif
ifneq ($(findstring -brotli,$(CFG)),)
-BROTLI = 1
+ BROTLI_PATH ?= $(PROOT)/../brotli
+ LDFLAGS += -L"$(BROTLI_PATH)/lib"
+ BROTLI_LIBS ?= -lbrotlidec -lbrotlicommon
+ LIBS += $(BROTLI_LIBS)
endif
ifneq ($(findstring -gsasl,$(CFG)),)
-GSASL = 1
+ LIBGSASL_PATH ?= $(PROOT)/../gsasl
+ LDFLAGS += -L"$(LIBGSASL_PATH)/lib"
+ LIBS += -lgsasl
endif
ifneq ($(findstring -idn2,$(CFG)),)
-IDN2 = 1
-endif
+ LIBIDN2_PATH ?= $(PROOT)/../libidn2
+ LDFLAGS += -L"$(LIBIDN2_PATH)/lib"
+ LIBS += -lidn2
+else
ifneq ($(findstring -winidn,$(CFG)),)
-WINIDN = 1
-endif
-ifneq ($(findstring -sspi,$(CFG)),)
-SSPI = 1
+ LIBS += -lnormaliz
endif
-ifneq ($(findstring -ldaps,$(CFG)),)
-LDAPS = 1
endif
-ifneq ($(findstring -ipv6,$(CFG)),)
-IPV6 = 1
-endif
-ifneq ($(findstring -schannel,$(CFG))$(findstring -winssl,$(CFG)),)
-SCHANNEL = 1
-SSPI = 1
-endif
-ifneq ($(findstring -nghttp2,$(CFG)),)
-NGHTTP2 = 1
-endif
-ifneq ($(findstring -nghttp3,$(CFG)),)
-NGHTTP3 = 1
-endif
-ifneq ($(findstring -ngtcp2,$(CFG)),)
-NGTCP2 = 1
-endif
-ifneq ($(findstring -unicode,$(CFG)),)
-UNICODE = 1
-endif
-
-# SSH2 and RTMP require an SSL library; assume OpenSSL if none specified
-ifneq ($(SSH2)$(RTMP),)
- ifeq ($(SSL)$(SCHANNEL),)
- SSL = 1
- endif
+ifeq ($(findstring -lldap,$(LIBS)),)
+ LIBS += -lwldap32
endif
+LIBS += -lws2_32 -lcrypt32 -lbcrypt
-INCLUDES = -I. -I$(PROOT)/include
-ifdef UNICODE
- CFLAGS += -DUNICODE -D_UNICODE
- LDFLAGS += -municode
-endif
-
-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 SYNC
- CFLAGS += -DUSE_SYNC_DNS
-else
- ifdef ARES
- CFLAGS += -DUSE_ARES -DCARES_STATICLIB
- curl_LDADD += -L"$(LIBCARES_PATH)" -lcares
- endif
-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
-endif
-ifdef NGHTTP3
- CFLAGS += -DUSE_NGHTTP3
- curl_LDADD += -L"$(NGHTTP3_PATH)/lib" -lnghttp3
- ifdef NGTCP2
- CFLAGS += -DUSE_NGTCP2
- curl_LDADD += -L"$(NGTCP2_PATH)/lib"
- ifdef NGTCP2_LIBS
- curl_LDADD += $(NGTCP2_LIBS)
- else
- curl_LDADD += -lngtcp2
- ifdef SSL
- curl_LDADD += -lngtcp2_crypto_openssl
- endif
- endif
- endif
-endif
-ifdef SSL
- ifndef OPENSSL_INCLUDE
- OPENSSL_INCLUDE = $(OPENSSL_PATH)/include
- endif
- ifndef OPENSSL_LIBPATH
- OPENSSL_LIBS = -lssl -lcrypto
- OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib
- endif
- INCLUDES += -I"$(OPENSSL_INCLUDE)"
- CFLAGS += -DUSE_OPENSSL
- curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
-endif
-ifdef SCHANNEL
- CFLAGS += -DUSE_SCHANNEL
-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 += -lnormaliz
-endif
-endif
-ifdef SSPI
- CFLAGS += -DUSE_WINDOWS_SSPI
-endif
-ifdef IPV6
- CFLAGS += -DENABLE_IPV6
-endif
-ifdef LDAPS
- CFLAGS += -DHAVE_LDAP_SSL
-endif
-ifeq ($(findstring -lldap,$(LDFLAGS)),)
- curl_LDADD += -lwldap32
-endif
-curl_LDADD += -lws2_32 -lcrypt32 -lbcrypt
+### Sources and targets
-# Makefile.inc provides the check_PROGRAMS define
+# Provides check_PROGRAMS
include Makefile.inc
TARGETS := $(patsubst %,%.exe,$(strip $(check_PROGRAMS)))
TARGETS += synctime.exe
-RESOURCE = $(PROOT)/src/curl.res
+RESOURCE := $(PROOT)/src/curl.res
.PRECIOUS: %.o
+### Rules
+
+CC ?= $(CROSSPREFIX)gcc
+RC ?= $(CROSSPREFIX)windres
+
+ifneq ($(findstring /sh,$(SHELL)),)
+DEL = rm -f $1
+else
+DEL = -del 2>NUL /q /f $(subst /,\,$1)
+endif
all: $(TARGETS)
%.exe: %.o $(RESOURCE) $(curl_DEPENDENCIES)
- $(CC) $(LDFLAGS) -o $@ $< $(RESOURCE) $(curl_LDADD)
+ $(CC) $(LDFLAGS) -o $@ $< $(RESOURCE) $(LIBS)
%.o: %.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
%.res: %.rc
- $(RC) $(RCFLAGS) -i $< -o $@
+ $(RC) -O coff $(RCFLAGS) -i $< -o $@
clean:
@$(call DEL, $(TARGETS:.exe=.o) $(RESOURCE))