Compare commits

..

No commits in common. "master" and "curl-8_12_0" have entirely different histories.

485 changed files with 10248 additions and 12525 deletions

6
.github/labeler.yml vendored
View File

@ -78,8 +78,7 @@ build:
plan9/**,\ plan9/**,\
projects/**,\ projects/**,\
winbuild/**,\ winbuild/**,\
lib/libcurl.def,\ lib/libcurl.def\
tests/cmake/**\
}" }"
CI: CI:
@ -101,8 +100,7 @@ cmake:
**/CMakeLists.txt,\ **/CMakeLists.txt,\
CMake/**,\ CMake/**,\
docs/INSTALL-CMAKE.md,\ docs/INSTALL-CMAKE.md,\
lib/curl_config.h.cmake,\ lib/curl_config.h.cmake\
tests/cmake/**\
}" }"
cmdline tool: cmdline tool:

View File

@ -17,6 +17,7 @@ b967734c9bfe3d7a1a7795f348f0bce4d9ba15ca9590697ef2d4d15b92822db0 ./tests/certs/
26ee981dcb84b6a2adce601084b78e6b787b54a2a997549582a8bd42087ab51b ./tests/data/test1426 26ee981dcb84b6a2adce601084b78e6b787b54a2a997549582a8bd42087ab51b ./tests/data/test1426
d640923e45809a3fe277e0af90459d82d32603aacc7b8db88754fcb335bf98df ./tests/data/test1531 d640923e45809a3fe277e0af90459d82d32603aacc7b8db88754fcb335bf98df ./tests/data/test1531
6f51bc318104fb5fe4b6013fc4e8e1c3c8dec1819202e8ea025bdbc4bbc8c02d ./tests/data/test1938 6f51bc318104fb5fe4b6013fc4e8e1c3c8dec1819202e8ea025bdbc4bbc8c02d ./tests/data/test1938
28a957ec3397881bbafd0d97879cedfd475bcd1ece903e531576affd7aa3865c ./tests/data/test2080
33809cab2442488e5985b4939727bc4ead9fc65150f53008e3e4c93140675a94 ./tests/data/test262 33809cab2442488e5985b4939727bc4ead9fc65150f53008e3e4c93140675a94 ./tests/data/test262
2d073a52984bab1f196d80464ea8ab6dafd887bd5fee9ed58603f8510df0c6a5 ./tests/data/test35 2d073a52984bab1f196d80464ea8ab6dafd887bd5fee9ed58603f8510df0c6a5 ./tests/data/test35
4cc9fd6f31d0bb4dcb38e1565796e7ec5e48ea5ac9d3c1101de576be618786ba ./tests/data/test463 4cc9fd6f31d0bb4dcb38e1565796e7ec5e48ea5ac9d3c1101de576be618786ba ./tests/data/test463

View File

@ -3,117 +3,55 @@
# #
# SPDX-License-Identifier: curl # SPDX-License-Identifier: curl
# #
# Input: cmdline docs markdown files, they get modified *in place* # Input: a cmdline docs markdown, it gets modified *in place*
#
# Strip off the leading meta-data/header part, remove all known curl symbols
# and long command line options. Also clean up whatever else the spell checker
# might have a problem with that we still deem is fine.
# #
# The main purpose is to strip off the leading meta-data part, but also to
# clean up whatever else the spell checker might have a problem with that we
# still deem is fine.
open(S, "<./docs/libcurl/symbols-in-versions") my $header = 1;
|| die "can't find symbols-in-versions"; while(1) {
while(<S>) { # set this if the markdown has no meta-data header to skip
if(/^([^ ]*) /) { if($ARGV[0] eq "--no-header") {
push @asyms, $1; shift @ARGV;
$header = 0;
}
else {
last;
} }
} }
close(S);
# init the opts table with "special" options not easy to figure out my $f = $ARGV[0];
my @aopts = (
'--ftp-ssl-reqd', # old alias
);
open(O, "<./docs/options-in-versions") open(F, "<$f") or die;
|| die "can't find options-in-versions";
while(<O>) { my $ignore = $header;
chomp; my $sepcount = 0;
if(/^([^ ]+)/) { my @out;
my $o = $1; while(<F>) {
push @aopts, $o; if(/^---/ && $header) {
if($o =~ /^--no-(.*)/) { if(++$sepcount == 2) {
# for the --no options, also make one without it $ignore = 0;
push @aopts, "--$1";
} }
elsif($o =~ /^--disable-(.*)/) {
# for the --disable options, also make the special ones
push @aopts, "--$1";
push @aopts, "--no-$1";
}
}
}
close(O);
open(C, "<./.github/scripts/spellcheck.curl")
|| die "can't find spellcheck.curl";
while(<C>) {
if(/^\#/) {
next; next;
} }
chomp; next if($ignore);
if(/^([^ ]+)/) {
push @asyms, $1; # strip out backticked words
} $_ =~ s/`[^`]+`//g;
# strip out all long command line options
$_ =~ s/--[a-z0-9-]+//g;
# strip out https URLs, we don't want them spellchecked
$_ =~ s!https://[a-z0-9\#_/.-]+!!gi;
push @out, $_;
} }
close(C); close(F);
# longest symbols first if(!$ignore) {
my @syms = sort { length($b) <=> length($a) } @asyms; open(O, ">$f") or die;
print O @out;
# longest cmdline options first close(O);
my @opts = sort { length($b) <=> length($a) } @aopts;
sub process {
my ($f) = @_;
my $ignore = 0;
my $sepcount = 0;
my $out;
my $line = 0;
open(F, "<$f") or die;
while(<F>) {
$line++;
if(/^---/ && ($line == 1)) {
$ignore = 1;
next;
}
elsif(/^---/ && $ignore) {
$ignore = 0;
next;
}
next if($ignore);
my $l = $_;
# strip out backticked words
$l =~ s/`[^`]+`//g;
# **bold**
$l =~ s/\*\*(\S.*?)\*\*//g;
# *italics*
$l =~ s/\*(\S.*?)\*//g;
# strip out https URLs, we don't want them spellchecked
$l =~ s!https://[a-z0-9\#_/.-]+!!gi;
$out .= $l;
}
close(F);
# cut out all known curl cmdline options
map { $out =~ s/$_//g; } (@opts);
# cut out all known curl symbols
map { $out =~ s/\b$_\b//g; } (@syms);
if(!$ignore) {
open(O, ">$f") or die;
print O $out;
close(O);
}
}
for my $f (@ARGV) {
process($f);
} }

86
.github/scripts/cleanspell.pl vendored Executable file
View File

@ -0,0 +1,86 @@
#!/usr/bin/env perl
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl
#
# Given: a libcurl curldown man page
# Outputs: the same file, minus the SYNOPSIS and the EXAMPLE sections
#
my $f = $ARGV[0];
open(F, "<$f") or die;
my @out;
my $ignore = 0;
while(<F>) {
if($_ =~ /^# (SYNOPSIS|EXAMPLE)/) {
$ignore = 1;
}
elsif($ignore && ($_ =~ /^# [A-Z]/)) {
$ignore = 0;
}
elsif(!$ignore) {
# **bold**
$_ =~ s/\*\*(\S.*?)\*\*//g;
# *italics*
$_ =~ s/\*(\S.*?)\*//g;
$_ =~ s/CURL(M|SH|U|H)code//g;
$_ =~ s/CURL_[A-Z0-9_]*//g;
$_ =~ s/CURLALTSVC_[A-Z0-9_]*//g;
$_ =~ s/CURLAUTH_[A-Z0-9_]*//g;
$_ =~ s/CURLE_[A-Z0-9_]*//g;
$_ =~ s/CURLFORM_[A-Z0-9_]*//g;
$_ =~ s/CURLFTP_[A-Z0-9_]*//g;
$_ =~ s/CURLFTPAUTH_[A-Z0-9_]*//g;
$_ =~ s/CURLFTPMETHOD_[A-Z0-9_]*//g;
$_ =~ s/CURLFTPSSL_[A-Z0-9_]*//g;
$_ =~ s/CURLGSSAPI_[A-Z0-9_]*//g;
$_ =~ s/CURLHEADER_[A-Z0-9_]*//g;
$_ =~ s/CURLINFO_[A-Z0-9_]*//g;
$_ =~ s/CURLM_[A-Z0-9_]*//g;
$_ =~ s/CURLMIMEOPT_[A-Z0-9_]*//g;
$_ =~ s/CURLMOPT_[A-Z0-9_]*//g;
$_ =~ s/CURLOPT_[A-Z0-9_]*//g;
$_ =~ s/CURLPIPE_[A-Z0-9_]*//g;
$_ =~ s/CURLPROTO_[A-Z0-9_]*//g;
$_ =~ s/CURLPROXY_[A-Z0-9_]*//g;
$_ =~ s/CURLPX_[A-Z0-9_]*//g;
$_ =~ s/CURLSHE_[A-Z0-9_]*//g;
$_ =~ s/CURLSHOPT_[A-Z0-9_]*//g;
$_ =~ s/CURLSSLOPT_[A-Z0-9_]*//g;
$_ =~ s/CURLSSH_[A-Z0-9_]*//g;
$_ =~ s/CURLSSLBACKEND_[A-Z0-9_]*//g;
$_ =~ s/CURLU_[A-Z0-9_]*//g;
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
#$_ =~ s/\bCURLU\b//g; # stand-alone CURLU
$_ =~ s/CURLUE_[A-Z0-9_]*//g;
$_ =~ s/CURLHE_[A-Z0-9_]*//g;
$_ =~ s/CURLWS_[A-Z0-9_]*//g;
$_ =~ s/CURLKH[A-Z0-9_]*//g;
$_ =~ s/CURLUPART_[A-Z0-9_]*//g;
$_ =~ s/CURLUSESSL_[A-Z0-9_]*//g;
$_ =~ s/CURLPAUSE_[A-Z0-9_]*//g;
$_ =~ s/CURLHSTS_[A-Z0-9_]*//g;
$_ =~ s/curl_global_([a-z_]*)//g;
$_ =~ s/curl_(strequal|strnequal|formadd|waitfd|formget|getdate|formfree)//g;
$_ =~ s/curl_easy_([a-z]*)//g;
$_ =~ s/curl_multi_([a-z_]*)//g;
$_ =~ s/curl_mime_(subparts|addpart|filedata|data_cb)//g;
$_ =~ s/curl_ws_(send|recv|meta)//g;
$_ =~ s/curl_url_(dup)//g;
$_ =~ s/curl_pushheader_by(name|num)//g;
$_ =~ s/libcurl-(env|ws)//g;
$_ =~ s/libcurl\\-(env|ws)//g;
$_ =~ s/(^|\W)((tftp|https|http|ftp):\/\/[a-z0-9\-._~%:\/?\#\[\]\@!\$&'()*+,;=\\]+)//gi;
push @out, $_;
}
}
close(F);
open(O, ">$f") or die;
for my $l (@out) {
print O $l;
}
close(O);

View File

@ -1,151 +0,0 @@
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl
#
# common variable types + structs
# callback typedefs
# public functions names
# some man page names
curl_fileinfo
curl_forms
curl_hstsentry
curl_httppost
curl_index
curl_khkey
curl_pushheaders
curl_waitfd
CURLcode
CURLformoption
CURLHcode
CURLMcode
CURLMsg
CURLSHcode
CURLUcode
curl_calloc_callback
curl_chunk_bgn_callback
curl_chunk_end_callback
curl_conv_callback
curl_debug_callback
curl_fnmatch_callback
curl_formget_callback
curl_free_callback
curl_hstsread_callback
curl_hstswrite_callback
curl_ioctl_callback
curl_malloc_callback
curl_multi_timer_callback
curl_opensocket_callback
curl_prereq_callback
curl_progress_callback
curl_push_callback
curl_read_callback
curl_realloc_callback
curl_resolver_start_callback
curl_seek_callback
curl_socket_callback
curl_sockopt_callback
curl_ssl_ctx_callback
curl_strdup_callback
curl_trailer_callback
curl_write_callback
curl_xferinfo_callback
curl_strequal
curl_strnequal
curl_mime_init
curl_mime_free
curl_mime_addpart
curl_mime_name
curl_mime_filename
curl_mime_type
curl_mime_encoder
curl_mime_data
curl_mime_filedata
curl_mime_data_cb
curl_mime_subparts
curl_mime_headers
curl_formadd
curl_formget
curl_formfree
curl_getdate
curl_getenv
curl_version
curl_easy_escape
curl_escape
curl_easy_unescape
curl_unescape
curl_free
curl_global_init
curl_global_init_mem
curl_global_cleanup
curl_global_trace
curl_global_sslset
curl_slist_append
curl_slist_free_all
curl_getdate
curl_share_init
curl_share_setopt
curl_share_cleanup
curl_version_info
curl_easy_strerror
curl_share_strerror
curl_easy_pause
curl_easy_ssls_import
curl_easy_ssls_export
curl_easy_init
curl_easy_setopt
curl_easy_perform
curl_easy_cleanup
curl_easy_getinfo
curl_easy_duphandle
curl_easy_reset
curl_easy_recv
curl_easy_send
curl_easy_upkeep
curl_easy_header
curl_easy_nextheader
curl_mprintf
curl_mfprintf
curl_msprintf
curl_msnprintf
curl_mvprintf
curl_mvfprintf
curl_mvsprintf
curl_mvsnprintf
curl_maprintf
curl_mvaprintf
curl_multi_init
curl_multi_add_handle
curl_multi_remove_handle
curl_multi_fdset
curl_multi_waitfds
curl_multi_wait
curl_multi_poll
curl_multi_wakeup
curl_multi_perform
curl_multi_cleanup
curl_multi_info_read
curl_multi_strerror
curl_multi_socket
curl_multi_socket_action
curl_multi_socket_all
curl_multi_timeout
curl_multi_setopt
curl_multi_assign
curl_multi_get_handles
curl_pushheader_bynum
curl_pushheader_byname
curl_multi_waitfds
curl_easy_option_by_name
curl_easy_option_by_id
curl_easy_option_next
curl_url
curl_url_cleanup
curl_url_dup
curl_url_get
curl_url_set
curl_url_strerror
curl_ws_recv
curl_ws_send
curl_ws_meta
libcurl-env
libcurl-ws

View File

@ -251,10 +251,8 @@ Feltzing
ffi ffi
filesize filesize
filesystem filesystem
FindCURL
FLOSS FLOSS
fnmatch fnmatch
footguns
formpost formpost
formposts formposts
Fortnite Fortnite
@ -951,6 +949,7 @@ winbuild
WinIDN WinIDN
WinLDAP WinLDAP
winsock winsock
winssl
Wireshark Wireshark
wolfSSH wolfSSH
wolfSSL wolfSSL

View File

@ -107,14 +107,26 @@ jobs:
persist-credentials: false persist-credentials: false
name: checkout name: checkout
- name: trim all *.md files in docs/ - name: trim all man page *.md files
run: .github/scripts/cleancmd.pl $(find docs -name "*.md") run: find docs -name "*.md" ! -name "_*" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl
- name: trim libcurl man page *.md files
run: find docs/libcurl \( -name "curl_*.md" -o -name "libcurl*.md" \) -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
- name: trim libcurl option man page *.md files
run: find docs/libcurl/opts -name "CURL*.md" -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
- name: trim cmdline docs markdown _*.md files
run: find docs/cmdline-opts -name "_*.md" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl --no-header
- name: trim docs/ markdown _*.md files
run: git ls-files docs/*.md docs/internals/*.md | xargs -n1 .github/scripts/cleancmd.pl --no-header
- name: setup the custom wordlist - name: setup the custom wordlist
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
- name: Check Spelling - name: Check Spelling
uses: rojopolis/spellcheck-github-actions@ed0756273a1658136c36d26e3d0353de35b98c8b # v0 uses: rojopolis/spellcheck-github-actions@9e0a5fb25a80b89c84899657949cbd6e17eb376c # v0
with: with:
config_path: .github/scripts/spellcheck.yaml config_path: .github/scripts/spellcheck.yaml

View File

@ -13,7 +13,6 @@ name: configure-vs-cmake
- '**/CMakeLists.txt' - '**/CMakeLists.txt'
- 'CMake/**' - 'CMake/**'
- 'lib/curl_config.h.cmake' - 'lib/curl_config.h.cmake'
- 'tests/cmake/**'
- '.github/scripts/cmp-config.pl' - '.github/scripts/cmp-config.pl'
- '.github/workflows/configure-vs-cmake.yml' - '.github/workflows/configure-vs-cmake.yml'
@ -26,7 +25,6 @@ name: configure-vs-cmake
- '**/CMakeLists.txt' - '**/CMakeLists.txt'
- 'CMake/**' - 'CMake/**'
- 'lib/curl_config.h.cmake' - 'lib/curl_config.h.cmake'
- 'tests/cmake/**'
- '.github/scripts/cmp-config.pl' - '.github/scripts/cmp-config.pl'
- '.github/workflows/configure-vs-cmake.yml' - '.github/workflows/configure-vs-cmake.yml'
@ -48,7 +46,7 @@ jobs:
- name: 'run cmake' - name: 'run cmake'
run: | run: |
cmake -B bld-cm -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF -DCURL_BROTLI=OFF cmake -B bld-cm -DCURL_USE_LIBPSL=OFF -DCURL_BROTLI=OFF
- name: 'configure log' - name: 'configure log'
run: cat bld-am/config.log 2>/dev/null || true run: cat bld-am/config.log 2>/dev/null || true
@ -88,7 +86,7 @@ jobs:
- name: 'run cmake' - name: 'run cmake'
run: | run: |
cmake -B bld-cm -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF -DCURL_DISABLE_LDAP=ON \ cmake -B bld-cm -DCURL_USE_LIBPSL=OFF -DCURL_DISABLE_LDAP=ON \
-DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \ -DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
-DCURL_BROTLI=OFF \ -DCURL_BROTLI=OFF \
-DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH2=OFF
@ -128,7 +126,7 @@ jobs:
- name: 'run cmake' - name: 'run cmake'
run: | run: |
cmake -B bld-cm -DCURL_WERROR=ON -DCURL_USE_SCHANNEL=ON -DCURL_USE_LIBPSL=OFF \ cmake -B bld-cm -DCURL_USE_SCHANNEL=ON -DCURL_USE_LIBPSL=OFF \
-DCMAKE_SYSTEM_NAME=Windows \ -DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER_TARGET="${TRIPLET}" \ -DCMAKE_C_COMPILER_TARGET="${TRIPLET}" \
-DCMAKE_C_COMPILER="${TRIPLET}-gcc" -DCMAKE_C_COMPILER="${TRIPLET}-gcc"

View File

@ -42,7 +42,7 @@ env:
CW_NOPKG: '1' CW_NOPKG: '1'
jobs: jobs:
linux-glibc-gcc: linux-glibc-llvm:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 30 timeout-minutes: 30
steps: steps:
@ -55,7 +55,7 @@ jobs:
run: | run: |
git clone --depth 1 https://github.com/curl/curl-for-win git clone --depth 1 https://github.com/curl/curl-for-win
mv curl-for-win/* . mv curl-for-win/* .
export CW_CONFIG='-main-werror-linux-a64-x64-gcc' export CW_CONFIG='-main-werror-linux-a64-x64'
export CW_REVISION='${{ github.sha }}' export CW_REVISION='${{ github.sha }}'
DOCKER_IMAGE='debian:bookworm-slim' DOCKER_IMAGE='debian:bookworm-slim'
export DOCKER_CONTENT_TRUST=1 export DOCKER_CONTENT_TRUST=1
@ -137,27 +137,3 @@ jobs:
'^(CW_|GITHUB_)') \ '^(CW_|GITHUB_)') \
"${DOCKER_IMAGE}" \ "${DOCKER_IMAGE}" \
sh -c ./_ci-linux-debian.sh sh -c ./_ci-linux-debian.sh
win-gcc-libssh-zlibng-x86:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
persist-credentials: false
path: 'curl'
fetch-depth: 8
- name: 'build'
run: |
git clone --depth 1 https://github.com/curl/curl-for-win
mv curl-for-win/* .
export CW_CONFIG='-main-werror-win-x86-gcc-libssh1-zlibng'
export CW_REVISION='${{ github.sha }}'
. ./_versions.sh
docker trust inspect --pretty "${DOCKER_IMAGE}"
time docker pull "${DOCKER_IMAGE}"
docker images --digests
time docker run --volume "$(pwd):$(pwd)" --workdir "$(pwd)" \
--env-file <(env | grep -a -E \
'^(CW_|GITHUB_)') \
"${DOCKER_IMAGE}" \
sh -c ./_ci-linux-debian.sh

View File

@ -19,9 +19,6 @@ concurrency:
permissions: {} permissions: {}
env:
MAKEFLAGS: -j 5
jobs: jobs:
maketgz-and-verify-in-tree: maketgz-and-verify-in-tree:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -58,9 +55,9 @@ jobs:
tar xvf curl-99.98.97.tar.gz tar xvf curl-99.98.97.tar.gz
pushd curl-99.98.97 pushd curl-99.98.97
./configure --prefix=$HOME/temp --without-ssl --without-libpsl ./configure --prefix=$HOME/temp --without-ssl --without-libpsl
make make -j5
make test-ci make -j5 test-ci
make install make -j5 install
popd popd
# basic check of the installed files # basic check of the installed files
bash scripts/installcheck.sh $HOME/temp bash scripts/installcheck.sh $HOME/temp
@ -83,8 +80,8 @@ jobs:
mkdir build mkdir build
pushd build pushd build
../curl-99.98.97/configure --without-ssl --without-libpsl ../curl-99.98.97/configure --without-ssl --without-libpsl
make make -j5
make test-ci make -j5 test-ci
popd popd
rm -rf build rm -rf build
rm -rf curl-99.98.97 rm -rf curl-99.98.97
@ -106,9 +103,9 @@ jobs:
mkdir build mkdir build
pushd build pushd build
../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" --without-libpsl ../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" --without-libpsl
make make -j5
make test-ci make -j5 test-ci
make install make -j5 install
verify-out-of-tree-cmake: verify-out-of-tree-cmake:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -125,7 +122,7 @@ jobs:
tar xvf curl-99.98.97.tar.gz tar xvf curl-99.98.97.tar.gz
pushd curl-99.98.97 pushd curl-99.98.97
cmake -B build -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF cmake -B build -DCURL_WERROR=ON -DCURL_USE_LIBPSL=OFF
make -C build make -C build -j5
missing-files: missing-files:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -162,33 +159,3 @@ jobs:
mv curl-9.10.11.tar.gz _verify mv curl-9.10.11.tar.gz _verify
cd _verify cd _verify
../scripts/verify-release curl-9.10.11.tar.gz ../scripts/verify-release curl-9.10.11.tar.gz
cmake-integration:
name: 'cmake-integration-on-${{ matrix.image }}'
runs-on: ${{ matrix.image }}
timeout-minutes: 10
env:
CC: clang
CMAKE_GENERATOR: Ninja
strategy:
fail-fast: false
matrix:
image: [ubuntu-latest, macos-latest]
steps:
- name: 'install prereqs'
run: |
if [[ '${{ matrix.image }}' = *'ubuntu'* ]]; then
sudo apt-get -o Dpkg::Use-Pty=0 install ninja-build libpsl-dev libssl-dev
else
brew install ninja libpsl openssl
fi
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
persist-credentials: false
- name: 'via FetchContent'
run: ./tests/cmake/test.sh FetchContent
- name: 'via add_subdirectory'
run: ./tests/cmake/test.sh add_subdirectory
- name: 'via find_package'
run: ./tests/cmake/test.sh find_package

View File

@ -39,17 +39,17 @@ permissions: {}
env: env:
MAKEFLAGS: -j 5 MAKEFLAGS: -j 5
# handled in renovate.json # handled in renovate.json
openssl-version: 3.4.1 openssl-version: 3.4.0
# handled in renovate.json # handled in renovate.json
quictls-version: 3.3.0 quictls-version: 3.3.0
# renovate: datasource=github-tags depName=gnutls/gnutls versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=gnutls/gnutls versioning=semver registryUrl=https://github.com
gnutls-version: 3.8.9 gnutls-version: 3.8.8
# renovate: datasource=github-tags depName=wolfSSL/wolfssl versioning=semver extractVersion=^v?(?<version>.+)-stable$ registryUrl=https://github.com # renovate: datasource=github-tags depName=wolfSSL/wolfssl versioning=semver extractVersion=^v?(?<version>.+)-stable$ registryUrl=https://github.com
wolfssl-version: 5.7.6 wolfssl-version: 5.7.6
# renovate: datasource=github-tags depName=ngtcp2/nghttp3 versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=ngtcp2/nghttp3 versioning=semver registryUrl=https://github.com
nghttp3-version: 1.8.0 nghttp3-version: 1.7.0
# renovate: datasource=github-tags depName=ngtcp2/ngtcp2 versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=ngtcp2/ngtcp2 versioning=semver registryUrl=https://github.com
ngtcp2-version: 1.11.0 ngtcp2-version: 1.10.0
# renovate: datasource=github-tags depName=nghttp2/nghttp2 versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=nghttp2/nghttp2 versioning=semver registryUrl=https://github.com
nghttp2-version: 1.64.0 nghttp2-version: 1.64.0
# renovate: datasource=github-tags depName=cloudflare/quiche versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=cloudflare/quiche versioning=semver registryUrl=https://github.com
@ -232,7 +232,6 @@ jobs:
--with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug --disable-ntlm --with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug --disable-ntlm
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
--with-openssl=$HOME/quictls/build --enable-ssls-export --with-openssl=$HOME/quictls/build --enable-ssls-export
--with-libuv
- name: gnutls - name: gnutls
PKG_CONFIG_PATH: '$HOME/gnutls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig' PKG_CONFIG_PATH: '$HOME/gnutls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig'
@ -241,7 +240,6 @@ jobs:
--with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug --with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
--with-gnutls=$HOME/gnutls/build --enable-ssls-export --with-gnutls=$HOME/gnutls/build --enable-ssls-export
--with-libuv
- name: wolfssl - name: wolfssl
PKG_CONFIG_PATH: '$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig' PKG_CONFIG_PATH: '$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig'
@ -251,7 +249,6 @@ jobs:
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
--with-wolfssl=$HOME/wolfssl/build --with-wolfssl=$HOME/wolfssl/build
--enable-ech --enable-ssls-export --enable-ech --enable-ssls-export
--with-libuv
- name: wolfssl - name: wolfssl
PKG_CONFIG_PATH: '$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig' PKG_CONFIG_PATH: '$HOME/wolfssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig'
@ -260,7 +257,6 @@ jobs:
-DTEST_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx" -DTEST_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx"
-DHTTPD_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx" -DHTTPD_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx"
-DUSE_ECH=ON -DUSE_ECH=ON
-DCURL_USE_LIBUV=ON
- name: openssl-quic - name: openssl-quic
PKG_CONFIG_PATH: '$HOME/openssl/build/lib64/pkgconfig' PKG_CONFIG_PATH: '$HOME/openssl/build/lib64/pkgconfig'
@ -270,7 +266,6 @@ jobs:
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
--with-openssl=$HOME/openssl/build --with-openssl-quic --with-openssl=$HOME/openssl/build --with-openssl-quic
--with-nghttp3=$HOME/nghttp3/build --with-nghttp3=$HOME/nghttp3/build
--with-libuv
- name: quiche - name: quiche
configure: >- configure: >-
@ -280,7 +275,6 @@ jobs:
--with-quiche=$HOME/quiche/target/release --with-quiche=$HOME/quiche/target/release
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx" --with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
--with-ca-fallback --with-ca-fallback
--with-libuv
- name: quiche - name: quiche
PKG_CONFIG_PATH: '$HOME/quiche/target/release' PKG_CONFIG_PATH: '$HOME/quiche/target/release'
@ -290,7 +284,6 @@ jobs:
-DTEST_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx" -DTEST_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx"
-DHTTPD_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx" -DHTTPD_NGHTTPX="$HOME/nghttp2/build/bin/nghttpx"
-DCURL_CA_FALLBACK=ON -DCURL_CA_FALLBACK=ON
-DCURL_USE_LIBUV=ON
steps: steps:
- name: 'install prereqs' - name: 'install prereqs'
@ -302,7 +295,7 @@ jobs:
libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \
nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \
libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \
texinfo texlive texlive-extra-utils autopoint libev-dev libuv1-dev \ texinfo texlive texlive-extra-utils autopoint libev-dev \
apache2 apache2-dev libnghttp2-dev vsftpd apache2 apache2-dev libnghttp2-dev vsftpd
python3 -m venv $HOME/venv python3 -m venv $HOME/venv
echo 'CC=gcc-12' >> $GITHUB_ENV echo 'CC=gcc-12' >> $GITHUB_ENV
@ -315,7 +308,7 @@ jobs:
cache-name: cache-quictls-no-deprecated cache-name: cache-quictls-no-deprecated
with: with:
path: ~/quictls/build path: ~/quictls/build
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.quictls-version }}-quic1 key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.quictls-version }}
fail-on-cache-miss: true fail-on-cache-miss: true
- name: 'cache gnutls' - name: 'cache gnutls'
@ -434,45 +427,46 @@ jobs:
export PKG_CONFIG_PATH="${{ matrix.build.PKG_CONFIG_PATH }}" export PKG_CONFIG_PATH="${{ matrix.build.PKG_CONFIG_PATH }}"
fi fi
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake -B bld -G Ninja \ cmake -B . -G Ninja \
-DCMAKE_C_COMPILER_TARGET=$(uname -m)-pc-linux-gnu -DBUILD_STATIC_LIBS=ON \ -DCMAKE_C_COMPILER_TARGET=$(uname -m)-pc-linux-gnu -DBUILD_STATIC_LIBS=ON \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
${{ matrix.build.generate }} ${{ matrix.build.generate }}
else else
mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \ ./configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
--disable-dependency-tracking \
${{ matrix.build.configure }} ${{ matrix.build.configure }}
fi fi
- name: 'configure log' - name: 'configure log'
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true run: cat config.log CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
- name: 'curl_config.h' - name: 'curl_config.h'
run: | run: |
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::' echo '::group::raw'; cat lib/curl_config.h || true; echo '::endgroup::'
grep -F '#define' bld/lib/curl_config.h | sort || true grep -F '#define' lib/curl_config.h | sort || true
- name: 'test configs' - name: 'test configs'
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true run: |
cat tests/config || true
cat tests/http/config.ini || true
- name: 'build' - name: 'build'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose cmake --build . --verbose
else else
make -C bld V=1 make V=1
fi fi
- name: 'check curl -V output' - name: 'check curl -V output'
run: bld/src/curl -V run: ./src/curl -V
- name: 'build tests' - name: 'build tests'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target testdeps cmake --build . --verbose --target testdeps
else else
make -C bld V=1 -C tests make V=1 -C tests
fi fi
- name: 'install test prereqs' - name: 'install test prereqs'
@ -486,9 +480,9 @@ jobs:
run: | run: |
source $HOME/venv/bin/activate source $HOME/venv/bin/activate
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target test-ci cmake --build . --verbose --target test-ci
else else
make -C bld V=1 test-ci make V=1 test-ci
fi fi
- name: 'install pytest prereqs' - name: 'install pytest prereqs'
@ -496,23 +490,23 @@ jobs:
source $HOME/venv/bin/activate source $HOME/venv/bin/activate
python3 -m pip install -r tests/http/requirements.txt python3 -m pip install -r tests/http/requirements.txt
- name: 'run pytest event based' - name: 'run pytest'
env: env:
CURL_TEST_EVENT: 1 TFLAGS: '${{ matrix.build.tflags }}'
CURL_CI: github CURL_CI: github
PYTEST_ADDOPTS: '--color=yes' PYTEST_ADDOPTS: '--color=yes'
run: | run: |
source $HOME/venv/bin/activate source $HOME/venv/bin/activate
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target curl-pytest-ci cmake --build . --verbose --target curl-pytest-ci
else else
make -C bld V=1 pytest-ci make V=1 pytest-ci
fi fi
- name: 'build examples' - name: 'build examples'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target curl-examples cmake --build . --verbose --target curl-examples
else else
make -C bld V=1 examples make V=1 examples
fi fi

View File

@ -91,14 +91,12 @@ jobs:
echo '::group::raw'; cat bld-1/lib/curl_config.h || true; echo '::endgroup::' echo '::group::raw'; cat bld-1/lib/curl_config.h || true; echo '::endgroup::'
grep -F '#define' bld-1/lib/curl_config.h | sort || true grep -F '#define' bld-1/lib/curl_config.h | sort || true
# when this job can get a libssh version 0.9.0 or later, this should get - name: 'cmake generate (out-of-tree, c-ares, libssh, zstd, gssapi)'
# that enabled again
- name: 'cmake generate (out-of-tree, c-ares, zstd, gssapi)'
run: | run: |
mkdir bld-cares mkdir bld-cares
cd bld-cares cd bld-cares
cmake .. -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \ cmake .. -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON -DBUILD_SHARED_LIBS=ON \
-DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF -DUSE_LIBRTMP=ON \ -DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON -DUSE_LIBRTMP=ON \
-DCURL_LIBCURL_VERSIONED_SYMBOLS=ON -DCURL_LIBCURL_VERSIONED_SYMBOLS=ON
- name: 'cmake curl_config.h' - name: 'cmake curl_config.h'
@ -123,12 +121,12 @@ jobs:
- name: 'autoreconf' - name: 'autoreconf'
run: autoreconf -if run: autoreconf -if
- name: 'configure (out-of-tree, c-ares, libssh2, zstd, gssapi)' - name: 'configure (out-of-tree, c-ares, libssh, zstd, gssapi)'
run: | run: |
mkdir bld-am mkdir bld-am
cd bld-am cd bld-am
../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \ ../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
--with-openssl --enable-ares --with-libssh2 --with-zstd --with-gssapi --with-librtmp \ --with-openssl --enable-ares --with-libssh --with-zstd --with-gssapi --with-librtmp \
--prefix="$PWD"/../install-am --prefix="$PWD"/../install-am
- name: 'autoconf curl_config.h' - name: 'autoconf curl_config.h'

View File

@ -51,9 +51,9 @@ env:
# renovate: datasource=github-tags depName=nibanks/msh3 versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=nibanks/msh3 versioning=semver registryUrl=https://github.com
msh3-version: 0.6.0 msh3-version: 0.6.0
# renovate: datasource=github-tags depName=awslabs/aws-lc versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=awslabs/aws-lc versioning=semver registryUrl=https://github.com
awslc-version: 1.45.0 awslc-version: 1.42.0
# handled in renovate.json # handled in renovate.json
openssl-version: 3.4.1 openssl-version: 3.4.0
# handled in renovate.json # handled in renovate.json
quictls-version: 3.3.0 quictls-version: 3.3.0
# renovate: datasource=github-tags depName=rustls/rustls-ffi versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=rustls/rustls-ffi versioning=semver registryUrl=https://github.com
@ -164,6 +164,12 @@ jobs:
install_steps: pytest install_steps: pytest
configure: CFLAGS=-std=gnu89 --with-openssl --enable-debug configure: CFLAGS=-std=gnu89 --with-openssl --enable-debug
- name: openssl arm
install_packages: zlib1g-dev
install_steps: pytest
configure: CFLAGS=-std=gnu89 --with-openssl --enable-debug
image: 'ubuntu-24.04-arm'
- name: openssl -O3 valgrind - name: openssl -O3 valgrind
install_packages: zlib1g-dev valgrind install_packages: zlib1g-dev valgrind
configure: CFLAGS=-O3 --with-openssl --enable-debug configure: CFLAGS=-O3 --with-openssl --enable-debug
@ -286,13 +292,9 @@ jobs:
# Docker Hub image that `container-job` executes in # Docker Hub image that `container-job` executes in
container: 'andy5995/slackware-build-essential:15.0' container: 'andy5995/slackware-build-essential:15.0'
- name: Alpine MUSL https-rr - name: Alpine MUSL
configure: --enable-debug --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl --enable-threaded-resolver --enable-ares --enable-httpsrr configure: --enable-debug --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl
container: 'alpine:3.20' container: 'alpine:3.18'
- name: Alpine MUSL c-ares https-rr
configure: --enable-debug --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl --disable-threaded-resolver --enable-ares --enable-httpsrr --disable-unity
container: 'alpine:3.20'
steps: steps:
- name: 'install prereqs' - name: 'install prereqs'
@ -304,8 +306,7 @@ jobs:
libtool autoconf automake pkgconf ninja-build \ libtool autoconf automake pkgconf ninja-build \
${{ matrix.build.install_steps != 'skipall' && matrix.build.install_steps != 'skiprun' && 'stunnel4' || '' }} \ ${{ matrix.build.install_steps != 'skipall' && matrix.build.install_steps != 'skiprun' && 'stunnel4' || '' }} \
libpsl-dev libbrotli-dev libzstd-dev \ libpsl-dev libbrotli-dev libzstd-dev \
${{ matrix.build.install_packages }} \ ${{ matrix.build.install_packages }}
${{ contains(matrix.build.install_steps, 'pytest') && 'apache2 apache2-dev libnghttp2-dev vsftpd' || '' }}
python3 -m venv $HOME/venv python3 -m venv $HOME/venv
- name: 'install prereqs' - name: 'install prereqs'
@ -320,15 +321,27 @@ jobs:
${{ matrix.build.install_packages }} ${{ matrix.build.install_packages }}
python3 -m venv $HOME/venv python3 -m venv $HOME/venv
- name: 'install prereqs for pytest'
if: contains(matrix.build.install_steps, 'pytest')
run: |
sudo apt-get -o Dpkg::Use-Pty=0 install apache2 apache2-dev libnghttp2-dev vsftpd
- name: 'install dependencies' - name: 'install dependencies'
if: startsWith(matrix.build.container, 'alpine') if: startsWith(matrix.build.container, 'alpine')
run: | run: |
apk add --no-cache build-base autoconf automake libtool perl openssl-dev \ apk add --no-cache build-base autoconf automake libtool perl openssl-dev libssh2-dev \
libssh2-dev zlib-dev brotli-dev zstd-dev libidn2-dev openldap-dev \ zlib-dev brotli-dev zstd-dev libidn2-dev openldap-dev heimdal-dev libpsl-dev \
heimdal-dev libpsl-dev c-ares-dev \
py3-impacket py3-asn1 py3-six py3-pycryptodomex \ py3-impacket py3-asn1 py3-six py3-pycryptodomex \
perl-time-hires openssh stunnel sudo git perl-time-hires openssh stunnel sudo git
- name: 'fix kernel mmap rnd bits'
# Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
# high-entropy ASLR in much newer kernels that GitHub runners are
# using leading to random crashes: https://reviews.llvm.org/D148280
# See https://github.com/actions/runner-images/issues/9491
continue-on-error: true
run: sudo sysctl vm.mmap_rnd_bits=28
- name: 'cache bearssl' - name: 'cache bearssl'
if: contains(matrix.build.install_steps, 'bearssl') if: contains(matrix.build.install_steps, 'bearssl')
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4 uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
@ -556,7 +569,7 @@ jobs:
cd $HOME cd $HOME
curl -sSf --compressed https://sh.rustup.rs/ | sh -s -- -y curl -sSf --compressed https://sh.rustup.rs/ | sh -s -- -y
source $HOME/.cargo/env source $HOME/.cargo/env
rustup toolchain install stable --profile minimal rustup toolchain install nightly
- name: 'build rustls' - name: 'build rustls'
if: contains(matrix.build.install_steps, 'rustls') && steps.cache-rustls.outputs.cache-hit != 'true' if: contains(matrix.build.install_steps, 'rustls') && steps.cache-rustls.outputs.cache-hit != 'true'
@ -584,42 +597,41 @@ jobs:
- name: 'configure' - name: 'configure'
run: | run: |
[[ '${{ matrix.build.install_steps }}' = *'awslc'* ]] && sudo apt-get -o Dpkg::Use-Pty=0 purge libssl-dev [[ '${{ matrix.build.install_steps }}' = *'awslc'* ]] && sudo apt remove --yes libssl-dev
if [ -n '${{ matrix.build.PKG_CONFIG_PATH }}' ]; then if [ -n '${{ matrix.build.PKG_CONFIG_PATH }}' ]; then
export PKG_CONFIG_PATH="${{ matrix.build.PKG_CONFIG_PATH }}" export PKG_CONFIG_PATH="${{ matrix.build.PKG_CONFIG_PATH }}"
fi fi
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake -B bld -G Ninja \ cmake -B . -G Ninja \
-DCMAKE_INSTALL_PREFIX="$HOME/curl" \
-DCMAKE_C_COMPILER_TARGET=$(uname -m)-pc-linux-gnu -DBUILD_STATIC_LIBS=ON \ -DCMAKE_C_COMPILER_TARGET=$(uname -m)-pc-linux-gnu -DBUILD_STATIC_LIBS=ON \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
${{ matrix.build.generate }} ${{ matrix.build.generate }}
else else
mkdir bld && cd bld && \
${{ matrix.build.configure-prefix }} \ ${{ matrix.build.configure-prefix }} \
../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \ ./configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
--disable-dependency-tracking \
${{ matrix.build.configure }} ${{ matrix.build.configure }}
fi fi
- name: 'configure log' - name: 'configure log'
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true run: cat config.log CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
- name: 'curl_config.h' - name: 'curl_config.h'
run: | run: |
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::' echo '::group::raw'; cat lib/curl_config.h || true; echo '::endgroup::'
grep -F '#define' bld/lib/curl_config.h | sort || true grep -F '#define' lib/curl_config.h | sort || true
- name: 'test configs' - name: 'test configs'
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true run: |
cat tests/config || true
cat tests/http/config.ini || true
- name: 'build' - name: 'build'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
${{ matrix.build.make-prefix }} cmake --build bld --verbose ${{ matrix.build.make-prefix }} cmake --build . --verbose
else else
${{ matrix.build.make-prefix }} make -C bld V=1 ${{ matrix.build.make-custom-target }} ${{ matrix.build.make-prefix }} make V=1 ${{ matrix.build.make-custom-target }}
fi fi
- name: 'single-use function check' - name: 'single-use function check'
@ -627,27 +639,27 @@ jobs:
run: | run: |
git config --global --add safe.directory "*" git config --global --add safe.directory "*"
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
libcurla=bld/lib/libcurl.a libcurla=lib/libcurl.a
else else
libcurla=bld/lib/.libs/libcurl.a libcurla=lib/.libs/libcurl.a
fi fi
./scripts/singleuse.pl --unit ${libcurla} ./scripts/singleuse.pl --unit ${libcurla}
- name: 'check curl -V output' - name: 'check curl -V output'
if: ${{ matrix.build.make-custom-target != 'tidy' }} if: ${{ matrix.build.make-custom-target != 'tidy' }}
run: bld/src/curl -V run: ./src/curl -V
- name: 'cmake install' - name: 'cmake install'
if: ${{ matrix.build.generate }} if: ${{ matrix.build.generate }}
run: cmake --install bld --strip run: cmake --install . --prefix $HOME/curl --strip
- name: 'build tests' - name: 'build tests'
if: ${{ matrix.build.install_steps != 'skipall' }} if: ${{ matrix.build.install_steps != 'skipall' }}
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target testdeps cmake --build . --verbose --target testdeps
else else
make -C bld V=1 -C tests make V=1 -C tests
fi fi
- name: 'install test prereqs' - name: 'install test prereqs'
@ -674,9 +686,9 @@ jobs:
fi fi
[ -x "$HOME/venv/bin/activate" ] && source $HOME/venv/bin/activate [ -x "$HOME/venv/bin/activate" ] && source $HOME/venv/bin/activate
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target ${{ matrix.build.torture && 'test-torture' || 'test-ci' }} cmake --build . --verbose --target ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
else else
make -C bld V=1 ${{ matrix.build.torture && 'test-torture' || 'test-ci' }} make V=1 ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
fi fi
- name: 'install pytest prereqs' - name: 'install pytest prereqs'
@ -688,21 +700,22 @@ jobs:
- name: 'run pytest' - name: 'run pytest'
if: contains(matrix.build.install_steps, 'pytest') if: contains(matrix.build.install_steps, 'pytest')
env: env:
TFLAGS: '${{ matrix.build.tflags }}'
CURL_CI: github CURL_CI: github
PYTEST_ADDOPTS: '--color=yes' PYTEST_ADDOPTS: '--color=yes'
run: | run: |
[ -x "$HOME/venv/bin/activate" ] && source $HOME/venv/bin/activate [ -x "$HOME/venv/bin/activate" ] && source $HOME/venv/bin/activate
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target curl-pytest-ci cmake --build . --verbose --target curl-pytest-ci
else else
make -C bld V=1 pytest-ci make V=1 pytest-ci
fi fi
- name: 'build examples' - name: 'build examples'
if: ${{ matrix.build.make-custom-target != 'tidy' }} if: ${{ matrix.build.make-custom-target != 'tidy' }}
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
${{ matrix.build.make-prefix }} cmake --build bld --verbose --target curl-examples ${{ matrix.build.make-prefix }} cmake --build . --verbose --target curl-examples
else else
${{ matrix.build.make-prefix }} make -C bld V=1 examples ${{ matrix.build.make-prefix }} make V=1 examples
fi fi

View File

@ -47,8 +47,8 @@ permissions: {}
# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`. # newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
env: env:
MAKEFLAGS: -j 4
LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings
MAKEFLAGS: -j 4
jobs: jobs:
macos: macos:
@ -123,10 +123,9 @@ jobs:
compiler: clang compiler: clang
configure: --enable-debug --with-openssl=$(brew --prefix openssl) configure: --enable-debug --with-openssl=$(brew --prefix openssl)
tflags: --test-event tflags: --test-event
- name: 'quictls libssh2 !ldap 10.15' - name: 'OpenSSL libssh2 !ldap 10.15'
compiler: clang compiler: clang
install: quictls configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix openssl)
configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix quictls) LDFLAGS="${LDFLAGS} -L$(brew --prefix quictls)/lib"
macos-version-min: '10.15' macos-version-min: '10.15'
# cmake # cmake
- name: 'OpenSSL gsasl rtmp AppleIDN' - name: 'OpenSSL gsasl rtmp AppleIDN'
@ -136,10 +135,9 @@ jobs:
install: llvm install: llvm
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DUSE_APPLE_IDN=ON -DCURL_CLANG_TIDY=ON -DCLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DUSE_APPLE_IDN=ON -DCURL_CLANG_TIDY=ON -DCLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy
clang-tidy: true clang-tidy: true
chkprefill: _chkprefill - name: 'OpenSSL +static libssh +examples'
- name: 'quictls +static libssh +examples' install: libssh
install: quictls libssh generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix quictls) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
- name: 'SecureTransport debug' - name: 'SecureTransport debug'
generate: -DCURL_USE_SECTRANSP=ON -DENABLE_DEBUG=ON generate: -DCURL_USE_SECTRANSP=ON -DENABLE_DEBUG=ON
macos-version-min: '10.8' macos-version-min: '10.8'
@ -149,9 +147,9 @@ jobs:
- name: 'wolfSSL !ldap brotli zstd' - name: 'wolfSSL !ldap brotli zstd'
install: brotli wolfssl zstd install: brotli wolfssl zstd
generate: -DCURL_USE_WOLFSSL=ON -DCURL_DISABLE_LDAP=ON -DUSE_ECH=ON generate: -DCURL_USE_WOLFSSL=ON -DCURL_DISABLE_LDAP=ON -DUSE_ECH=ON
- name: 'mbedTLS openldap brotli zstd' - name: 'mbedTLS !ldap brotli zstd'
install: brotli mbedtls zstd openldap install: brotli mbedtls zstd
generate: -DCURL_USE_MBEDTLS=ON -DLDAP_INCLUDE_DIR="$(brew --prefix openldap)/include" -DLDAP_LIBRARY="$(brew --prefix openldap)/lib/libldap.dylib" -DLDAP_LBER_LIBRARY="$(brew --prefix openldap)/lib/liblber.dylib" generate: -DCURL_USE_MBEDTLS=ON -DCURL_DISABLE_LDAP=ON
- name: 'GnuTLS !ldap krb5' - name: 'GnuTLS !ldap krb5'
install: gnutls nettle krb5 install: gnutls nettle krb5
generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_USE_GSSAPI=ON -DGSS_ROOT_DIR=$(brew --prefix krb5) -DCURL_DISABLE_LDAP=ON -DUSE_SSLS_EXPORT=ON generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_USE_GSSAPI=ON -DGSS_ROOT_DIR=$(brew --prefix krb5) -DCURL_DISABLE_LDAP=ON -DUSE_SSLS_EXPORT=ON
@ -185,12 +183,11 @@ jobs:
run: | run: |
echo ${{ matrix.build.generate && 'ninja' || 'automake libtool' }} \ echo ${{ matrix.build.generate && 'ninja' || 'automake libtool' }} \
pkgconf libpsl libssh2 \ pkgconf libpsl libssh2 \
${{ !matrix.build.clang-tidy && 'libnghttp2 stunnel' || '' }} \ ${{ !matrix.build.clang-tidy && 'nghttp2 stunnel' || '' }} \
${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
- name: 'brew unlink openssl' - name: 'brew unlink openssl'
if: ${{ contains(matrix.build.install, 'libressl') || contains(matrix.build.install, 'quictls') }}
run: | run: |
if test -d $(brew --prefix)/include/openssl; then if test -d $(brew --prefix)/include/openssl; then
brew unlink openssl brew unlink openssl
@ -231,20 +228,11 @@ jobs:
fi fi
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
for _chkprefill in '' ${{ matrix.build.chkprefill }}; do [ -n '${{ matrix.build.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.build.macos-version-min }}'
options='' cmake -B bld -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
[ -n '${{ matrix.build.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.build.macos-version-min }}' -DCMAKE_OSX_SYSROOT="${sysroot}" \
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF' -DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
cmake -B "bld${_chkprefill}" -G Ninja -D_CURL_PREFILL=ON \ ${{ matrix.build.generate }} ${options}
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
-DCMAKE_OSX_SYSROOT="${sysroot}" \
-DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
${{ matrix.build.generate }} ${options}
done
if [ -d bld_chkprefill ] && ! diff -u bld/lib/curl_config.h bld_chkprefill/lib/curl_config.h; then
echo '::group::reference configure log'; cat bld_chkprefill/CMakeFiles/CMake*.yaml 2>/dev/null || true; echo '::endgroup::'
false
fi
else else
export CFLAGS export CFLAGS
if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then
@ -315,6 +303,7 @@ jobs:
if [ -z '${{ matrix.build.torture }}' ]; then if [ -z '${{ matrix.build.torture }}' ]; then
TFLAGS+=' ~2037 ~2041' # flaky TFLAGS+=' ~2037 ~2041' # flaky
if [[ '${{ matrix.compiler }}' = 'gcc'* ]]; then if [[ '${{ matrix.compiler }}' = 'gcc'* ]]; then
TFLAGS+=' ~RTSP' # 567 568 569 570 571 572 577 689 3100
TFLAGS+=' ~1156 ~1539' # HTTP Content-Range, Content-Length TFLAGS+=' ~1156 ~1539' # HTTP Content-Range, Content-Length
if [[ -n '${{ matrix.build.configure }}' || \ if [[ -n '${{ matrix.build.configure }}' || \
'${{ matrix.build.generate }}' = *'-DCURL_USE_SECTRANSP=ON'* ]]; then '${{ matrix.build.generate }}' = *'-DCURL_USE_SECTRANSP=ON'* ]]; then
@ -345,7 +334,7 @@ jobs:
if: ${{ contains(matrix.build.name, '+examples') }} if: ${{ contains(matrix.build.name, '+examples') }}
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld --verbose --target curl-examples cmake --build bld --target curl-examples --verbose
else else
make -C bld examples V=1 make -C bld examples V=1
fi fi
@ -454,8 +443,7 @@ jobs:
[ '${{ matrix.config }}' = 'SecureTransport' ] && options+=' -DCURL_USE_SECTRANSP=ON' [ '${{ matrix.config }}' = 'SecureTransport' ] && options+=' -DCURL_USE_SECTRANSP=ON'
[ -n '${{ matrix.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.macos-version-min }}' [ -n '${{ matrix.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.macos-version-min }}'
# would pick up nghttp2, libidn2, and libssh2 # would pick up nghttp2, libidn2, and libssh2
cmake -B bld -D_CURL_PREFILL=ON \ cmake -B bld -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
-DCMAKE_OSX_SYSROOT="${sysroot}" \ -DCMAKE_OSX_SYSROOT="${sysroot}" \
-DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \ -DCMAKE_C_COMPILER_TARGET="$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
-DCMAKE_IGNORE_PREFIX_PATH="$(brew --prefix)" \ -DCMAKE_IGNORE_PREFIX_PATH="$(brew --prefix)" \

View File

@ -59,21 +59,21 @@ jobs:
time cmake -B bld -G Ninja \ time cmake -B bld -G Ninja \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \ -DCURL_WERROR=ON \
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \ -DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
-DCURL_USE_OPENSSL=ON \ -DCURL_USE_OPENSSL=ON \
-DCURL_USE_GSSAPI=ON \ -DCURL_USE_GSSAPI=ON \
|| { cat bld/CMakeFiles/CMake*.yaml; false; } || { cat bld/CMakeFiles/CMake*.yaml; false; }
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::' echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::' echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
time cmake --build bld time cmake --build bld --config Debug
bld/src/curl --disable --version bld/src/curl --disable --version
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
time cmake --build bld --target testdeps time cmake --build bld --config Debug --target testdeps
export TFLAGS='-j4' export TFLAGS='-j4'
time cmake --build bld --target test-ci time cmake --build bld --config Debug --target test-ci
fi fi
echo '::group::build examples' echo '::group::build examples'
time cmake --build bld --target curl-examples time cmake --build bld --config Debug --target curl-examples
echo '::endgroup::' echo '::endgroup::'
openbsd: openbsd:
@ -100,31 +100,30 @@ jobs:
time cmake -B bld -G Ninja \ time cmake -B bld -G Ninja \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \ -DCURL_WERROR=ON \
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \ -DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
-DCURL_USE_OPENSSL=ON \ -DCURL_USE_OPENSSL=ON \
|| { cat bld/CMakeFiles/CMake*.yaml; false; } || { cat bld/CMakeFiles/CMake*.yaml; false; }
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::' echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::' echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
time cmake --build bld time cmake --build bld --config Debug
bld/src/curl --disable --version bld/src/curl --disable --version
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
time cmake --build bld --target testdeps time cmake --build bld --config Debug --target testdeps
export TFLAGS='-j8 ~3017 ~TFTP ~FTP' # FIXME: TFTP requests executed twice? Related: `curl: (69) TFTP: Access Violation`? export TFLAGS='-j8 ~3017 ~TFTP ~FTP' # FIXME: TFTP requests executed twice? Related: `curl: (69) TFTP: Access Violation`?
time cmake --build bld --target test-ci time cmake --build bld --config Debug --target test-ci
fi fi
echo '::group::build examples' echo '::group::build examples'
time cmake --build bld --target curl-examples time cmake --build bld --config Debug --target curl-examples
echo '::endgroup::' echo '::endgroup::'
freebsd: freebsd:
name: "FreeBSD, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} openssl${{ matrix.desc }} ${{ matrix.arch }}" name: "FreeBSD, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} openssl ${{ matrix.arch }}"
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 timeout-minutes: 20
strategy: strategy:
matrix: matrix:
include: include:
- { build: 'autotools', arch: 'x86_64', compiler: 'clang' } - { build: 'autotools', arch: 'x86_64', compiler: 'clang' }
- { build: 'cmake' , arch: 'x86_64', compiler: 'clang', options: '-DCMAKE_UNITY_BUILD=OFF -DCURL_TEST_BUNDLES=OFF', desc: ' !unity !bundle !runtests !examples' }
- { build: 'autotools', arch: 'arm64', compiler: 'clang' } - { build: 'autotools', arch: 'arm64', compiler: 'clang' }
- { build: 'cmake' , arch: 'arm64', compiler: 'clang' } - { build: 'cmake' , arch: 'arm64', compiler: 'clang' }
fail-fast: false fail-fast: false
@ -140,7 +139,6 @@ jobs:
version: '14.1' version: '14.1'
architecture: ${{ matrix.arch }} architecture: ${{ matrix.arch }}
run: | run: |
export MAKEFLAGS=-j3
# https://ports.freebsd.org/ # https://ports.freebsd.org/
time sudo pkg install -y autoconf automake libtool \ time sudo pkg install -y autoconf automake libtool \
pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket
@ -150,25 +148,18 @@ jobs:
--prefix="${HOME}"/install \ --prefix="${HOME}"/install \
--with-openssl \ --with-openssl \
--with-brotli --enable-ldap --enable-ldaps --with-libidn2 --with-libssh2 --with-nghttp2 --with-gssapi \ --with-brotli --enable-ldap --enable-ldaps --with-libidn2 --with-libssh2 --with-nghttp2 --with-gssapi \
--disable-dependency-tracking \ --disable-dependency-tracking || { tail -n 1000 config.log; false; }
${{ matrix.options }} \
|| { tail -n 1000 config.log; false; }
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::' echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::' echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
time make install time make -j3 install
src/curl --disable --version src/curl --disable --version
desc='${{ matrix.desc }}'
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
time make -C tests time make -j3 -C tests
if [ "${desc#*!runtests*}" = "${desc}" ]; then time make test-ci V=1 TFLAGS='-j4'
time make test-ci V=1 TFLAGS='-j4'
fi
fi
if [ "${desc#*!examples*}" = "${desc}" ]; then
echo '::group::build examples'
time make examples
echo '::endgroup::'
fi fi
echo '::group::build examples'
time make -j3 examples
echo '::endgroup::'
- name: 'cmake' - name: 'cmake'
if: ${{ matrix.build == 'cmake' }} if: ${{ matrix.build == 'cmake' }}
@ -185,27 +176,21 @@ jobs:
-DCMAKE_C_COMPILER='${{ matrix.compiler }}' \ -DCMAKE_C_COMPILER='${{ matrix.compiler }}' \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \ -DCURL_WERROR=ON \
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug \ -DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
-DCURL_USE_OPENSSL=ON \ -DCURL_USE_OPENSSL=ON \
-DCURL_USE_GSSAPI=ON \ -DCURL_USE_GSSAPI=ON \
${{ matrix.options }} \
|| { cat bld/CMakeFiles/CMake*.yaml; false; } || { cat bld/CMakeFiles/CMake*.yaml; false; }
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::' echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::' echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
time cmake --build bld time cmake --build bld --config Debug
bld/src/curl --disable --version bld/src/curl --disable --version
desc='${{ matrix.desc }}'
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
time cmake --build bld --target testdeps time cmake --build bld --config Debug --target testdeps
if [ "${desc#*!runtests*}" = "${desc}" ]; then time cmake --build bld --config Debug --target test-ci
time cmake --build bld --target test-ci
fi
fi
if [ "${desc#*!examples*}" = "${desc}" ]; then
echo '::group::build examples'
time cmake --build bld --target curl-examples
echo '::endgroup::'
fi fi
echo '::group::build examples'
time cmake --build bld --config Debug --target curl-examples
echo '::endgroup::'
omnios: omnios:
name: 'OmniOS, AM gcc openssl amd64' name: 'OmniOS, AM gcc openssl amd64'
@ -224,21 +209,19 @@ jobs:
run: | run: |
set -e set -e
ln -s /usr/bin/gcpp /usr/bin/cpp # Some tests expect `cpp`, which is named `gcpp` in this env. ln -s /usr/bin/gcpp /usr/bin/cpp # Some tests expect `cpp`, which is named `gcpp` in this env.
export MAKEFLAGS=-j3
time autoreconf -fi time autoreconf -fi
mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \ mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \
--prefix="${HOME}"/install \ --prefix="${HOME}"/install \
--with-openssl \ --with-openssl \
--disable-dependency-tracking \ --disable-dependency-tracking || { tail -n 1000 config.log; false; }
|| { tail -n 1000 config.log; false; }
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::' echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::' echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
time gmake install time gmake -j3 install
src/curl --disable --version src/curl --disable --version
time gmake -C tests time gmake -j3 -C tests
time gmake test-ci V=1 time gmake test-ci V=1
echo '::group::build examples' echo '::group::build examples'
time gmake examples time gmake -j3 examples
echo '::endgroup::' echo '::endgroup::'
ios: ios:
@ -246,9 +229,9 @@ jobs:
runs-on: 'macos-latest' runs-on: 'macos-latest'
timeout-minutes: 10 timeout-minutes: 10
env: env:
MAKEFLAGS: -j 4
DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer" DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer"
CC: ${{ matrix.build.compiler || 'clang' }} CC: ${{ matrix.build.compiler || 'clang' }}
MAKEFLAGS: -j 4
# renovate: datasource=github-tags depName=libressl-portable/portable versioning=semver registryUrl=https://github.com # renovate: datasource=github-tags depName=libressl-portable/portable versioning=semver registryUrl=https://github.com
libressl-version: 4.0.0 libressl-version: 4.0.0
strategy: strategy:
@ -263,7 +246,6 @@ jobs:
install_steps: libressl install_steps: libressl
# FIXME: Could not make OPENSSL_ROOT_DIR work. CMake seems to prepend sysroot to it. # FIXME: Could not make OPENSSL_ROOT_DIR work. CMake seems to prepend sysroot to it.
generate: >- generate: >-
-DCMAKE_BUILD_TYPE=Release -DCMAKE_UNITY_BUILD_BATCH_SIZE=50
-DOPENSSL_INCLUDE_DIR="$HOME/libressl/include" -DOPENSSL_INCLUDE_DIR="$HOME/libressl/include"
-DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a" -DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a"
-DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a" -DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a"
@ -272,7 +254,6 @@ jobs:
- name: 'libressl' - name: 'libressl'
install_steps: libressl install_steps: libressl
generator: Xcode generator: Xcode
options: --config Debug
generate: >- generate: >-
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=OFF -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=OFF
-DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl -DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl
@ -315,7 +296,7 @@ jobs:
https://github.com/libressl/portable/releases/download/v${{ env.libressl-version }}/libressl-${{ env.libressl-version }}.tar.gz | tar -x https://github.com/libressl/portable/releases/download/v${{ env.libressl-version }}/libressl-${{ env.libressl-version }}.tar.gz | tar -x
cd libressl-${{ env.libressl-version }} cd libressl-${{ env.libressl-version }}
# FIXME: on the 4.0.1 release, delete '-DHAVE_ENDIAN_H=0' # FIXME: on the 4.0.1 release, delete '-DHAVE_ENDIAN_H=0'
cmake -B . \ cmake . \
-DHAVE_ENDIAN_H=0 \ -DHAVE_ENDIAN_H=0 \
-DCMAKE_INSTALL_PREFIX="$HOME/libressl" \ -DCMAKE_INSTALL_PREFIX="$HOME/libressl" \
-DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_SYSTEM_NAME=iOS \
@ -339,8 +320,7 @@ jobs:
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-ios-tvos-visionos-or-watchos # https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-ios-tvos-visionos-or-watchos
[ -n '${{ matrix.build.generator }}' ] && options='-G ${{ matrix.build.generator }}' [ -n '${{ matrix.build.generator }}' ] && options='-G ${{ matrix.build.generator }}'
cmake -B bld -D_CURL_PREFILL=ON \ cmake -B bld -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
-DCMAKE_SYSTEM_NAME=iOS \ -DCMAKE_SYSTEM_NAME=iOS \
-DUSE_APPLE_IDN=ON \ -DUSE_APPLE_IDN=ON \
${{ matrix.build.generate }} ${options} ${{ matrix.build.generate }} ${options}
@ -365,7 +345,7 @@ jobs:
- name: 'build' - name: 'build'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld ${{ matrix.build.options }} --parallel 4 --verbose cmake --build bld --verbose
else else
make -C bld V=1 make -C bld V=1
fi fi
@ -376,7 +356,7 @@ jobs:
- name: 'build tests' - name: 'build tests'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target testdeps --verbose cmake --build bld --target testdeps --verbose
else else
make -C bld V=1 -C tests make -C bld V=1 -C tests
fi fi
@ -384,7 +364,7 @@ jobs:
- name: 'build examples' - name: 'build examples'
run: | run: |
if [ -n '${{ matrix.build.generate }}' ]; then if [ -n '${{ matrix.build.generate }}' ]; then
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target curl-examples --verbose cmake --build bld --target curl-examples --verbose
else else
make -C bld examples V=1 make -C bld examples V=1
fi fi
@ -394,9 +374,9 @@ jobs:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
timeout-minutes: 25 timeout-minutes: 25
env: env:
MAKEFLAGS: -j 5
VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite' VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
VCPKG_DISABLE_METRICS: '1' VCPKG_DISABLE_METRICS: '1'
MAKEFLAGS: -j 5
strategy: strategy:
matrix: matrix:
include: include:
@ -494,7 +474,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --verbose cmake --build bld --verbose
else else
make -C bld V=1 make -j5 -C bld V=1
fi fi
- name: 'curl info' - name: 'curl info'
@ -505,7 +485,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --target testdeps
else else
make -C bld -C tests make -j5 -C bld -C tests
fi fi
- name: 'build examples' - name: 'build examples'
@ -513,7 +493,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --target curl-examples
else else
make -C bld examples make -j5 -C bld examples
fi fi
amiga: amiga:
@ -521,7 +501,6 @@ jobs:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
timeout-minutes: 5 timeout-minutes: 5
env: env:
MAKEFLAGS: -j 5
amissl-version: 5.18 amissl-version: 5.18
strategy: strategy:
matrix: matrix:
@ -589,9 +568,9 @@ jobs:
- name: 'build' - name: 'build'
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld cmake --build bld --parallel 5
else else
make -C bld make -j5 -C bld
fi fi
- name: 'curl info' - name: 'curl info'
@ -601,18 +580,18 @@ jobs:
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --parallel 5 --target testdeps
else else
make -C bld -C tests make -j5 -C bld -C tests
fi fi
- name: 'build examples' - name: 'build examples'
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --parallel 5 --target curl-examples
else else
make -C bld examples make -j5 -C bld examples
fi fi
msdos: msdos:
@ -620,7 +599,6 @@ jobs:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
timeout-minutes: 5 timeout-minutes: 5
env: env:
MAKEFLAGS: -j 5
toolchain-version: '3.4' toolchain-version: '3.4'
strategy: strategy:
matrix: matrix:
@ -700,7 +678,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld cmake --build bld
else else
make -C bld make -j5 -C bld
fi fi
- name: 'curl info' - name: 'curl info'
@ -712,7 +690,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --target testdeps
else else
make -C bld -C tests make -j5 -C bld -C tests
fi fi
- name: 'build examples' - name: 'build examples'
@ -721,5 +699,5 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --target curl-examples
else else
make -C bld examples make -j5 -C bld examples
fi fi

View File

@ -44,7 +44,6 @@ jobs:
run: run:
shell: C:\cygwin\bin\bash.exe '{0}' shell: C:\cygwin\bin\bash.exe '{0}'
env: env:
MAKEFLAGS: -j 5
SHELLOPTS: 'igncr' SHELLOPTS: 'igncr'
strategy: strategy:
matrix: matrix:
@ -84,13 +83,14 @@ jobs:
- name: 'configure' - name: 'configure'
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
PATH=/usr/bin
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake -B bld -G Ninja -D_CURL_PREFILL=ON ${options} \ PATH="/usr/bin:$(cygpath "${SYSTEMROOT}")/System32"
-DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=30 -DCURL_TEST_BUNDLES=ON \ cmake -B bld -G Ninja ${options} \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \ -DCURL_WERROR=ON \
${{ matrix.config }} ${{ matrix.config }}
else else
PATH="/usr/bin:$(cygpath "${SYSTEMROOT}")/System32"
mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \ mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
--prefix="${HOME}"/install \ --prefix="${HOME}"/install \
--with-openssl \ --with-openssl \
@ -112,9 +112,9 @@ jobs:
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld cmake --build bld --config '${{ matrix.type }}'
else else
make -C bld V=1 install make -C bld -j5 V=1 install
fi fi
- name: 'curl version' - name: 'curl version'
@ -131,9 +131,9 @@ jobs:
timeout-minutes: 15 timeout-minutes: 15
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --config '${{ matrix.type }}' --target testdeps
else else
make -C bld V=1 -C tests make -C bld -j5 V=1 -C tests
fi fi
- name: 'run tests' - name: 'run tests'
@ -146,9 +146,9 @@ jobs:
fi fi
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
PATH="$PWD/bld/lib:$PATH" PATH="$PWD/bld/lib:$PATH"
cmake --build bld --target test-ci cmake --build bld --config '${{ matrix.type }}' --target test-ci
else else
make -C bld V=1 test-ci make -C bld -j5 V=1 test-ci
fi fi
- name: 'build examples' - name: 'build examples'
@ -156,9 +156,9 @@ jobs:
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --config '${{ matrix.type }}' --target curl-examples
else else
make -C bld V=1 examples make -C bld -j5 V=1 examples
fi fi
msys2: # both msys and mingw-w64 msys2: # both msys and mingw-w64
@ -168,8 +168,6 @@ jobs:
defaults: defaults:
run: run:
shell: msys2 {0} shell: msys2 {0}
env:
MAKEFLAGS: -j 5
strategy: strategy:
matrix: matrix:
include: include:
@ -182,7 +180,7 @@ jobs:
# FIXME: WebSockets test results ignored due to frequent failures on native Windows: # FIXME: WebSockets test results ignored due to frequent failures on native Windows:
- { build: 'cmake' , sys: 'mingw64', env: 'x86_64' , tflags: '' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DENABLE_ARES=ON', type: 'Debug', name: 'schannel c-ares U' } - { build: 'cmake' , sys: 'mingw64', env: 'x86_64' , tflags: '' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DENABLE_ARES=ON', type: 'Debug', name: 'schannel c-ares U' }
- { build: 'cmake' , sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=OFF -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DENABLE_CURLDEBUG=ON', type: 'Release', name: 'schannel R TrackMemory' } - { build: 'cmake' , sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=OFF -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DENABLE_CURLDEBUG=ON', type: 'Release', name: 'schannel R TrackMemory' }
- { build: 'cmake' , sys: 'clang64', env: 'clang-x86_64', tflags: 'skiprun' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DCURL_USE_OPENSSL=ON -DENABLE_UNICODE=OFF', type: 'Release', name: 'openssl', chkprefill: '_chkprefill' } - { build: 'cmake' , sys: 'clang64', env: 'clang-x86_64', tflags: 'skiprun' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DCURL_USE_OPENSSL=ON -DENABLE_UNICODE=OFF', type: 'Release', name: 'openssl' }
- { build: 'cmake' , sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=OFF -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON', type: 'Release', test: 'uwp', name: 'schannel' } - { build: 'cmake' , sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=OFF -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON', type: 'Release', test: 'uwp', name: 'schannel' }
# { build: 'autotools', sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '--without-debug --with-schannel --enable-shared', type: 'Release', test: 'uwp', name: 'schannel' } # { build: 'autotools', sys: 'ucrt64' , env: 'ucrt-x86_64' , tflags: 'skiprun' , config: '--without-debug --with-schannel --enable-shared', type: 'Release', test: 'uwp', name: 'schannel' }
- { build: 'cmake' , sys: 'mingw64', env: 'x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON', type: 'Debug', cflags: '-DCURL_SCHANNEL_DEV_DEBUG', name: 'schannel dev debug' } - { build: 'cmake' , sys: 'mingw64', env: 'x86_64' , tflags: 'skiprun' , config: '-DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=ON -DCURL_USE_SCHANNEL=ON -DENABLE_UNICODE=ON -DCMAKE_VERBOSE_MAKEFILE=ON', type: 'Debug', cflags: '-DCURL_SCHANNEL_DEV_DEBUG', name: 'schannel dev debug' }
@ -207,7 +205,6 @@ jobs:
libnghttp2-devel libnghttp2-devel
libpsl-devel libpsl-devel
libssh2-devel libssh2-devel
${{ matrix.chkprefill == '_chkprefill' && 'diffutils' || '' }}
- uses: msys2/setup-msys2@d44ca8e88d8b43d56cf5670f91747359d5537f97 # v2 - uses: msys2/setup-msys2@d44ca8e88d8b43d56cf5670f91747359d5537f97 # v2
if: ${{ matrix.sys != 'msys' }} if: ${{ matrix.sys != 'msys' }}
@ -221,7 +218,6 @@ jobs:
mingw-w64-${{ matrix.env }}-libssh2 mingw-w64-${{ matrix.env }}-libssh2
mingw-w64-${{ matrix.env }}-libpsl mingw-w64-${{ matrix.env }}-libpsl
mingw-w64-${{ matrix.env }}-c-ares mingw-w64-${{ matrix.env }}-c-ares
${{ matrix.chkprefill == '_chkprefill' && format('mingw-w64-{0}-diffutils', matrix.env) || '' }}
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
@ -245,26 +241,20 @@ jobs:
fi fi
fi fi
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
for _chkprefill in '' ${{ matrix.chkprefill }}; do if [[ '${{ matrix.env }}' = 'clang'* ]]; then
if [[ '${{ matrix.env }}' = 'clang'* ]]; then options='-DCMAKE_C_COMPILER=clang'
options='-DCMAKE_C_COMPILER=clang' else
else options='-DCMAKE_C_COMPILER=gcc'
options='-DCMAKE_C_COMPILER=gcc'
fi
[ '${{ matrix.sys }}' = 'msys' ] && options+=' -D_CURL_PREFILL=ON'
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
cmake -B "bld${_chkprefill}" -G Ninja ${options} \
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
-DCMAKE_BUILD_TYPE='${{ matrix.type }}' \
-DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=30 -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \
${{ matrix.config }}
done
if [ -d bld_chkprefill ] && ! diff -u bld/lib/curl_config.h bld_chkprefill/lib/curl_config.h; then
echo '::group::reference configure log'; cat bld_chkprefill/CMakeFiles/CMake*.yaml 2>/dev/null || true; echo '::endgroup::'
false
fi fi
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
[ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
[ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
cmake -B bld -G Ninja ${options} \
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
-DCMAKE_BUILD_TYPE='${{ matrix.type }}' \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \
${{ matrix.config }}
else else
export CFLAGS CPPFLAGS export CFLAGS CPPFLAGS
mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \ mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
@ -287,9 +277,9 @@ jobs:
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld cmake --build bld --config '${{ matrix.type }}'
else else
make -C bld V=1 install make -C bld -j5 V=1 install
fi fi
- name: 'curl version' - name: 'curl version'
@ -312,9 +302,9 @@ jobs:
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --config '${{ matrix.type }}' --target testdeps
else else
make -C bld V=1 -C tests make -C bld -j5 V=1 -C tests
fi fi
if [ '${{ matrix.build }}' != 'cmake' ]; then if [ '${{ matrix.build }}' != 'cmake' ]; then
# avoid libtool's .exe wrappers # avoid libtool's .exe wrappers
@ -348,10 +338,10 @@ jobs:
PATH="$PATH:/c/Program Files (x86)/stunnel/bin" PATH="$PATH:/c/Program Files (x86)/stunnel/bin"
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
PATH="$PWD/bld/lib:$PATH" PATH="$PWD/bld/lib:$PATH"
cmake --build bld --target test-ci cmake --build bld --config '${{ matrix.type }}' --target test-ci
else else
PATH="$PWD/bld/lib/.libs:$PATH" PATH="$PWD/bld/lib/.libs:$PATH"
make -C bld V=1 test-ci make -C bld -j5 V=1 test-ci
fi fi
- name: 'build examples' - name: 'build examples'
@ -359,9 +349,9 @@ jobs:
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --config '${{ matrix.type }}' --target curl-examples
else else
make -C bld V=1 examples make -C bld -j5 V=1 examples
fi fi
mingw-w64-standalone-downloads: mingw-w64-standalone-downloads:
@ -371,8 +361,6 @@ jobs:
defaults: defaults:
run: run:
shell: C:\msys64\usr\bin\bash.exe {0} shell: C:\msys64\usr\bin\bash.exe {0}
env:
MAKEFLAGS: -j 5
strategy: strategy:
matrix: matrix:
include: include:
@ -429,21 +417,15 @@ jobs:
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH" PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
for _chkprefill in '' ${{ matrix.chkprefill }}; do [ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
options='' [ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF' cmake -B bld -G 'MSYS Makefiles' ${options} \
cmake -B "bld${_chkprefill}" -G 'MSYS Makefiles' ${options} \ -DCMAKE_C_COMPILER=gcc \
-DCMAKE_C_COMPILER=gcc \ -DCMAKE_BUILD_TYPE='${{ matrix.type }}' \
-DCMAKE_BUILD_TYPE='${{ matrix.type }}' \ -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=30 -DCURL_TEST_BUNDLES=ON \ -DCURL_WERROR=ON \
-DCURL_WERROR=ON \ -DCURL_USE_LIBPSL=OFF \
-DCURL_USE_LIBPSL=OFF \ ${{ matrix.config }}
${{ matrix.config }}
done
if [ -d bld_chkprefill ] && ! diff -u bld/lib/curl_config.h bld_chkprefill/lib/curl_config.h; then
echo '::group::reference configure log'; cat bld_chkprefill/CMakeFiles/CMake*.yaml 2>/dev/null || true; echo '::endgroup::'
false
fi
- name: 'configure log' - name: 'configure log'
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
@ -458,7 +440,7 @@ jobs:
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH" PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
cmake --build bld cmake --build bld --config '${{ matrix.type }}' --parallel 5
- name: 'curl version' - name: 'curl version'
timeout-minutes: 1 timeout-minutes: 1
@ -472,7 +454,7 @@ jobs:
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH" PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
cmake --build bld --target testdeps cmake --build bld --config '${{ matrix.type }}' --parallel 5 --target testdeps
- name: 'install test prereqs' - name: 'install test prereqs'
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
@ -482,48 +464,37 @@ jobs:
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 https://live.sysinternals.com/handle64.exe --output /bin/handle64.exe curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 https://live.sysinternals.com/handle64.exe --output /bin/handle64.exe
python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket
- name: 'downgrade msys2-runtime'
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
timeout-minutes: 2
# Downgrade to a known good MSYS2 runtime version to avoid the performance regression
# causing runtests.pl to run at 2-3x reduced speed.
run: |
/usr/bin/sed -i 's/^CheckSpace/#CheckSpace/' /etc/pacman.conf
exec /usr/bin/pacman --noconfirm --noprogressbar --upgrade https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.5.4-8-x86_64.pkg.tar.zst
- name: 'run tests' - name: 'run tests'
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH" PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
export TFLAGS='-j8 ~WebSockets ${{ matrix.tflags }}' export TFLAGS='-j4 ~WebSockets ${{ matrix.tflags }}'
if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")" TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
fi fi
PATH="$PWD/bld/lib:$PATH:/c/Program Files (x86)/stunnel/bin" PATH="$PWD/bld/lib:$PATH:/c/Program Files (x86)/stunnel/bin"
cmake --build bld --target test-ci cmake --build bld --config '${{ matrix.type }}' --target test-ci
- name: 'build examples' - name: 'build examples'
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH" PATH="$(cygpath "${USERPROFILE}")/my-cache/${{ matrix.dir }}/bin:/c/msys64/usr/bin:$PATH"
cmake --build bld --target curl-examples cmake --build bld --config '${{ matrix.type }}' --parallel 5 --target curl-examples
linux-cross-mingw-w64: linux-cross-mingw-w64:
name: "linux-mingw, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }}" name: "linux-mingw, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }}"
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 15 timeout-minutes: 15
env:
MAKEFLAGS: -j 5
TRIPLET: 'x86_64-w64-mingw32'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
build: [autotools, cmake] build: [autotools, cmake]
compiler: [gcc] compiler: [gcc]
env:
TRIPLET: 'x86_64-w64-mingw32'
steps: steps:
- name: 'install packages' - name: 'install packages'
timeout-minutes: 5
run: sudo apt-get -o Dpkg::Use-Pty=0 install mingw-w64 ${{ matrix.build == 'cmake' && 'ninja-build' || '' }} run: sudo apt-get -o Dpkg::Use-Pty=0 install mingw-w64 ${{ matrix.build == 'cmake' && 'ninja-build' || '' }}
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
@ -567,7 +538,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld cmake --build bld
else else
make -C bld make -C bld -j5
fi fi
- name: 'curl info' - name: 'curl info'
@ -579,7 +550,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps cmake --build bld --target testdeps
else else
make -C bld -C tests make -C bld -j5 -C tests
fi fi
- name: 'build examples' - name: 'build examples'
@ -587,114 +558,7 @@ jobs:
if [ '${{ matrix.build }}' = 'cmake' ]; then if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples cmake --build bld --target curl-examples
else else
make -C bld examples make -C bld -j5 examples
fi
wince:
name: "mingw32ce, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} 4.4.0-arm schannel"
runs-on: 'macos-latest'
timeout-minutes: 10
env:
MAKEFLAGS: -j 4
toolchain-version: '0.59.1'
strategy:
matrix:
build: [autotools, cmake]
fail-fast: false
steps:
- name: 'install packages'
if: ${{ matrix.build == 'autotools' }}
timeout-minutes: 5
run: |
echo automake libtool | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
- name: 'cache compiler (mingw32ce)'
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
id: cache-compiler
with:
path: ~/opt/mingw32ce
key: ${{ runner.os }}-mingw32ce-${{ env.toolchain-version }}-amd64
- name: 'install compiler (mingw32ce)'
if: ${{ steps.cache-compiler.outputs.cache-hit != 'true' }}
timeout-minutes: 5
run: |
cd "${HOME}" || exit 1
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 3 --retry-connrefused --proto-redir =https \
--location 'https://downloads.sourceforge.net/cegcc/cegcc/${{ env.toolchain-version }}/cegcc_mingw32ce_snowleopard_r1397.tar.bz2' | tar -x
ls -l
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: 'configure'
run: |
PATH="$HOME/opt/mingw32ce/bin:$PATH"
if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake -B bld \
-DCMAKE_SYSTEM_NAME=WindowsCE \
-DCMAKE_SYSTEM_VERSION=8.0 \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_FLAGS='-O3 -DNDEBUG' \
-DCMAKE_C_COMPILER_TARGET=arm-mingw32ce \
-DCMAKE_C_COMPILER=arm-mingw32ce-gcc \
-DCMAKE_RC_COMPILER=arm-mingw32ce-windres \
-DMINGW32CE_LIBRARY_DIR="$HOME/opt/mingw32ce/arm-mingw32ce/lib" \
-DCMAKE_IGNORE_PREFIX_PATH="$(brew --prefix)" \
-DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=50 -DCURL_TEST_BUNDLES=ON \
-DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_STATIC_CURL=OFF \
-DCURL_WERROR=ON \
-DCURL_USE_SCHANNEL=ON \
-DCURL_USE_LIBPSL=OFF
else
autoreconf -fi
mkdir bld && cd bld && ../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
--host=arm-mingw32ce \
--with-schannel \
--without-libpsl \
--disable-shared
fi
- name: 'configure log'
if: ${{ !cancelled() }}
run: cat bld/config.log bld/CMakeFiles/CMake*.yaml 2>/dev/null || true
- name: 'curl_config.h'
run: |
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
grep -F '#define' bld/lib/curl_config.h | sort || true
- name: 'build'
run: |
PATH="$HOME/opt/mingw32ce/bin:$PATH"
if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld
else
make -C bld
fi
- name: 'curl info'
run: |
find . \( -name '*.exe' -o -name '*.dll' -o -name '*.a' \) -exec file '{}' \;
- name: 'build tests'
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
run: |
PATH="$HOME/opt/mingw32ce/bin:$PATH"
if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target testdeps
else
make -C bld -C tests
fi
- name: 'build examples'
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
run: |
PATH="$HOME/opt/mingw32ce/bin:$PATH"
if [ '${{ matrix.build }}' = 'cmake' ]; then
cmake --build bld --target curl-examples
else
make -C bld examples
fi fi
msvc: msvc:
@ -710,16 +574,16 @@ jobs:
strategy: strategy:
matrix: matrix:
include: include:
- name: 'openssl' - name: 'schannel MultiSSL U'
install: 'brotli zlib zstd nghttp2 nghttp3 openssl libssh2' install: 'brotli zlib zstd libpsl nghttp2 libssh2[core,zlib] pkgconf gsasl openssl mbedtls wolfssl'
arch: 'x64' arch: 'x64'
plat: 'uwp' plat: 'windows'
type: 'Debug' type: 'Debug'
tflags: 'skiprun' tflags: '~1516 ~2301 ~2302 ~2303 ~2307 ~2310'
config: >- config: >-
-DCURL_USE_LIBSSH2=ON -DCURL_USE_LIBSSH2=ON
-DCURL_USE_SCHANNEL=OFF -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON -DCURL_USE_SCHANNEL=ON -DCURL_USE_OPENSSL=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_WOLFSSL=ON -DCURL_DEFAULT_SSL_BACKEND=schannel
-DCURL_USE_LIBPSL=OFF -DCURL_USE_GSASL=ON -DUSE_WIN32_IDN=ON -DENABLE_UNICODE=ON -DUSE_SSLS_EXPORT=ON
- name: 'openssl' - name: 'openssl'
install: 'brotli zlib zstd libpsl nghttp2 nghttp3 openssl libssh2 pkgconf gsasl c-ares libuv krb5' install: 'brotli zlib zstd libpsl nghttp2 nghttp3 openssl libssh2 pkgconf gsasl c-ares libuv krb5'
@ -732,16 +596,16 @@ jobs:
-DCURL_USE_SCHANNEL=OFF -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON -DCURL_USE_SCHANNEL=OFF -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON
-DCURL_USE_GSASL=ON -DENABLE_ARES=ON -DCURL_USE_LIBUV=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_GSASL=ON -DENABLE_ARES=ON -DCURL_USE_LIBUV=ON -DCURL_USE_GSSAPI=ON
- name: 'schannel MultiSSL U' - name: 'openssl'
install: 'brotli zlib zstd libpsl nghttp2 libssh2[core,zlib] pkgconf gsasl openssl mbedtls wolfssl' install: 'brotli zlib zstd nghttp2 nghttp3 openssl libssh2'
arch: 'x64' arch: 'x64'
plat: 'windows' plat: 'uwp'
type: 'Debug' type: 'Debug'
tflags: '~1516 ~2301 ~2302 ~2303 ~2307 ~2310' tflags: 'skiprun'
config: >- config: >-
-DCURL_USE_LIBSSH2=ON -DCURL_USE_LIBSSH2=ON
-DCURL_USE_SCHANNEL=ON -DCURL_USE_OPENSSL=ON -DCURL_USE_MBEDTLS=ON -DCURL_USE_WOLFSSL=ON -DCURL_DEFAULT_SSL_BACKEND=schannel -DCURL_USE_SCHANNEL=OFF -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON
-DCURL_USE_GSASL=ON -DUSE_WIN32_IDN=ON -DENABLE_UNICODE=ON -DUSE_SSLS_EXPORT=ON -DCURL_USE_LIBPSL=OFF
- name: 'libressl' - name: 'libressl'
install: 'brotli zlib zstd libpsl nghttp2 libressl libssh2[core,zlib] pkgconf ngtcp2[libressl] nghttp3' install: 'brotli zlib zstd libpsl nghttp2 libressl libssh2[core,zlib] pkgconf ngtcp2[libressl] nghttp3'
@ -783,7 +647,6 @@ jobs:
plat: 'windows' plat: 'windows'
type: 'Debug' type: 'Debug'
tflags: '~1516' tflags: '~1516'
chkprefill: '_chkprefill'
# WARNING: libssh uses hard-coded world-writable paths (/etc/..., ~/.ssh/) to # WARNING: libssh uses hard-coded world-writable paths (/etc/..., ~/.ssh/) to
# read its configuration from, making it vulnerable to attacks on # read its configuration from, making it vulnerable to attacks on
# Windows. Do not use this component till there is a fix for these. # Windows. Do not use this component till there is a fix for these.
@ -820,36 +683,28 @@ jobs:
timeout-minutes: 5 timeout-minutes: 5
run: | run: |
PATH="/c/msys64/usr/bin:$PATH" PATH="/c/msys64/usr/bin:$PATH"
for _chkprefill in '' ${{ matrix.chkprefill }}; do if [ '${{ matrix.plat }}' = 'uwp' ]; then
options='' options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
if [ '${{ matrix.plat }}' = 'uwp' ]; then cflags='-DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP'
options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0' ldflags='-OPT:NOREF -OPT:NOICF -APPCONTAINER:NO'
cflags='-DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP' vsglobals=';AppxPackage=false;WindowsAppContainer=false'
ldflags='-OPT:NOREF -OPT:NOICF -APPCONTAINER:NO'
vsglobals=';AppxPackage=false;WindowsAppContainer=false'
fi
[ '${{ matrix.arch }}' = 'arm64' ] && options+=' -A ARM64'
[ '${{ matrix.arch }}' = 'x64' ] && options+=' -A x64'
[ '${{ matrix.arch }}' = 'x86' ] && options+=' -A Win32'
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
cmake -B "bld${_chkprefill}" ${options} \
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" \
-DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
-DVCPKG_TARGET_TRIPLET='${{ matrix.arch }}-${{ matrix.plat }}' \
-DCMAKE_C_FLAGS="${cflags}" \
-DCMAKE_EXE_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_SHARED_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_VS_GLOBALS="TrackFileAccess=false${vsglobals}" \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_DEBUG=ON \
${{ matrix.config }}
done
if [ -d bld_chkprefill ] && ! diff -u bld/lib/curl_config.h bld_chkprefill/lib/curl_config.h; then
echo '::group::reference configure log'; cat bld_chkprefill/CMakeFiles/CMake*.yaml 2>/dev/null || true; echo '::endgroup::'
false
fi fi
cmake -B bld ${options} \
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" \
-DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
-DVCPKG_TARGET_TRIPLET='${{ matrix.arch }}-${{ matrix.plat }}' \
-DCMAKE_C_FLAGS="${cflags}" \
-DCMAKE_EXE_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_SHARED_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
-DCMAKE_VS_GLOBALS="TrackFileAccess=false${vsglobals}" \
-DCMAKE_BUILD_TYPE='${{ matrix.type }}' \
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
-DCURL_WERROR=ON \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_DEBUG=ON \
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE= \
${{ matrix.config }}
- name: 'configure log' - name: 'configure log'
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
@ -869,10 +724,10 @@ jobs:
- name: 'curl version' - name: 'curl version'
timeout-minutes: 1 timeout-minutes: 1
run: | run: |
PATH=/usr/bin find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' -o -name '*.pdb' \) -exec file '{}' \; PATH=/usr/bin find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' \) -exec file '{}' \;
if [ '${{ matrix.plat }}' != 'uwp' ]; then # Missing: ucrtbased.dll, VCRUNTIME140D.dll, VCRUNTIME140D_APP.dll if [ '${{ matrix.plat }}' != 'uwp' ]; then # Missing: ucrtbased.dll, VCRUNTIME140D.dll, VCRUNTIME140D_APP.dll
PATH="$PWD/bld/lib/${{ matrix.type }}:$PATH" PATH="$PWD/bld/lib:$PATH"
'bld/src/${{ matrix.type }}/curl.exe' --disable --version bld/src/curl.exe --disable --version
fi fi
- name: 'build tests' - name: 'build tests'
@ -894,27 +749,17 @@ jobs:
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 https://live.sysinternals.com/handle64.exe --output /bin/handle64.exe curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 https://live.sysinternals.com/handle64.exe --output /bin/handle64.exe
python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket
- name: 'downgrade msys2-runtime'
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
timeout-minutes: 2
# Downgrade to a known good MSYS2 runtime version to avoid the performance regression
# causing runtests.pl to run at 2-3x reduced speed.
run: |
/usr/bin/sed -i 's/^CheckSpace/#CheckSpace/' /etc/pacman.conf
exec /usr/bin/pacman --noconfirm --noprogressbar --upgrade https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.5.4-8-x86_64.pkg.tar.zst
- name: 'run tests' - name: 'run tests'
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
export CURL_DIRSUFFIX='${{ matrix.type }}'
export TFLAGS='-j8 ~WebSockets ~SCP ~612 ${{ matrix.tflags }}' export TFLAGS='-j8 ~WebSockets ~SCP ~612 ${{ matrix.tflags }}'
if [[ '${{ matrix.install }}' = *'libssh2[core,zlib]'* ]]; then if [[ '${{ matrix.install }}' = *'libssh2[core,zlib]'* ]]; then
TFLAGS+=' ~SFTP' TFLAGS+=' ~SFTP'
elif [[ '${{ matrix.install }}' = *'libssh '* ]]; then elif [[ '${{ matrix.install }}' = *'libssh '* ]]; then
TFLAGS+=' ~614' # 'SFTP pre-quote chmod' SFTP, pre-quote, directory TFLAGS+=' ~614' # 'SFTP pre-quote chmod' SFTP, pre-quote, directory
fi fi
PATH="$PWD/bld/lib/${{ matrix.type }}:$PATH:/c/Program Files (x86)/stunnel/bin:/c/Program Files/OpenSSH-Win64" PATH="$PWD/bld/lib:$PATH:/c/Program Files (x86)/stunnel/bin:/c/Program Files/OpenSSH-Win64"
PATH="/c/msys64/usr/bin:$PATH" PATH="/c/msys64/usr/bin:$PATH"
cmake --build bld --config '${{ matrix.type }}' --target test-ci cmake --build bld --config '${{ matrix.type }}' --target test-ci

View File

@ -29,7 +29,7 @@ if(WIN32 AND (ENABLE_DEBUG OR ENABLE_CURLDEBUG))
# e.g. curl_easy_perform_ev() or curl_dbg_*(), # e.g. curl_easy_perform_ev() or curl_dbg_*(),
# so disable symbol hiding for debug builds and for memory tracking. # so disable symbol hiding for debug builds and for memory tracking.
set(CURL_HIDDEN_SYMBOLS OFF) set(CURL_HIDDEN_SYMBOLS OFF)
elseif(DOS OR AMIGA OR MINGW32CE) elseif(DOS OR AMIGA)
set(CURL_HIDDEN_SYMBOLS OFF) set(CURL_HIDDEN_SYMBOLS OFF)
endif() endif()

View File

@ -30,14 +30,14 @@
/* */ /* */
#if defined(sun) || defined(__sun__) || \ #if defined(sun) || defined(__sun__) || \
defined(__SUNPRO_C) || defined(__SUNPRO_CC) defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# if defined(__SVR4) || defined(__srv4__) # if defined(__SVR4) || defined(__srv4__)
# define PLATFORM_SOLARIS # define PLATFORM_SOLARIS
# else # else
# define PLATFORM_SUNOS4 # define PLATFORM_SUNOS4
# endif # endif
#endif #endif
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41) #if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
# define PLATFORM_AIX_V3 # define PLATFORM_AIX_V3
#endif #endif
/* */ /* */
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) #if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
@ -55,52 +55,72 @@ int main(void)
#endif #endif
/* tests for gethostbyname_r */ /* tests for gethostbyname_r */
#if defined(HAVE_GETHOSTBYNAME_R_3) || \ #if defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \ defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
# define _REENTRANT
/* no idea whether _REENTRANT is always set, just invent a new flag */
# define TEST_GETHOSTBYFOO_REENTRANT
#endif
#if defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(TEST_GETHOSTBYFOO_REENTRANT)
#include <sys/types.h> #include <sys/types.h>
#include <netdb.h> #include <netdb.h>
int main(void) int main(void)
{ {
const char *address = "example.com"; char *address = "example.com";
int length = 0;
int type = 0;
struct hostent h; struct hostent h;
int rc = 0; int rc = 0;
#if defined(HAVE_GETHOSTBYNAME_R_3) || \ #if defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
struct hostent_data hdata; struct hostent_data hdata;
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \ #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \ defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_6) || \ defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
char buffer[8192]; char buffer[8192];
struct hostent *hp;
int h_errnop; int h_errnop;
struct hostent *hp;
#endif #endif
#if defined(HAVE_GETHOSTBYNAME_R_3) || \ #if defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
rc = gethostbyname_r(address, &h, &hdata); rc = gethostbyname_r(address, &h, &hdata);
(void)hdata;
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \ #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop); rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
(void)hp; /* not used for test */ (void)hp; /* not used for test */
(void)h_errnop;
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \ #elif defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop); rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
(void)hp;
(void)h_errnop;
#endif #endif
(void)h;
(void)length;
(void)type;
(void)rc; (void)rc;
return 0; return 0;
} }
#endif #endif
#ifdef HAVE_IN_ADDR_T
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main(void)
{
if((in_addr_t *) 0)
return 0;
if(sizeof(in_addr_t))
return 0;
;
return 0;
}
#endif
#ifdef HAVE_BOOL_T #ifdef HAVE_BOOL_T
#ifdef HAVE_SYS_TYPES_H #ifdef HAVE_SYS_TYPES_H
#include <sys/types.h> #include <sys/types.h>
@ -110,7 +130,10 @@ int main(void)
#endif #endif
int main(void) int main(void)
{ {
return (int)sizeof(bool *); if(sizeof(bool *))
return 0;
;
return 0;
} }
#endif #endif
@ -123,20 +146,18 @@ int main(void) { return 0; }
#endif #endif
#ifdef HAVE_FILE_OFFSET_BITS #ifdef HAVE_FILE_OFFSET_BITS
#undef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#include <sys/types.h> #include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly. /* Check that off_t can represent 2**63 - 1 correctly.
We cannot simply define LARGE_OFF_T to be 9223372036854775807, We cannot simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */ incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
static int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
LARGE_OFF_T % 2147483647 == 1) && LARGE_OFF_T % 2147483647 == 1)
? 1 : -1]; ? 1 : -1];
int main(void) int main(void) { return 0; }
{
(void)off_t_is_large;
return 0;
}
#endif #endif
#ifdef HAVE_IOCTLSOCKET #ifdef HAVE_IOCTLSOCKET
@ -146,9 +167,9 @@ int main(void)
int main(void) int main(void)
{ {
/* ioctlsocket source code */ /* ioctlsocket source code */
int socket = -1; int socket;
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags); unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
(void)flags; ;
return 0; return 0;
} }
@ -161,6 +182,7 @@ int main(void)
/* IoctlSocket source code */ /* IoctlSocket source code */
if(0 != IoctlSocket(0, 0, 0)) if(0 != IoctlSocket(0, 0, 0))
return 1; return 1;
;
return 0; return 0;
} }
#endif #endif
@ -176,7 +198,7 @@ int main(void)
long flags = 0; long flags = 0;
if(0 != IoctlSocket(0, FIONBIO, &flags)) if(0 != IoctlSocket(0, FIONBIO, &flags))
return 1; return 1;
(void)flags; ;
return 0; return 0;
} }
#endif #endif
@ -190,7 +212,7 @@ int main(void)
unsigned long flags = 0; unsigned long flags = 0;
if(0 != ioctlsocket(0, FIONBIO, &flags)) if(0 != ioctlsocket(0, FIONBIO, &flags))
return 1; return 1;
(void)flags; ;
return 0; return 0;
} }
#endif #endif
@ -217,7 +239,7 @@ int main(void)
int flags = 0; int flags = 0;
if(0 != ioctl(0, FIONBIO, &flags)) if(0 != ioctl(0, FIONBIO, &flags))
return 1; return 1;
(void)flags; ;
return 0; return 0;
} }
#endif #endif
@ -245,7 +267,7 @@ int main(void)
struct ifreq ifr; struct ifreq ifr;
if(0 != ioctl(0, SIOCGIFADDR, &ifr)) if(0 != ioctl(0, SIOCGIFADDR, &ifr))
return 1; return 1;
(void)ifr; ;
return 0; return 0;
} }
#endif #endif
@ -264,6 +286,7 @@ int main(void)
{ {
if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0)) if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
return 1; return 1;
;
return 0; return 0;
} }
#endif #endif
@ -272,7 +295,7 @@ int main(void)
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
static void check(char c) { (void)c; } void check(char c) {}
int main(void) int main(void)
{ {
@ -288,7 +311,7 @@ int main(void)
#include <errno.h> #include <errno.h>
/* Float, because a pointer cannot be implicitly cast to float */ /* Float, because a pointer cannot be implicitly cast to float */
static void check(float f) { (void)f; } void check(float f) {}
int main(void) int main(void)
{ {
@ -312,7 +335,7 @@ int main(void)
#include <sys/xattr.h> /* header from libc, not from libattr */ #include <sys/xattr.h> /* header from libc, not from libattr */
int main(void) int main(void)
{ {
fsetxattr(0, "", 0, 0, 0); fsetxattr(0, 0, 0, 0, 0);
return 0; return 0;
} }
#endif #endif
@ -321,9 +344,8 @@ int main(void)
#include <time.h> #include <time.h>
int main(void) int main(void)
{ {
struct timespec ts; struct timespec ts = {0, 0};
(void)clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
(void)ts;
return 0; return 0;
} }
#endif #endif

View File

@ -51,7 +51,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(BROTLI_FOUND AND BROTLIDEC_FOUND) if(BROTLI_FOUND AND BROTLIDEC_FOUND)
set(Brotli_FOUND TRUE)
list(APPEND BROTLIDEC_LIBRARIES ${BROTLI_LIBRARIES}) # order is significant: brotlidec then brotlicommon list(APPEND BROTLIDEC_LIBRARIES ${BROTLI_LIBRARIES}) # order is significant: brotlidec then brotlicommon
list(REVERSE BROTLIDEC_LIBRARIES) list(REVERSE BROTLIDEC_LIBRARIES)
list(REMOVE_DUPLICATES BROTLIDEC_LIBRARIES) list(REMOVE_DUPLICATES BROTLIDEC_LIBRARIES)

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(CARES_FOUND) if(CARES_FOUND)
set(Cares_FOUND TRUE)
string(REPLACE ";" " " CARES_CFLAGS "${CARES_CFLAGS}") string(REPLACE ";" " " CARES_CFLAGS "${CARES_CFLAGS}")
message(STATUS "Found Cares (via pkg-config): ${CARES_INCLUDE_DIRS} (found version \"${CARES_VERSION}\")") message(STATUS "Found Cares (via pkg-config): ${CARES_INCLUDE_DIRS} (found version \"${CARES_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBGSASL_FOUND) if(LIBGSASL_FOUND)
set(Libgsasl_FOUND TRUE)
string(REPLACE ";" " " LIBGSASL_CFLAGS "${LIBGSASL_CFLAGS}") string(REPLACE ";" " " LIBGSASL_CFLAGS "${LIBGSASL_CFLAGS}")
message(STATUS "Found Libgsasl (via pkg-config): ${LIBGSASL_INCLUDE_DIRS} (found version \"${LIBGSASL_VERSION}\")") message(STATUS "Found Libgsasl (via pkg-config): ${LIBGSASL_INCLUDE_DIRS} (found version \"${LIBGSASL_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBIDN2_FOUND) if(LIBIDN2_FOUND)
set(Libidn2_FOUND TRUE)
string(REPLACE ";" " " LIBIDN2_CFLAGS "${LIBIDN2_CFLAGS}") string(REPLACE ";" " " LIBIDN2_CFLAGS "${LIBIDN2_CFLAGS}")
message(STATUS "Found Libidn2 (via pkg-config): ${LIBIDN2_INCLUDE_DIRS} (found version \"${LIBIDN2_VERSION}\")") message(STATUS "Found Libidn2 (via pkg-config): ${LIBIDN2_INCLUDE_DIRS} (found version \"${LIBIDN2_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBPSL_FOUND AND LIBPSL_INCLUDE_DIRS) if(LIBPSL_FOUND AND LIBPSL_INCLUDE_DIRS)
set(Libpsl_FOUND TRUE)
string(REPLACE ";" " " LIBPSL_CFLAGS "${LIBPSL_CFLAGS}") string(REPLACE ";" " " LIBPSL_CFLAGS "${LIBPSL_CFLAGS}")
message(STATUS "Found Libpsl (via pkg-config): ${LIBPSL_INCLUDE_DIRS} (found version \"${LIBPSL_VERSION}\")") message(STATUS "Found Libpsl (via pkg-config): ${LIBPSL_INCLUDE_DIRS} (found version \"${LIBPSL_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBRTMP_FOUND AND LIBRTMP_INCLUDE_DIRS) if(LIBRTMP_FOUND AND LIBRTMP_INCLUDE_DIRS)
set(Librtmp_FOUND TRUE)
string(REPLACE ";" " " LIBRTMP_CFLAGS "${LIBRTMP_CFLAGS}") string(REPLACE ";" " " LIBRTMP_CFLAGS "${LIBRTMP_CFLAGS}")
message(STATUS "Found Librtmp (via pkg-config): ${LIBRTMP_INCLUDE_DIRS} (found version \"${LIBRTMP_VERSION}\")") message(STATUS "Found Librtmp (via pkg-config): ${LIBRTMP_INCLUDE_DIRS} (found version \"${LIBRTMP_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBSSH_FOUND) if(LIBSSH_FOUND)
set(Libssh_FOUND TRUE)
string(REPLACE ";" " " LIBSSH_CFLAGS "${LIBSSH_CFLAGS}") string(REPLACE ";" " " LIBSSH_CFLAGS "${LIBSSH_CFLAGS}")
message(STATUS "Found Libssh (via pkg-config): ${LIBSSH_INCLUDE_DIRS} (found version \"${LIBSSH_VERSION}\")") message(STATUS "Found Libssh (via pkg-config): ${LIBSSH_INCLUDE_DIRS} (found version \"${LIBSSH_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBSSH2_FOUND AND LIBSSH2_INCLUDE_DIRS) if(LIBSSH2_FOUND AND LIBSSH2_INCLUDE_DIRS)
set(Libssh2_FOUND TRUE)
string(REPLACE ";" " " LIBSSH2_CFLAGS "${LIBSSH2_CFLAGS}") string(REPLACE ";" " " LIBSSH2_CFLAGS "${LIBSSH2_CFLAGS}")
message(STATUS "Found Libssh2 (via pkg-config): ${LIBSSH2_INCLUDE_DIRS} (found version \"${LIBSSH2_VERSION}\")") message(STATUS "Found Libssh2 (via pkg-config): ${LIBSSH2_INCLUDE_DIRS} (found version \"${LIBSSH2_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(LIBUV_FOUND) if(LIBUV_FOUND)
set(Libuv_FOUND TRUE)
string(REPLACE ";" " " LIBUV_CFLAGS "${LIBUV_CFLAGS}") string(REPLACE ";" " " LIBUV_CFLAGS "${LIBUV_CFLAGS}")
message(STATUS "Found Libuv (via pkg-config): ${LIBUV_INCLUDE_DIRS} (found version \"${LIBUV_VERSION}\")") message(STATUS "Found Libuv (via pkg-config): ${LIBUV_INCLUDE_DIRS} (found version \"${LIBUV_VERSION}\")")
else() else()

View File

@ -60,7 +60,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(MBEDTLS_FOUND AND MBEDX509_FOUND AND MBEDCRYPTO_FOUND) if(MBEDTLS_FOUND AND MBEDX509_FOUND AND MBEDCRYPTO_FOUND)
set(MbedTLS_FOUND TRUE)
list(APPEND MBEDTLS_LIBRARIES ${MBEDX509_LIBRARIES} ${MBEDCRYPTO_LIBRARIES}) list(APPEND MBEDTLS_LIBRARIES ${MBEDX509_LIBRARIES} ${MBEDCRYPTO_LIBRARIES})
list(REVERSE MBEDTLS_LIBRARIES) list(REVERSE MBEDTLS_LIBRARIES)
list(REMOVE_DUPLICATES MBEDTLS_LIBRARIES) list(REMOVE_DUPLICATES MBEDTLS_LIBRARIES)

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(NETTLE_FOUND) if(NETTLE_FOUND)
set(Nettle_FOUND TRUE)
string(REPLACE ";" " " NETTLE_CFLAGS "${NETTLE_CFLAGS}") string(REPLACE ";" " " NETTLE_CFLAGS "${NETTLE_CFLAGS}")
message(STATUS "Found Nettle (via pkg-config): ${NETTLE_INCLUDE_DIRS} (found version \"${NETTLE_VERSION}\")") message(STATUS "Found Nettle (via pkg-config): ${NETTLE_INCLUDE_DIRS} (found version \"${NETTLE_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(QUICHE_FOUND) if(QUICHE_FOUND)
set(Quiche_FOUND TRUE)
string(REPLACE ";" " " QUICHE_CFLAGS "${QUICHE_CFLAGS}") string(REPLACE ";" " " QUICHE_CFLAGS "${QUICHE_CFLAGS}")
message(STATUS "Found Quiche (via pkg-config): ${QUICHE_INCLUDE_DIRS} (found version \"${QUICHE_VERSION}\")") message(STATUS "Found Quiche (via pkg-config): ${QUICHE_INCLUDE_DIRS} (found version \"${QUICHE_VERSION}\")")
else() else()

View File

@ -48,7 +48,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(RUSTLS_FOUND) if(RUSTLS_FOUND)
set(Rustls_FOUND TRUE)
string(REPLACE ";" " " RUSTLS_CFLAGS "${RUSTLS_CFLAGS}") string(REPLACE ";" " " RUSTLS_CFLAGS "${RUSTLS_CFLAGS}")
message(STATUS "Found Rustls (via pkg-config): ${RUSTLS_INCLUDE_DIRS} (found version \"${RUSTLS_VERSION}\")") message(STATUS "Found Rustls (via pkg-config): ${RUSTLS_INCLUDE_DIRS} (found version \"${RUSTLS_VERSION}\")")
else() else()

View File

@ -57,7 +57,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(WOLFSSL_FOUND) if(WOLFSSL_FOUND)
set(WolfSSL_FOUND TRUE)
string(REPLACE ";" " " WOLFSSL_CFLAGS "${WOLFSSL_CFLAGS}") string(REPLACE ";" " " WOLFSSL_CFLAGS "${WOLFSSL_CFLAGS}")
message(STATUS "Found WolfSSL (via pkg-config): ${WOLFSSL_INCLUDE_DIRS} (found version \"${WOLFSSL_VERSION}\")") message(STATUS "Found WolfSSL (via pkg-config): ${WOLFSSL_INCLUDE_DIRS} (found version \"${WOLFSSL_VERSION}\")")
else() else()

View File

@ -57,7 +57,6 @@ if(CURL_USE_PKGCONFIG AND
endif() endif()
if(ZSTD_FOUND) if(ZSTD_FOUND)
set(Zstd_FOUND TRUE)
string(REPLACE ";" " " ZSTD_CFLAGS "${ZSTD_CFLAGS}") string(REPLACE ";" " " ZSTD_CFLAGS "${ZSTD_CFLAGS}")
message(STATUS "Found Zstd (via pkg-config): ${ZSTD_INCLUDE_DIRS} (found version \"${ZSTD_VERSION}\")") message(STATUS "Found Zstd (via pkg-config): ${ZSTD_INCLUDE_DIRS} (found version \"${ZSTD_VERSION}\")")
else() else()

View File

@ -34,14 +34,11 @@ macro(check_include_file_concat_curl _file _variable)
endif() endif()
endmacro() endmacro()
set(CURL_TEST_DEFINES "") # Initialize global variable
# For other curl specific tests, use this macro. # For other curl specific tests, use this macro.
# Return result in variable: CURL_TEST_OUTPUT # Return result in variable: CURL_TEST_OUTPUT
macro(curl_internal_test _curl_test) macro(curl_internal_test _curl_test)
if(NOT DEFINED "${_curl_test}") if(NOT DEFINED "${_curl_test}")
string(REPLACE ";" " " _cmake_required_definitions "${CMAKE_REQUIRED_DEFINITIONS}") string(REPLACE ";" " " _cmake_required_definitions "${CMAKE_REQUIRED_DEFINITIONS}")
set(_curl_test_add_libraries "")
if(CMAKE_REQUIRED_LIBRARIES) if(CMAKE_REQUIRED_LIBRARIES)
set(_curl_test_add_libraries set(_curl_test_add_libraries
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
@ -87,10 +84,3 @@ macro(curl_required_libpaths _libpaths_arg)
list(APPEND CMAKE_REQUIRED_LINK_DIRECTORIES "${_libpaths_arg}") list(APPEND CMAKE_REQUIRED_LINK_DIRECTORIES "${_libpaths_arg}")
endif() endif()
endmacro() endmacro()
# Pre-fill variables set by a check_type_size() call.
macro(curl_prefill_type_size _type _size)
set(HAVE_SIZEOF_${_type} TRUE)
set(SIZEOF_${_type} ${_size})
set(SIZEOF_${_type}_CODE "#define SIZEOF_${_type} ${_size}")
endmacro()

View File

@ -65,9 +65,6 @@ endif()
set(_source_epilogue "#undef inline") set(_source_epilogue "#undef inline")
curl_add_header_include(HAVE_SYS_TIME_H "sys/time.h") curl_add_header_include(HAVE_SYS_TIME_H "sys/time.h")
check_c_source_compiles("${_source_epilogue} check_c_source_compiles("${_source_epilogue}
#ifdef _MSC_VER
#include <winsock2.h>
#endif
#include <time.h> #include <time.h>
int main(void) int main(void)
{ {
@ -107,10 +104,11 @@ if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE)
check_c_source_compiles("${_source_epilogue} check_c_source_compiles("${_source_epilogue}
int main(void) int main(void)
{ {
#ifndef h_errno #ifdef h_errno
return 0;
#else
#error force compilation error #error force compilation error
#endif #endif
return 0;
}" HAVE_H_ERRNO) }" HAVE_H_ERRNO)
if(NOT HAVE_H_ERRNO) if(NOT HAVE_H_ERRNO)
@ -126,11 +124,12 @@ if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE)
int main(void) int main(void)
{ {
#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) #if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L)
return 0;
#elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) #elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700)
return 0;
#else #else
#error force compilation error #error force compilation error
#endif #endif
return 0;
}" HAVE_H_ERRNO_SBS_ISSUE_7) }" HAVE_H_ERRNO_SBS_ISSUE_7)
endif() endif()
endif() endif()

View File

@ -44,15 +44,6 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND _picky "-Werror-implicit-function-declaration") # clang 1.0 gcc 2.95 list(APPEND _picky "-Werror-implicit-function-declaration") # clang 1.0 gcc 2.95
endif() endif()
if(MSVC)
if(CMAKE_C_FLAGS MATCHES "[/-]W[0-4]")
string(REGEX REPLACE "[/-]W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
endif()
list(APPEND _picky "-W4")
elseif(BORLAND)
list(APPEND _picky "-w-") # Disable warnings on Borland to avoid changing 3rd party code.
endif()
if(PICKY_COMPILER) if(PICKY_COMPILER)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
@ -122,7 +113,6 @@ if(PICKY_COMPILER)
-Wtype-limits # clang 2.7 gcc 4.3 -Wtype-limits # clang 2.7 gcc 4.3
-Wunreachable-code # clang 2.7 gcc 4.1 -Wunreachable-code # clang 2.7 gcc 4.1
# -Wunused-macros # clang 2.7 gcc 4.1 # Not practical # -Wunused-macros # clang 2.7 gcc 4.1 # Not practical
# -Wno-error=unused-macros # clang 2.7 gcc 4.1
-Wunused-parameter # clang 2.7 gcc 4.1 -Wunused-parameter # clang 2.7 gcc 4.1
-Wvla # clang 2.8 gcc 4.3 -Wvla # clang 2.8 gcc 4.3
) )
@ -182,19 +172,12 @@ if(PICKY_COMPILER)
-Wold-style-declaration # gcc 4.3 -Wold-style-declaration # gcc 4.3
-Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0 -Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0
-Wstrict-aliasing=3 # gcc 4.0 -Wstrict-aliasing=3 # gcc 4.0
-ftree-vrp # gcc 4.3 (required for -Warray-bounds, included in -Wall)
) )
endif() endif()
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5 AND MINGW)
list(APPEND _picky_enable list(APPEND _picky_enable
-Wjump-misses-init # gcc 4.5 -Wno-pedantic-ms-format # gcc 4.5 (MinGW-only)
) )
if(MINGW)
list(APPEND _picky_enable
-Wno-pedantic-ms-format # gcc 4.5 (MinGW-only)
)
endif()
endif() endif()
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8)
list(APPEND _picky_enable list(APPEND _picky_enable
@ -205,7 +188,7 @@ if(PICKY_COMPILER)
endif() endif()
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
list(APPEND _picky_enable list(APPEND _picky_enable
-Warray-bounds=2 # clang 3.0 gcc 5.0 (clang default: -Warray-bounds) -Warray-bounds=2 -ftree-vrp # clang 3.0 gcc 5.0 (clang default: -Warray-bounds)
) )
endif() endif()
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0)
@ -269,9 +252,6 @@ if(PICKY_COMPILER)
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3 AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3 AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8)
list(APPEND _picky "-Wno-type-limits") # Avoid false positives list(APPEND _picky "-Wno-type-limits") # Avoid false positives
endif() endif()
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.1 AND CMAKE_C_COMPILER_VERSION VERSION_LESS 5.5)
list(APPEND _picky "-Wno-conversion") # Avoid false positives
endif()
endif() endif()
endif() endif()
endif() endif()
@ -294,6 +274,6 @@ endif()
if(_picky) if(_picky)
string(REPLACE ";" " " _picky "${_picky}") string(REPLACE ";" " " _picky "${_picky}")
string(APPEND CMAKE_C_FLAGS " ${_picky}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_picky}")
message(STATUS "Picky compiler options: ${_picky}") message(STATUS "Picky compiler options: ${_picky}")
endif() endif()

View File

@ -47,7 +47,7 @@ function(curl_dumpvars)
if(_var_advanced) if(_var_advanced)
set(_var_advanced " [adv]") set(_var_advanced " [adv]")
endif() endif()
message("${_var}${_var_type}${_var_advanced} = '${${_var}}'") message("${_var}${_var_type}${_var_advanced} = ${${_var}}")
endforeach() endforeach()
message("::endgroup::") message("::endgroup::")
endfunction() endfunction()

View File

@ -1,311 +0,0 @@
#***************************************************************************
# _ _ ____ _
# 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
#
###########################################################################
# Based on CI runs for Cygwin/MSYS2, Linux, macOS, FreeBSD, NetBSD, OpenBSD
if(NOT UNIX)
message(FATAL_ERROR "This file should be included on Unix platforms only")
endif()
set(HAVE_ALARM 1)
if(ANDROID)
set(HAVE_ARC4RANDOM 1)
else()
set(HAVE_ARC4RANDOM 0)
endif()
set(HAVE_ARPA_INET_H 1)
set(HAVE_ATOMIC 1)
set(HAVE_BASENAME 1)
set(HAVE_BOOL_T 1)
if(NOT APPLE)
set(HAVE_CLOCK_GETTIME_MONOTONIC 1)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1)
else()
set(HAVE_CLOCK_GETTIME_MONOTONIC_RAW 0)
endif()
endif()
set(HAVE_CLOSESOCKET 0)
set(HAVE_DECL_FSEEKO 1)
set(HAVE_DIRENT_H 1)
if(APPLE OR
CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_EVENTFD 0)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
set(HAVE_EVENTFD 1)
endif()
set(HAVE_FCNTL 1)
set(HAVE_FCNTL_H 1)
set(HAVE_FCNTL_O_NONBLOCK 1)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(HAVE_FILE_OFFSET_BITS 0)
else()
set(HAVE_FILE_OFFSET_BITS 1)
endif()
set(HAVE_FNMATCH 1)
set(HAVE_FREEADDRINFO 1)
set(HAVE_FSEEKO 1)
if(APPLE)
set(HAVE_FSETXATTR 1)
set(HAVE_FSETXATTR_5 0)
set(HAVE_FSETXATTR_6 1)
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_FSETXATTR 0)
set(HAVE_FSETXATTR_5 0)
set(HAVE_FSETXATTR_6 0)
elseif(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
set(HAVE_FSETXATTR 1)
set(HAVE_FSETXATTR_5 1)
set(HAVE_FSETXATTR_6 0)
endif()
set(HAVE_FTRUNCATE 1)
set(HAVE_GETADDRINFO 1)
if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_GETADDRINFO_THREADSAFE 0)
elseif(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
set(HAVE_GETADDRINFO_THREADSAFE 1)
endif()
set(HAVE_GETEUID 1)
if(APPLE OR
CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_GETHOSTBYNAME_R 0)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
set(HAVE_GETHOSTBYNAME_R 1)
endif()
set(HAVE_GETHOSTBYNAME_R_3 0)
set(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0)
set(HAVE_GETHOSTBYNAME_R_5 0)
set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_GETHOSTBYNAME_R_6 1)
set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 1)
else()
set(HAVE_GETHOSTBYNAME_R_6 0)
set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
endif()
set(HAVE_GETHOSTNAME 1)
if(NOT ANDROID OR ANDROID_PLATFORM_LEVEL GREATER_EQUAL 24)
set(HAVE_GETIFADDRS 1)
else()
set(HAVE_GETIFADDRS 0)
endif()
if(APPLE OR
CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_GETPASS_R 0)
elseif(CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
set(HAVE_GETPASS_R 1)
endif()
set(HAVE_GETPEERNAME 1)
set(HAVE_GETPPID 1)
set(HAVE_GETPWUID 1)
set(HAVE_GETPWUID_R 1)
set(HAVE_GETRLIMIT 1)
set(HAVE_GETSOCKNAME 1)
set(HAVE_GETTIMEOFDAY 1)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_GLIBC_STRERROR_R 1)
else()
set(HAVE_GLIBC_STRERROR_R 0)
endif()
set(HAVE_GMTIME_R 1)
set(HAVE_IFADDRS_H 1)
set(HAVE_IF_NAMETOINDEX 1)
set(HAVE_INET_NTOP 1)
set(HAVE_INET_PTON 1)
set(HAVE_IOCTLSOCKET 0)
set(HAVE_IOCTLSOCKET_CAMEL 0)
set(HAVE_IOCTLSOCKET_CAMEL_FIONBIO 0)
set(HAVE_IOCTLSOCKET_FIONBIO 0)
set(HAVE_IOCTL_FIONBIO 1)
set(HAVE_IOCTL_SIOCGIFADDR 1)
if(CYGWIN)
set(HAVE_IO_H 1)
else()
set(HAVE_IO_H 0)
endif()
set(HAVE_LIBGEN_H 1)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_LINUX_TCP_H 1)
else()
set(HAVE_LINUX_TCP_H 0)
endif()
set(HAVE_LOCALE_H 1)
set(HAVE_LONGLONG 1)
if(APPLE)
set(HAVE_MACH_ABSOLUTE_TIME 1)
endif()
if(APPLE OR
CYGWIN)
set(HAVE_MEMRCHR 0)
else()
set(HAVE_MEMRCHR 1)
endif()
set(HAVE_MSG_NOSIGNAL 1)
set(HAVE_NETDB_H 1)
if(ANDROID)
set(HAVE_NETINET_IN6_H 1)
else()
set(HAVE_NETINET_IN6_H 0)
endif()
set(HAVE_NETINET_IN_H 1)
set(HAVE_NETINET_TCP_H 1)
set(HAVE_NETINET_UDP_H 1)
set(HAVE_NET_IF_H 1)
set(HAVE_OPENDIR 1)
set(HAVE_PIPE 1)
set(HAVE_POLL 1)
set(HAVE_POLL_H 1)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_POSIX_STRERROR_R 0)
else()
set(HAVE_POSIX_STRERROR_R 1)
endif()
set(HAVE_PWD_H 1)
set(HAVE_REALPATH 1)
set(HAVE_RECV 1)
set(HAVE_SA_FAMILY_T 1)
set(HAVE_SCHED_YIELD 1)
set(HAVE_SELECT 1)
set(HAVE_SEND 1)
if(APPLE OR
CYGWIN)
set(HAVE_SENDMMSG 0)
else()
set(HAVE_SENDMMSG 1)
endif()
set(HAVE_SENDMSG 1)
set(HAVE_SETLOCALE 1)
if(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_SETMODE 0)
else()
set(HAVE_SETMODE 1)
endif()
set(HAVE_SETRLIMIT 1)
set(HAVE_SETSOCKOPT_SO_NONBLOCK 0)
set(HAVE_SIGACTION 1)
set(HAVE_SIGINTERRUPT 1)
set(HAVE_SIGNAL 1)
set(HAVE_SIGSETJMP 1)
set(HAVE_SNPRINTF 1)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(HAVE_SOCKADDR_IN6_SIN6_ADDR 0)
else()
set(HAVE_SOCKADDR_IN6_SIN6_ADDR 1)
endif()
set(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1)
set(HAVE_SOCKET 1)
set(HAVE_SOCKETPAIR 1)
set(HAVE_STDATOMIC_H 1)
set(HAVE_STDBOOL_H 1)
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(HAVE_STDDEF_H 0)
set(HAVE_STDINT_H 0)
else()
set(HAVE_STDDEF_H 1)
set(HAVE_STDINT_H 1)
endif()
set(HAVE_STRCASECMP 1)
set(HAVE_STRCMPI 0)
set(HAVE_STRDUP 1)
set(HAVE_STRERROR_R 1)
set(HAVE_STRICMP 0)
set(HAVE_STRINGS_H 1)
if(_CURL_OLD_LINUX)
set(HAVE_STROPTS_H 1)
else()
set(HAVE_STROPTS_H 0) # glibc 2.30 or newer. https://sourceware.org/legacy-ml/libc-alpha/2019-08/msg00029.html
endif()
set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
set(HAVE_STRUCT_TIMEVAL 1)
if(ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(HAVE_SUSECONDS_T 1)
endif()
if(APPLE OR
CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(HAVE_SYS_EVENTFD_H 0)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
set(HAVE_SYS_EVENTFD_H 1)
endif()
if(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_SYS_FILIO_H 0)
else()
set(HAVE_SYS_FILIO_H 1)
endif()
set(HAVE_SYS_IOCTL_H 1)
set(HAVE_SYS_PARAM_H 1)
set(HAVE_SYS_POLL_H 1)
set(HAVE_SYS_RESOURCE_H 1)
set(HAVE_SYS_SELECT_H 1)
set(HAVE_SYS_SOCKET_H 1)
if(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_SYS_SOCKIO_H 0)
else()
set(HAVE_SYS_SOCKIO_H 1)
endif()
set(HAVE_SYS_STAT_H 1)
set(HAVE_SYS_TIME_H 1)
set(HAVE_SYS_TYPES_H 1)
set(HAVE_SYS_UN_H 1)
if(CYGWIN)
set(HAVE_SYS_UTIME_H 1)
else()
set(HAVE_SYS_UTIME_H 0)
endif()
set(HAVE_TERMIOS_H 1)
if(CYGWIN OR
CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(HAVE_TERMIO_H 1)
else()
set(HAVE_TERMIO_H 0)
endif()
set(HAVE_TIME_T_UNSIGNED 0)
set(HAVE_UNISTD_H 1)
set(HAVE_UTIME 1)
set(HAVE_UTIMES 1)
set(HAVE_UTIME_H 1)
set(HAVE_WRITABLE_ARGV 1)
if(CYGWIN)
set(HAVE__SETMODE 1)
endif()
set(STDC_HEADERS 1)
set(USE_UNIX_SOCKETS 1)

View File

@ -35,6 +35,7 @@ if(MINGW)
set(HAVE_STDINT_H 1) # detected by CMake internally in check_type_size() set(HAVE_STDINT_H 1) # detected by CMake internally in check_type_size()
set(HAVE_STDBOOL_H 1) set(HAVE_STDBOOL_H 1)
set(HAVE_BOOL_T "${HAVE_STDBOOL_H}") set(HAVE_BOOL_T "${HAVE_STDBOOL_H}")
set(HAVE_STRTOLL 1)
set(HAVE_BASENAME 1) set(HAVE_BASENAME 1)
set(HAVE_FTRUNCATE 1) set(HAVE_FTRUNCATE 1)
set(HAVE_SYS_PARAM_H 1) set(HAVE_SYS_PARAM_H 1)
@ -44,6 +45,21 @@ if(MINGW)
set(HAVE_UTIME_H 1) # wrapper to sys/utime.h set(HAVE_UTIME_H 1) # wrapper to sys/utime.h
set(HAVE_DIRENT_H 1) set(HAVE_DIRENT_H 1)
set(HAVE_OPENDIR 1) set(HAVE_OPENDIR 1)
if(MINGW64_VERSION)
if(NOT MINGW64_VERSION VERSION_LESS 4.0)
set(HAVE_STRTOK_R 1)
else()
set(HAVE_STRTOK_R 0)
endif()
endif()
if((CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) OR
(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6))
set(HAVE_STDATOMIC_H 1)
set(HAVE_ATOMIC 1)
else()
set(HAVE_STDATOMIC_H 0)
set(HAVE_ATOMIC 0)
endif()
else() else()
set(HAVE_LIBGEN_H 0) set(HAVE_LIBGEN_H 0)
set(HAVE_FTRUNCATE 0) set(HAVE_FTRUNCATE 0)
@ -57,36 +73,32 @@ else()
if(MSVC) if(MSVC)
set(HAVE_UNISTD_H 0) set(HAVE_UNISTD_H 0)
set(HAVE_STDDEF_H 1) # detected by CMake internally in check_type_size() set(HAVE_STDDEF_H 1) # detected by CMake internally in check_type_size()
if(MSVC_VERSION GREATER_EQUAL 1600) set(HAVE_STDATOMIC_H 0)
if(NOT MSVC_VERSION LESS 1600)
set(HAVE_STDINT_H 1) # detected by CMake internally in check_type_size() set(HAVE_STDINT_H 1) # detected by CMake internally in check_type_size()
else() else()
set(HAVE_STDINT_H 0) # detected by CMake internally in check_type_size() set(HAVE_STDINT_H 0) # detected by CMake internally in check_type_size()
endif() endif()
if(MSVC_VERSION GREATER_EQUAL 1800) if(NOT MSVC_VERSION LESS 1800)
set(HAVE_STDBOOL_H 1) set(HAVE_STDBOOL_H 1)
set(HAVE_STRTOLL 1)
else() else()
set(HAVE_STDBOOL_H 0) set(HAVE_STDBOOL_H 0)
set(HAVE_STRTOLL 0)
endif() endif()
set(HAVE_BOOL_T "${HAVE_STDBOOL_H}") set(HAVE_BOOL_T "${HAVE_STDBOOL_H}")
if(MSVC_VERSION GREATER_EQUAL 1900) if(NOT MSVC_VERSION LESS 1900)
set(HAVE_SNPRINTF 1) set(HAVE_SNPRINTF 1)
else() else()
set(HAVE_SNPRINTF 0) set(HAVE_SNPRINTF 0)
endif() endif()
set(HAVE_BASENAME 0) set(HAVE_BASENAME 0)
set(HAVE_STRTOK_R 0)
set(HAVE_FILE_OFFSET_BITS 0)
set(HAVE_ATOMIC 0)
endif() endif()
endif() endif()
if((CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) OR
(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6))
# MinGW or clang-cl
set(HAVE_STDATOMIC_H 1)
set(HAVE_ATOMIC 1)
else()
set(HAVE_STDATOMIC_H 0)
set(HAVE_ATOMIC 0)
endif()
# Available in Windows XP and newer # Available in Windows XP and newer
set(HAVE_GETADDRINFO 1) set(HAVE_GETADDRINFO 1)
set(HAVE_FREEADDRINFO 1) set(HAVE_FREEADDRINFO 1)
@ -186,59 +198,8 @@ set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
set(HAVE_GETHOSTBYNAME_R_6 0) set(HAVE_GETHOSTBYNAME_R_6 0)
set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0) set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
set(HAVE_IN_ADDR_T 0)
set(STDC_HEADERS 1) set(STDC_HEADERS 1)
set(HAVE_SIZEOF_SUSECONDS_T 0) set(HAVE_SIZEOF_SUSECONDS_T 0)
set(HAVE_SIZEOF_SA_FAMILY_T 0) set(HAVE_SIZEOF_SA_FAMILY_T 0)
if(MINGW OR MSVC)
curl_prefill_type_size("INT" 4)
curl_prefill_type_size("LONG" 4)
curl_prefill_type_size("LONG_LONG" 8)
curl_prefill_type_size("__INT64" 8)
curl_prefill_type_size("CURL_OFF_T" 8)
# CURL_SOCKET_T, SIZE_T: 8 for _WIN64, 4 otherwise
# TIME_T: 8 for _WIN64 or UCRT or MSVC and not Windows CE, 4 otherwise
# Also 4 for non-UCRT 32-bit when _USE_32BIT_TIME_T is set.
# mingw-w64 sets _USE_32BIT_TIME_T unless __MINGW_USE_VC2005_COMPAT is explicit defined.
if(MSVC)
set(HAVE_SIZEOF_SSIZE_T 0)
set(HAVE_FILE_OFFSET_BITS 0)
curl_prefill_type_size("OFF_T" 4)
curl_prefill_type_size("ADDRESS_FAMILY" 2)
else()
# SSIZE_T: 8 for _WIN64, 4 otherwise
if(MINGW64_VERSION)
if(NOT MINGW64_VERSION VERSION_LESS 3.0)
set(HAVE_FILE_OFFSET_BITS 1)
curl_prefill_type_size("OFF_T" 8)
endif()
if(NOT MINGW64_VERSION VERSION_LESS 2.0)
curl_prefill_type_size("ADDRESS_FAMILY" 2)
else()
set(HAVE_SIZEOF_ADDRESS_FAMILY 0)
endif()
endif()
endif()
endif()
if(WINCE) # Windows CE exceptions
set(HAVE_LOCALE_H 0)
set(HAVE_GETADDRINFO 0)
set(HAVE_FREEADDRINFO 0)
set(HAVE_SETLOCALE 0)
set(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 0)
set(HAVE_SIGNAL 0)
set(HAVE_SETMODE 0)
curl_prefill_type_size("CURL_SOCKET_T" 4)
curl_prefill_type_size("TIME_T" 4)
curl_prefill_type_size("SIZE_T" 4)
if(MINGW32CE)
set(HAVE_STRTOK_R 0)
set(HAVE__SETMODE 0)
set(HAVE_FILE_OFFSET_BITS 0)
set(HAVE_SIZEOF_ADDRESS_FAMILY 0)
curl_prefill_type_size("SSIZE_T" 4)
curl_prefill_type_size("OFF_T" 4)
endif()
endif()

File diff suppressed because it is too large Load Diff

View File

@ -60,12 +60,8 @@ CMAKE_DIST = \
CMake/OtherTests.cmake \ CMake/OtherTests.cmake \
CMake/PickyWarnings.cmake \ CMake/PickyWarnings.cmake \
CMake/Utilities.cmake \ CMake/Utilities.cmake \
CMake/unix-cache.cmake \
CMake/win32-cache.cmake \ CMake/win32-cache.cmake \
CMakeLists.txt \ CMakeLists.txt
tests/cmake/CMakeLists.txt \
tests/cmake/test.c \
tests/cmake/test.sh
VC_DIST = projects/README.md \ VC_DIST = projects/README.md \
projects/build-openssl.bat \ projects/build-openssl.bat \

View File

@ -1,136 +1,272 @@
curl and libcurl 8.13.0 curl and libcurl 8.12.0
Public curl releases: 266 Public curl releases: 264
Command line options: 267 Command line options: 267
curl_easy_setopt() options: 306 curl_easy_setopt() options: 306
Public functions in libcurl: 96 Public functions in libcurl: 96
Contributors: 3354 Contributors: 3332
This release includes the following changes: This release includes the following changes:
o curl: add write-out variable 'tls_earlydata' [79] o curl: add byte range support to --variable reading from file [56]
o rustls: add support for CERTINFO [106] o curl: make --etag-save acknowledge --create-dirs [31]
o tool_getparam: make --url support a file with URLs [104] o getinfo: fix CURLINFO_QUEUE_TIME_T and add 'time_queue' var [55]
o var: add a '64dec' function that can base64 decode a string [78] o getinfo: provide info which auth was used for HTTP and proxy [40]
o wolfssl: tls early data support [50] o hyper: drop support [57]
o openssl: add support to use keys and certificates from PKCS#11 provider [77]
o QUIC: 0RTT for gnutls via CURLSSLOPT_EARLYDATA [61]
o vtls: feature ssls-export for SSL session im-/export [141]
This release includes the following bugfixes: This release includes the following bugfixes:
o addrinfo: add curl macro to avoid redefining foreign symbols [29] o altsvc: avoid integer overflow in expire calculation [16]
o asyn-thread: avoid the separate 'struct resdata' alloc [20] o altsvc: return error on dot-only name [178]
o asyn-thread: avoid the separate curl_mutex_t alloc [6] o android: add CI jobs, buildinfo, cmake docs, disable `CURL_USE_PKGCONFIG` by default [185]
o asyn-thread: do not allocate thread_data separately [21] o asyn-ares: acknowledge CURLOPT_DNS_SERVERS set to NULL [190]
o asyn-thread: remove 'status' from struct Curl_async [36] o asyn-ares: fix memory leak [233]
o build: add Windows CE / CeGCC support, with CI jobs [87] o asyn-ares: initial HTTPS resolve support [166]
o build: drop unused `getpart` tool [107] o asyn-thread: use c-ares to resolve HTTPS RR [205]
o build: enable -Wjump-misses-init for GCC 4.5+ [62] o async-thread: avoid closing eventfd twice [9]
o build: fix compiler warnings in feature detections [39] o autotools: add support for mingw UWP builds [192]
o build: set `HAVE_WRITABLE_ARGV` for Apple cross-builds [8] o autotools: silence gcc warnings in libtool code [96]
o build: silence bogus `-Wconversion` warnings with gcc 5.1-5.4 [68] o binmode: convert to macro and use it from tests [44]
o c-ares: error out for unsupported versions, drop unused macros [85] o build: delete `-Wsign-conversion` related FIXMEs [137]
o ca-native.md: sync with CURLSSLOPT_NATIVE_CA [72] o build: drop `-Winline` picky warning [53]
o cf-socket: deduplicate Windows Vista detection [11] o build: drop `tool_hugehelp.c.cvs`, tidy up macros, drop `buildconf.bat` [200]
o client writer: handle pause before deocding [61] o build: drop macro used to enable `-Wsign-conversion` warnings in CI [224]
o cmake: `SHARE_LIB_OBJECT=ON` requires CMake 3.12 or newer [46] o build: drop unused feature macros, update exception list [51]
o cmake: add pre-fill for Unix, enable in GHA/macos, verify pre-fills [42] o build: fix `-Wtrampolines` picky warning for gcc 4.x versions [156]
o cmake: allow empty `IMPORT_LIB_SUFFIX`, add suffix collision detection [41] o build: fix compiling with GCC 4.x versions [214]
o cmake: avoid `-Wnonnull` warning in `HAVE_FSETXATTR_5` detection [81] o build: fix the tidy targets for autotools [52]
o cmake: disable HTTPS-proxy as a feature if proxy is disabled [77] o build: fix unsigned `time_t` detection for cmake, MS-DOS, AmigaOS [104]
o cmake: drop `CURL_DISABLE_TESTS` option [94] o build: replace configure check with PP condition (Android <21) [97]
o cmake: drop `HAVE_IN_ADDR_T` from pre-fill too o build: stop detecting `sched_yield()` on Windows [176]
o cmake: drop two stray TLS feature checks for wolfSSL [9] o c-ares: fix/tidy-up macro initializations, avoid a deprecated function [209]
o cmake: fix `HAVE_ATOMIC`/`HAVE_STDATOMIC` pre-fill for clang-cl [28] o cd2nroff: do not insist on quoted <> within backticks [222]
o cmake: fix ECH detection in custom-patched OpenSSL [32] o cd2nroff: support "none" as a TLS backend [29]
o cmake: hide empty `MINGW64_VERSION` output for mingw32ce [114] o cf-https-connect: look into httpsrr alpns when available [152]
o cmake: mention 'insecure' in the debug build warning [15] o cf-socket: error if address can't be copied [72]
o cmake: misc tidy-ups [38] o cfilters: kill connection filter events attach+detach [217]
o cmake: pre-fill known type sizes for Windows OSes [100] o checksrc.bat: remove explicit SNPRINTF bypass [174]
o cmake: restrict static CRT builds to static curl exe, test in CI [113] o checksrc: ban use of sscanf() [7]
o cmake: sync cutoff version with autotools for picky option `-ftree-vrp` [99] o checksrc: check for return with parens around a value/name [130]
o cmake: sync OpenSSL(-fork) feature checks with `./configure` [49] o checksrc: exclude generated bundle files to avoid race condition [235]
o CODE_STYLE: readability and banned functions [35] o checksrc: fix the return() checker [35]
o configure: silence compiler warnings in feature checks, drop duplicates [86] o checksrc: introduce 'banfunc' to ban specific functions [117]
o configure: use `curl_cv_apple` variable [40] o cmake/Find: add `iphlpapi` for c-ares, omit syslibs if dep not found [203]
o conn: fix connection reuse when SSL is optional [54] o cmake/FindLDAP: avoid empty 'Requires' item when omitting `pkg-config` module [90]
o contributors.sh: lowercase 'github' for consistency [52] o cmake/FindLDAP: avoid framework locations for libs too (Apple) [122]
o contrithanks.sh: update docs/THANKS in place [119] o cmake/FindLibpsl: protect against `pkg-config` "half-detection" [89]
o cookie: do prefix matching case-sensitively [82] o cmake/FindLibssh: sync header comment with other modules
o cookie: minor parser simplification [58] o cmake/FindMbedTLS: drop lib duplicates early [17]
o cookie: simplify invalid_octets() [24] o cmake: add `librtmp` Find module [86]
o curl.h: change some enums to defines with L suffix [84] o cmake: add LDAP Find module [46]
o curl_msh3: remove verify bypass from DEBUGBUILDs [43] o cmake: add native `pkg-config` detection for remaining Find modules [37]
o curl_trc: fix build with CURL_DISABLE_VERBOSE_STRINGS [109] o cmake: allow `CURL_LTO` regardless of `CURL_BUILD_TYPE`, enable in CI [88]
o CURLMOPT_SOCKETFUNCTION.md: add advice for socket callback invocation[69] o cmake: clang-cl improvements [42]
o CURLOPT_HTTPHEADER.md: add comments to the example [90] o cmake: delete accidental debug message
o CURLOPT_HTTPHEADER.md: rephrases [108] o cmake: deprecate winbuild, add migration guide from legacy build methods [157]
o docs: add FD_ZERO to curl_multi_fdset example [19] o cmake: detect mingw-w64 version, pre-fill `HAVE_STRTOK_R` [179]
o docs: bump `rustls` to 0.14.1 [111] o cmake: do not store `MINGW64_VERSION` in cache [175]
o docs: correct argument names & URL redirection [4] o cmake: drop `CURL_USE_PKGCONFIG` from `curl-config.cmake.in` [208]
o eventfd: allow use on all CPUs [93] o cmake: drop `fseeko()` pre-fill and check for Windows [201]
o gnutls: fix connection state check on handshake [80] o cmake: drop duplicate Windows cache value [81]
o hash: use single linked list for entries [57] o cmake: drop redundant FOUND checks (libgsasl, libssh, libuv) [49]
o hostip: make CURLOPT_RESOLVE support replacing IPv6 addresses [47] o cmake: drop redundant opening/closing `.*` from `MATCH` expressions [64]
o HTTP3.md: only speak about minimal versions [18] o cmake: drop unused `HAVE_SYS_XATTR_H` detection [79]
o http: convert parsers to strparse [48] o cmake: drop VS2010 "Dialog Hell" workaround added in 2013 [136]
o http: fix NTLM info message typo [22] o cmake: extend zlib's `AUTO` option to brotli, zstd and enable if found [36]
o http: fix the auth check [88] o cmake: fix `net/in.h` detection for MS-DOS [103]
o http: make the RTSP version check stricter [73] o cmake: improve `curl_dumpvars()` and move to `Utilities.cmake` [50]
o http: negotiation and room for alt-svc/https rr to navigate [64] o cmake: make libpsl required by default [45]
o http: version negotiation [45] o cmake: make system libraries `dl`, `m`, `pthread` customizable [123]
o http_aws_sigv4: use strparse more for parsing [55] o cmake: move `pkg-config` names to Find modules [87]
o https-rr: implementation improvements [44] o cmake: move GSS init before feature detections [93]
o httpsrr: fix port detection [51] o cmake: move mingw UWP workaround from GHA to `CMakeLists.txt` [194]
o httpsrr: fix the HTTPS-RR threaded-resolver build combo [67] o cmake: namespace functions and macros [41]
o INSTALL-CMAKE.md: CMake usage updates [101] o cmake: optimize out 4 picky warning option detections with gcc [78]
o INSTALL-CMAKE.md: mention `ZLIB_USE_STATIC_LIBS` [112] o cmake: pick a better IPv6 feature flag when assembling the feature list [132]
o lib: better optimized casecompare() and ncasecompare() [3] o cmake: pre-fill `HAVE_STDATOMIC_H`, `HAVE_ATOMIC` for mingw-w64 [180]
o lib: simplify more white space loops [60] o cmake: pre-fill `HAVE_STDINT_H` on Windows [149]
o lib: strtoofft.h header cleanup [17] o cmake: prefer dash-style MSVC options [216]
o lib: use Curl_str_* instead of strtok_r() [59] o cmake: publish/check supported protocols/features via `CURLConfig.cmake` [100]
o lib: use Curl_str_number() for parsing decimal numbers [13] o cmake: replace `unset(VAR)` with `set(VAR "")` for init [43]
o libtest/libprereq.c: set CURLOPT_FOLLOWLOCATION with a long [89] o cmake: sync OpenSSL QUIC fork detection with autotools [102]
o managen: correct the warning for un-escaped '<' and '>' [1] o cmake: use `CMAKE_REQUIRED_LINK_DIRECTORIES` [48]
o msvc: drop support for VS2005 and older [96] o cmake: use `STREQUAL` to detect Linux [68]
o multi: event based rework [74] o cmake: warn for OpenSSL versions missing TLS 1.3 support [221]
o openssl: check return value of X509_get0_pubkey [105] o cmdline-opts/version.md: describe multissl, mention SSLS-EXPORT [170]
o openssl: drop support for old OpenSSL/LibreSSL versions [95] o completion.pl: add completion for paths after @ for fish [82]
o openssl: remove bad `goto`s into other scope [63] o config-mac: drop `MACOS_SSL_SUPPORT` macro [63]
o runtests: drop recognizing 'winssl' as Schannel [102] o config: drop unused code and variables [135]
o runtests: drop ref to unused external function o configure: do not inline 'dnl' comments
o runtests: recognize AWS-LC as OpenSSL [103] o configure: drop unused detections and macros [105]
o runtests: support multi-target cmake, drop workarounds from CI [116] o configure: streamline Windows large file feature check [138]
o schannel: deduplicate Windows Vista detection [98] o configure: UWP and Android follow-up fixes [184]
o schannel: enable ALPN support under WINE 6.0+ [92] o conncache: count shutdowns against host and max limits [154]
o schannel: enable ALPN with MinGW, fix ALPN for UWP builds [71] o conncache: result_cb comment removed from function docs [1]
o schannel: guard ALPN init code to ALPN builds [91] o content_encoding: drop support for zlib before 1.2.0.4 [211]
o scripts/managen: fix option 'single' [31] o content_encoding: namespace GZIP flag constants [147]
o scripts/managen: fix parsing of markdown code sections [30] o content_encoding: put the decomp buffers into the writer structs [210]
o setopt: remove unnecesary void pointer typecasts [76] o content_encoding: support use of custom libzstd memory functions [186]
o ssh: consider sftp quote commands case sensitive [33] o cookie: cap expire times to 400 days [111]
o ssl session cache: add exportable flag [56] o cookie: fix crash in netscape cookie parsing [84]
o strparse: make Curl_str_number() return error for no digits [14] o cookie: parse only the exact expire date [3]
o strparse: switch the API to work on 'const char *' [2] o curl-functions.m4: fix indentation in `CURL_SIZEOF()` [131]
o strparse: switch to curl_off_t as base data type [7] o curl: return error if etag options are used with multiple URLs [5]
o tests: fix enum/int confusion, fix autotools `CFLAGS` for `servers` [27] o curl_multi_fdset: include the shutdown connections in the set [168]
o tidy-up: align MSYS2/Cygwin codepaths, follow Cygwin `MAX_PID` bump [97] o curl_multi_waitfds.md: tidy up the example [162]
o tidy-up: delete, comment or scope C macros reported unused [16] o curl_multibyte: support Windows paths longer than MAX_PATH [76]
o tidy-up: drop unused `CURL_INADDR_NONE` macro and `in_addr_t` type [26] o curl_setup: fix missing `ADDRESS_FAMILY` type in rare build cases [144]
o tidy-up: use `CURL_ARRAYSIZE()` [37] o curl_sha512_256: rename symbols to the curl namespace [124]
o timediff: fix comment for curlx_mstotv() [25] o curl_url_set.md: adjust the added-in to 7.62.0 [94]
o timediff: remove unnecessary double typecast [53] o curl_ws_recv.md: fix typo
o tool_getparam: clear sensitive arguments better [66] o CURLOPT_CONNECT_ONLY.md: an easy handle with this option set cannot be reused [164]
o tool_operate: fail SSH transfers without server auth [70] o CURLOPT_PROXY.md: clarify the crendential support in proxy URLs [66]
o urlapi: simplify junkscan [23] o CURLOPT_RESOLVE.md: fix wording [30]
o variable.md: clarify 'trim' example [12] o CURLOPT_SEEKFUNCTION.md: used for FTP, HTTP and SFTP (only) [109]
o windows: drop code and curl manifest targeting W2K and older [115] o docs/BUGS.md: remove leading space from a link
o wolfssh: retrieve the error using wolfSSH_get_error [5] o docs/cmdline-opts/_ENVIRONMENT.md: minor language fix [119]
o wolfssl: fix CA certificate multiple location import [34] o docs/cmdline-opts/location.md: fix typos for location flag [226]
o wolfssl: warn if CA native import option is ignored [65] o docs/HTTP-COOKIES.md: link to more information [125]
o wolfssl: when using PQ KEM, use ML-KEM, not Kyber [10] o docs/HTTPSRR.md: initial HTTPS RR documentation [204]
o docs/libcurl/opts: clarify the return values [114]
o docs/libcurl: return value overhall [120]
o docs/TLS-SESSIONS: fix typo, the->they [189]
o docs: document the behavior of -- in the curl command line [198]
o docs: use lowercase curl and libcurl [113]
o doh: cleanups and extended HTTPS RR code [161]
o doh: send HTTPS RR requests for all HTTP(S) transfers [160]
o easy: allow connect-only handle reuse with easy_perform [232]
o easy: make curl_easy_perform() return error if connection still there [163]
o easy_lock: use Sleep(1) for thread yield on old Windows [191]
o ECH: update APIs to those agreed with OpenSSL maintainers [101]
o examples/block-ip: drop redundant `memory.h` include
o examples/block-ip: show how to block IP addresses [74]
o examples/complicated: fix warnings, bump deprecated callback, tidy up [59]
o examples/synctime.c: remove references to dead URLs and functionality [62]
o examples: make them compile with compatibility functions disabled (Windows) [58]
o examples: use return according to code style
o file: drop `OPEN_NEEDS_ARG3` option [91]
o file: fix Android compiler warning [85]
o gitignore: add generated unity sources for lib and src
o GnuTLS: fix 'time_appconnect' for early data [127]
o hash: add asserts in hash_element_dtor() [126]
o HTTP/2: strip TE request header [140]
o http2: fix data_pending check [241]
o http2: fix value stored to 'result' is never read [71]
o http: fix build with `CURL_DISABLE_COOKIES` [95]
o http: ignore invalid Retry-After times [107]
o http_aws_sigv4: Fix invalid compare function handling zero-length pairs [24]
o https-connect: start next immediately on failure [223]
o INFRASTRUCTURE.md: project infra [99]
o INSTALL-CMAKE.md: fix punctuation
o INSTALL.md: add CMake examples for macOS and iOS [242]
o INSTALL.md: document VS2008 and mingw-w64 [165]
o INTERNALS.md: sync wolfSSL version requirement with source code
o lib517: extend the getdate test with quotes and leading "junk" [4]
o lib: clarify 'conn->httpversion' [213]
o lib: redirect handling by protocol handler [212]
o lib: remove `__EMX__` guards [83]
o lib: replace `inline` redefine with `CURL_INLINE` macro [47]
o lib: supress deprecation warnings in apple builds [32]
o lib: TLS session ticket caching reworked [60]
o libcurl/opts: do not save files in dirs where attackers have access [199]
o Makefile.dist: delete [237]
o Makefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3) [38]
o mbedtls: fix handling of blocked sends [116]
o mbedtls: PSA can be used independently of TLS 1.3 (avoid runtime errors) [219]
o mime: explicitly rewind subparts at attachment time. [80]
o mprintf: fix integer handling in float precision [173]
o mprintf: terminate snprintf output on windows [172]
o msvc: add missing push/pop for warning pragmas [236]
o msvc: assume `_INTEGRAL_MAX_BITS >= 64` [158]
o msvc: drop checks for ancient versions [133]
o msvc: fix building with `HAVE_INET_NTOP` and MSVC <=1900 [151]
o msvc: require VS2005 for large file support [143]
o msvc: tidy up `_CRT_*_NO_DEPRECATE` definitions [148]
o multi: fix curl_multi_waitfds reporting of fd_count [73]
o multi: fix return code for an already-removed easy handle [106]
o multihandle: add an ssl_scache here [129]
o multissl: auto-enable `OPENSSL_COEXIST` for wolfSSL + OpenSSL [92]
o multissl: make openssl + wolfssl builds work [34]
o netrc: 'default' with no credentials is not a match [108]
o netrc: fix password-only entries [28]
o netrc: restore _netrc fallback logic [6]
o ngtcp2: fix memory leak on connect failure [225]
o ngtcp2: fix two cases of value stored never read [65]
o openssl: define `HAVE_KEYLOG_CALLBACK` before use [227]
o openssl: drop unused `HAVE_SSL_GET_SHUTDOWN` macro [228]
o openssl: fix ECH logic [67]
o osslq: use SSL_poll to determine writeability of QUIC streams [139]
o projects/Windows: remove wolfSSL from legacy projects [75]
o projects: fix `INSTALL-CMAKE.md` references
o pytest: remove 'repeat' parameter [182]
o pytest: use httpd/apache2 directly, no apachectl [169]
o RELEASE-PROCEDURE.md: mention how to publish security advisories [2]
o runtests.pl: fix precedence issue [207]
o scripts/mdlinkcheck: markdown link checker [19]
o sectransp: free certificate on error [12]
o select: avoid a NULL deref in cwfds_add_sock [128]
o smb: fix compiler warning [112]
o src: add `CURL_STRICMP()` macro, use `_stricmp()` on Windows [54]
o src: drop support for `CURL_TESTDIR` debug env [121]
o src: omit hugehelp and ca-embed from libcurltool [215]
o ssl session cache: change cache dimensions [159]
o strparse: string parsing helper functions [8]
o symbols-in-versions: update version for LIBCURL_VERSION and LIBCURL_VERSION_NUM [193]
o system.h: add 64-bit curl_off_t definitions for NonStop [11]
o system.h: drop compilers lacking 64-bit integer type (Windows/MS-DOS) [155]
o system.h: drop duplicate and no-op code [153]
o system.h: fix indentation [142]
o telnet: handle single-byte input option [177]
o test1960: don't close the socket too early [220]
o test483: require cookie support [98]
o tests/http/clients: use proper sleep() call on NonStop [10]
o tests: change the behavior of swsbounce [202]
o tests: stop promoting perl warnings to fatal errors
o TheArtOfHttpScripting.md: rewrite double 'that' [115]
o tidy-up: `curl_setup.h`, `curl_setup_once.h`, `config-win32ce.h` [146]
o tidy-up: drop parenthesis around `return` expression [167]
o tidy-up: drop parenthesis around `return` values [134]
o tidy-up: extend `CURL_O_BINARY` to lib and tests [195]
o TLS: check connection for SSL use, not handler [181]
o tool_formparse.c: make curlx_uztoso a static in here [39]
o tool_formparse: accept digits in --form type= strings [33]
o tool_getparam: ECH param parsing refix [150]
o tool_getparam: fail --hostpubsha256 if libssh2 is not used [229]
o tool_getparam: fix "Ignored Return Value" [21]
o tool_getparam: fix memory leak on error in parse_ech [14]
o tool_getparam: fix the ECH parser [20]
o tool_operate: make --etag-compare always accept a non-existing file [22]
o transfer: fix CURLOPT_CURLU override logic [171]
o urlapi: fix redirect to a new fragment or query (only) [118]
o urldata: tweak the UserDefined struct [240]
o variable.md: mention --expand-variable for variables to variables [13]
o variable.md: show function use with examples [18]
o version: fix the IDN feature for winidn and appleidn [187]
o vquic: fix 4th function call argument is an uninitialized value [70]
o vquic: make vquic_send_packets not return without setting psent [69]
o vtls: fix default SSL backend as a fallback [231]
o vtls: only remember the expiry timestamp in session cache [110]
o vtls: remove 'detach/attach' functions from TLS handler struct [25]
o vtls: remove unusued 'check_cxn' from TLS handler struct [26]
o vtls: replace "none"-functions with NULL pointers [27]
o VULN-DISCLOSURE-POLICY.md: mention the not setting CVSS [23]
o VULN-DISCLOSURE-POLICY: on legacy dependencies [239]
o websocket: fix message send corruption [188]
o windows: drop dupe macros, detect `CURL_OS` for WinCE ARM, indentation [183]
o windows: drop redundant `USE_WIN32_SMALL_FILES` macro [145]
o windows: drop two missed `buildconf.bat` references
o windows: merge `config-win32ce.h` into `config-win32.h` [196]
o ws-docs: extend WebSocket documentation [206]
o ws-docs: remove the outdated texts saying ws support is experimental [15]
o ws: reject frames with unknown reserved bits set [230]
o x509asn1: add parse recursion limit [197]
This release includes the following known bugs: This release includes the following known bugs:
See https://curl.se/docs/knownbugs.html See docs/KNOWN_BUGS (https://curl.se/docs/knownbugs.html)
For all changes ever done in curl: For all changes ever done in curl:
@ -139,135 +275,268 @@ For all changes ever done in curl:
Planned upcoming removals include: Planned upcoming removals include:
o Support for the msh3 HTTP/3 backend o Support for the msh3 HTTP/3 backend
o The winbuild build system
o TLS libraries not supporting TLS 1.3 o TLS libraries not supporting TLS 1.3
See https://curl.se/dev/deprecate.html See https://curl.se/dev/deprecate.html for details
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Anthony Hu, Dan Fandrich, Daniel Stenberg, dependabot[bot], Derek Huang, 9cel, Aleksander Mazur, Andrew Kaster, Andy Pan, Asger Hautop Drewsen,
Dexter Gerig, Harry Sintonen, Jeremy Drake, John Bampton, Joseph Chen, baranyaib90 on github, Ben Zanin, Brad House, Calvin Ruocco,
kayrus on github, kriztalz, Laurențiu Nicola, lf- on github, Marcel Raad, Christian Heusel, Christian Schmitz, Christopher Dannemiller, Dan Fandrich,
Mark Phillips, qhill on github, Ray Satiro, renovate[bot], rmg-x on github, Daniel Stenberg, Darren Banfi, Deniz Sökmen, dependabot[bot], Derek Huang,
RubisetCie on github, Sergey, Stefan Eissing, Tianyi Song, Timo Tijhof, Dexter Gerig, Donguk Kim, dwickr, Edoardo Lolletti, Ganesh Viswanathan,
Viktor Szakats, Yedaya Katsman, Zenju on github Harry Sintonen, Hermes Zhang, IcedCoffeee on github, Igor Todorovski,
(28 contributors) Jakub Jelen, Jeroen Ooms, Jiri Stary, Kai Pastor, Kevin Sun, Kuan-Wei Chiu,
Leon Timmermans, MacKenzie, Manuel Einfalt, Marcel Raad, Martin Harrigan,
mauke, Michael Schuster, Milon Renatus, Mohammed Sadiq,
na-trium-144 on github, Neil Horman, Neil Johari, Nicolás San Martín,
Patrick Monnerat, prpr19xx on Github, Qriist on github, ralfjunker on github,
Ralph Sennhauser, Randall S. Becker, Ray Satiro, renovate[bot],
Rudi Heitbaum, Samuel Henrique, Stefan Eissing, Stephen Farrell, Tal Regev,
Tamás Bálint Misius, Tamir Duberstein, Viktor Szakats, Yedaya Katsman,
Yihang Zhou, z2_
(65 contributors)
References to bug reports and discussions on issues: References to bug reports and discussions on issues:
[1] = https://curl.se/bug/?i=16315 [1] = https://curl.se/bug/?i=15720
[2] = https://curl.se/bug/?i=16316 [2] = https://curl.se/bug/?i=15714
[3] = https://curl.se/bug/?i=16311 [3] = https://curl.se/bug/?i=15709
[4] = https://curl.se/bug/?i=16334 [4] = https://curl.se/bug/?i=15708
[5] = https://curl.se/bug/?i=16335 [5] = https://curl.se/bug/?i=15729
[6] = https://curl.se/bug/?i=16323 [6] = https://curl.se/bug/?i=15734
[7] = https://curl.se/bug/?i=16336 [7] = https://curl.se/bug/?i=15687
[8] = https://curl.se/bug/?i=16338 [8] = https://curl.se/bug/?i=15692
[9] = https://curl.se/bug/?i=16339 [9] = https://curl.se/bug/?i=15725
[10] = https://curl.se/bug/?i=16337 [10] = https://curl.se/bug/?i=15711
[11] = https://curl.se/bug/?i=16400 [11] = https://curl.se/bug/?i=15723
[12] = https://curl.se/bug/?i=16346 [12] = https://curl.se/bug/?i=15721
[13] = https://curl.se/bug/?i=16319 [13] = https://curl.se/bug/?i=15752
[14] = https://curl.se/bug/?i=16319 [14] = https://curl.se/bug/?i=15753
[15] = https://curl.se/bug/?i=16327 [15] = https://curl.se/bug/?i=15749
[16] = https://curl.se/bug/?i=16279 [16] = https://issues.oss-fuzz.com/issues/383911309
[17] = https://curl.se/bug/?i=16331 [17] = https://curl.se/bug/?i=15495
[18] = https://curl.se/bug/?i=16320 [18] = https://curl.se/bug/?i=15743
[19] = https://curl.se/bug/?i=16325 [19] = https://curl.se/bug/?i=15742
[20] = https://curl.se/bug/?i=16321 [20] = https://curl.se/bug/?i=15741
[21] = https://curl.se/bug/?i=16241 [21] = https://curl.se/bug/?i=15740
[22] = https://curl.se/bug/?i=16305 [22] = https://curl.se/bug/?i=15737
[23] = https://curl.se/bug/?i=16307 [23] = https://curl.se/bug/?i=15779
[24] = https://curl.se/bug/?i=16306 [24] = https://curl.se/bug/?i=15778
[25] = https://curl.se/bug/?i=16310 [25] = https://curl.se/bug/?i=15776
[26] = https://curl.se/bug/?i=16318 [26] = https://curl.se/bug/?i=15775
[27] = https://curl.se/bug/?i=16314 [27] = https://curl.se/bug/?i=15772
[28] = https://curl.se/bug/?i=16313 [28] = https://curl.se/bug/?i=15767
[29] = https://curl.se/bug/?i=16274 [29] = https://curl.se/bug/?i=15769
[30] = https://curl.se/bug/?i=16345 [30] = https://curl.se/bug/?i=15770
[31] = https://curl.se/bug/?i=16344 [31] = https://curl.se/bug/?i=15730
[32] = https://curl.se/bug/?i=16354 [32] = https://curl.se/bug/?i=15763
[33] = https://curl.se/bug/?i=16382 [33] = https://curl.se/bug/?i=15761
[34] = https://curl.se/bug/?i=16391 [34] = https://curl.se/bug/?i=15596
[35] = https://curl.se/bug/?i=16349 [35] = https://curl.se/bug/?i=15764
[36] = https://curl.se/bug/?i=16347 [36] = https://curl.se/bug/?i=15431
[37] = https://curl.se/bug/?i=16381 [37] = https://curl.se/bug/?i=15408
[38] = https://curl.se/bug/?i=16238 [38] = https://curl.se/bug/?i=15543
[39] = https://curl.se/bug/?i=16287 [39] = https://curl.se/bug/?i=15796
[40] = https://curl.se/bug/?i=16340 [40] = https://curl.se/bug/?i=15450
[41] = https://curl.se/bug/?i=16324 [41] = https://curl.se/bug/?i=15498
[42] = https://curl.se/bug/?i=15841 [42] = https://curl.se/bug/?i=15478
[43] = https://curl.se/bug/?i=16342 [43] = https://curl.se/bug/?i=15255
[44] = https://curl.se/bug/?i=16132 [44] = https://curl.se/bug/?i=15787
[45] = https://curl.se/bug/?i=16100 [45] = https://curl.se/bug/?i=15464
[46] = https://curl.se/bug/?i=16375 [46] = https://curl.se/bug/?i=15273
[47] = https://curl.se/bug/?i=16357 [47] = https://curl.se/bug/?i=15523
[48] = https://curl.se/bug/?i=16436 [48] = https://curl.se/bug/?i=15280
[49] = https://curl.se/bug/?i=16352 [49] = https://curl.se/bug/?i=15465
[50] = https://curl.se/bug/?i=16167 [50] = https://curl.se/bug/?i=15562
[51] = https://curl.se/bug/?i=16409 [51] = https://curl.se/bug/?i=15577
[52] = https://curl.se/bug/?i=16443 [52] = https://curl.se/bug/?i=15813
[53] = https://curl.se/bug/?i=16367 [53] = https://curl.se/bug/?i=15815
[54] = https://curl.se/bug/?i=16384 [54] = https://curl.se/bug/?i=15788
[55] = https://curl.se/bug/?i=16366 [55] = https://curl.se/bug/?i=15512
[56] = https://curl.se/bug/?i=16322 [56] = https://curl.se/bug/?i=15739
[57] = https://curl.se/bug/?i=16351 [57] = https://curl.se/bug/?i=15120
[58] = https://curl.se/bug/?i=16362 [58] = https://curl.se/bug/?i=15789
[59] = https://curl.se/bug/?i=16360 [59] = https://curl.se/bug/?i=15785
[60] = https://curl.se/bug/?i=16363 [60] = https://curl.se/bug/?i=15774
[61] = https://curl.se/bug/?i=16280 [61] = https://curl.se/bug/?i=15667
[62] = https://curl.se/bug/?i=16252 [62] = https://curl.se/bug/?i=15786
[63] = https://curl.se/bug/?i=16356 [63] = https://curl.se/bug/?i=15777
[64] = https://curl.se/bug/?i=16117 [64] = https://curl.se/bug/?i=15773
[65] = https://curl.se/bug/?i=16417 [65] = https://curl.se/bug/?i=15812
[66] = https://curl.se/bug/?i=16396 [66] = https://curl.se/bug/?i=15805
[67] = https://curl.se/bug/?i=16399 [67] = https://curl.se/bug/?i=15814
[68] = https://curl.se/bug/?i=16398 [68] = https://curl.se/bug/?i=15855
[69] = https://curl.se/bug/?i=16441 [69] = https://curl.se/bug/?i=15807
[70] = https://curl.se/bug/?i=16205 [70] = https://curl.se/bug/?i=15808
[71] = https://curl.se/bug/?i=16385 [71] = https://curl.se/bug/?i=15806
[72] = https://curl.se/bug/?i=16373 [72] = https://curl.se/bug/?i=15784
[73] = https://curl.se/bug/?i=16435 [73] = https://curl.se/bug/?i=15146
[74] = https://curl.se/bug/?i=16308 [74] = https://curl.se/bug/?i=15748
[76] = https://curl.se/bug/?i=16426 [75] = https://curl.se/bug/?i=15468
[77] = https://curl.se/bug/?i=16434 [76] = https://curl.se/bug/?i=13522
[78] = https://curl.se/bug/?i=16330 [77] = https://curl.se/bug/?i=15587
[79] = https://curl.se/bug/?i=15956 [78] = https://curl.se/bug/?i=15850
[80] = https://curl.se/bug/?i=16423 [79] = https://curl.se/bug/?i=15845
[81] = https://curl.se/bug/?i=16427 [80] = https://curl.se/bug/?i=15842
[82] = https://curl.se/bug/?i=16494 [81] = https://curl.se/bug/?i=15840
[84] = https://curl.se/bug/?i=16482 [82] = https://curl.se/bug/?i=15928
[85] = https://curl.se/bug/?i=16407 [83] = https://curl.se/bug/?i=15884
[86] = https://curl.se/bug/?i=16377 [84] = https://curl.se/bug/?i=15826
[87] = https://curl.se/bug/?i=15975 [85] = https://curl.se/bug/?i=15883
[88] = https://curl.se/bug/?i=16419 [86] = https://curl.se/bug/?i=15832
[89] = https://curl.se/bug/?i=16487 [87] = https://curl.se/bug/?i=15800
[90] = https://curl.se/bug/?i=16488 [88] = https://curl.se/bug/?i=15829
[91] = https://curl.se/bug/?i=16420 [89] = https://curl.se/bug/?i=15827
[92] = https://curl.se/bug/?i=16393 [90] = https://curl.se/bug/?i=15828
[93] = https://curl.se/bug/?i=16277 [91] = https://curl.se/bug/?i=15882
[94] = https://curl.se/bug/?i=16134 [92] = https://curl.se/bug/?i=15765
[95] = https://curl.se/bug/?i=16104 [93] = https://curl.se/bug/?i=15809
[96] = https://curl.se/bug/?i=16004 [94] = https://curl.se/bug/?i=15822
[97] = https://curl.se/bug/?i=16217 [95] = https://curl.se/bug/?i=15820
[98] = https://curl.se/bug/?i=16408 [96] = https://curl.se/bug/?i=15915
[99] = https://curl.se/bug/?i=16478 [97] = https://curl.se/bug/?i=15871
[100] = https://curl.se/bug/?i=16464 [98] = https://curl.se/bug/?i=15876
[101] = https://curl.se/bug/?i=16329 [99] = https://curl.se/bug/?i=15906
[102] = https://curl.se/bug/?i=16467 [100] = https://curl.se/bug/?i=15854
[103] = https://curl.se/bug/?i=16466 [101] = https://curl.se/bug/?i=15945
[104] = https://curl.se/bug/?i=16099 [102] = https://curl.se/bug/?i=15873
[105] = https://curl.se/bug/?i=16468 [103] = https://curl.se/bug/?i=15869
[106] = https://curl.se/bug/?i=16459 [104] = https://curl.se/bug/?i=15868
[107] = https://curl.se/bug/?i=16460 [105] = https://curl.se/bug/?i=15867
[108] = https://curl.se/bug/?i=16461 [106] = https://curl.se/bug/?i=15844
[109] = https://curl.se/bug/?i=16462 [107] = https://curl.se/bug/?i=15833
[111] = https://curl.se/bug/?i=16446 [108] = https://curl.se/bug/?i=15908
[112] = https://curl.se/bug/?i=16457 [109] = https://curl.se/bug/?i=15903
[113] = https://curl.se/bug/?i=16456 [110] = https://curl.se/bug/?i=15861
[114] = https://curl.se/bug/?i=16455 [111] = https://curl.se/bug/?i=15937
[115] = https://curl.se/bug/?i=16453 [112] = https://curl.se/bug/?i=15902
[116] = https://curl.se/bug/?i=16452 [113] = https://curl.se/bug/?i=15898
[119] = https://curl.se/bug/?i=16448 [114] = https://curl.se/bug/?i=15900
[115] = https://curl.se/bug/?i=15863
[116] = https://curl.se/bug/?i=15801
[117] = https://curl.se/bug/?i=15835
[118] = https://curl.se/bug/?i=15836
[119] = https://curl.se/bug/?i=15897
[120] = https://curl.se/bug/?i=15899
[121] = https://curl.se/bug/?i=15893
[122] = https://curl.se/bug/?i=15895
[123] = https://curl.se/bug/?i=15892
[124] = https://curl.se/bug/?i=15894
[125] = https://curl.se/bug/?i=15891
[126] = https://curl.se/bug/?i=15889
[127] = https://curl.se/bug/?i=15954
[128] = https://curl.se/bug/?i=15881
[129] = https://curl.se/bug/?i=15982
[130] = https://curl.se/bug/?i=15983
[131] = https://curl.se/bug/?i=15981
[132] = https://curl.se/bug/?i=15980
[133] = https://curl.se/bug/?i=15946
[134] = https://curl.se/bug/?i=15979
[135] = https://curl.se/bug/?i=15978
[136] = https://curl.se/bug/?i=15973
[137] = https://curl.se/bug/?i=15939
[138] = https://curl.se/bug/?i=15971
[139] = https://curl.se/bug/?i=15909
[140] = https://curl.se/bug/?i=15941
[141] = https://curl.se/bug/?i=15924
[142] = https://curl.se/bug/?i=15974
[143] = https://curl.se/bug/?i=15958
[144] = https://curl.se/bug/?i=15969
[145] = https://curl.se/bug/?i=15968
[146] = https://curl.se/bug/?i=15967
[147] = https://curl.se/bug/?i=15929
[148] = https://curl.se/bug/?i=15960
[149] = https://curl.se/bug/?i=15925
[150] = https://curl.se/bug/?i=16006
[151] = https://curl.se/bug/?i=15923
[152] = https://curl.se/bug/?i=16012
[153] = https://curl.se/bug/?i=15966
[154] = https://curl.se/bug/?i=15857
[155] = https://curl.se/bug/?i=15957
[156] = https://curl.se/bug/?i=15962
[157] = https://curl.se/bug/?i=15920
[158] = https://curl.se/bug/?i=15955
[159] = https://curl.se/bug/?i=15953
[160] = https://curl.se/bug/?i=16007
[161] = https://curl.se/bug/?i=16007
[162] = https://curl.se/bug/?i=16050
[163] = https://curl.se/bug/?i=16003
[164] = https://curl.se/bug/?i=16002
[165] = https://curl.se/bug/?i=15992
[166] = https://curl.se/bug/?i=16039
[167] = https://curl.se/bug/?i=15990
[168] = https://curl.se/bug/?i=15156
[169] = https://curl.se/bug/?i=16000
[170] = https://curl.se/bug/?i=15996
[171] = https://curl.se/bug/?i=15984
[172] = https://curl.se/bug/?i=15997
[173] = https://curl.se/bug/?i=15988
[174] = https://curl.se/bug/?i=16032
[175] = https://curl.se/bug/?i=16040
[176] = https://curl.se/bug/?i=16037
[177] = https://curl.se/bug/?i=15987
[178] = https://curl.se/bug/?i=15986
[179] = https://curl.se/bug/?i=16022
[180] = https://curl.se/bug/?i=16036
[181] = https://curl.se/bug/?i=16034
[182] = https://curl.se/bug/?i=16033
[183] = https://curl.se/bug/?i=16029
[184] = https://curl.se/bug/?i=16027
[185] = https://curl.se/bug/?i=16014
[186] = https://curl.se/bug/?i=16028
[187] = https://curl.se/bug/?i=16091
[188] = https://curl.se/bug/?i=15865
[189] = https://curl.se/bug/?i=16057
[190] = https://curl.se/bug/?i=16015
[191] = https://curl.se/bug/?i=16048
[192] = https://curl.se/bug/?i=16020
[193] = https://curl.se/bug/?i=16141
[194] = https://curl.se/bug/?i=16019
[195] = https://curl.se/bug/?i=16009
[196] = https://curl.se/bug/?i=16038
[197] = https://curl.se/bug/?i=16135
[198] = https://curl.se/bug/?i=16053
[199] = https://curl.se/bug/?i=16051
[200] = https://curl.se/bug/?i=16081
[201] = https://curl.se/bug/?i=16041
[202] = https://curl.se/bug/?i=16074
[203] = https://curl.se/bug/?i=16089
[204] = https://curl.se/bug/?i=16052
[205] = https://curl.se/bug/?i=16054
[206] = https://curl.se/bug/?i=16118
[207] = https://curl.se/bug/?i=16128
[208] = https://curl.se/bug/?i=16087
[209] = https://curl.se/bug/?i=16131
[210] = https://curl.se/bug/?i=16079
[211] = https://curl.se/bug/?i=16079
[212] = https://curl.se/bug/?i=16075
[213] = https://curl.se/bug/?i=16073
[214] = https://curl.se/bug/?i=16062
[215] = https://curl.se/bug/?i=16068
[216] = https://curl.se/bug/?i=16063
[217] = https://curl.se/bug/?i=16067
[219] = https://curl.se/bug/?i=16044
[220] = https://curl.se/bug/?i=16123
[221] = https://curl.se/bug/?i=16120
[222] = https://curl.se/bug/?i=16121
[223] = https://curl.se/bug/?i=16114
[224] = https://curl.se/bug/?i=16152
[225] = https://curl.se/bug/?i=16113
[226] = https://curl.se/bug/?i=16110
[227] = https://curl.se/bug/?i=16105
[228] = https://curl.se/bug/?i=16103
[229] = https://curl.se/bug/?i=16109
[230] = https://curl.se/bug/?i=16069
[231] = https://curl.se/bug/?i=16076
[232] = https://curl.se/mail/lib-2025-01/0044.html
[233] = https://curl.se/bug/?i=16107
[235] = https://curl.se/bug/?i=16102
[236] = https://curl.se/bug/?i=16101
[237] = https://curl.se/bug/?i=16094
[239] = https://curl.se/bug/?i=16086
[240] = https://curl.se/bug/?i=16097
[241] = https://curl.se/bug/?i=16084
[242] = https://curl.se/bug/?i=16095

View File

@ -48,7 +48,7 @@ AC_DEFUN([CURL_CHECK_DEF], [
tmp_exp="" tmp_exp=""
AC_PREPROC_IFELSE([ AC_PREPROC_IFELSE([
AC_LANG_SOURCE( AC_LANG_SOURCE(
ifelse($2,,,[$2])[[ ifelse($2,,,[$2])[[
#ifdef $1 #ifdef $1
CURL_DEF_TOKEN $1 CURL_DEF_TOKEN $1
#endif #endif
@ -88,13 +88,14 @@ AC_DEFUN([CURL_CHECK_DEF_CC], [
ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])]) ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])])
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
AC_LANG_SOURCE( AC_LANG_SOURCE(
ifelse($2,,,[$2])[[ ifelse($2,,,[$2])[[
int main(void) int main(void)
{ {
#ifndef $1 #ifdef $1
return 0;
#else
#error force compilation error #error force compilation error
#endif #endif
return 0;
} }
]]) ]])
],[ ],[
@ -125,11 +126,12 @@ AC_DEFUN([CURL_CHECK_LIB_XNET], [
int main(void) int main(void)
{ {
#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) #if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600)
return 0;
#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED)
return 0;
#else #else
#error force compilation error #error force compilation error
#endif #endif
return 0;
} }
]]) ]])
],[ ],[
@ -178,8 +180,7 @@ AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [
AC_LANG_PROGRAM([[ AC_LANG_PROGRAM([[
]],[[ ]],[[
#ifdef _WIN32 #ifdef _WIN32
int dummy = 1; int dummy=1;
(void)dummy;
#else #else
#error Not a native Windows build target. #error Not a native Windows build target.
#endif #endif
@ -305,7 +306,6 @@ AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
]],[[ ]],[[
LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp); int res = ldap_unbind(ldp);
(void)res;
]]) ]])
],[ ],[
curl_cv_header_ldap_h="yes" curl_cv_header_ldap_h="yes"
@ -354,7 +354,6 @@ AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
#include <ldap_ssl.h> #include <ldap_ssl.h>
]],[[ ]],[[
LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1); LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1);
(void)ldp;
]]) ]])
],[ ],[
curl_cv_header_ldap_ssl_h="yes" curl_cv_header_ldap_ssl_h="yes"
@ -434,7 +433,6 @@ AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
ULONG res = ldap_unbind(ldp); ULONG res = ldap_unbind(ldp);
ber_free(bep, 1); ber_free(bep, 1);
(void)res;
]]) ]])
],[ ],[
curl_cv_ldap_LIBS="$x_nlibs" curl_cv_ldap_LIBS="$x_nlibs"
@ -545,7 +543,6 @@ AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp); int res = ldap_unbind(ldp);
ber_free(bep, 1); ber_free(bep, 1);
(void)res;
]]) ]])
],[ ],[
curl_cv_ldap_LIBS="$x_nlibs" curl_cv_ldap_LIBS="$x_nlibs"
@ -689,8 +686,7 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [
#endif #endif
#endif #endif
]],[[ ]],[[
char s[] = ""; send(0, 0, 0, 0);
send(0, (void *)s, 0, 0);
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -733,8 +729,7 @@ AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
#endif #endif
#endif #endif
]],[[ ]],[[
int flag = MSG_NOSIGNAL; int flag=MSG_NOSIGNAL;
(void)flag;
]]) ]])
],[ ],[
curl_cv_msg_nosignal="yes" curl_cv_msg_nosignal="yes"
@ -782,7 +777,6 @@ AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
struct timeval ts; struct timeval ts;
ts.tv_sec = 0; ts.tv_sec = 0;
ts.tv_usec = 0; ts.tv_usec = 0;
(void)ts;
]]) ]])
],[ ],[
curl_cv_struct_timeval="yes" curl_cv_struct_timeval="yes"
@ -799,6 +793,84 @@ AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
]) ])
dnl TYPE_IN_ADDR_T
dnl -------------------------------------------------
dnl Check for in_addr_t: it is used to receive the return code of inet_addr()
dnl and a few other things.
AC_DEFUN([TYPE_IN_ADDR_T], [
AC_CHECK_TYPE([in_addr_t], ,[
dnl in_addr_t not available
AC_CACHE_CHECK([for in_addr_t equivalent],
[curl_cv_in_addr_t_equiv], [
curl_cv_in_addr_t_equiv="unknown"
for t in "unsigned long" int size_t unsigned long; do
if test "$curl_cv_in_addr_t_equiv" = "unknown"; then
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
#undef inline
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
]],[[
$t data = inet_addr ("1.2.3.4");
]])
],[
curl_cv_in_addr_t_equiv="$t"
])
fi
done
])
case "$curl_cv_in_addr_t_equiv" in
unknown)
AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t])
;;
*)
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
[Type to use in place of in_addr_t when system does not provide it.])
;;
esac
],[
#undef inline
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#endif
])
])
dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl Check if monotonic clock_gettime is available. dnl Check if monotonic clock_gettime is available.
@ -820,7 +892,6 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
]],[[ ]],[[
struct timespec ts; struct timespec ts;
(void)clock_gettime(CLOCK_MONOTONIC, &ts); (void)clock_gettime(CLOCK_MONOTONIC, &ts);
(void)ts;
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -855,7 +926,6 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW], [
]],[[ ]],[[
struct timespec ts; struct timespec ts;
(void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts); (void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
(void)ts;
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -902,7 +972,6 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
]],[[ ]],[[
struct timespec ts; struct timespec ts;
(void)clock_gettime(CLOCK_MONOTONIC, &ts); (void)clock_gettime(CLOCK_MONOTONIC, &ts);
(void)ts;
]]) ]])
],[ ],[
curl_cv_gclk_LIBS="$x_xlibs" curl_cv_gclk_LIBS="$x_xlibs"
@ -949,10 +1018,10 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
#include <time.h> #include <time.h>
]],[[ ]],[[
struct timespec ts; struct timespec ts;
if(0 == clock_gettime(CLOCK_MONOTONIC, &ts)) if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
return 0; exit(0);
(void)ts; else
return 1; exit(1);
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -1099,7 +1168,7 @@ AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [
dnl point also is available run-time! dnl point also is available run-time!
AC_MSG_CHECKING([run-time libs availability]) AC_MSG_CHECKING([run-time libs availability])
CURL_RUN_IFELSE([ CURL_RUN_IFELSE([
int main(void) int main()
{ {
return 0; return 0;
} }
@ -1311,13 +1380,16 @@ AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [
AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl
if test "$curl_cv_native_windows" = 'yes'; then if test "$curl_cv_native_windows" = 'yes'; then
AC_MSG_CHECKING([whether build target supports Win32 large files]) AC_MSG_CHECKING([whether build target supports Win32 large files])
if test "$curl_cv_wince" = 'yes'; then case $host_os in
dnl Windows CE does not support large files mingw32ce*|cegcc*)
curl_win32_has_largefile='no' dnl Windows CE does not support large files
else curl_win32_has_largefile='no'
dnl All mingw-w64 versions support large files ;;
curl_win32_has_largefile='yes' *)
fi dnl All mingw-w64 versions support large files
curl_win32_has_largefile='yes'
;;
esac
case "$curl_win32_has_largefile" in case "$curl_win32_has_largefile" in
yes) yes)
if test x"$enable_largefile" = 'xno'; then if test x"$enable_largefile" = 'xno'; then
@ -1451,9 +1523,9 @@ dnl Save build info for test runner to pick up and log
AC_DEFUN([CURL_PREPARE_BUILDINFO], [ AC_DEFUN([CURL_PREPARE_BUILDINFO], [
curl_pflags="" curl_pflags=""
if test "$curl_cv_apple" = 'yes'; then case $host in
curl_pflags="${curl_pflags} APPLE" *-apple-*) curl_pflags="${curl_pflags} APPLE";;
fi esac
case $host in case $host in
*-*-*bsd*|*-*-aix*|*-*-hpux*|*-*-interix*|*-*-irix*|*-*-linux*|*-*-solaris*|*-*-sunos*|*-apple-*|*-*-cygwin*|*-*-msys*) *-*-*bsd*|*-*-aix*|*-*-hpux*|*-*-interix*|*-*-irix*|*-*-linux*|*-*-solaris*|*-*-sunos*|*-apple-*|*-*-cygwin*|*-*-msys*)
curl_pflags="${curl_pflags} UNIX";; curl_pflags="${curl_pflags} UNIX";;
@ -1474,24 +1546,14 @@ AC_DEFUN([CURL_PREPARE_BUILDINFO], [
if test "$curl_cv_native_windows" = 'yes'; then if test "$curl_cv_native_windows" = 'yes'; then
curl_pflags="${curl_pflags} WIN32" curl_pflags="${curl_pflags} WIN32"
fi fi
if test "$curl_cv_wince" = 'yes'; then
curl_pflags="${curl_pflags} WINCE"
fi
if test "$curl_cv_winuwp" = 'yes'; then if test "$curl_cv_winuwp" = 'yes'; then
curl_pflags="${curl_pflags} UWP" curl_pflags="${curl_pflags} UWP"
fi fi
case $host in
*-*-*bsd*|*-*-aix*|*-*-hpux*|*-*-interix*|*-*-irix*|*-*-linux*|*-*-solaris*|*-*-sunos*|*-apple-*|*-*-cygwin*|*-*-msys*)
curl_pflags="${curl_pflags} UNIX";;
esac
case $host in
*-*-*bsd*)
curl_pflags="${curl_pflags} BSD";;
esac
if test "$curl_cv_cygwin" = 'yes'; then if test "$curl_cv_cygwin" = 'yes'; then
curl_pflags="${curl_pflags} CYGWIN" curl_pflags="${curl_pflags} CYGWIN"
fi fi
case $host_os in case $host_os in
msys*) curl_pflags="${curl_pflags} MSYS";;
msdos*) curl_pflags="${curl_pflags} DOS";; msdos*) curl_pflags="${curl_pflags} DOS";;
amiga*) curl_pflags="${curl_pflags} AMIGA";; amiga*) curl_pflags="${curl_pflags} AMIGA";;
esac esac
@ -1577,13 +1639,27 @@ dnl with very low deployment targets.
dnl dnl
AC_DEFUN([CURL_DARWIN_CFLAGS], [ AC_DEFUN([CURL_DARWIN_CFLAGS], [
old_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror=partial-availability" tst_cflags="no"
AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) case $host in
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], *-apple-*)
[AC_MSG_RESULT([yes])], tst_cflags="yes"
[AC_MSG_RESULT([no]) ;;
CFLAGS=$old_CFLAGS]) esac
AC_MSG_CHECKING([for good-to-use Darwin CFLAGS])
AC_MSG_RESULT([$tst_cflags]);
if test "$tst_cflags" = "yes"; then
old_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -Werror=partial-availability"
AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
CFLAGS=$old_CFLAGS])
fi
]) ])

View File

@ -28,75 +28,45 @@ set -eux; [ -n "${BASH:-}${ZSH_NAME:-}" ] && set -o pipefail
# build # build
case "${TARGET:-}" in
*Win32) openssl_suffix='-Win32';;
*) openssl_suffix='-Win64';;
esac
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then
openssl_root_win="C:/OpenSSL-v34${openssl_suffix}" openssl_root_win='C:/OpenSSL-v34-Win64'
elif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2019' ]; then
openssl_root_win="C:/OpenSSL-v11${openssl_suffix}"
elif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ]; then
openssl_root_win="C:/OpenSSL${openssl_suffix}"
else else
openssl_root_win="C:/OpenSSL-v111${openssl_suffix}" openssl_root_win='C:/OpenSSL-v111-Win64'
fi fi
openssl_root="$(cygpath "${openssl_root_win}")" openssl_root="$(cygpath "${openssl_root_win}")"
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
# Set env CHKPREFILL to the value '_chkprefill' to compare feature detection options=''
# results with and without the pre-fill feature. They have to match. [[ "${TARGET:-}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture'
for _chkprefill in '' ${CHKPREFILL:-}; do [ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}"
options='' [ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF' [ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}"
[[ "${TARGET}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture' [ "${PRJ_CFG}" = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
[ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}" [ "${PRJ_CFG}" = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}" [[ "${PRJ_GEN}" = *'Visual Studio'* ]] && options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false'
[ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}" # shellcheck disable=SC2086
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ]; then cmake -B _bld "-G${PRJ_GEN}" ${TARGET:-} ${options} \
mkdir "_bld${_chkprefill}" "-DCURL_USE_OPENSSL=${OPENSSL}" \
cd "_bld${_chkprefill}" "-DCURL_USE_SCHANNEL=${SCHANNEL}" \
options+=' ..' "-DHTTP_ONLY=${HTTP_ONLY}" \
root='..' "-DBUILD_SHARED_LIBS=${SHARED}" \
else "-DCMAKE_UNITY_BUILD=${UNITY}" \
options+=" -B _bld${_chkprefill}" '-DCURL_TEST_BUNDLES=ON' \
options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false' '-DCURL_WERROR=ON' \
options+=" -DCMAKE_UNITY_BUILD=${UNITY}" "-DENABLE_DEBUG=${DEBUG}" \
root='.' "-DENABLE_UNICODE=${ENABLE_UNICODE}" \
fi '-DCMAKE_INSTALL_PREFIX=C:/curl' \
# shellcheck disable=SC2086 "-DCMAKE_BUILD_TYPE=${PRJ_CFG}" \
time cmake -G "${PRJ_GEN}" ${TARGET} \ '-DCURL_USE_LIBPSL=OFF'
-DCURL_TEST_BUNDLES=ON \ if false; then
-DCURL_WERROR=ON \ cat _bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
-DBUILD_SHARED_LIBS="${SHARED}" \
-DCURL_STATIC_CRT=ON \
-DENABLE_DEBUG="${DEBUG}" \
-DENABLE_UNICODE="${ENABLE_UNICODE}" \
-DHTTP_ONLY="${HTTP_ONLY}" \
-DCURL_USE_SCHANNEL="${SCHANNEL}" \
-DCURL_USE_OPENSSL="${OPENSSL}" \
-DCURL_USE_LIBPSL=OFF \
${options} \
|| { cat ${root}/_bld/CMakeFiles/CMake* 2>/dev/null; false; }
[ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ] && cd ..
done
if [ -d _bld_chkprefill ] && ! diff -u _bld/lib/curl_config.h _bld_chkprefill/lib/curl_config.h; then
cat _bld_chkprefill/CMakeFiles/CMake* 2>/dev/null || true
false
fi fi
echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true
# shellcheck disable=SC2086 # shellcheck disable=SC2086
if ! time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}; then cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}
if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then [ "${SHARED}" = 'ON' ] && PATH="$PWD/_bld/lib:$PATH"
find . -name BuildLog.htm -exec dos2unix '{}' + [ "${OPENSSL}" = 'ON' ] && PATH="${openssl_root}:$PATH"
find . -name BuildLog.htm -exec cat '{}' + curl='_bld/src/curl.exe'
fi
false
fi
[ "${SHARED}" = 'ON' ] && PATH="$PWD/_bld/lib/${PRJ_CFG}:$PATH"
[ "${OPENSSL}" = 'ON' ] && { PATH="${openssl_root}:$PATH"; cp "${openssl_root}"/*.dll "_bld/src/${PRJ_CFG}"; }
curl="_bld/src/${PRJ_CFG}/curl.exe"
elif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then elif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then
( (
cd projects cd projects
@ -129,7 +99,7 @@ EOF
curl="builds/libcurl-vc14.10-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe" curl="builds/libcurl-vc14.10-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe"
fi fi
find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' -o -name '*.pdb' \) -exec file '{}' \; find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' \) -exec file '{}' \;
if [ -z "${SKIP_RUN:-}" ]; then if [ -z "${SKIP_RUN:-}" ]; then
"${curl}" --disable --version "${curl}" --disable --version
else else
@ -140,14 +110,13 @@ fi
if [ "${TFLAGS}" != 'skipall' ] && \ if [ "${TFLAGS}" != 'skipall' ] && \
[ "${BUILD_SYSTEM}" = 'CMake' ]; then [ "${BUILD_SYSTEM}" = 'CMake' ]; then
time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps
fi fi
# run tests # run tests
if [ "${TFLAGS}" != 'skipall' ] && \ if [ "${TFLAGS}" != 'skipall' ] && \
[ "${TFLAGS}" != 'skiprun' ]; then [ "${TFLAGS}" != 'skiprun' ]; then
export CURL_DIRSUFFIX="${PRJ_CFG}"
if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")" TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then
@ -155,12 +124,12 @@ if [ "${TFLAGS}" != 'skipall' ] && \
fi fi
TFLAGS+=' -j0' TFLAGS+=' -j0'
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
time cmake --build _bld --config "${PRJ_CFG}" --target test-ci cmake --build _bld --config "${PRJ_CFG}" --target test-ci
else else
( (
TFLAGS="-a -p !flaky -r -rm ${TFLAGS}" TFLAGS="-a -p !flaky -r -rm ${TFLAGS}"
cd _bld/tests cd _bld/tests
time ./runtests.pl ./runtests.pl
) )
fi fi
fi fi
@ -169,5 +138,5 @@ fi
if [ "${EXAMPLES}" = 'ON' ] && \ if [ "${EXAMPLES}" = 'ON' ] && \
[ "${BUILD_SYSTEM}" = 'CMake' ]; then [ "${BUILD_SYSTEM}" = 'CMake' ]; then
time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples
fi fi

View File

@ -31,11 +31,8 @@
version: 7.50.0.{build} version: 7.50.0.{build}
environment: environment:
BUILD_SYSTEM: CMake
UNITY: 'ON' UNITY: 'ON'
OPENSSL: 'OFF' OPENSSL: 'OFF'
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
DEBUG: 'ON' DEBUG: 'ON'
SHARED: 'OFF' SHARED: 'OFF'
HTTP_ONLY: 'OFF' HTTP_ONLY: 'OFF'
@ -48,77 +45,89 @@ environment:
- job_name: 'CMake, VS2022, Release, x64, OpenSSL 3.4, Shared, Build-tests' - job_name: 'CMake, VS2022, Release, x64, OpenSSL 3.4, Shared, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Release PRJ_CFG: Release
OPENSSL: 'ON' OPENSSL: 'ON'
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON' SHARED: 'ON'
- job_name: 'CMake, VS2022, Release, arm64, Schannel, Static, Build-tests' - job_name: 'CMake, VS2022, Release, arm64, Schannel, Static, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A ARM64' TARGET: '-A ARM64'
PRJ_CFG: Release PRJ_CFG: Release
SCHANNEL: 'ON' SCHANNEL: 'ON'
ENABLE_UNICODE: 'OFF'
DEBUG: 'OFF' DEBUG: 'OFF'
CURLDEBUG: 'ON' CURLDEBUG: 'ON'
- job_name: 'CMake, VS2008, Debug, x86, OpenSSL 1.0.2 + Schannel, Shared, Build-tests & examples' - job_name: 'CMake, VS2010, Release, x86, Schannel, Static, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2013'
PRJ_GEN: 'Visual Studio 9 2008'
TARGET: '-A Win32'
PRJ_CFG: Debug
OPENSSL: 'ON'
SCHANNEL: 'ON'
SHARED: 'ON'
EXAMPLES: 'ON'
- job_name: 'CMake, VS2010, Debug, x64, Schannel, Shared, Build-tests & examples'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 10 2010'
TARGET: '-A Win32'
PRJ_CFG: Release
SCHANNEL: 'ON'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON'
- job_name: 'CMake, VS2010, Debug, x64, Schannel, Static, Build-tests & examples'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 10 2010' PRJ_GEN: 'Visual Studio 10 2010'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
SCHANNEL: 'ON' SCHANNEL: 'ON'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON' SHARED: 'ON'
EXAMPLES: 'ON' EXAMPLES: 'ON'
- job_name: 'CMake, VS2012, Release, x86, OpenSSL 1.1.1 + Schannel, Shared, Build-tests' - job_name: 'CMake, VS2012, Debug, x64, OpenSSL 1.1.1, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 11 2012' PRJ_GEN: 'Visual Studio 11 2012'
TARGET: '-A Win32' TARGET: '-A x64'
PRJ_CFG: Release PRJ_CFG: Debug
OPENSSL: 'ON' OPENSSL: 'ON'
SCHANNEL: 'ON' SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON' SHARED: 'ON'
- job_name: 'CMake, VS2013, Debug, x64, OpenSSL 1.1.1, Shared, Build-only' - job_name: 'CMake, VS2013, Debug, x64, OpenSSL 1.1.1, Build-only'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 12 2013' PRJ_GEN: 'Visual Studio 12 2013'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
OPENSSL: 'ON' OPENSSL: 'ON'
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON' SHARED: 'ON'
TFLAGS: 'skipall' TFLAGS: 'skipall'
- job_name: 'CMake, VS2015, Debug, x64, OpenSSL 1.1.1, Static, Build-only' - job_name: 'CMake, VS2015, Debug, x64, OpenSSL 1.1.1, Build-only'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 14 2015' PRJ_GEN: 'Visual Studio 14 2015'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
OPENSSL: 'ON' OPENSSL: 'ON'
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON'
TFLAGS: 'skipall' TFLAGS: 'skipall'
- job_name: 'CMake, VS2017, Debug, x64, OpenSSL 1.1.1, Shared, Build-only' - job_name: 'CMake, VS2017, Debug, x64, OpenSSL 1.1.1, Build-only'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 15 2017' PRJ_GEN: 'Visual Studio 15 2017'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
OPENSSL: 'ON' OPENSSL: 'ON'
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
SHARED: 'ON' SHARED: 'ON'
TFLAGS: 'skipall' TFLAGS: 'skipall'
- job_name: 'CMake, VS2019, Debug, x64, OpenSSL 1.1.0 + Schannel, Shared, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2019'
PRJ_GEN: 'Visual Studio 16 2019'
TARGET: '-A x64'
PRJ_CFG: Debug
OPENSSL: 'ON'
SCHANNEL: 'ON'
SHARED: 'ON'
- job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode, Build-tests & examples, clang-cl' - job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode, Build-tests & examples, clang-cl'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
@ -128,6 +137,7 @@ environment:
TOOLSET: 'ClangCl' TOOLSET: 'ClangCl'
- job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode, Build-tests' - job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
@ -135,6 +145,7 @@ environment:
ENABLE_UNICODE: 'ON' ENABLE_UNICODE: 'ON'
- job_name: 'CMake, VS2022, Release, x64, Schannel, Shared, Unicode, DEBUGBUILD, no-CURLDEBUG, Build-tests' - job_name: 'CMake, VS2022, Release, x64, Schannel, Shared, Unicode, DEBUGBUILD, no-CURLDEBUG, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Release PRJ_CFG: Release
@ -144,14 +155,20 @@ environment:
CURLDEBUG: 'OFF' CURLDEBUG: 'OFF'
- job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, Build-tests' - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
- job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, HTTP only, Build-tests' - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, HTTP only, Build-tests'
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022'
BUILD_SYSTEM: CMake
PRJ_GEN: 'Visual Studio 17 2022' PRJ_GEN: 'Visual Studio 17 2022'
TARGET: '-A x64' TARGET: '-A x64'
PRJ_CFG: Debug PRJ_CFG: Debug
SCHANNEL: 'OFF'
ENABLE_UNICODE: 'OFF'
HTTP_ONLY: 'ON' HTTP_ONLY: 'ON'
# winbuild-based builds # winbuild-based builds
@ -237,5 +254,5 @@ skip_commits:
#artifacts: #artifacts:
# - path: '**/curl.exe' # - path: '**/curl.exe'
# name: curl # name: curl
# - path: '**/*.dll' # - path: '**/*curl*.dll'
# name: libcurl dll # name: libcurl dll

View File

@ -493,12 +493,8 @@ dnl **********************************************************************
CURL_CHECK_COMPILER CURL_CHECK_COMPILER
CURL_CHECK_NATIVE_WINDOWS CURL_CHECK_NATIVE_WINDOWS
curl_cv_wince='no'
curl_cv_winuwp='no' curl_cv_winuwp='no'
if test "$curl_cv_native_windows" = "yes"; then if test "$curl_cv_native_windows" = "yes"; then
case $host_os in
mingw32ce*) curl_cv_wince='yes';;
esac
case "$CPPFLAGS" in case "$CPPFLAGS" in
*-DWINSTORECOMPAT*) curl_cv_winuwp='yes';; *-DWINSTORECOMPAT*) curl_cv_winuwp='yes';;
esac esac
@ -595,15 +591,13 @@ dnl **********************************************************************
CURL_CHECK_WIN32_LARGEFILE CURL_CHECK_WIN32_LARGEFILE
CURL_CHECK_WIN32_CRYPTO CURL_CHECK_WIN32_CRYPTO
curl_cv_apple='no' CURL_DARWIN_CFLAGS
case $host in
*-apple-*) curl_cv_apple='yes';;
esac
if test "$curl_cv_apple" = 'yes'; then case $host in
CURL_DARWIN_CFLAGS *-apple-*)
CURL_SUPPORTS_BUILTIN_AVAILABLE CURL_SUPPORTS_BUILTIN_AVAILABLE
fi ;;
esac
curl_cv_cygwin='no' curl_cv_cygwin='no'
case $host_os in case $host_os in
@ -887,7 +881,7 @@ AS_HELP_STRING([--disable-telnet],[Disable TELNET support]),
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
) )
if test "$curl_cv_winuwp" = 'yes' -o "$curl_cv_wince" = 'yes'; then if test "$curl_cv_winuwp" = 'yes'; then
AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET]) AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET])
CURL_DISABLE_TELNET=1 CURL_DISABLE_TELNET=1
fi fi
@ -1165,42 +1159,11 @@ if test "$HAVE_GETHOSTBYNAME" != "1"; then
]) ])
fi fi
if test "$HAVE_GETHOSTBYNAME" != "1"; then
if test "$curl_cv_wince" = 'yes'; then
dnl This is for Windows CE systems
winsock_LIB="-lws2"
if test ! -z "$winsock_LIB"; then
my_ac_save_LIBS=$LIBS
LIBS="$winsock_LIB $LIBS"
AC_MSG_CHECKING([for gethostbyname in $winsock_LIB])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#endif
]],[[
gethostbyname("localhost");
]])
],[
AC_MSG_RESULT([yes])
HAVE_GETHOSTBYNAME="1"
],[
AC_MSG_RESULT([no])
winsock_LIB=""
LIBS=$my_ac_save_LIBS
])
fi
fi
fi
# In UWP mode gethostbyname gets detected via the core libs, but some # In UWP mode gethostbyname gets detected via the core libs, but some
# code (in6addr_any) still need ws2_32, so let us detect and add it. # code (in6addr_any) still need ws2_32, so let us detect and add it.
if test "$HAVE_GETHOSTBYNAME" != "1" -o "$curl_cv_winuwp" = "yes"; then if test "$HAVE_GETHOSTBYNAME" != "1" -o "$curl_cv_winuwp" = "yes"; then
dnl This is for Winsock systems
if test "$curl_cv_native_windows" = "yes"; then if test "$curl_cv_native_windows" = "yes"; then
dnl This is for Winsock systems
winsock_LIB="-lws2_32" winsock_LIB="-lws2_32"
if test ! -z "$winsock_LIB"; then if test ! -z "$winsock_LIB"; then
my_ac_save_LIBS=$LIBS my_ac_save_LIBS=$LIBS
@ -1278,8 +1241,7 @@ if test "$HAVE_GETHOSTBYNAME" != "1" -o "${with_amissl+set}" = set; then
struct Library *SocketBase = NULL; struct Library *SocketBase = NULL;
#endif #endif
]],[[ ]],[[
unsigned char host[] = "localhost"; gethostbyname("localhost");
gethostbyname(host);
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -1753,11 +1715,12 @@ AS_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),
#include <netinet/in6.h> #include <netinet/in6.h>
#endif #endif
#endif #endif
int main(void) int main(void)
{ {
int s = (int)sizeof(struct sockaddr_in6); struct sockaddr_in6 s;
(void)s; (void)s;
return socket(AF_INET6, SOCK_STREAM, 0) > 0; return socket(AF_INET6, SOCK_STREAM, 0) < 0;
} }
]]) ]])
], ],
@ -1768,10 +1731,6 @@ AS_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),
) )
) )
if test "$curl_cv_wince" = 'yes'; then
ipv6=no
fi
if test "$ipv6" = yes; then if test "$ipv6" = yes; then
curl_ipv6_msg="enabled" curl_ipv6_msg="enabled"
AC_DEFINE(USE_IPV6, 1, [Define if you want to enable IPv6 support]) AC_DEFINE(USE_IPV6, 1, [Define if you want to enable IPv6 support])
@ -1793,7 +1752,6 @@ if test "$ipv6" = yes; then
]], [[ ]], [[
struct sockaddr_in6 s; struct sockaddr_in6 s;
s.sin6_scope_id = 0; s.sin6_scope_id = 0;
(void)s;
]]) ]])
],[ ],[
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
@ -1830,9 +1788,6 @@ int main(int argc, char **argv)
],[ ],[
curl_cv_writable_argv=cross curl_cv_writable_argv=cross
]) ])
if test "$curl_cv_writable_argv" = 'cross' -a "$curl_cv_apple" = 'yes'; then
curl_cv_writable_argv=yes
fi
case $curl_cv_writable_argv in case $curl_cv_writable_argv in
yes) yes)
AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv]) AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
@ -1978,48 +1933,51 @@ if test x"$want_gss" = xyes; then
LIBS="-lgss $LIBS" LIBS="-lgss $LIBS"
link_pkgconfig=1 link_pkgconfig=1
elif test -z "$GSSAPI_LIB_DIR"; then elif test -z "$GSSAPI_LIB_DIR"; then
if test "$curl_cv_apple" = 'yes'; then case $host in
LIBS="-lgssapi_krb5 -lresolv $LIBS" *-apple-*)
else LIBS="-lgssapi_krb5 -lresolv $LIBS"
if test $GSSAPI_ROOT != "/usr"; then ;;
CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig) *)
else if test $GSSAPI_ROOT != "/usr"; then
CURL_CHECK_PKGCONFIG(mit-krb5-gssapi) CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig)
fi
if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
dnl krb5-config doesn't have --libs-only-L or similar, put everything
dnl into LIBS
gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi`
LIBS="$gss_libs $LIBS"
elif test "$PKGCONFIG" != "no"; then
gss_libs=`$PKGCONFIG --libs mit-krb5-gssapi`
LIBS="$gss_libs $LIBS"
link_pkgconfig=1
elif test -f "$KRB5CONFIG"; then
dnl krb5-config doesn't have --libs-only-L or similar, put everything
dnl into LIBS
gss_libs=`$KRB5CONFIG --libs gssapi`
LIBS="$gss_libs $LIBS"
link_pkgconfig=1
else
case $host in
*-hp-hpux*)
gss_libname="gss"
;;
*)
gss_libname="gssapi"
;;
esac
if test "$GSSAPI_ROOT" != "yes"; then
LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
LDFLAGSPC="$LDFLAGSPC -L$GSSAPI_ROOT/lib$libsuff"
LIBS="-l$gss_libname $LIBS"
else else
LIBS="-l$gss_libname $LIBS" CURL_CHECK_PKGCONFIG(mit-krb5-gssapi)
fi fi
fi if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
fi dnl krb5-config doesn't have --libs-only-L or similar, put everything
dnl into LIBS
gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi`
LIBS="$gss_libs $LIBS"
elif test "$PKGCONFIG" != "no"; then
gss_libs=`$PKGCONFIG --libs mit-krb5-gssapi`
LIBS="$gss_libs $LIBS"
link_pkgconfig=1
elif test -f "$KRB5CONFIG"; then
dnl krb5-config doesn't have --libs-only-L or similar, put everything
dnl into LIBS
gss_libs=`$KRB5CONFIG --libs gssapi`
LIBS="$gss_libs $LIBS"
link_pkgconfig=1
else
case $host in
*-hp-hpux*)
gss_libname="gss"
;;
*)
gss_libname="gssapi"
;;
esac
if test "$GSSAPI_ROOT" != "yes"; then
LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff"
LDFLAGSPC="$LDFLAGSPC -L$GSSAPI_ROOT/lib$libsuff"
LIBS="-l$gss_libname $LIBS"
else
LIBS="-l$gss_libname $LIBS"
fi
fi
;;
esac
else else
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
LDFLAGSPC="$LDFLAGSPC $GSSAPI_LIB_DIR" LDFLAGSPC="$LDFLAGSPC $GSSAPI_LIB_DIR"
@ -2101,14 +2059,11 @@ CURL_WITH_RUSTLS
dnl link required libraries for USE_WIN32_CRYPTO or SCHANNEL_ENABLED dnl link required libraries for USE_WIN32_CRYPTO or SCHANNEL_ENABLED
if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$SCHANNEL_ENABLED" = "x1"; then if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$SCHANNEL_ENABLED" = "x1"; then
LIBS="-lcrypt32 $LIBS" LIBS="-ladvapi32 -lcrypt32 $LIBS"
if test "$curl_cv_wince" = 'no'; then
LIBS="-ladvapi32 $LIBS"
fi
fi fi
dnl link bcrypt for BCryptGenRandom() (used when building for Vista or newer) dnl link bcrypt for BCryptGenRandom() (used when building for Vista or newer)
if test "x$curl_cv_native_windows" = "xyes" -a "$curl_cv_wince" = 'no'; then if test "x$curl_cv_native_windows" = "xyes"; then
LIBS="-lbcrypt $LIBS" LIBS="-lbcrypt $LIBS"
fi fi
@ -2374,8 +2329,8 @@ if test X"$OPT_LIBSSH2" != Xno; then
CPPFLAGS="$CPPFLAGS $CPP_SSH2" CPPFLAGS="$CPPFLAGS $CPP_SSH2"
LIBS="$LIB_SSH2 $LIBS" LIBS="$LIB_SSH2 $LIBS"
dnl check for function added in libssh2 version 1.2.8 dnl check for function added in libssh2 version 1.0
AC_CHECK_LIB(ssh2, libssh2_free) AC_CHECK_LIB(ssh2, libssh2_session_block_directions)
AC_CHECK_HEADER(libssh2.h, AC_CHECK_HEADER(libssh2.h,
curl_ssh_msg="enabled (libssh2)" curl_ssh_msg="enabled (libssh2)"
@ -2653,11 +2608,7 @@ dnl ----------------------------
dnl check Windows Unicode option dnl check Windows Unicode option
dnl ---------------------------- dnl ----------------------------
if test "$curl_cv_wince" = 'yes'; then want_winuni="no"
want_winuni="yes"
else
want_winuni="no"
fi
if test "$curl_cv_native_windows" = "yes"; then if test "$curl_cv_native_windows" = "yes"; then
if test "$curl_cv_winuwp" = 'yes'; then if test "$curl_cv_winuwp" = 'yes'; then
want_winuni="yes" want_winuni="yes"
@ -2781,34 +2732,36 @@ dnl Check for the presence of AppleIDN
dnl ********************************************************************** dnl **********************************************************************
tst_links_appleidn='no' tst_links_appleidn='no'
if test "$curl_cv_apple" = 'yes'; then case $host in
AC_MSG_CHECKING([whether to build with Apple IDN]) *-apple-*)
OPT_IDN="default" AC_MSG_CHECKING([whether to build with Apple IDN])
AC_ARG_WITH(apple-idn, OPT_IDN="default"
AC_ARG_WITH(apple-idn,
AS_HELP_STRING([--with-apple-idn],[Enable AppleIDN]) AS_HELP_STRING([--with-apple-idn],[Enable AppleIDN])
AS_HELP_STRING([--without-apple-idn],[Disable AppleIDN]), AS_HELP_STRING([--without-apple-idn],[Disable AppleIDN]),
[OPT_IDN=$withval]) [OPT_IDN=$withval])
case "$OPT_IDN" in case "$OPT_IDN" in
yes) yes)
dnl --with-apple-idn option used dnl --with-apple-idn option used
AC_MSG_RESULT([yes, check]) AC_MSG_RESULT([yes, check])
AC_CHECK_LIB(icucore, uidna_openUTS46, AC_CHECK_LIB(icucore, uidna_openUTS46,
[ [
AC_CHECK_HEADERS(unicode/uidna.h, AC_CHECK_HEADERS(unicode/uidna.h,
curl_idn_msg="enabled (AppleIDN)" curl_idn_msg="enabled (AppleIDN)"
AC_DEFINE(USE_APPLE_IDN, 1, [if AppleIDN]) AC_DEFINE(USE_APPLE_IDN, 1, [if AppleIDN])
USE_APPLE_IDN=1 USE_APPLE_IDN=1
IDN_ENABLED=1 IDN_ENABLED=1
LIBS="-licucore -liconv $LIBS" LIBS="-licucore -liconv $LIBS"
tst_links_appleidn='yes' tst_links_appleidn='yes'
) )
]) ])
;; ;;
*) *)
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
;; ;;
esac esac
fi ;;
esac
dnl ********************************************************************** dnl **********************************************************************
dnl Check for the presence of libidn2 dnl Check for the presence of libidn2
@ -4052,6 +4005,8 @@ case $host_os in
;; ;;
esac esac
TYPE_IN_ADDR_T
TYPE_SOCKADDR_STORAGE TYPE_SOCKADDR_STORAGE
CURL_CHECK_FUNC_SELECT CURL_CHECK_FUNC_SELECT
@ -4089,6 +4044,8 @@ CURL_CHECK_FUNC_SOCKET
CURL_CHECK_FUNC_SOCKETPAIR CURL_CHECK_FUNC_SOCKETPAIR
CURL_CHECK_FUNC_STRDUP CURL_CHECK_FUNC_STRDUP
CURL_CHECK_FUNC_STRERROR_R CURL_CHECK_FUNC_STRERROR_R
CURL_CHECK_FUNC_STRTOK_R
CURL_CHECK_FUNC_STRTOLL
case $host in case $host in
*msdosdjgpp) *msdosdjgpp)
@ -4108,12 +4065,14 @@ AC_CHECK_FUNCS([\
getpwuid_r \ getpwuid_r \
getrlimit \ getrlimit \
gettimeofday \ gettimeofday \
if_nametoindex \
mach_absolute_time \ mach_absolute_time \
pipe \ pipe \
poll \ poll \
sendmsg \ sendmsg \
sendmmsg \ sendmmsg \
setlocale \ setlocale \
setmode \
setrlimit \ setrlimit \
snprintf \ snprintf \
utime \ utime \
@ -4121,21 +4080,14 @@ AC_CHECK_FUNCS([\
]) ])
if test "$curl_cv_native_windows" != 'yes'; then if test "$curl_cv_native_windows" != 'yes'; then
AC_CHECK_FUNCS([\ AC_CHECK_FUNCS([sched_yield])
if_nametoindex \
realpath \
sched_yield \
])
CURL_CHECK_FUNC_STRCASECMP CURL_CHECK_FUNC_STRCASECMP
CURL_CHECK_FUNC_STRCMPI CURL_CHECK_FUNC_STRCMPI
CURL_CHECK_FUNC_STRICMP CURL_CHECK_FUNC_STRICMP
fi fi
if test "$curl_cv_wince" = 'no'; then if test "$curl_cv_native_windows" = 'yes' -o "$curl_cv_cygwin" = 'yes'; then
AC_CHECK_FUNCS([setmode]) AC_CHECK_FUNCS([_setmode])
if test "$curl_cv_native_windows" = 'yes' -o "$curl_cv_cygwin" = 'yes'; then
AC_CHECK_FUNCS([_setmode])
fi
fi fi
if test -z "$ssl_backends"; then if test -z "$ssl_backends"; then
@ -4184,7 +4136,7 @@ AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1)
CURL_CHECK_LIB_ARES CURL_CHECK_LIB_ARES
CURL_CHECK_OPTION_THREADED_RESOLVER CURL_CHECK_OPTION_THREADED_RESOLVER
if test "$ipv6" = yes -a "$curl_cv_apple" = 'yes'; then if test "$ipv6" = yes; then
CURL_DARWIN_SYSTEMCONFIGURATION CURL_DARWIN_SYSTEMCONFIGURATION
fi fi
@ -4515,7 +4467,7 @@ AS_HELP_STRING([--disable-unix-sockets],[Disable Unix domain sockets]),
want_unix_sockets=auto want_unix_sockets=auto
] ]
) )
if test "x$want_unix_sockets" != "xno" -a "$curl_cv_wince" = 'no'; then if test "x$want_unix_sockets" != "xno"; then
if test "x$curl_cv_native_windows" = "xyes"; then if test "x$curl_cv_native_windows" = "xyes"; then
USE_UNIX_SOCKETS=1 USE_UNIX_SOCKETS=1
AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets]) AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets])
@ -5065,7 +5017,7 @@ if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
-o "x$USE_THREADS_WIN32" = "x1"; then -o "x$USE_THREADS_WIN32" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
fi fi
if test "x$USE_ARES" = "x1" -a "$want_threaded_resolver" = "yes" -a "x$want_httpsrr" != "xno"; then if test "x$USE_ARES" = "x1" -a "$want_threaded_resolver" = "yes"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES asyn-rr" SUPPORT_FEATURES="$SUPPORT_FEATURES asyn-rr"
fi fi
if test "x$IDN_ENABLED" = "x1"; then if test "x$IDN_ENABLED" = "x1"; then

View File

@ -137,7 +137,7 @@ for a list of these algorithms. Also, (since curl 7.77.0)
[documentation for the Windows version in [documentation for the Windows version in
use](https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel) use](https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel)
to see how that affects the cipher suite selection. When not specifying the to see how that affects the cipher suite selection. When not specifying the
`--ciphers` and `--tls13-ciphers` options curl passes this flag by default. `--chiphers` and `--tl13-ciphers` options curl passes this flag by default.
## Examples ## Examples

View File

@ -43,19 +43,15 @@ To fix before we remove the experimental label:
Building curl with ngtcp2 involves 3 components: `ngtcp2` itself, `nghttp3` and a QUIC supporting TLS library. The supported TLS libraries are covered below. Building curl with ngtcp2 involves 3 components: `ngtcp2` itself, `nghttp3` and a QUIC supporting TLS library. The supported TLS libraries are covered below.
While any version of `ngtcp2` and `nghttp3` from v1.0.0 on are expected to * `ngtcp2`: v1.2.0
work, using the latest versions often brings functional and performance * `nghttp3`: v1.1.0
improvements.
The build examples use `$NGHTTP3_VERION` and `$NGTCP2_VERION` as placeholders
for the version you build.
## Build with quictls ## Build with quictls
OpenSSL does not offer the required APIs for building a QUIC client. You need OpenSSL does not offer the required APIs for building a QUIC client. You need
to use a TLS library that has such APIs and that works with *ngtcp2*. to use a TLS library that has such APIs and that works with *ngtcp2*.
Build quictls (any `+quic` tagged version works): Build quictls:
% git clone --depth 1 -b openssl-3.1.4+quic https://github.com/quictls/openssl % git clone --depth 1 -b openssl-3.1.4+quic https://github.com/quictls/openssl
% cd openssl % cd openssl
@ -66,7 +62,7 @@ Build quictls (any `+quic` tagged version works):
Build nghttp3: Build nghttp3:
% cd .. % cd ..
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3 % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3 % cd nghttp3
% git submodule update --init % git submodule update --init
% autoreconf -fi % autoreconf -fi
@ -77,7 +73,7 @@ Build nghttp3:
Build ngtcp2: Build ngtcp2:
% cd .. % cd ..
% git clone -b $NGTCP2_VERION https://github.com/ngtcp2/ngtcp2 % git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2 % cd ngtcp2
% autoreconf -fi % autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only
@ -110,7 +106,7 @@ Build GnuTLS:
Build nghttp3: Build nghttp3:
% cd .. % cd ..
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3 % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3 % cd nghttp3
% git submodule update --init % git submodule update --init
% autoreconf -fi % autoreconf -fi
@ -121,7 +117,7 @@ Build nghttp3:
Build ngtcp2: Build ngtcp2:
% cd .. % cd ..
% git clone -b $NGTCP2_VERION https://github.com/ngtcp2/ngtcp2 % git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2 % cd ngtcp2
% autoreconf -fi % autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-gnutls % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-gnutls
@ -152,7 +148,7 @@ Build wolfSSL:
Build nghttp3: Build nghttp3:
% cd .. % cd ..
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3 % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3 % cd nghttp3
% git submodule update --init % git submodule update --init
% autoreconf -fi % autoreconf -fi
@ -163,7 +159,7 @@ Build nghttp3:
Build ngtcp2: Build ngtcp2:
% cd .. % cd ..
% git clone -b $NGTCP2_VERION https://github.com/ngtcp2/ngtcp2 % git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2 % cd ngtcp2
% autoreconf -fi % autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-wolfssl % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-wolfssl
@ -214,12 +210,10 @@ Build curl:
QUIC support is **EXPERIMENTAL** QUIC support is **EXPERIMENTAL**
Use OpenSSL 3.3.1 or newer (QUIC support was added in 3.3.0, with Build OpenSSL 3.3.1:
shortcomings on some platforms like macOS). 3.4.1 or newer is recommended.
Build via:
% cd .. % cd ..
% git clone -b $OPENSSL_VERSION https://github.com/openssl/openssl % git clone -b openssl-3.3.1 https://github.com/openssl/openssl
% cd openssl % cd openssl
% ./config enable-tls1_3 --prefix=<somewhere> --libdir=lib % ./config enable-tls1_3 --prefix=<somewhere> --libdir=lib
% make % make
@ -228,7 +222,7 @@ Build via:
Build nghttp3: Build nghttp3:
% cd .. % cd ..
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3 % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3 % cd nghttp3
% git submodule update --init % git submodule update --init
% autoreconf -fi % autoreconf -fi
@ -251,7 +245,7 @@ You can build curl with cmake:
% cd .. % cd ..
% git clone https://github.com/curl/curl % git clone https://github.com/curl/curl
% cd curl % cd curl
% cmake -B bld -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON % cmake . -B bld -DCURL_USE_OPENSSL=ON -DUSE_OPENSSL_QUIC=ON
% cmake --build bld % cmake --build bld
% cmake --install bld % cmake --install bld

View File

@ -21,12 +21,6 @@ CMake's GUIs.
A CMake configuration of curl is similar to the autotools build of curl. A CMake configuration of curl is similar to the autotools build of curl.
It consists of the following steps after you have unpacked the source. It consists of the following steps after you have unpacked the source.
We recommend building with CMake on Windows. For instructions on migrating
from the `projects/Windows` Visual Studio solution files, see
[this section](#migrating-from-visual-studio-ide-project-files). For
instructions on migrating from the winbuild builds, see
[the following section](#migrating-from-winbuild-builds).
## Using `cmake` ## Using `cmake`
You can configure for in source tree builds or for a build tree You can configure for in source tree builds or for a build tree
@ -37,14 +31,10 @@ that is apart from the source tree.
$ cmake -B . $ cmake -B .
- Build in a separate directory (parallel to the curl source tree in this - Build in a separate directory (parallel to the curl source tree in this
example). The build directory is created for you. This is recommended over example). The build directory is created for you.
building in the source tree to separate source and build artifacts.
$ cmake -B ../curl-build $ cmake -B ../curl-build
For the full list of CMake build configuration variables see
[the corresponding section](#cmake-build-options).
### Fallback for CMake before version 3.13 ### Fallback for CMake before version 3.13
CMake before version 3.13 does not support the `-B` option. In that case, CMake before version 3.13 does not support the `-B` option. In that case,
@ -139,12 +129,6 @@ Install to default location (you have to specify the build directory).
$ cmake --install ../curl-build $ cmake --install ../curl-build
Do not use `--prefix` to change the installation prefix as the output produced
by the `curl-config` script is determined at CMake configure time. If you want
to set a custom install prefix for curl, set
[`CMAKE_INSTALL_PREFIX`](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html)
when configuring the CMake build.
### Fallback for CMake before version 3.15 ### Fallback for CMake before version 3.15
CMake before version 3.15 does not support the `--install` option. In that CMake before version 3.15 does not support the `--install` option. In that
@ -155,68 +139,6 @@ assumes that CMake generates `Makefile`:
$ cd ../curl-build $ cd ../curl-build
$ make install $ make install
# CMake usage
Just as curl can be built and installed using CMake, it can also be used from
CMake.
## Using `find_package`
To locate libcurl from CMake, one can use the standard
[`find_package`](https://cmake.org/cmake/help/latest/command/find_package.html)
command in the typical fashion:
```cmake
find_package(CURL 8.12.0 REQUIRED) # FATAL_ERROR if CURL is not found
```
This invokes the CMake-provided
[FindCURL](https://cmake.org/cmake/help/latest/module/FindCURL.html) find module,
which first performs a search using the `find_package`
[config mode](https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure).
This is supported by the `CURLConfig.cmake` CMake config script which is
available if the given CURL was built and installed using CMake.
### Detecting CURL features/protocols
Since version 8.12.0, `CURLConfig.cmake` publishes the supported CURL features
and protocols (see [release notes](https://curl.se/ch/8.12.0.html)). These can
be specified using the `find_package` keywords `COMPONENTS` and
`OPTIONAL_COMPONENTS`, with protocols in all caps, e.g. `HTTPS`, `LDAP`, while
features should be in their original sentence case, e.g. `AsynchDNS`,
`UnixSockets`. If any of the `COMPONENTS` are missing, then CURL is considered
as *not* found.
Here is an example of using `COMPONENTS` and `OPTIONAL_COMPONENTS` in
`find_package` with CURL:
```cmake
# CURL_FOUND is FALSE if no HTTPS but brotli and zstd can be missing
find_package(CURL 8.12.0 COMPONENTS HTTPS OPTIONAL_COMPONENTS brotli zstd)
```
One can also check the defined `CURL_SUPPORTS_<feature-or-protocol>` variables
if a particular feature/protocol is supported. For example:
```cmake
# check HTTPS
if(CURL_SUPPORTS_HTTPS)
message(STATUS "CURL supports HTTPS")
else()
message(STATUS "CURL does NOT support HTTPS")
endif()
```
### Linking against libcurl
To link a CMake target against libcurl one can use
[`target_link_libraries`](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)
as usual:
```cmake
target_link_libraries(my_target PRIVATE CURL::libcurl)
```
# CMake build options # CMake build options
- `BUILD_CURL_EXE`: Build curl executable. Default: `ON` - `BUILD_CURL_EXE`: Build curl executable. Default: `ON`
@ -238,17 +160,16 @@ target_link_libraries(my_target PRIVATE CURL::libcurl)
- `CURL_LIBCURL_VERSIONED_SYMBOLS`: Enable libcurl versioned symbols. Default: `OFF` - `CURL_LIBCURL_VERSIONED_SYMBOLS`: Enable libcurl versioned symbols. Default: `OFF`
- `CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX`: Override default versioned symbol prefix. Default: `<TLS-BACKEND>_` or `MULTISSL_` - `CURL_LIBCURL_VERSIONED_SYMBOLS_PREFIX`: Override default versioned symbol prefix. Default: `<TLS-BACKEND>_` or `MULTISSL_`
- `CURL_LTO`: Enable compiler Link Time Optimizations. Default: `OFF` - `CURL_LTO`: Enable compiler Link Time Optimizations. Default: `OFF`
- `CURL_STATIC_CRT`: Build libcurl with static CRT with MSVC (`/MT`) (requires static or no curl executable). Default: `OFF` - `CURL_STATIC_CRT`: Build libcurl with static CRT with MSVC (`/MT`). Default: `OFF`
- `CURL_TARGET_WINDOWS_VERSION`: Minimum target Windows version as hex string. - `CURL_TARGET_WINDOWS_VERSION`: Minimum target Windows version as hex string.
- `CURL_TEST_BUNDLES`: Bundle `libtest` and `unittest` tests into single binaries. Default: `OFF` - `CURL_TEST_BUNDLES`: Bundle `libtest` and `unittest` tests into single binaries. Default: `OFF`
- `CURL_WERROR`: Turn compiler warnings into errors. Default: `OFF` - `CURL_WERROR`: Turn compiler warnings into errors. Default: `OFF`
- `ENABLE_CURLDEBUG`: Enable TrackMemory debug feature. Default: =`ENABLE_DEBUG` - `ENABLE_CURLDEBUG`: Enable TrackMemory debug feature. Default: =`ENABLE_DEBUG`
- `ENABLE_CURL_MANUAL`: Build the man page for curl and enable its `-M`/`--manual` option. Default: `ON` - `ENABLE_CURL_MANUAL`: Build the man page for curl and enable its `-M`/`--manual` option. Default: `ON`
- `ENABLE_DEBUG`: Enable curl debug features (for developing curl itself). Default: `OFF` - `ENABLE_DEBUG`: Enable curl debug features (for developing curl itself). Default: `OFF`
- `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp` for MSVC-like toolchains, otherwise empty. - `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp`
- `LIBCURL_OUTPUT_NAME`: Basename of the curl library. Default: `libcurl` - `LIBCURL_OUTPUT_NAME`: Basename of the curl library. Default: `libcurl`
- `PICKY_COMPILER`: Enable picky compiler options. Default: `ON` - `PICKY_COMPILER`: Enable picky compiler options. Default: `ON`
- `SHARE_LIB_OBJECT`: Build shared and static libcurl in a single pass (requires CMake 3.12 or newer). Default: `ON` for Windows
- `STATIC_LIB_SUFFIX`: Static library suffix. Default: (empty) - `STATIC_LIB_SUFFIX`: Static library suffix. Default: (empty)
## CA bundle options ## CA bundle options
@ -384,7 +305,6 @@ Details via CMake
- `OPENSSL_USE_STATIC_LIBS`: Look for static OpenSSL libraries. - `OPENSSL_USE_STATIC_LIBS`: Look for static OpenSSL libraries.
- `ZLIB_INCLUDE_DIR`: The zlib include directory. - `ZLIB_INCLUDE_DIR`: The zlib include directory.
- `ZLIB_LIBRARY`: Path to `zlib` library. - `ZLIB_LIBRARY`: Path to `zlib` library.
- `ZLIB_USE_STATIC_LIBS`: Look for static ZLIB library (requires CMake v3.24).
## Dependency options ## Dependency options
@ -458,7 +378,7 @@ Details via CMake
# Migrating from Visual Studio IDE Project Files # Migrating from Visual Studio IDE Project Files
We recommend using CMake to build curl with MSVC. We recommend CMake to build curl with MSVC.
The project build files reside in project/Windows/VC\* for VS2010, VS2010 and The project build files reside in project/Windows/VC\* for VS2010, VS2010 and
VS2013 respectively. VS2013 respectively.
@ -478,8 +398,8 @@ Configuration element | Equivalent CMake options
`Win32` | `-A Win32` `Win32` | `-A Win32`
`DLL` | `BUILD_SHARED_LIBS=ON`, `BUILD_STATIC_LIBS=OFF`, (default) `DLL` | `BUILD_SHARED_LIBS=ON`, `BUILD_STATIC_LIBS=OFF`, (default)
`LIB` | `BUILD_SHARED_LIBS=OFF`, `BUILD_STATIC_LIBS=ON` `LIB` | `BUILD_SHARED_LIBS=OFF`, `BUILD_STATIC_LIBS=ON`
`Debug` | `CMAKE_BUILD_TYPE=Debug` (`-G "NMake Makefiles"` only) `Debug` | `CMAKE_BUILD_TYPE=Debug`
`Release` | `CMAKE_BUILD_TYPE=Release` (`-G "NMake Makefiles"` only) `Release` | `CMAKE_BUILD_TYPE=Release`
`DLL Windows SSPI` | `CURL_USE_SCHANNEL=ON` (with SSPI enabled by default) `DLL Windows SSPI` | `CURL_USE_SCHANNEL=ON` (with SSPI enabled by default)
`DLL OpenSSL` | `CURL_USE_OPENSSL=ON`, optional: `OPENSSL_ROOT_DIR`, `OPENSSL_USE_STATIC_LIBS=ON` `DLL OpenSSL` | `CURL_USE_OPENSSL=ON`, optional: `OPENSSL_ROOT_DIR`, `OPENSSL_USE_STATIC_LIBS=ON`
`DLL libssh2` | `CURL_USE_LIBSSH2=ON`, optional: `LIBSSH2_INCLUDE_DIR`, `LIBSSH2_LIBRARY` `DLL libssh2` | `CURL_USE_LIBSSH2=ON`, optional: `LIBSSH2_INCLUDE_DIR`, `LIBSSH2_LIBRARY`
@ -493,13 +413,7 @@ For example these commands:
translate to: translate to:
> cmake . -G "Visual Studio 12 2013" -A x64 -DCURL_USE_SCHANNEL=ON -DUSE_WIN32_IDN=ON -DCURL_USE_LIBPSL=OFF > cmake . -G "Visual Studio 12 2013" -A x64 -DCMAKE_BUILD_TYPE=Debug -DCURL_USE_SCHANNEL=ON -DUSE_WIN32_IDN=ON -DCURL_USE_LIBPSL=OFF
> cmake --build . --config Debug --parallel
We do *not* specify `-DCMAKE_BUILD_TYPE=Debug` here as we might do for the
`"NMake Makefiles"` generator because the Visual Studio generators are
[multi-config generators](https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html)
and therefore ignore the value of `CMAKE_BUILD_TYPE`.
# Migrating from winbuild builds # Migrating from winbuild builds
@ -522,7 +436,7 @@ winbuild options | Equivalent CMake options
`DEBUG` | `CMAKE_BUILD_TYPE=Debug` `DEBUG` | `CMAKE_BUILD_TYPE=Debug`
`GEN_PDB` | `CMAKE_EXE_LINKER_FLAGS=/Fd<path>`, `CMAKE_SHARED_LINKER_FLAGS=/Fd<path>` `GEN_PDB` | `CMAKE_EXE_LINKER_FLAGS=/Fd<path>`, `CMAKE_SHARED_LINKER_FLAGS=/Fd<path>`
`LIB_NAME_DLL`, `LIB_NAME_STATIC` | `IMPORT_LIB_SUFFIX`, `LIBCURL_OUTPUT_NAME`, `STATIC_LIB_SUFFIX` `LIB_NAME_DLL`, `LIB_NAME_STATIC` | `IMPORT_LIB_SUFFIX`, `LIBCURL_OUTPUT_NAME`, `STATIC_LIB_SUFFIX`
`VC`: `<N>` | see the CMake [Visual Studio generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators) `VC` | see CMake `-G` [options](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
`MACHINE`: `x64`, `x86` | `-A x64`, `-A Win32` `MACHINE`: `x64`, `x86` | `-A x64`, `-A Win32`
`MODE`: `dll`, `static` | `BUILD_SHARED_LIBS=ON/OFF`, `BUILD_STATIC_LIBS=ON/OFF`, `BUILD_STATIC_CURL=ON/OFF` (default: dll) `MODE`: `dll`, `static` | `BUILD_SHARED_LIBS=ON/OFF`, `BUILD_STATIC_LIBS=ON/OFF`, `BUILD_STATIC_CURL=ON/OFF` (default: dll)
`RTLIBCFG`: `static` | `CURL_STATIC_CRT=ON` `RTLIBCFG`: `static` | `CURL_STATIC_CRT=ON`
@ -552,8 +466,4 @@ For example this command-line:
translates to: translates to:
> cmake . -G "Visual Studio 17 2022" -A x64 -DBUILD_SHARED_LIBS=ON -DOPENSSL_ROOT_DIR=C:\OpenSSL -DCURL_USE_OPENSSL=ON -DENABLE_UNICODE=ON -DCURL_USE_LIBPSL=OFF > cmake . -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON -DOPENSSL_ROOT_DIR=C:\OpenSSL -DCURL_USE_OPENSSL=ON -DENABLE_UNICODE=ON -DCURL_USE_LIBPSL=OFF
> cmake --build . --config Debug
We use `--config` with `cmake --build` because the Visual Studio CMake
generators are multi-config and therefore ignore `CMAKE_BUILD_TYPE`.

View File

@ -24,13 +24,11 @@ versions of libs and build tools.
We aim to support these or later versions. We aim to support these or later versions.
- OpenSSL 1.0.2a - OpenSSL 0.9.7
- LibreSSL 2.9.1
- GnuTLS 3.1.10 - GnuTLS 3.1.10
- zlib 1.2.0.4 - zlib 1.2.0.4
- libssh2 1.2.8 - libssh2 1.0
- c-ares 1.6.0 - c-ares 1.16.0
- libssh 0.9.0
- libidn2 2.0.0 - libidn2 2.0.0
- wolfSSL 3.4.6 - wolfSSL 3.4.6
- OpenLDAP 2.0 - OpenLDAP 2.0

View File

@ -17,6 +17,7 @@ problems may have been fixed or changed somewhat since this was written.
2.1 IMAPS connection fails with Rustls error 2.1 IMAPS connection fails with Rustls error
2.3 Unable to use PKCS12 certificate with Secure Transport 2.3 Unable to use PKCS12 certificate with Secure Transport
2.4 Secure Transport does not import PKCS#12 client certificates without a password 2.4 Secure Transport does not import PKCS#12 client certificates without a password
2.5 Client cert handling with Issuer DN differs between backends
2.7 Client cert (MTLS) issues with Schannel 2.7 Client cert (MTLS) issues with Schannel
2.11 Schannel TLS 1.2 handshake bug in old Windows versions 2.11 Schannel TLS 1.2 handshake bug in old Windows versions
2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel
@ -67,8 +68,7 @@ problems may have been fixed or changed somewhat since this was written.
9.4 libssh blocking and infinite loop problem 9.4 libssh blocking and infinite loop problem
9.5 Cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!" 9.5 Cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!"
10. Connection 10. SOCKS
10.1 --interface with link-scoped IPv6 address
11. Internals 11. Internals
11.1 gssapi library name + version is missing in curl_version_info() 11.1 gssapi library name + version is missing in curl_version_info()
@ -136,6 +136,14 @@ problems may have been fixed or changed somewhat since this was written.
function rejects certificates that do not have a password. function rejects certificates that do not have a password.
https://github.com/curl/curl/issues/1308 https://github.com/curl/curl/issues/1308
2.5 Client cert handling with Issuer DN differs between backends
When the specified client certificate does not match any of the
server-specified DNs, the OpenSSL and GnuTLS backends behave differently.
The github discussion may contain a solution.
See https://github.com/curl/curl/issues/1411
2.7 Client cert (MTLS) issues with Schannel 2.7 Client cert (MTLS) issues with Schannel
See https://github.com/curl/curl/issues/3145 See https://github.com/curl/curl/issues/3145
@ -437,23 +445,7 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/11244 https://github.com/curl/curl/issues/11244
10. Connection 10. SOCKS
10.1 --interface with link-scoped IPv6 address
When you give the `--interface` option telling curl to use a specific
interface for its outgoing traffic in combination with a IPv6 address in the
URL that uses a link-local scope, curl might pick the wrong address from the
named interface and the subsequent transfer fails.
Example command line:
curl --interface eth0 'http://[fe80:928d:xxff:fexx:xxxx]/'
The fact that the given IP address is link-scoped should probably be used as
input to somehow make curl make a better choice for this.
https://github.com/curl/curl/issues/14782
11. Internals 11. Internals
@ -633,7 +625,7 @@ problems may have been fixed or changed somewhat since this was written.
17.4 HTTP/2 + TLS spends a lot of time in recv 17.4 HTTP/2 + TLS spends a lot of time in recv
It has been observed that by making the speed limit less accurate we could It has been observered that by making the speed limit less accurate we could
improve this performance. (by reverting improve this performance. (by reverting
https://github.com/curl/curl/commit/db5c9f4f9e0779b49624752b135281a0717b277b) https://github.com/curl/curl/commit/db5c9f4f9e0779b49624752b135281a0717b277b)
Can we find a golden middle ground? Can we find a golden middle ground?

View File

@ -582,7 +582,7 @@ Example, set default time out and proxy in a config file:
# We want a 30 minute timeout: # We want a 30 minute timeout:
-m 1800 -m 1800
# ... and we use a proxy for all accesses: # ... and we use a proxy for all accesses:
proxy = proxy.our.domain.example.com:8080 proxy = proxy.our.domain.com:8080
Whitespaces ARE significant at the end of lines, but all whitespace leading Whitespaces ARE significant at the end of lines, but all whitespace leading
up to the first characters of each line are ignored. up to the first characters of each line are ignored.

View File

@ -52,7 +52,6 @@ INTERNALDOCS = \
internals/HASH.md \ internals/HASH.md \
internals/LLIST.md \ internals/LLIST.md \
internals/MQTT.md \ internals/MQTT.md \
internals/MULTI-EV.md \
internals/NEW-PROTOCOL.md \ internals/NEW-PROTOCOL.md \
internals/README.md \ internals/README.md \
internals/SPLAY.md \ internals/SPLAY.md \

View File

@ -9,7 +9,7 @@ SPDX-License-Identifier: curl
[Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). curl can [Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). curl can
be built to use it as an alternative to OpenSSL or other TLS backends. We use be built to use it as an alternative to OpenSSL or other TLS backends. We use
the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This
version of curl is compatible with `rustls-ffi` v0.14.x. version of curl depends on version v0.14.0 of rustls-ffi.
# Building with Rustls # Building with Rustls
@ -17,7 +17,7 @@ First, [install Rust](https://rustup.rs/).
Next, check out, build, and install the appropriate version of rustls-ffi: Next, check out, build, and install the appropriate version of rustls-ffi:
% git clone https://github.com/rustls/rustls-ffi -b v0.14.1 % git clone https://github.com/rustls/rustls-ffi -b v0.14.0
% cd rustls-ffi % cd rustls-ffi
% make % make
% make DESTDIR=${HOME}/rustls-ffi-built/ install % make DESTDIR=${HOME}/rustls-ffi-built/ install

View File

@ -25,8 +25,7 @@ named sponsor level: **Silver**, **Gold**, **Platinum** or **Top**.
Sponsors on a named level can provide their logo image and preferred URL and Sponsors on a named level can provide their logo image and preferred URL and
get recognition on the curl website's [sponsor get recognition on the curl website's [sponsor
page](https://curl.se/sponsors.html), assuming they meet the project's page](https://curl.se/sponsors.html).
standards and requirements.
- **Silver Sponsor** at least 100 USD/month - **Silver Sponsor** at least 100 USD/month
- **Gold Sponsor** at least 500 USD/month - **Gold Sponsor** at least 500 USD/month
@ -46,10 +45,3 @@ gambling, pornography, social media manipulation etc.
Sponsors that stop paying are considered *Past Sponsors* and are not displayed Sponsors that stop paying are considered *Past Sponsors* and are not displayed
on the sponsor page anymore. We thank you for your contributions. on the sponsor page anymore. We thank you for your contributions.
## Donations
Please note that sponsorship and donations are exactly that: donations to the
curl project. They are used to help and further the project as the project
leadership deems best. No goods or services are expected or promised in
return. Requests for refunds for such purposes are rejected.

View File

@ -182,7 +182,6 @@ Andrei Benea
Andrei Bica Andrei Bica
Andrei Cipu Andrei Cipu
Andrei Karas Andrei Karas
Andrei Korshikov
Andrei Kurushin Andrei Kurushin
Andrei Neculau Andrei Neculau
Andrei Rybak Andrei Rybak
@ -260,7 +259,6 @@ arainchik on github
Archangel_SDY on github Archangel_SDY on github
Arjan van de Ven Arjan van de Ven
Arkadiusz Miskiewicz Arkadiusz Miskiewicz
arlt on github
Armel Asselin Armel Asselin
Arnaud Compan Arnaud Compan
Arnaud Ebalard Arnaud Ebalard
@ -598,7 +596,6 @@ Cris Bailiff
Cristian Greco Cristian Greco
Cristian Morales Vega Cristian Morales Vega
Cristian Rodríguez Cristian Rodríguez
CueXXIII on Github
Curt Bogmine Curt Bogmine
Cynthia Coan Cynthia Coan
Cyril B Cyril B
@ -741,7 +738,6 @@ dbrowndan on github
dEajL3kA on github dEajL3kA on github
Deal(一线灵) Deal(一线灵)
dekerser on github dekerser on github
deliciouslytyped on github
delogicsreal on github delogicsreal on github
dengjfzh on github dengjfzh on github
Dengminwen Dengminwen
@ -979,7 +975,6 @@ farazrbx on github
Farzin on github Farzin on github
Fata Nugraha Fata Nugraha
Fawad Mirza Fawad Mirza
Fay Stegerman
FC Stegerman FC Stegerman
fds242 on github fds242 on github
Federico Bianchi Federico Bianchi
@ -2167,7 +2162,6 @@ Mostyn Bramley-Moore
Moti Avrahami Moti Avrahami
MrdUkk on github MrdUkk on github
MrSorcus on github MrSorcus on github
mschroeder-fzj on github
Muhammad Herdiansyah Muhammad Herdiansyah
Muhammad Hussein Ammari Muhammad Hussein Ammari
Muhammed Yavuz Nuzumlalı Muhammed Yavuz Nuzumlalı
@ -2264,7 +2258,6 @@ nobedee on github
NobodyXu on github NobodyXu on github
Nobuhiro Ban Nobuhiro Ban
Nodak Sodak Nodak Sodak
nono303 on github
nopjmp on github nopjmp on github
Norbert Frese Norbert Frese
Norbert Kett Norbert Kett
@ -2492,7 +2485,6 @@ pszlazak on github
puckipedia on github puckipedia on github
Puneet Pawaia Puneet Pawaia
Pēteris Caune Pēteris Caune
qhill
qiandu2006 on github qiandu2006 on github
Qriist on github Qriist on github
Quagmire Quagmire
@ -2521,7 +2513,6 @@ RainRat
Raito Bezarius Raito Bezarius
Rajesh Naganathan Rajesh Naganathan
Rajkumar Mandal Rajkumar Mandal
Ralf A. Timmermann
Ralf S. Engelschall Ralf S. Engelschall
ralfjunker on github ralfjunker on github
Ralph Beckmann Ralph Beckmann
@ -2977,7 +2968,6 @@ tbugfinder on github
Ted Lyngmo Ted Lyngmo
Teemu Yli-Elsila Teemu Yli-Elsila
Temprimus Temprimus
Terence Eden
Terri Oda Terri Oda
Terry Wu Terry Wu
thanhchungbtc on github thanhchungbtc on github
@ -2988,7 +2978,6 @@ Theo
Theodore Dubois Theodore Dubois
therealhirudo on github therealhirudo on github
Thiago Suchorski Thiago Suchorski
thisisgk on github
tholin on github tholin on github
Thomas Thomas
Thomas Bouzerar Thomas Bouzerar

View File

@ -156,5 +156,3 @@ s/Testclutch//
s/edmcln\z/edmcln on github/ s/edmcln\z/edmcln on github/
s/andrewkirillov-ibm/Andrew Kirillov/ s/andrewkirillov-ibm/Andrew Kirillov/
s/\(.*\) via #[0-9]*// s/\(.*\) via #[0-9]*//
s/jethrogb$/jethrogb on github/
s/on github/on github/i

View File

@ -247,11 +247,11 @@ local system or network, the bar is raised. If a local user wrongfully has
elevated rights on your system enough to attack curl, they can probably elevated rights on your system enough to attack curl, they can probably
already do much worse harm and the problem is not really in curl. already do much worse harm and the problem is not really in curl.
## Debug & Experiments ## Experiments
Vulnerabilities in features which are off by default (in the build) and Vulnerabilities in features which are off by default (in the build) and
documented as experimental, or exist only in debug mode, are not eligible for a documented as experimental, are not eligible for a reward and we do not
reward and we do not consider them security problems. consider them security problems.
## URL inconsistencies ## URL inconsistencies

View File

@ -27,10 +27,10 @@ set:
When expanding variables, curl supports a set of functions that can make the When expanding variables, curl supports a set of functions that can make the
variable contents more convenient to use. It can trim leading and trailing variable contents more convenient to use. It can trim leading and trailing
white space with `trim`, it can output the contents as a JSON quoted string white space with `trim`, it can output the contents as a JSON quoted string
with `json`, URL encode the string with `url`, base64 encode it with `b64` and with `json`, URL encode the string with `url` or base64 encode it with `b64`.
base64 decode it with `64dec`. To apply functions to a variable expansion, add To apply functions to a variable expansion, add them colon separated to the
them colon separated to the right side of the variable. Variable content right side of the variable. Variable content holding null bytes that are not
holding null bytes that are not encoded when expanded cause error. encoded when expanded cause error.
Example: get the contents of a file called $HOME/.secret into a variable Example: get the contents of a file called $HOME/.secret into a variable
called "fix". Make sure that the content is trimmed and percent-encoded when called "fix". Make sure that the content is trimmed and percent-encoded when

View File

@ -12,27 +12,18 @@ See-also:
- capath - capath
- dump-ca-embed - dump-ca-embed
- insecure - insecure
- proxy-ca-native
Example: Example:
- --ca-native $URL - --ca-native $URL
--- ---
# `--ca-native` # `--ca-native`
Use the operating system's native CA store for certificate verification. Use the CA store from the native operating system to verify the peer. By
default, curl otherwise uses a CA store provided in a single file or
directory, but when using this option it interfaces the operating system's own
vault.
This option is independent of other CA certificate locations set at run time or This option works for curl on Windows when built to use OpenSSL, wolfSSL
build time. Those locations are searched in addition to the native CA store. (added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on Windows is built to
use Schannel, this feature is implied and curl then only uses the native CA
This option works with OpenSSL and its forks (LibreSSL, BoringSSL, etc) on store.
Windows. (Added in 7.71.0)
This option works with wolfSSL on Windows, Linux (Debian, Ubuntu, Gentoo,
Fedora, RHEL), macOS, Android and iOS. (Added in 8.3.0)
This option works with GnuTLS. (Added in 8.5.0)
This option currently has no effect for Schannel or Secure Transport. Those are
native TLS libraries from Microsoft and Apple, respectively, that by default
use the native CA store for verification unless overridden by a CA certificate
location setting.

View File

@ -55,14 +55,10 @@ among others and should be added with this option.
You need --proxy-header to send custom headers intended for an HTTP proxy. You need --proxy-header to send custom headers intended for an HTTP proxy.
(Added in 7.37.0) (Added in 7.37.0)
Passing on a `Transfer-Encoding: chunked` header when doing an HTTP request Passing on a "Transfer-Encoding: chunked" header when doing an HTTP request
with a request body, makes curl send the data using chunked encoding. with a request body, makes curl send the data using chunked encoding.
**WARNING**: headers set with this option are set in all HTTP requests - even **WARNING**: headers set with this option are set in all HTTP requests - even
after redirects are followed, like when told with --location. This can lead to after redirects are followed, like when told with --location. This can lead to
the header being sent to other hosts than the original host, so sensitive the header being sent to other hosts than the original host, so sensitive
headers should be used with caution combined with following redirects. headers should be used with caution combined with following redirects.
`Authorization:` and `Cookie:` headers are explicitly *not* passed on in HTTP
requests when following redirects to other origins, unless --location-trusted
is used.

View File

@ -30,9 +30,9 @@ On Windows two filenames in the home directory are checked: *.netrc* and
only. only.
A quick and simple example of how to setup a *.netrc* to allow curl to FTP to A quick and simple example of how to setup a *.netrc* to allow curl to FTP to
the machine host.example.com with username 'myself' and password 'secret' could the machine host.domain.com with username 'myself' and password 'secret' could
look similar to: look similar to:
machine host.example.com machine host.domain.com
login myself login myself
password secret password secret

View File

@ -8,7 +8,6 @@ Category: tls
Added: 8.2.0 Added: 8.2.0
Multi: boolean Multi: boolean
See-also: See-also:
- ca-native
- cacert - cacert
- capath - capath
- dump-ca-embed - dump-ca-embed
@ -19,12 +18,11 @@ Example:
# `--proxy-ca-native` # `--proxy-ca-native`
Use the operating system's native CA store for certificate verification of the Use the CA store from the native operating system to verify the HTTPS proxy.
HTTPS proxy. By default, curl uses a CA store provided in a single file or directory, but
when using this option it interfaces the operating system's own vault.
This option is independent of other HTTPS proxy CA certificate locations set at This option works for curl on Windows when built to use OpenSSL, wolfSSL
run time or build time. Those locations are searched in addition to the native (added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on Windows is built to
CA store. use Schannel, this feature is implied and curl then only uses the native CA
store.
Equivalent to --ca-native but used in HTTPS proxy context. Refer to --ca-native
for TLS backend limitations.

View File

@ -22,7 +22,7 @@ Use the specified proxy.
The proxy string can be specified with a protocol:// prefix. No protocol The proxy string can be specified with a protocol:// prefix. No protocol
specified or http:// it is treated as an HTTP proxy. Use socks4://, specified or http:// it is treated as an HTTP proxy. Use socks4://,
socks4a://, socks5:// or socks5h:// to request a specific SOCKS version to be socks4a://, socks5:// or socks5h:// to request a specific SOCKS version to be
used. (Added in 7.21.7) used. (Added in 7.21.7)
Unix domain sockets are supported for socks proxy. Set localhost for the host Unix domain sockets are supported for socks proxy. Set localhost for the host
part. e.g. socks5h://localhost/path/to/socket.sock part. e.g. socks5h://localhost/path/to/socket.sock
@ -59,4 +59,4 @@ used.
Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an Doing FTP over an HTTP proxy without --proxytunnel makes curl do HTTP with an
FTP URL over the proxy. For such transfers, common FTP specific options do not FTP URL over the proxy. For such transfers, common FTP specific options do not
work, including --ssl-reqd and --ftp-ssl-control. work, including --ftp-ssl-reqd and --ftp-ssl-control.

View File

@ -41,10 +41,9 @@ specifies two separate 100-byte ranges(*) (HTTP)
## ##
(*) = NOTE that if specifying multiple ranges and the server supports it then (*) = NOTE that these make the server reply with a multipart response, which
it replies with a multiple part response that curl returns as-is. It is returned as-is by curl. Parsing or otherwise transforming this response is
contains meta information in addition to the requested bytes. Parsing or the responsibility of the caller.
otherwise transforming this response is the responsibility of the caller.
Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the
'start-stop' range syntax. If a non-digit character is given in the range, the 'start-stop' range syntax. If a non-digit character is given in the range, the

View File

@ -12,7 +12,6 @@ See-also:
- alt-svc - alt-svc
Example: Example:
- --resolve example.com:443:127.0.0.1 $URL - --resolve example.com:443:127.0.0.1 $URL
- --resolve example.com:443:[2001:db8::252f:efd6] $URL
--- ---
# `--resolve` # `--resolve`
@ -21,8 +20,8 @@ Provide a custom address for a specific host and port pair. Using this, you
can make the curl requests(s) use a specified address and prevent the can make the curl requests(s) use a specified address and prevent the
otherwise normally resolved address to be used. Consider it a sort of otherwise normally resolved address to be used. Consider it a sort of
/etc/hosts alternative provided on the command line. The port number should be /etc/hosts alternative provided on the command line. The port number should be
the number used for the specific protocol the host is used for. It means you the number used for the specific protocol the host is used for. It means
need several entries if you want to provide addresses for the same host but you need several entries if you want to provide address for the same host but
different ports. different ports.
By specifying `*` as host you can tell curl to resolve any host and specific By specifying `*` as host you can tell curl to resolve any host and specific
@ -38,13 +37,9 @@ parallel transfers with a lot of files. In such cases, if this option is used
curl tries to resolve the host as it normally would once the timeout has curl tries to resolve the host as it normally would once the timeout has
expired. expired.
Provide IPv6 addresses within [brackets].
To redirect connects from a specific hostname or any hostname, independently To redirect connects from a specific hostname or any hostname, independently
of port number, consider the --connect-to option. of port number, consider the --connect-to option.
Support for resolving with wildcard was added in 7.64.0. Support for resolving with wildcard was added in 7.64.0.
Support for the '+' prefix was added in 7.75.0. Support for the '+' prefix was added in 7.75.0.
Support for specifying the host component as an IPv6 address was added in 8.13.0.

View File

@ -38,8 +38,5 @@ for you, it is probably not a good idea to use early data for it. curl
cannot deduce what the security implications of your requests actually cannot deduce what the security implications of your requests actually
are and make this decision for you. are and make this decision for you.
The amount of early data sent can be inspected by using the `--write-out`
variable `tls_earlydata`.
**WARNING**: this option has security implications. See above for more **WARNING**: this option has security implications. See above for more
details. details.

View File

@ -2,19 +2,16 @@
c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl SPDX-License-Identifier: curl
Long: url Long: url
Arg: <url/file> Arg: <url>
Help: URL(s) to work with Help: URL to work with
Category: curl Category: curl
Added: 7.5 Added: 7.5
Multi: append Multi: append
See-also: See-also:
- next - next
- config - config
- path-as-is
- disallow-username-in-url
Example: Example:
- --url $URL - --url $URL
- --url @file
--- ---
# `--url` # `--url`
@ -35,15 +32,3 @@ destination option unless --remote-name-all is used.
On Windows, `file://` accesses can be converted to network accesses by the On Windows, `file://` accesses can be converted to network accesses by the
operating system. operating system.
Starting in curl 8.13.0, curl can be told to download URLs provided in a text
file, one URL per line. It is done by with `--url @filename`: so instead of a
URL, you specify a filename prefixed with the `@` symbol. It can be told to
load the list of URLs from stdin by providing an argument like `@-`.
When downloading URLs given in a file, it implies using --remote-name for each
provided URL. The URLs are full, there is no globbing applied or done on
these. Features such as --skip-existing work fine in combination with this.
Lines in the URL file that start with `#` are treated as comments and are
skipped.

View File

@ -66,45 +66,30 @@ error.
Available functions: Available functions:
## `trim` ## trim
removes all leading and trailing white space. removes all leading and trailing white space.
Example: Example:
curl --expand-url https://example.com/{{var:trim}} curl --expand-url https.//example.com/{{url:trim}}
## `json`
## json
outputs the content using JSON string quoting rules. outputs the content using JSON string quoting rules.
Example: Example:
curl --expand-data {{data:json}} https://example.com curl --expand-data {{data:json}} https://example.com
## `url` ## url
shows the content URL (percent) encoded. shows the content URL (percent) encoded.
Example: Example:
curl --expand-url https://example.com/{{path:url}} curl --expand-url https://example.com/{{path:url}}
## `b64` ## b64
expands the variable base64 encoded expands the variable base64 encoded
Example: Example:
curl --expand-url https://example.com/{{var:b64}} curl --expand-url https://example.com/{{var:b64}}
## `64dec`
decodes a base64 encoded character sequence. If the sequence is not possible
to decode, it instead outputs `[64dec-fail]`
Example:
curl --expand-url https://example.com/{{var:64dec}}
(Added in 8.13.0)

View File

@ -53,8 +53,3 @@ to trace the specific components you wish to see.
Note that verbose output of curl activities and network traffic might contain Note that verbose output of curl activities and network traffic might contain
sensitive data, including usernames, credentials or secret data content. Be sensitive data, including usernames, credentials or secret data content. Be
aware and be careful when sharing trace logs with others. aware and be careful when sharing trace logs with others.
When the output contains protocol headers, those lines might include carriage
return (ASCII code 13) characters, even on platforms that otherwise normally
only use linefeed to signify line separations - as curl shows the exact
contents arriving from the server.

View File

@ -32,11 +32,10 @@ output a newline by using \n, a carriage return with \r and a tab space with
The output is by default written to standard output, but can be changed with The output is by default written to standard output, but can be changed with
%{stderr} and %output{}. %{stderr} and %output{}.
Output HTTP header values from the transfer's most recent server response by Output HTTP headers from the most recent request by using *%header{name}*
using *%header{name}* where *name* is the case insensitive name of the header where *name* is the case insensitive name of the header (without the trailing
(without the trailing colon). The header contents are exactly as delivered over colon). The header contents are exactly as sent over the network, with leading
the network but with leading and trailing whitespace and newlines stripped off and trailing whitespace trimmed (added in 7.84.0).
(added in 7.84.0).
Select a specific target destination file to write the output to, by using Select a specific target destination file to write the output to, by using
*%output{name}* (added in curl 8.3.0) where *name* is the full filename. The *%output{name}* (added in curl 8.3.0) where *name* is the full filename. The
@ -62,7 +61,7 @@ The variables available are:
## `certs` ## `certs`
Output the certificate chain with details. Supported only by the OpenSSL, Output the certificate chain with details. Supported only by the OpenSSL,
GnuTLS, Schannel, Rustls, and Secure Transport backends. (Added in 7.88.0) GnuTLS, Schannel and Secure Transport backends. (Added in 7.88.0)
## `conn_id` ## `conn_id`
The connection identifier last used by the transfer. The connection id is The connection identifier last used by the transfer. The connection id is
@ -88,11 +87,6 @@ most useful in combination with the --remote-header-name option.
The initial path curl ended up in when logging on to the remote FTP The initial path curl ended up in when logging on to the remote FTP
server. (Added in 7.15.4) server. (Added in 7.15.4)
## `header{name}`
The value of header `name` from the transfer's most recent server response.
Unlike other variables, the variable name `header` is not in braces. For
example `%header{date}`. Refer to --write-out remarks. (Added in 7.84.0)
## `header_json` ## `header_json`
A JSON object with all HTTP response headers from the recent transfer. Values A JSON object with all HTTP response headers from the recent transfer. Values
are provided as arrays, since in the case of multiple headers there can be are provided as arrays, since in the case of multiple headers there can be
@ -128,7 +122,7 @@ The http method used in the most recent HTTP request. (Added in 7.72.0)
## `num_certs` ## `num_certs`
Number of server certificates received in the TLS handshake. Supported only by Number of server certificates received in the TLS handshake. Supported only by
the OpenSSL, GnuTLS, Schannel, Rustls and Secure Transport backends. the OpenSSL, GnuTLS, Schannel and Secure Transport backends.
(Added in 7.88.0) (Added in 7.88.0)
## `num_connects` ## `num_connects`
@ -149,12 +143,6 @@ Number of retries actually performed when `--retry` has been used.
The rest of the output is only shown if the transfer returned a non-zero error. The rest of the output is only shown if the transfer returned a non-zero error.
(Added in 7.75.0) (Added in 7.75.0)
## `output{filename}`
From this point on, the --write-out output is written to the filename specified
in braces. The filename can be prefixed with `>>` to append to the file. Unlike
other variables, the variable name `output` is not in braces. For example
`%output{>>stats.txt}`. Refer to --write-out remarks. (Added in 8.3.0)
## `proxy_ssl_verify_result` ## `proxy_ssl_verify_result`
The result of the HTTPS proxy's SSL peer certificate verification that was The result of the HTTPS proxy's SSL peer certificate verification that was
requested. 0 means the verification was successful. (Added in 7.52.0) requested. 0 means the verification was successful. (Added in 7.52.0)
@ -262,12 +250,6 @@ the result.
## `time_total` ## `time_total`
The total time, in seconds, that the full operation lasted. The total time, in seconds, that the full operation lasted.
## `tls_earlydata`
The amount of bytes that were sent as TLSv1.3 early data. This is 0
if this TLS feature was not used and negative if the data sent had
been rejected by the server. The use of early data is enabled via
the command line option `--tls-earlydata`. (Added in 8.12.0)
## `url` ## `url`
The URL that was fetched. (Added in 7.75.0) The URL that was fetched. (Added in 7.75.0)

View File

@ -24,53 +24,53 @@ displays information about the curl and libcurl installation.
# OPTIONS # OPTIONS
## `--ca` ## --ca
Displays the built-in path to the CA cert bundle this libcurl uses. Displays the built-in path to the CA cert bundle this libcurl uses.
## `--cc` ## --cc
Displays the compiler used to build libcurl. Displays the compiler used to build libcurl.
## `--cflags` ## --cflags
Set of compiler options (CFLAGS) to use when compiling files that use Set of compiler options (CFLAGS) to use when compiling files that use
libcurl. Currently that is only the include path to the curl include files. libcurl. Currently that is only the include path to the curl include files.
## `--checkfor [version]` ## --checkfor [version]
Specify the oldest possible libcurl version string you want, and this script Specify the oldest possible libcurl version string you want, and this script
returns 0 if the current installation is new enough or it returns 1 and returns 0 if the current installation is new enough or it returns 1 and
outputs a text saying that the current version is not new enough. (Added in outputs a text saying that the current version is not new enough. (Added in
7.15.4) 7.15.4)
## `--configure` ## --configure
Displays the arguments given to configure when building curl. Displays the arguments given to configure when building curl.
## `--feature` ## --feature
Lists what particular main features the installed libcurl was built with. At Lists what particular main features the installed libcurl was built with. At
the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume
any particular order. The keywords are separated by newlines. There may be any particular order. The keywords are separated by newlines. There may be
none, one, or several keywords in the list. none, one, or several keywords in the list.
## `--help` ## --help
Displays the available options. Displays the available options.
## `--libs` ## --libs
Shows the complete set of libs and other linker options you need in order to Shows the complete set of libs and other linker options you need in order to
link your application with libcurl. link your application with libcurl.
## `--prefix` ## --prefix
This is the prefix used when libcurl was installed. libcurl is then installed This is the prefix used when libcurl was installed. libcurl is then installed
in $prefix/lib and its header files are installed in $prefix/include and so in $prefix/lib and its header files are installed in $prefix/include and so
on. The prefix is set with `configure --prefix`. on. The prefix is set with "configure --prefix".
## `--protocols` ## --protocols
Lists what particular protocols the installed libcurl was built to support. At Lists what particular protocols the installed libcurl was built to support. At
the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE,
@ -78,22 +78,22 @@ TELNET, LDAP, DICT and many more. Do not assume any particular order. The
protocols are listed using uppercase and are separated by newlines. There may protocols are listed using uppercase and are separated by newlines. There may
be none, one, or several protocols in the list. (Added in 7.13.0) be none, one, or several protocols in the list. (Added in 7.13.0)
## `--ssl-backends` ## --ssl-backends
Lists the SSL backends that were enabled when libcurl was built. It might be Lists the SSL backends that were enabled when libcurl was built. It might be
no, one or several names. If more than one name, they appear comma-separated. no, one or several names. If more than one name, they appear comma-separated.
(Added in 7.58.0) (Added in 7.58.0)
## `--static-libs` ## --static-libs
Shows the complete set of libs and other linker options you need in order to Shows the complete set of libs and other linker options you need in order to
link your application with libcurl statically. (Added in 7.17.1) link your application with libcurl statically. (Added in 7.17.1)
## `--version` ## --version
Outputs version information about the installed libcurl. Outputs version information about the installed libcurl.
## `--vernum` ## --vernum
Outputs version information about the installed libcurl, in numerical mode. Outputs version information about the installed libcurl, in numerical mode.
This shows the version number, in hexadecimal, using 8 bits for each part: This shows the version number, in hexadecimal, using 8 bits for each part:
@ -104,21 +104,22 @@ omitted. (This option was broken in the 7.15.0 release.)
# EXAMPLES # EXAMPLES
What linker options do I need when I link with libcurl? What linker options do I need when I link with libcurl?
~~~
$ curl-config --libs $ curl-config --libs
~~~
What compiler options do I need when I compile using libcurl functions? What compiler options do I need when I compile using libcurl functions?
~~~
$ curl-config --cflags $ curl-config --cflags
~~~
How do I know if libcurl was built with SSL support? How do I know if libcurl was built with SSL support?
~~~
$ curl-config --feature | grep SSL $ curl-config --feature | grep SSL
~~~
What's the installed libcurl version? What's the installed libcurl version?
~~~
$ curl-config --version $ curl-config --version
~~~
How do I build a single file with a one-line command? How do I build a single file with a one-line command?
~~~
$ `curl-config --cc --cflags` -o example source.c `curl-config --libs` $ `curl-config --cc --cflags` -o example source.c `curl-config --libs`
~~~

View File

@ -44,9 +44,6 @@ AM_CPPFLAGS += -DCURL_NO_OLDIES
if USE_CPPFLAG_CURL_STATICLIB if USE_CPPFLAG_CURL_STATICLIB
AM_CPPFLAGS += -DCURL_STATICLIB AM_CPPFLAGS += -DCURL_STATICLIB
endif endif
if DOING_NATIVE_WINDOWS
AM_CPPFLAGS += -DWIN32_LEAN_AND_MEAN
endif
# Prevent LIBS from being used for all link targets # Prevent LIBS from being used for all link targets
LIBS = $(BLANK_AT_MAKETIME) LIBS = $(BLANK_AT_MAKETIME)

View File

@ -103,11 +103,7 @@ int main(int argc, char **argv)
if(!fp) if(!fp)
return 2; return 2;
#ifdef UNDER_CE
stat(file, &file_info);
#else
fstat(fileno(fp), &file_info); fstat(fileno(fp), &file_info);
#endif
/* In Windows, this inits the Winsock stuff */ /* In Windows, this inits the Winsock stuff */
curl_global_init(CURL_GLOBAL_ALL); curl_global_init(CURL_GLOBAL_ALL);

View File

@ -29,9 +29,9 @@
* filter IP addresses. * filter IP addresses.
*/ */
#if defined(__AMIGA__) || defined(UNDER_CE) #ifdef __AMIGA__
#include <stdio.h> #include <stdio.h>
int main(void) { printf("Platform not supported.\n"); return 1; } int main(void) { printf("AmigaOS is not supported.\n"); return 1; }
#else #else
#ifdef _WIN32 #ifdef _WIN32
@ -298,19 +298,14 @@ int main(void)
filter = (struct connection_filter *)calloc(1, sizeof(*filter)); filter = (struct connection_filter *)calloc(1, sizeof(*filter));
if(!filter) if(!filter)
return 1; exit(1);
if(curl_global_init(CURL_GLOBAL_DEFAULT)) { if(curl_global_init(CURL_GLOBAL_DEFAULT))
free(filter); exit(1);
return 1;
}
curl = curl_easy_init(); curl = curl_easy_init();
if(!curl) { if(!curl)
curl_global_cleanup(); exit(1);
free(filter);
return 1;
}
/* Set the target URL */ /* Set the target URL */
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost"); curl_easy_setopt(curl, CURLOPT_URL, "http://localhost");

View File

@ -79,12 +79,12 @@ int main(int argc, char *argv[])
fprintf(stderr, fprintf(stderr,
"\rUsage: %s [-m=1|2|5|10|20|50|100] [-t] [-x] [url]\n", "\rUsage: %s [-m=1|2|5|10|20|50|100] [-t] [-x] [url]\n",
appname); appname);
return 1; exit(1);
case 'v': case 'v':
case 'V': case 'V':
fprintf(stderr, "\r%s %s - %s\n", fprintf(stderr, "\r%s %s - %s\n",
appname, CHKSPEED_VERSION, curl_version()); appname, CHKSPEED_VERSION, curl_version());
return 1; exit(1);
case 'a': case 'a':
case 'A': case 'A':
prtall = 1; prtall = 1;

View File

@ -34,7 +34,8 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <curl/mprintf.h> #include <curl/mprintf.h>
static int print_cookies(CURL *curl) static void
print_cookies(CURL *curl)
{ {
CURLcode res; CURLcode res;
struct curl_slist *cookies; struct curl_slist *cookies;
@ -46,7 +47,7 @@ static int print_cookies(CURL *curl)
if(res != CURLE_OK) { if(res != CURLE_OK) {
fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n", fprintf(stderr, "Curl curl_easy_getinfo failed: %s\n",
curl_easy_strerror(res)); curl_easy_strerror(res));
return 1; exit(1);
} }
nc = cookies; nc = cookies;
i = 1; i = 1;
@ -59,8 +60,6 @@ static int print_cookies(CURL *curl)
printf("(none)\n"); printf("(none)\n");
} }
curl_slist_free_all(cookies); curl_slist_free_all(cookies);
return 0;
} }
int int

View File

@ -418,22 +418,22 @@ static int init_fifo(GlobalInfo *g)
struct epoll_event epev; struct epoll_event epev;
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo); fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
if(lstat(fifo, &st) == 0) { if(lstat (fifo, &st) == 0) {
if((st.st_mode & S_IFMT) == S_IFREG) { if((st.st_mode & S_IFMT) == S_IFREG) {
errno = EEXIST; errno = EEXIST;
perror("lstat"); perror("lstat");
return 1; exit(1);
} }
} }
unlink(fifo); unlink(fifo);
if(mkfifo(fifo, 0600) == -1) { if(mkfifo (fifo, 0600) == -1) {
perror("mkfifo"); perror("mkfifo");
return 1; exit(1);
} }
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0); sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
if(sockfd == -1) { if(sockfd == -1) {
perror("open"); perror("open");
return 1; exit(1);
} }
g->fifofd = sockfd; g->fifofd = sockfd;
@ -449,9 +449,9 @@ static int init_fifo(GlobalInfo *g)
static void clean_fifo(GlobalInfo *g) static void clean_fifo(GlobalInfo *g)
{ {
epoll_ctl(g->epfd, EPOLL_CTL_DEL, g->fifofd, NULL); epoll_ctl(g->epfd, EPOLL_CTL_DEL, g->fifofd, NULL);
fclose(g->input); fclose(g->input);
unlink(fifo); unlink(fifo);
} }
@ -478,13 +478,13 @@ int main(int argc, char **argv)
g.epfd = epoll_create1(EPOLL_CLOEXEC); g.epfd = epoll_create1(EPOLL_CLOEXEC);
if(g.epfd == -1) { if(g.epfd == -1) {
perror("epoll_create1 failed"); perror("epoll_create1 failed");
return 1; exit(1);
} }
g.tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC); g.tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
if(g.tfd == -1) { if(g.tfd == -1) {
perror("timerfd_create failed"); perror("timerfd_create failed");
return 1; exit(1);
} }
memset(&its, 0, sizeof(struct itimerspec)); memset(&its, 0, sizeof(struct itimerspec));
@ -496,8 +496,7 @@ int main(int argc, char **argv)
ev.data.fd = g.tfd; ev.data.fd = g.tfd;
epoll_ctl(g.epfd, EPOLL_CTL_ADD, g.tfd, &ev); epoll_ctl(g.epfd, EPOLL_CTL_ADD, g.tfd, &ev);
if(init_fifo(&g)) init_fifo(&g);
return 1;
g.multi = curl_multi_init(); g.multi = curl_multi_init();
/* setup the generic multi interface options we want */ /* setup the generic multi interface options we want */
@ -522,7 +521,7 @@ int main(int argc, char **argv)
} }
else { else {
perror("epoll_wait"); perror("epoll_wait");
return 1; exit(1);
} }
} }

View File

@ -402,22 +402,22 @@ static int init_fifo(GlobalInfo *g)
curl_socket_t sockfd; curl_socket_t sockfd;
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo); fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
if(lstat(fifo, &st) == 0) { if(lstat (fifo, &st) == 0) {
if((st.st_mode & S_IFMT) == S_IFREG) { if((st.st_mode & S_IFMT) == S_IFREG) {
errno = EEXIST; errno = EEXIST;
perror("lstat"); perror("lstat");
return 1; exit(1);
} }
} }
unlink(fifo); unlink(fifo);
if(mkfifo(fifo, 0600) == -1) { if(mkfifo (fifo, 0600) == -1) {
perror("mkfifo"); perror("mkfifo");
return 1; exit(1);
} }
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0); sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
if(sockfd == -1) { if(sockfd == -1) {
perror("open"); perror("open");
return 1; exit(1);
} }
g->input = fdopen(sockfd, "r"); g->input = fdopen(sockfd, "r");
@ -436,8 +436,7 @@ int main(int argc, char **argv)
memset(&g, 0, sizeof(GlobalInfo)); memset(&g, 0, sizeof(GlobalInfo));
g.loop = ev_default_loop(0); g.loop = ev_default_loop(0);
if(init_fifo(&g)) init_fifo(&g);
return 1;
g.multi = curl_multi_init(); g.multi = curl_multi_init();
ev_timer_init(&g.timer_event, timer_cb, 0., 0.); ev_timer_init(&g.timer_event, timer_cb, 0., 0.);

View File

@ -25,7 +25,7 @@
* Pass in a custom socket for libcurl to use. * Pass in a custom socket for libcurl to use.
* </DESC> * </DESC>
*/ */
#ifdef _MSC_VER #ifdef _WIN32
#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS /* for inet_addr() */ #define _WINSOCK_DEPRECATED_NO_WARNINGS /* for inet_addr() */
#endif #endif
@ -46,11 +46,7 @@
#include <unistd.h> /* misc. Unix functions */ #include <unistd.h> /* misc. Unix functions */
#endif #endif
#ifdef UNDER_CE
#define strerror(e) "?"
#else
#include <errno.h> #include <errno.h>
#endif
/* The IP address and port number to connect to */ /* The IP address and port number to connect to */
#define IPADDR "127.0.0.1" #define IPADDR "127.0.0.1"

View File

@ -51,11 +51,7 @@ int main(void)
return 1; /* cannot continue */ return 1; /* cannot continue */
/* to get the file size */ /* to get the file size */
#ifdef UNDER_CE
if(stat("debugit", &file_info) != 0) {
#else
if(fstat(fileno(fd), &file_info) != 0) { if(fstat(fileno(fd), &file_info) != 0) {
#endif
fclose(fd); fclose(fd);
return 1; /* cannot continue */ return 1; /* cannot continue */
} }

View File

@ -28,11 +28,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#ifdef UNDER_CE
#define strerror(e) "?"
#else
#include <errno.h> #include <errno.h>
#endif
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <io.h>
#undef stat #undef stat

View File

@ -77,9 +77,7 @@ static int upload(CURL *curlhandle, const char *remotepath,
f = fopen(localpath, "rb"); f = fopen(localpath, "rb");
if(!f) { if(!f) {
#ifndef UNDER_CE
perror(NULL); perror(NULL);
#endif
return 0; return 0;
} }

View File

@ -392,21 +392,21 @@ int init_fifo(void)
if((st.st_mode & S_IFMT) == S_IFREG) { if((st.st_mode & S_IFMT) == S_IFREG) {
errno = EEXIST; errno = EEXIST;
perror("lstat"); perror("lstat");
return CURL_SOCKET_BAD; exit(1);
} }
} }
unlink(fifo); unlink(fifo);
if(mkfifo(fifo, 0600) == -1) { if(mkfifo (fifo, 0600) == -1) {
perror("mkfifo"); perror("mkfifo");
return CURL_SOCKET_BAD; exit(1);
} }
socket = open(fifo, O_RDWR | O_NONBLOCK, 0); socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
if(socket == CURL_SOCKET_BAD) { if(socket == -1) {
perror("open"); perror("open");
return socket; exit(1);
} }
MSG_OUT("Now, pipe some URL's into > %s\n", fifo); MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
@ -421,8 +421,6 @@ int main(void)
GIOChannel* ch; GIOChannel* ch;
fd = init_fifo(); fd = init_fifo();
if(fd == CURL_SOCKET_BAD)
return 1;
ch = g_io_channel_unix_new(fd); ch = g_io_channel_unix_new(fd);
g_io_add_watch(ch, G_IO_IN, fifo_cb, g); g_io_add_watch(ch, G_IO_IN, fifo_cb, g);
gmain = g_main_loop_new(NULL, FALSE); gmain = g_main_loop_new(NULL, FALSE);

View File

@ -399,22 +399,22 @@ static int init_fifo(GlobalInfo *g)
curl_socket_t sockfd; curl_socket_t sockfd;
fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo); fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
if(lstat(fifo, &st) == 0) { if(lstat (fifo, &st) == 0) {
if((st.st_mode & S_IFMT) == S_IFREG) { if((st.st_mode & S_IFMT) == S_IFREG) {
errno = EEXIST; errno = EEXIST;
perror("lstat"); perror("lstat");
return 1; exit(1);
} }
} }
unlink(fifo); unlink(fifo);
if(mkfifo (fifo, 0600) == -1) { if(mkfifo (fifo, 0600) == -1) {
perror("mkfifo"); perror("mkfifo");
return 1; exit(1);
} }
sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0); sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
if(sockfd == -1) { if(sockfd == -1) {
perror("open"); perror("open");
return 1; exit(1);
} }
g->input = fdopen(sockfd, "r"); g->input = fdopen(sockfd, "r");
@ -440,8 +440,7 @@ int main(int argc, char **argv)
memset(&g, 0, sizeof(GlobalInfo)); memset(&g, 0, sizeof(GlobalInfo));
g.evbase = event_base_new(); g.evbase = event_base_new();
if(init_fifo(&g)) init_fifo(&g);
return 1;
g.multi = curl_multi_init(); g.multi = curl_multi_init();
evtimer_assign(&g.timer_event, g.evbase, timer_cb, &g); evtimer_assign(&g.timer_event, g.evbase, timer_cb, &g);

View File

@ -94,7 +94,7 @@ static bool init(CURL *&conn, const char *url)
if(conn == NULL) { if(conn == NULL) {
fprintf(stderr, "Failed to create CURL connection\n"); fprintf(stderr, "Failed to create CURL connection\n");
return false; exit(EXIT_FAILURE);
} }
code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer); code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
@ -270,7 +270,7 @@ int main(int argc, char *argv[])
if(argc != 2) { if(argc != 2) {
fprintf(stderr, "Usage: %s <url>\n", argv[0]); fprintf(stderr, "Usage: %s <url>\n", argv[0]);
return EXIT_FAILURE; exit(EXIT_FAILURE);
} }
curl_global_init(CURL_GLOBAL_DEFAULT); curl_global_init(CURL_GLOBAL_DEFAULT);
@ -279,7 +279,7 @@ int main(int argc, char *argv[])
if(!init(conn, argv[1])) { if(!init(conn, argv[1])) {
fprintf(stderr, "Connection initialization failed\n"); fprintf(stderr, "Connection initialization failed\n");
return EXIT_FAILURE; exit(EXIT_FAILURE);
} }
// Retrieve content for the URL // Retrieve content for the URL
@ -289,7 +289,7 @@ int main(int argc, char *argv[])
if(code != CURLE_OK) { if(code != CURLE_OK) {
fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer); fprintf(stderr, "Failed to get '%s' [%s]\n", argv[1], errorBuffer);
return EXIT_FAILURE; exit(EXIT_FAILURE);
} }
// Parse the (assumed) HTML code // Parse the (assumed) HTML code

View File

@ -28,11 +28,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#ifdef UNDER_CE
#define strerror(e) "?"
#else
#include <errno.h> #include <errno.h>
#endif
/* curl stuff */ /* curl stuff */
#include <curl/curl.h> #include <curl/curl.h>
@ -142,7 +138,7 @@ int my_trace(CURL *handle, curl_infotype type,
return 0; return 0;
} }
static int setup(struct transfer *t, int num) static void setup(struct transfer *t, int num)
{ {
char filename[128]; char filename[128];
CURL *hnd; CURL *hnd;
@ -155,7 +151,7 @@ static int setup(struct transfer *t, int num)
if(!t->out) { if(!t->out) {
fprintf(stderr, "error: could not open file %s for writing: %s\n", fprintf(stderr, "error: could not open file %s for writing: %s\n",
filename, strerror(errno)); filename, strerror(errno));
return 1; exit(1);
} }
/* write to this file */ /* write to this file */
@ -179,7 +175,6 @@ static int setup(struct transfer *t, int num)
/* wait for pipe connection to confirm */ /* wait for pipe connection to confirm */
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
#endif #endif
return 0;
} }
/* /*
@ -205,8 +200,7 @@ int main(int argc, char **argv)
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
for(i = 0; i < num_transfers; i++) { for(i = 0; i < num_transfers; i++) {
if(setup(&trans[i], i)) setup(&trans[i], i);
return 1;
/* add the individual transfer */ /* add the individual transfer */
curl_multi_add_handle(multi_handle, trans[i].easy); curl_multi_add_handle(multi_handle, trans[i].easy);

View File

@ -30,11 +30,7 @@
#include <string.h> #include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef UNDER_CE
#define strerror(e) "?"
#else
#include <errno.h> #include <errno.h>
#endif
/* somewhat Unix-specific */ /* somewhat Unix-specific */
#ifndef _MSC_VER #ifndef _MSC_VER
@ -200,7 +196,7 @@ static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
return retcode; return retcode;
} }
static int setup(struct input *i, int num, const char *upload) static void setup(struct input *i, int num, const char *upload)
{ {
FILE *out; FILE *out;
char url[256]; char url[256];
@ -209,15 +205,14 @@ static int setup(struct input *i, int num, const char *upload)
curl_off_t uploadsize; curl_off_t uploadsize;
CURL *hnd; CURL *hnd;
hnd = i->hnd = NULL; hnd = i->hnd = curl_easy_init();
i->num = num; i->num = num;
curl_msnprintf(filename, 128, "dl-%d", num); curl_msnprintf(filename, 128, "dl-%d", num);
out = fopen(filename, "wb"); out = fopen(filename, "wb");
if(!out) { if(!out) {
fprintf(stderr, "error: could not open file %s for writing: %s\n", upload, fprintf(stderr, "error: could not open file %s for writing: %s\n", upload,
strerror(errno)); strerror(errno));
return 1; exit(1);
} }
curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num); curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num);
@ -226,8 +221,7 @@ static int setup(struct input *i, int num, const char *upload)
if(stat(upload, &file_info)) { if(stat(upload, &file_info)) {
fprintf(stderr, "error: could not stat file %s: %s\n", upload, fprintf(stderr, "error: could not stat file %s: %s\n", upload,
strerror(errno)); strerror(errno));
fclose(out); exit(1);
return 1;
} }
uploadsize = file_info.st_size; uploadsize = file_info.st_size;
@ -236,12 +230,9 @@ static int setup(struct input *i, int num, const char *upload)
if(!i->in) { if(!i->in) {
fprintf(stderr, "error: could not open file %s for reading: %s\n", upload, fprintf(stderr, "error: could not open file %s for reading: %s\n", upload,
strerror(errno)); strerror(errno));
fclose(out); exit(1);
return 1;
} }
hnd = i->hnd = curl_easy_init();
/* write to this file */ /* write to this file */
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
@ -274,7 +265,6 @@ static int setup(struct input *i, int num, const char *upload)
/* wait for pipe connection to confirm */ /* wait for pipe connection to confirm */
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
#endif #endif
return 0;
} }
/* /*
@ -307,8 +297,7 @@ int main(int argc, char **argv)
multi_handle = curl_multi_init(); multi_handle = curl_multi_init();
for(i = 0; i < num_transfers; i++) { for(i = 0; i < num_transfers; i++) {
if(setup(&trans[i], i, filename)) setup(&trans[i], i, filename);
return 1;
/* add the individual transfer */ /* add the individual transfer */
curl_multi_add_handle(multi_handle, trans[i].hnd); curl_multi_add_handle(multi_handle, trans[i].hnd);

View File

@ -90,9 +90,7 @@ static int sftpResumeUpload(CURL *curlhandle, const char *remotepath,
f = fopen(localpath, "rb"); f = fopen(localpath, "rb");
if(!f) { if(!f) {
#ifndef UNDER_CE
perror(NULL); perror(NULL);
#endif
return 0; return 0;
} }
@ -101,7 +99,7 @@ static int sftpResumeUpload(CURL *curlhandle, const char *remotepath,
curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc); curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
curl_easy_setopt(curlhandle, CURLOPT_READDATA, f); curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
#if defined(_WIN32) && !defined(UNDER_CE) #ifdef _WIN32
_fseeki64(f, remoteFileSizeByte, SEEK_SET); _fseeki64(f, remoteFileSizeByte, SEEK_SET);
#else #else
fseek(f, (long)remoteFileSizeByte, SEEK_SET); fseek(f, (long)remoteFileSizeByte, SEEK_SET);

View File

@ -82,7 +82,7 @@ int main(void)
curl = curl_easy_init(); curl = curl_easy_init();
if(curl) { if(curl) {
/* what call to write: */ /* what call to write: */
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://secure.site.example"); curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile); curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile);
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@ -27,14 +27,6 @@ We also work hard on writing code that are warning-free on all the major
platforms and in general on as many platforms as possible. Code that obviously platforms and in general on as many platforms as possible. Code that obviously
causes warnings is not accepted as-is. causes warnings is not accepted as-is.
## Readability
A primary characteristic for code is readability. The intent and meaning of
the code should be visible to the reader. Being clear and unambiguous beats
being clever and saving two lines of code. Write simple code. You and others
who come back to this code over the coming decades want to be able to quickly
understand it when debugging.
## Naming ## Naming
Try using a non-confusing naming scheme for your new functions and variable Try using a non-confusing naming scheme for your new functions and variable
@ -322,42 +314,3 @@ typedef struct {
} something; } something;
something instance; something instance;
``` ```
## Banned functions
To avoid footguns and unintended consequences we forbid the use of a number of
C functions. The `checksrc` script finds and yells about them if used. This
makes us write better code.
This is the full list of functions generally banned.
_access
_mbscat
_mbsncat
_tcscat
_tcsncat
_waccess
_wcscat
_wcsncat
access
gets
gmtime
LoadLibrary
LoadLibraryA
LoadLibraryEx
LoadLibraryExA
LoadLibraryExW
LoadLibraryW
localtime
snprintf
sprintf
sscanf
strcat
strerror
strncat
strncpy
strtok
strtol
strtoul
vsnprint
vsprintf

View File

@ -1,127 +0,0 @@
<!--
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
# Multi Event Based
A libcurl multi is operating "event based" when the application uses
and event library like `libuv` to monitor the sockets and file descriptors
libcurl uses to trigger transfer operations. How that works from the
applications point of view is described in libcurl-multi(3).
This documents is about the internal handling.
## Source Locations
All code related to event based handling is found in `lib/multi_ev.c`
and `lib/multi_ev.h`. The header defines a set of internal functions
and `struct curl_multi_ev` that is embedded in each multi handle.
There is `Curl_multi_ev_init()` and `Curl_multi_ev_cleanup()` to manage
the overall life cycle, call on creation and destruction of the multi
handle.
## Tracking Events
First, the various functions in `lib/multi_ev.h` only ever really do
something when the libcurl application has registered its callback
in `multi->socket_cb`.
This is important as this callback gets informed about *changes* to sockets.
When a new socket is added, an existing is removed, or the `POLLIN/OUT`
flags change, `multi->socket_cb` needs to be invoked. `multi_ev` has to
track what it already reported to detect changes.
Most applications are expected to go "event based" right from the start,
but the libcurl API does not prohibit an application to start another
way and then go for events later on, even in the middle of a transfer.
### Transfer Events
Most event that happen are in connection with a transfer. A transfer
opens a connection, which opens a socket, and waits for this socket
to become writable (`POLLOUT`) when using TCP, for example.
The multi then calls `Curl_multi_ev_assess_xfer(multi, data)` to
let the multi event code detect what sockets the transfer is interested in.
If indeed a `multi->socket_cb` is set, the *current* transfer pollset is
retrieved via `Curl_multi_getsock()`. This current pollset is then
compared to the *previous* pollset. If relevant changes are detected,
`multi->socket_cb` gets informed about those. These can be:
* a socket is in the current set, but not the previous one
* a socket was also in the previous one, but IN/OUT flags changed
* a socket in the previous one is no longer part of the current
`multi_ev.c` keeps a `struct mev_sh_entry` for each sockets in a hash
with the socket as key. It tracks in each entry which transfers are
interested in this particular socket. How many transfer want to read
and/or write and what the summarized `POLLIN/POLLOUT` action, that
had been reported to `multi->socket_cb` was.
This is necessary as a socket may be in use by several transfers
at the same time (think HTTP/2 on the same connection). When a transfer
is done and gets removed from the socket entry, it decrements
the reader and/or writer count (depending on what it was last
interested in). This *may* result in the entry's summarized action
to change, or not.
### Connection Events
There are also events not connected to any transfer that need to be tracked.
The multi connection cache, concerned with clean shutdowns of connections,
is interested in socket events during the shutdown.
To allow use of the libcurl infrastructure, the connection cache operates
using an *internal* easy handle that is not a transfer as such. The
internal handle is used for all connection shutdown operations, being tied
to a particular connection only for a short time. This means tracking
the last pollset for an internal handle is useless.
Instead, the connection cache uses `Curl_multi_ev_assess_conn()` to have
multi event handling check the connection and track a "last pollset"
for the connection alone.
## Event Processing
When the libcurl application is informed by the event library that
a particular socket has an event, it calls `curl_multi_socket_action()`
to make libcurl react to it. This internally invokes
`Curl_multi_ev_expire_xfers()` which expires all transfers that
are interested in the given socket, so the multi handle runs them.
In addition `Curl_multi_ev_expire_xfers()` returns a `bool` to let
the multi know that connections are also interested in the socket, so
the connection pool should be informed as well.
## All Things Pass
When a transfer is done, e.g. removed from its multi handle, the
multi calls `Curl_multi_ev_xfer_done()`. This cleans up the pollset
tracking for the transfer.
When a connection is done, and before it is destroyed,
`Curl_multi_ev_conn_done()` is called. This cleans up the pollset
tracking for this connection.
When a socket is about to be closed, `Curl_multi_ev_socket_done()`
is called to cleanup the socket entry and all information kept there.
These calls do not have to happen in any particular order. A transfer's
socket may be around while the transfer is ongoing. Or it might disappear
in the middle of things. Also, a transfer might be interested in several
sockets at the same time (resolving, eye balling, ftp are all examples of
those).
### And Come Again
While transfer and connection identifier are practically unique in a
libcurl application, sockets are not. Operating systems are keen on reusing
their resources, and the next socket may get the same identifier as
one just having been closed with high likelihood.
This means that multi event handling needs to be informed *before* a close,
clean up all its tracking and be ready to see that same socket identifier
again right after.

View File

@ -30,19 +30,6 @@ struct Curl_str {
}; };
~~~ ~~~
Access the struct fields with `Curl_str()` for the pointer and `Curl_strlen()`
for the length rather than using the struct fields directly.
## `Curl_str_init`
~~~c
void Curl_str_init(struct Curl_str *out)
~~~
This initiates a string struct. The parser functions that store info in
strings always init the string themselves, so this stand-alone use is often
not necessary.
## `Curl_str_word` ## `Curl_str_word`
~~~c ~~~c
@ -107,32 +94,11 @@ Advance over a single ASCII space. Return non-zero on error.
## `Curl_str_number` ## `Curl_str_number`
~~~c ~~~c
int Curl_str_number(char **linep, curl_size_t *nump, size_t max); int Curl_str_number(char **linep, size_t *nump, size_t max);
~~~ ~~~
Get an unsigned decimal number not larger than `max`. Leading zeroes are just Get an unsigned decimal number. Leading zeroes are just swallowed. Return
swallowed. Return non-zero on error. Returns error if there was not a single non-zero on error.
digit.
## `Curl_str_hex`
~~~c
int Curl_str_hex(char **linep, curl_size_t *nump, size_t max);
~~~
Get an unsigned hexadecimal number not larger than `max`. Leading zeroes are
just swallowed. Return non-zero on error. Returns error if there was not a
single digit. Does *not* handled `0x` prefix.
## `Curl_str_octal`
~~~c
int Curl_str_octal(char **linep, curl_size_t *nump, size_t max);
~~~
Get an unsigned octal number not larger than `max`. Leading zeroes are just
swallowed. Return non-zero on error. Returns error if there was not a single
digit.
## `Curl_str_newline` ## `Curl_str_newline`
@ -141,30 +107,3 @@ int Curl_str_newline(char **linep);
~~~ ~~~
Check for a single CR or LF. Return non-zero on error */ Check for a single CR or LF. Return non-zero on error */
## `Curl_str_casecompare`
~~~c
int Curl_str_casecompare(struct Curl_str *str, const char *check);
~~~
Returns true if the provided string in the `str` argument matches the `check`
string case insensitively.
## `Curl_str_cmp`
~~~c
int Curl_str_cmp(struct Curl_str *str, const char *check);
~~~
Returns true if the provided string in the `str` argument matches the `check`
string case sensitively. This is *not* the same return code as `strcmp`.
## `Curl_str_nudge`
~~~c
int Curl_str_nudge(struct Curl_str *str, size_t num);
~~~
Removes `num` bytes from the beginning (left) of the string kept in `str`. If
`num` is larger than the string, it instead returns an error.

View File

@ -28,10 +28,11 @@ const struct curl_easyoption *curl_easy_option_by_id(CURLoption id);
# DESCRIPTION # DESCRIPTION
Given a *CURLoption* **id**, this function returns a pointer to the Given a *CURLoption* **id**, this function returns a pointer to the
*curl_easyoption* struct, holding information about the curl_easy_setopt(3) *curl_easyoption* struct, holding information about the
option using that id. The option id is the `CURLOPT_` prefixed ones provided curl_easy_setopt(3) option using that id. The option id is the CURLOPT_
in the standard curl/curl.h header file. This function returns the non-alias prefix ones provided in the standard curl/curl.h header file. This function
version of the cases where there is an alias function as well. returns the non-alias version of the cases where there is an alias function as
well.
If libcurl has no option with the given id, this function returns NULL. If libcurl has no option with the given id, this function returns NULL.

View File

@ -27,10 +27,11 @@ const struct curl_easyoption *curl_easy_option_by_name(const char *name);
# DESCRIPTION # DESCRIPTION
Given a **name**, this function returns a pointer to the *curl_easyoption* Given a **name**, this function returns a pointer to the
struct, holding information about the curl_easy_setopt(3) option using that *curl_easyoption* struct, holding information about the
name. The name should be specified without the `CURLOPT_` prefix and the name curl_easy_setopt(3) option using that name. The name should be specified
comparison is made case insensitive. without the "CURLOPT_" prefix and the name comparison is made case
insensitive.
If libcurl has no option with the given name, this function returns NULL. If libcurl has no option with the given name, this function returns NULL.

View File

@ -316,4 +316,4 @@ filenames are now escaped before transmission.
# RETURN VALUE # RETURN VALUE
0 means everything was OK, non-zero means an error occurred corresponding to a 0 means everything was OK, non-zero means an error occurred corresponding to a
`CURL_FORMADD_*` constant defined in *\<curl/curl.h\>*. CURL_FORMADD_* constant defined in *\<curl/curl.h\>*.

View File

@ -38,9 +38,9 @@ first argument to the curl_formget_callback function.
size_t len);" size_t len);"
~~~ ~~~
The *curl_formget_callback* is invoked for each part of the HTTP POST chain. The curl_formget_callback is invoked for each part of the HTTP POST chain. The
The character buffer passed to the callback must not be freed. The callback character buffer passed to the callback must not be freed. The callback should
should return the buffer length passed to it on success. return the buffer length passed to it on success.
If the **CURLFORM_STREAM** option is used in the formpost, it prevents If the **CURLFORM_STREAM** option is used in the formpost, it prevents
curl_formget(3) from working until you have performed the actual HTTP request. curl_formget(3) from working until you have performed the actual HTTP request.

View File

@ -64,17 +64,16 @@ If this is not thread-safe, you must not call this function when any other
thread in the program (i.e. a thread sharing the same memory) is running. thread in the program (i.e. a thread sharing the same memory) is running.
This does not just mean no other thread that is using libcurl. This does not just mean no other thread that is using libcurl.
# Names # OpenSSL
SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS, OpenSSL,
Rustls, Schannel, Secure-Transport, wolfSSL
The name "OpenSSL" is used for all versions of OpenSSL and its associated The name "OpenSSL" is used for all versions of OpenSSL and its associated
forks/flavors in this function. OpenSSL, BoringSSL, LibreSSL, quictls and forks/flavors in this function. OpenSSL, BoringSSL, LibreSSL, quictls and
AmiSSL are all supported by libcurl, but in the eyes of AmiSSL are all supported by libcurl, but in the eyes of
curl_global_sslset(3) they are all just "OpenSSL". They all mostly curl_global_sslset(3) they are all just "OpenSSL". They all mostly
provide the same API. curl_version_info(3) can return more specific info about provide the same API.
the exact OpenSSL flavor and version number in use.
curl_version_info(3) can return more specific info about the exact
OpenSSL flavor and version number is use.
# struct # struct

View File

@ -97,38 +97,13 @@ In order to find out all components involved in a transfer, run it with "all"
configured. You can then see all names involved in your libcurl version in the configured. You can then see all names involved in your libcurl version in the
trace. trace.
## `dns`
Tracing of DNS operations to resolve hostnames and HTTPS records.
## `lib-ids`
Adds transfer and connection identifiers as prefix to every call to
CURLOPT_DEBUGFUNCTION(3). The format is `[n-m]` where `n` is the identifier
of the transfer and `m` is the identifier of the connection. A literal `x`
is used for internal transfers or when no connection is assigned.
For example, `[5-x]` is the prefix for transfer 5 that has no
connection. The command line tool `curl`uses the same format for its
`--trace-ids` option.
`lib-ids` is intended for libcurl applications that handle multiple
transfers but have no own way to identify in trace output which transfer
a trace event is connected to.
## `doh` ## `doh`
Former name for DNS-over-HTTP operations. Now an alias for `dns`. Tracing of DNS-over-HTTP operations to resolve hostnames.
## `multi`
Traces multi operations managing transfers' state changes and sockets poll
states.
## `read` ## `read`
Traces reading of upload data from the application in order to send it to the Traces reading of upload data from the application in order to send it to the server.
server.
## `ssls` ## `ssls`

View File

@ -100,10 +100,6 @@ int main(void)
/* call curl_multi_perform() */ /* call curl_multi_perform() */
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* get file descriptors from the transfers */ /* get file descriptors from the transfers */
mc = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd); mc = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);

Some files were not shown because too many files have changed in this diff Show More