Compare commits
286 Commits
curl-8_12_
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4834a7d6d | ||
|
|
5693342ec2 | ||
|
|
c693cc02b0 | ||
|
|
e7751571eb | ||
|
|
7211576442 | ||
|
|
794dfe7fc4 | ||
|
|
049352dd80 | ||
|
|
08c7c937dc | ||
|
|
2e585f5640 | ||
|
|
399cb7130a | ||
|
|
5a021aba41 | ||
|
|
6913c9b6ab | ||
|
|
953cd694dc | ||
|
|
af6172c8f2 | ||
|
|
8ded8e5f3f | ||
|
|
7007f59caa | ||
|
|
a8ad9a5758 | ||
|
|
cba83bfb10 | ||
|
|
59f4727480 | ||
|
|
08a29e7f18 | ||
|
|
bc24c60512 | ||
|
|
c028a243f2 | ||
|
|
4f98f354b1 | ||
|
|
4ed9db9eef | ||
|
|
a1d00da81e | ||
|
|
f5527e57f8 | ||
|
|
dbbbf717f3 | ||
|
|
3efc53f5e9 | ||
|
|
518543dec8 | ||
|
|
bc42010f66 | ||
|
|
37523c91bc | ||
|
|
200993fccd | ||
|
|
2fce176bf6 | ||
|
|
d485177151 | ||
|
|
5b5e2f7318 | ||
|
|
ac4a65f8d2 | ||
|
|
71f190cbbc | ||
|
|
2ec00372a1 | ||
|
|
7826927d9b | ||
|
|
6c81f2a35c | ||
|
|
baa9c647d3 | ||
|
|
29978df61f | ||
|
|
af0100fc17 | ||
|
|
84332d49fb | ||
|
|
31fd77fb3b | ||
|
|
6306476fc3 | ||
|
|
5addb3e1cc | ||
|
|
a55b5b7c62 | ||
|
|
3175984ab2 | ||
|
|
b930142d12 | ||
|
|
413b2a44a8 | ||
|
|
a7bcf25c83 | ||
|
|
01c25e3b00 | ||
|
|
46f17ef010 | ||
|
|
5070b6ac45 | ||
|
|
edfa537100 | ||
|
|
7b8b9b9c2b | ||
|
|
9b0467b169 | ||
|
|
3585796049 | ||
|
|
db2fd7c3de | ||
|
|
dfdd380844 | ||
|
|
8f79b3e696 | ||
|
|
7694fc8256 | ||
|
|
04289c62de | ||
|
|
edd573d980 | ||
|
|
efec626ebb | ||
|
|
9391fc151f | ||
|
|
51f8aa79a9 | ||
|
|
e1b3d46944 | ||
|
|
4c5099868e | ||
|
|
cfc657a48d | ||
|
|
886f5dea80 | ||
|
|
c10fd464e0 | ||
|
|
e739f5682d | ||
|
|
a6e8ead533 | ||
|
|
54c07fd6c5 | ||
|
|
952770dc65 | ||
|
|
ea07a64cf6 | ||
|
|
d4896d94f2 | ||
|
|
f261c8d992 | ||
|
|
17ab4d62e6 | ||
|
|
e47a94228f | ||
|
|
fc4addbe50 | ||
|
|
bd9f9b085a | ||
|
|
2a292c3984 | ||
|
|
93958499f2 | ||
|
|
7cb3903e25 | ||
|
|
20c53650f2 | ||
|
|
56db87a37c | ||
|
|
7fd15b4a82 | ||
|
|
4d01de3529 | ||
|
|
bf823397ba | ||
|
|
2cc90a679a | ||
|
|
e0fd5790d9 | ||
|
|
4842f22bfa | ||
|
|
540d341b38 | ||
|
|
5693e3fa88 | ||
|
|
ecb382eca2 | ||
|
|
46e97b10ba | ||
|
|
210c0c088e | ||
|
|
fb61d76580 | ||
|
|
d1fc1c4a85 | ||
|
|
6bc65a444b | ||
|
|
655a4e83b7 | ||
|
|
df5db8afaf | ||
|
|
f78700814d | ||
|
|
279a4772ae | ||
|
|
a1850ad7de | ||
|
|
654f8cb5f3 | ||
|
|
c64304e111 | ||
|
|
ee3f657607 | ||
|
|
f0d7318193 | ||
|
|
1aea05a6c2 | ||
|
|
397088e8f4 | ||
|
|
2335cbaa21 | ||
|
|
3100fb45b7 | ||
|
|
8633b10a41 | ||
|
|
a867314f4f | ||
|
|
ad700a0917 | ||
|
|
3fd1dfc829 | ||
|
|
1b710381ca | ||
|
|
db72b8d4d0 | ||
|
|
f7fcbb8127 | ||
|
|
2f4dc6525c | ||
|
|
61f85bf967 | ||
|
|
24ffcbad5f | ||
|
|
80d93799a6 | ||
|
|
67559aa8ce | ||
|
|
a74dd9f330 | ||
|
|
448caab0df | ||
|
|
bd15d8beb3 | ||
|
|
bc6a404061 | ||
|
|
43012cb3af | ||
|
|
069f9d066e | ||
|
|
0064708f3f | ||
|
|
676de7f580 | ||
|
|
076444ec46 | ||
|
|
9d5563b535 | ||
|
|
db4d617c1c | ||
|
|
d164f49520 | ||
|
|
4afe3e7d8a | ||
|
|
b22f9066a5 | ||
|
|
fb60c9018d | ||
|
|
4a74135737 | ||
|
|
28d3c5dced | ||
|
|
760bbb2110 | ||
|
|
0d4a6a9500 | ||
|
|
1d0ca25d8b | ||
|
|
e5326bfb44 | ||
|
|
37128035e5 | ||
|
|
1ee06e873c | ||
|
|
8b3690c688 | ||
|
|
45f7cb7695 | ||
|
|
ca2f49ded0 | ||
|
|
ebbf51e191 | ||
|
|
1b87357967 | ||
|
|
e7adf3e837 | ||
|
|
1d7c3ab5aa | ||
|
|
869d863318 | ||
|
|
2ec1ce92ff | ||
|
|
63197b7ff2 | ||
|
|
2ee754d830 | ||
|
|
b4538ec522 | ||
|
|
876db1070b | ||
|
|
2533df6239 | ||
|
|
97abcbd6ff | ||
|
|
da9cdf7129 | ||
|
|
2e9773b76a | ||
|
|
b696fc129b | ||
|
|
130b6891c8 | ||
|
|
5d194d942d | ||
|
|
784a8ec2c1 | ||
|
|
edd013326d | ||
|
|
915f3981c9 | ||
|
|
f138177b92 | ||
|
|
92af12a7e0 | ||
|
|
074048ae80 | ||
|
|
d9fc64d3ab | ||
|
|
48f6bfa8c7 | ||
|
|
44deccf907 | ||
|
|
597ee915c4 | ||
|
|
196e624471 | ||
|
|
90b72607fa | ||
|
|
4aec6cdfd3 | ||
|
|
d550966bf8 | ||
|
|
de0693f249 | ||
|
|
7241953ba5 | ||
|
|
c561c94ec3 | ||
|
|
92611f2a56 | ||
|
|
c1341813bd | ||
|
|
57495c6487 | ||
|
|
e93514e9b3 | ||
|
|
42960ebec0 | ||
|
|
0005f91259 | ||
|
|
be5f20202c | ||
|
|
d87969770f | ||
|
|
eebb1c1c15 | ||
|
|
6ab1fa423b | ||
|
|
e520493742 | ||
|
|
6975a0ecda | ||
|
|
160c0ffc17 | ||
|
|
c89871fa87 | ||
|
|
383c030d52 | ||
|
|
81d253365c | ||
|
|
e156c7f8ee | ||
|
|
e9be5ff61d | ||
|
|
71ace9f3c1 | ||
|
|
94c596bbc5 | ||
|
|
f1d1c98b7f | ||
|
|
29e4eda631 | ||
|
|
48df83a30e | ||
|
|
cc6b630f13 | ||
|
|
cd8d8caae8 | ||
|
|
c1f81adf48 | ||
|
|
973ffaa83f | ||
|
|
e6ea56b9d9 | ||
|
|
89ed161f56 | ||
|
|
17c287854b | ||
|
|
032447e624 | ||
|
|
a042c67df3 | ||
|
|
116950a250 | ||
|
|
54cd27a50d | ||
|
|
68555467b1 | ||
|
|
5963f83176 | ||
|
|
242a1439e7 | ||
|
|
f1939fa60d | ||
|
|
3be33a1a47 | ||
|
|
bb65a52a05 | ||
|
|
9f3427b315 | ||
|
|
3f79695be9 | ||
|
|
d4947203d0 | ||
|
|
3754115750 | ||
|
|
9b3c4b08d4 | ||
|
|
a5f120df06 | ||
|
|
c2aa504ab9 | ||
|
|
c012c6062e | ||
|
|
13b2ea68f0 | ||
|
|
9da9a0226d | ||
|
|
cbf8fecda5 | ||
|
|
f72b848092 | ||
|
|
0c933081fb | ||
|
|
0b3afd133a | ||
|
|
5c7bf5fe59 | ||
|
|
cc256e8f8a | ||
|
|
d23f8fec52 | ||
|
|
06bb158737 | ||
|
|
2ff01152c7 | ||
|
|
c0d38f547b | ||
|
|
1bf774df57 | ||
|
|
fb70812437 | ||
|
|
2b9b3ec579 | ||
|
|
ffd6132da6 | ||
|
|
8c5be18843 | ||
|
|
b3e12b7d6f | ||
|
|
3f9417b21d | ||
|
|
e0443a76c4 | ||
|
|
aa3e4c1db5 | ||
|
|
3c128966ed | ||
|
|
fcd5c2baff | ||
|
|
d07853195d | ||
|
|
b3d0c37ff4 | ||
|
|
1210caf489 | ||
|
|
ba92296279 | ||
|
|
1fa5f451e1 | ||
|
|
d8618f4d84 | ||
|
|
3814fb5a9f | ||
|
|
552e5305a1 | ||
|
|
aa378570f5 | ||
|
|
1fa3eb05b1 | ||
|
|
5f6f446136 | ||
|
|
449d9f7897 | ||
|
|
3f7f180901 | ||
|
|
58674865fe | ||
|
|
448e71d1b7 | ||
|
|
2f00a7d5a7 | ||
|
|
943de21619 | ||
|
|
abca1f23a9 | ||
|
|
34acdf9986 | ||
|
|
553248f501 | ||
|
|
3631c24861 | ||
|
|
153453eb78 | ||
|
|
136bec79a0 | ||
|
|
a0d3a32fba | ||
|
|
6fc703904b | ||
|
|
14f26f5ee7 | ||
|
|
e455757346 |
6
.github/labeler.yml
vendored
6
.github/labeler.yml
vendored
@ -78,7 +78,8 @@ build:
|
|||||||
plan9/**,\
|
plan9/**,\
|
||||||
projects/**,\
|
projects/**,\
|
||||||
winbuild/**,\
|
winbuild/**,\
|
||||||
lib/libcurl.def\
|
lib/libcurl.def,\
|
||||||
|
tests/cmake/**\
|
||||||
}"
|
}"
|
||||||
|
|
||||||
CI:
|
CI:
|
||||||
@ -100,7 +101,8 @@ 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:
|
||||||
|
|||||||
1
.github/scripts/binarycheck.sums
vendored
1
.github/scripts/binarycheck.sums
vendored
@ -17,7 +17,6 @@ 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
|
||||||
|
|||||||
128
.github/scripts/cleancmd.pl
vendored
128
.github/scripts/cleancmd.pl
vendored
@ -3,55 +3,117 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: curl
|
# SPDX-License-Identifier: curl
|
||||||
#
|
#
|
||||||
# Input: a cmdline docs markdown, it gets modified *in place*
|
# Input: cmdline docs markdown files, they get 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.
|
|
||||||
|
|
||||||
my $header = 1;
|
open(S, "<./docs/libcurl/symbols-in-versions")
|
||||||
while(1) {
|
|| die "can't find symbols-in-versions";
|
||||||
# set this if the markdown has no meta-data header to skip
|
while(<S>) {
|
||||||
if($ARGV[0] eq "--no-header") {
|
if(/^([^ ]*) /) {
|
||||||
shift @ARGV;
|
push @asyms, $1;
|
||||||
$header = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
close(S);
|
||||||
|
|
||||||
my $f = $ARGV[0];
|
# init the opts table with "special" options not easy to figure out
|
||||||
|
my @aopts = (
|
||||||
|
'--ftp-ssl-reqd', # old alias
|
||||||
|
);
|
||||||
|
|
||||||
open(F, "<$f") or die;
|
open(O, "<./docs/options-in-versions")
|
||||||
|
|| die "can't find options-in-versions";
|
||||||
my $ignore = $header;
|
while(<O>) {
|
||||||
my $sepcount = 0;
|
chomp;
|
||||||
my @out;
|
if(/^([^ ]+)/) {
|
||||||
while(<F>) {
|
my $o = $1;
|
||||||
if(/^---/ && $header) {
|
push @aopts, $o;
|
||||||
if(++$sepcount == 2) {
|
if($o =~ /^--no-(.*)/) {
|
||||||
$ignore = 0;
|
# for the --no options, also make one without it
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
chomp;
|
||||||
|
if(/^([^ ]+)/) {
|
||||||
|
push @asyms, $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(C);
|
||||||
|
|
||||||
|
# longest symbols first
|
||||||
|
my @syms = sort { length($b) <=> length($a) } @asyms;
|
||||||
|
|
||||||
|
# longest cmdline options first
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
next if($ignore);
|
next if($ignore);
|
||||||
|
|
||||||
# strip out backticked words
|
my $l = $_;
|
||||||
$_ =~ s/`[^`]+`//g;
|
|
||||||
|
|
||||||
# strip out all long command line options
|
# strip out backticked words
|
||||||
$_ =~ s/--[a-z0-9-]+//g;
|
$l =~ s/`[^`]+`//g;
|
||||||
|
|
||||||
|
# **bold**
|
||||||
|
$l =~ s/\*\*(\S.*?)\*\*//g;
|
||||||
|
# *italics*
|
||||||
|
$l =~ s/\*(\S.*?)\*//g;
|
||||||
|
|
||||||
# strip out https URLs, we don't want them spellchecked
|
# strip out https URLs, we don't want them spellchecked
|
||||||
$_ =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
$l =~ s!https://[a-z0-9\#_/.-]+!!gi;
|
||||||
|
|
||||||
push @out, $_;
|
$out .= $l;
|
||||||
}
|
}
|
||||||
close(F);
|
close(F);
|
||||||
|
|
||||||
if(!$ignore) {
|
# 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;
|
open(O, ">$f") or die;
|
||||||
print O @out;
|
print O $out;
|
||||||
close(O);
|
close(O);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $f (@ARGV) {
|
||||||
|
process($f);
|
||||||
}
|
}
|
||||||
|
|||||||
86
.github/scripts/cleanspell.pl
vendored
86
.github/scripts/cleanspell.pl
vendored
@ -1,86 +0,0 @@
|
|||||||
#!/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);
|
|
||||||
151
.github/scripts/spellcheck.curl
vendored
Normal file
151
.github/scripts/spellcheck.curl
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# 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
|
||||||
3
.github/scripts/spellcheck.words
vendored
3
.github/scripts/spellcheck.words
vendored
@ -251,8 +251,10 @@ Feltzing
|
|||||||
ffi
|
ffi
|
||||||
filesize
|
filesize
|
||||||
filesystem
|
filesystem
|
||||||
|
FindCURL
|
||||||
FLOSS
|
FLOSS
|
||||||
fnmatch
|
fnmatch
|
||||||
|
footguns
|
||||||
formpost
|
formpost
|
||||||
formposts
|
formposts
|
||||||
Fortnite
|
Fortnite
|
||||||
@ -949,7 +951,6 @@ winbuild
|
|||||||
WinIDN
|
WinIDN
|
||||||
WinLDAP
|
WinLDAP
|
||||||
winsock
|
winsock
|
||||||
winssl
|
|
||||||
Wireshark
|
Wireshark
|
||||||
wolfSSH
|
wolfSSH
|
||||||
wolfSSL
|
wolfSSL
|
||||||
|
|||||||
18
.github/workflows/checkdocs.yml
vendored
18
.github/workflows/checkdocs.yml
vendored
@ -107,26 +107,14 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
name: checkout
|
name: checkout
|
||||||
|
|
||||||
- name: trim all man page *.md files
|
- name: trim all *.md files in docs/
|
||||||
run: find docs -name "*.md" ! -name "_*" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl
|
run: .github/scripts/cleancmd.pl $(find docs -name "*.md")
|
||||||
|
|
||||||
- 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@9e0a5fb25a80b89c84899657949cbd6e17eb376c # v0
|
uses: rojopolis/spellcheck-github-actions@ed0756273a1658136c36d26e3d0353de35b98c8b # v0
|
||||||
with:
|
with:
|
||||||
config_path: .github/scripts/spellcheck.yaml
|
config_path: .github/scripts/spellcheck.yaml
|
||||||
|
|
||||||
|
|||||||
8
.github/workflows/configure-vs-cmake.yml
vendored
8
.github/workflows/configure-vs-cmake.yml
vendored
@ -13,6 +13,7 @@ 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'
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ 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'
|
||||||
|
|
||||||
@ -46,7 +48,7 @@ jobs:
|
|||||||
|
|
||||||
- name: 'run cmake'
|
- name: 'run cmake'
|
||||||
run: |
|
run: |
|
||||||
cmake -B bld-cm -DCURL_USE_LIBPSL=OFF -DCURL_BROTLI=OFF
|
cmake -B bld-cm -DCURL_WERROR=ON -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
|
||||||
@ -86,7 +88,7 @@ jobs:
|
|||||||
|
|
||||||
- name: 'run cmake'
|
- name: 'run cmake'
|
||||||
run: |
|
run: |
|
||||||
cmake -B bld-cm -DCURL_USE_LIBPSL=OFF -DCURL_DISABLE_LDAP=ON \
|
cmake -B bld-cm -DCURL_WERROR=ON -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
|
||||||
@ -126,7 +128,7 @@ jobs:
|
|||||||
|
|
||||||
- name: 'run cmake'
|
- name: 'run cmake'
|
||||||
run: |
|
run: |
|
||||||
cmake -B bld-cm -DCURL_USE_SCHANNEL=ON -DCURL_USE_LIBPSL=OFF \
|
cmake -B bld-cm -DCURL_WERROR=ON -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"
|
||||||
|
|||||||
28
.github/workflows/curl-for-win.yml
vendored
28
.github/workflows/curl-for-win.yml
vendored
@ -42,7 +42,7 @@ env:
|
|||||||
CW_NOPKG: '1'
|
CW_NOPKG: '1'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linux-glibc-llvm:
|
linux-glibc-gcc:
|
||||||
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'
|
export CW_CONFIG='-main-werror-linux-a64-x64-gcc'
|
||||||
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,3 +137,27 @@ 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
|
||||||
|
|||||||
51
.github/workflows/distcheck.yml
vendored
51
.github/workflows/distcheck.yml
vendored
@ -19,6 +19,9 @@ 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
|
||||||
@ -55,9 +58,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 -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
make -j5 install
|
make 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
|
||||||
@ -80,8 +83,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 -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
popd
|
popd
|
||||||
rm -rf build
|
rm -rf build
|
||||||
rm -rf curl-99.98.97
|
rm -rf curl-99.98.97
|
||||||
@ -103,9 +106,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 -j5
|
make
|
||||||
make -j5 test-ci
|
make test-ci
|
||||||
make -j5 install
|
make install
|
||||||
|
|
||||||
verify-out-of-tree-cmake:
|
verify-out-of-tree-cmake:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -122,7 +125,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 -j5
|
make -C build
|
||||||
|
|
||||||
missing-files:
|
missing-files:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -159,3 +162,33 @@ 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
|
||||||
|
|||||||
60
.github/workflows/http3-linux.yml
vendored
60
.github/workflows/http3-linux.yml
vendored
@ -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.0
|
openssl-version: 3.4.1
|
||||||
# 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.8
|
gnutls-version: 3.8.9
|
||||||
# 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.7.0
|
nghttp3-version: 1.8.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.10.0
|
ngtcp2-version: 1.11.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,6 +232,7 @@ 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'
|
||||||
@ -240,6 +241,7 @@ 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'
|
||||||
@ -249,6 +251,7 @@ 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'
|
||||||
@ -257,6 +260,7 @@ 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'
|
||||||
@ -266,6 +270,7 @@ 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: >-
|
||||||
@ -275,6 +280,7 @@ 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'
|
||||||
@ -284,6 +290,7 @@ 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'
|
||||||
@ -295,7 +302,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 \
|
texinfo texlive texlive-extra-utils autopoint libev-dev libuv1-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
|
||||||
@ -308,7 +315,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 }}
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.quictls-version }}-quic1
|
||||||
fail-on-cache-miss: true
|
fail-on-cache-miss: true
|
||||||
|
|
||||||
- name: 'cache gnutls'
|
- name: 'cache gnutls'
|
||||||
@ -427,46 +434,45 @@ 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 . -G Ninja \
|
cmake -B bld -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
|
||||||
./configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
mkdir bld && cd bld && ../configure --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 config.log CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
||||||
|
|
||||||
- name: 'curl_config.h'
|
- name: 'curl_config.h'
|
||||||
run: |
|
run: |
|
||||||
echo '::group::raw'; cat lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
||||||
grep -F '#define' lib/curl_config.h | sort || true
|
grep -F '#define' bld/lib/curl_config.h | sort || true
|
||||||
|
|
||||||
- name: 'test configs'
|
- name: 'test configs'
|
||||||
run: |
|
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true
|
||||||
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 . --verbose
|
cmake --build bld --verbose
|
||||||
else
|
else
|
||||||
make V=1
|
make -C bld V=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'check curl -V output'
|
- name: 'check curl -V output'
|
||||||
run: ./src/curl -V
|
run: bld/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 . --verbose --target testdeps
|
cmake --build bld --verbose --target testdeps
|
||||||
else
|
else
|
||||||
make V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'install test prereqs'
|
- name: 'install test prereqs'
|
||||||
@ -480,9 +486,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 . --verbose --target test-ci
|
cmake --build bld --verbose --target test-ci
|
||||||
else
|
else
|
||||||
make V=1 test-ci
|
make -C bld V=1 test-ci
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'install pytest prereqs'
|
- name: 'install pytest prereqs'
|
||||||
@ -490,23 +496,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'
|
- name: 'run pytest event based'
|
||||||
env:
|
env:
|
||||||
TFLAGS: '${{ matrix.build.tflags }}'
|
CURL_TEST_EVENT: 1
|
||||||
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 . --verbose --target curl-pytest-ci
|
cmake --build bld --verbose --target curl-pytest-ci
|
||||||
else
|
else
|
||||||
make V=1 pytest-ci
|
make -C bld 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 . --verbose --target curl-examples
|
cmake --build bld --verbose --target curl-examples
|
||||||
else
|
else
|
||||||
make V=1 examples
|
make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
10
.github/workflows/linux-old.yml
vendored
10
.github/workflows/linux-old.yml
vendored
@ -91,12 +91,14 @@ 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
|
||||||
|
|
||||||
- name: 'cmake generate (out-of-tree, c-ares, libssh, zstd, gssapi)'
|
# when this job can get a libssh version 0.9.0 or later, this should get
|
||||||
|
# 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=ON -DUSE_LIBRTMP=ON \
|
-DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=OFF -DUSE_LIBRTMP=ON \
|
||||||
-DCURL_LIBCURL_VERSIONED_SYMBOLS=ON
|
-DCURL_LIBCURL_VERSIONED_SYMBOLS=ON
|
||||||
|
|
||||||
- name: 'cmake curl_config.h'
|
- name: 'cmake curl_config.h'
|
||||||
@ -121,12 +123,12 @@ jobs:
|
|||||||
- name: 'autoreconf'
|
- name: 'autoreconf'
|
||||||
run: autoreconf -if
|
run: autoreconf -if
|
||||||
|
|
||||||
- name: 'configure (out-of-tree, c-ares, libssh, zstd, gssapi)'
|
- name: 'configure (out-of-tree, c-ares, libssh2, 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-libssh --with-zstd --with-gssapi --with-librtmp \
|
--with-openssl --enable-ares --with-libssh2 --with-zstd --with-gssapi --with-librtmp \
|
||||||
--prefix="$PWD"/../install-am
|
--prefix="$PWD"/../install-am
|
||||||
|
|
||||||
- name: 'autoconf curl_config.h'
|
- name: 'autoconf curl_config.h'
|
||||||
|
|||||||
91
.github/workflows/linux.yml
vendored
91
.github/workflows/linux.yml
vendored
@ -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.42.0
|
awslc-version: 1.45.0
|
||||||
# handled in renovate.json
|
# handled in renovate.json
|
||||||
openssl-version: 3.4.0
|
openssl-version: 3.4.1
|
||||||
# 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,12 +164,6 @@ 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
|
||||||
@ -292,9 +286,13 @@ 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
|
- name: Alpine MUSL https-rr
|
||||||
configure: --enable-debug --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl
|
configure: --enable-debug --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl --enable-threaded-resolver --enable-ares --enable-httpsrr
|
||||||
container: 'alpine:3.18'
|
container: 'alpine:3.20'
|
||||||
|
|
||||||
|
- 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'
|
||||||
@ -306,7 +304,8 @@ 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'
|
||||||
@ -321,27 +320,15 @@ 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 libssh2-dev \
|
apk add --no-cache build-base autoconf automake libtool perl openssl-dev \
|
||||||
zlib-dev brotli-dev zstd-dev libidn2-dev openldap-dev heimdal-dev libpsl-dev \
|
libssh2-dev zlib-dev brotli-dev zstd-dev libidn2-dev openldap-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
|
||||||
@ -569,7 +556,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 nightly
|
rustup toolchain install stable --profile minimal
|
||||||
|
|
||||||
- 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'
|
||||||
@ -597,41 +584,42 @@ jobs:
|
|||||||
|
|
||||||
- name: 'configure'
|
- name: 'configure'
|
||||||
run: |
|
run: |
|
||||||
[[ '${{ matrix.build.install_steps }}' = *'awslc'* ]] && sudo apt remove --yes libssl-dev
|
[[ '${{ matrix.build.install_steps }}' = *'awslc'* ]] && sudo apt-get -o Dpkg::Use-Pty=0 purge 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 . -G Ninja \
|
cmake -B bld -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 --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
../configure --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 config.log CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
||||||
|
|
||||||
- name: 'curl_config.h'
|
- name: 'curl_config.h'
|
||||||
run: |
|
run: |
|
||||||
echo '::group::raw'; cat lib/curl_config.h || true; echo '::endgroup::'
|
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
||||||
grep -F '#define' lib/curl_config.h | sort || true
|
grep -F '#define' bld/lib/curl_config.h | sort || true
|
||||||
|
|
||||||
- name: 'test configs'
|
- name: 'test configs'
|
||||||
run: |
|
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true
|
||||||
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 . --verbose
|
${{ matrix.build.make-prefix }} cmake --build bld --verbose
|
||||||
else
|
else
|
||||||
${{ matrix.build.make-prefix }} make V=1 ${{ matrix.build.make-custom-target }}
|
${{ matrix.build.make-prefix }} make -C bld V=1 ${{ matrix.build.make-custom-target }}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'single-use function check'
|
- name: 'single-use function check'
|
||||||
@ -639,27 +627,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=lib/libcurl.a
|
libcurla=bld/lib/libcurl.a
|
||||||
else
|
else
|
||||||
libcurla=lib/.libs/libcurl.a
|
libcurla=bld/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: ./src/curl -V
|
run: bld/src/curl -V
|
||||||
|
|
||||||
- name: 'cmake install'
|
- name: 'cmake install'
|
||||||
if: ${{ matrix.build.generate }}
|
if: ${{ matrix.build.generate }}
|
||||||
run: cmake --install . --prefix $HOME/curl --strip
|
run: cmake --install bld --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 . --verbose --target testdeps
|
cmake --build bld --verbose --target testdeps
|
||||||
else
|
else
|
||||||
make V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'install test prereqs'
|
- name: 'install test prereqs'
|
||||||
@ -686,9 +674,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 . --verbose --target ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
|
cmake --build bld --verbose --target ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
|
||||||
else
|
else
|
||||||
make V=1 ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
|
make -C bld V=1 ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'install pytest prereqs'
|
- name: 'install pytest prereqs'
|
||||||
@ -700,22 +688,21 @@ 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 . --verbose --target curl-pytest-ci
|
cmake --build bld --verbose --target curl-pytest-ci
|
||||||
else
|
else
|
||||||
make V=1 pytest-ci
|
make -C bld 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 . --verbose --target curl-examples
|
${{ matrix.build.make-prefix }} cmake --build bld --verbose --target curl-examples
|
||||||
else
|
else
|
||||||
${{ matrix.build.make-prefix }} make V=1 examples
|
${{ matrix.build.make-prefix }} make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
40
.github/workflows/macos.yml
vendored
40
.github/workflows/macos.yml
vendored
@ -47,8 +47,8 @@ permissions: {}
|
|||||||
# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
|
# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
|
||||||
|
|
||||||
env:
|
env:
|
||||||
LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings
|
|
||||||
MAKEFLAGS: -j 4
|
MAKEFLAGS: -j 4
|
||||||
|
LDFLAGS: -w # suppress 'object file was built for newer macOS version than being linked' warnings
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
macos:
|
macos:
|
||||||
@ -123,9 +123,10 @@ 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: 'OpenSSL libssh2 !ldap 10.15'
|
- name: 'quictls libssh2 !ldap 10.15'
|
||||||
compiler: clang
|
compiler: clang
|
||||||
configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix openssl)
|
install: quictls
|
||||||
|
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'
|
||||||
@ -135,9 +136,10 @@ 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
|
||||||
- name: 'OpenSSL +static libssh +examples'
|
chkprefill: _chkprefill
|
||||||
install: libssh
|
- name: 'quictls +static libssh +examples'
|
||||||
generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
|
install: quictls libssh
|
||||||
|
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'
|
||||||
@ -147,9 +149,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 !ldap brotli zstd'
|
- name: 'mbedTLS openldap brotli zstd'
|
||||||
install: brotli mbedtls zstd
|
install: brotli mbedtls zstd openldap
|
||||||
generate: -DCURL_USE_MBEDTLS=ON -DCURL_DISABLE_LDAP=ON
|
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"
|
||||||
- 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
|
||||||
@ -183,11 +185,12 @@ 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 && 'nghttp2 stunnel' || '' }} \
|
${{ !matrix.build.clang-tidy && 'libnghttp2 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
|
||||||
@ -228,11 +231,20 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
|
for _chkprefill in '' ${{ matrix.build.chkprefill }}; do
|
||||||
|
options=''
|
||||||
[ -n '${{ matrix.build.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.build.macos-version-min }}'
|
[ -n '${{ matrix.build.macos-version-min }}' ] && options+=' -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.build.macos-version-min }}'
|
||||||
cmake -B bld -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
|
cmake -B "bld${_chkprefill}" -G Ninja -D_CURL_PREFILL=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)" \
|
||||||
${{ matrix.build.generate }} ${options}
|
${{ 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
|
||||||
@ -303,7 +315,6 @@ 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
|
||||||
@ -334,7 +345,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 --target curl-examples --verbose
|
cmake --build bld --verbose --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld examples V=1
|
make -C bld examples V=1
|
||||||
fi
|
fi
|
||||||
@ -443,7 +454,8 @@ 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 -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
|
cmake -B bld -D_CURL_PREFILL=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)" \
|
||||||
|
|||||||
108
.github/workflows/non-native.yml
vendored
108
.github/workflows/non-native.yml
vendored
@ -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 -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=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 --config Debug
|
time cmake --build bld
|
||||||
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 --config Debug --target testdeps
|
time cmake --build bld --target testdeps
|
||||||
export TFLAGS='-j4'
|
export TFLAGS='-j4'
|
||||||
time cmake --build bld --config Debug --target test-ci
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
openbsd:
|
openbsd:
|
||||||
@ -100,30 +100,31 @@ 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 -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=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 --config Debug
|
time cmake --build bld
|
||||||
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 --config Debug --target testdeps
|
time cmake --build bld --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 --config Debug --target test-ci
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
freebsd:
|
freebsd:
|
||||||
name: "FreeBSD, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} openssl ${{ matrix.arch }}"
|
name: "FreeBSD, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} openssl${{ matrix.desc }} ${{ 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
|
||||||
@ -139,6 +140,7 @@ 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
|
||||||
@ -148,18 +150,25 @@ 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 || { tail -n 1000 config.log; false; }
|
--disable-dependency-tracking \
|
||||||
|
${{ 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 -j3 install
|
time make 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 -j3 -C tests
|
time make -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
|
||||||
|
fi
|
||||||
|
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time make -j3 examples
|
time make examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
fi
|
||||||
|
|
||||||
- name: 'cmake'
|
- name: 'cmake'
|
||||||
if: ${{ matrix.build == 'cmake' }}
|
if: ${{ matrix.build == 'cmake' }}
|
||||||
@ -176,21 +185,27 @@ 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 -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=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 --config Debug
|
time cmake --build bld
|
||||||
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 --config Debug --target testdeps
|
time cmake --build bld --target testdeps
|
||||||
time cmake --build bld --config Debug --target test-ci
|
if [ "${desc#*!runtests*}" = "${desc}" ]; then
|
||||||
|
time cmake --build bld --target test-ci
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ "${desc#*!examples*}" = "${desc}" ]; then
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time cmake --build bld --config Debug --target curl-examples
|
time cmake --build bld --target curl-examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
fi
|
||||||
|
|
||||||
omnios:
|
omnios:
|
||||||
name: 'OmniOS, AM gcc openssl amd64'
|
name: 'OmniOS, AM gcc openssl amd64'
|
||||||
@ -209,19 +224,21 @@ 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 || { tail -n 1000 config.log; false; }
|
--disable-dependency-tracking \
|
||||||
|
|| { 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 -j3 install
|
time gmake install
|
||||||
src/curl --disable --version
|
src/curl --disable --version
|
||||||
time gmake -j3 -C tests
|
time gmake -C tests
|
||||||
time gmake test-ci V=1
|
time gmake test-ci V=1
|
||||||
echo '::group::build examples'
|
echo '::group::build examples'
|
||||||
time gmake -j3 examples
|
time gmake examples
|
||||||
echo '::endgroup::'
|
echo '::endgroup::'
|
||||||
|
|
||||||
ios:
|
ios:
|
||||||
@ -229,9 +246,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:
|
||||||
@ -246,6 +263,7 @@ 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"
|
||||||
@ -254,6 +272,7 @@ 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
|
||||||
@ -296,7 +315,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 . \
|
cmake -B . \
|
||||||
-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 \
|
||||||
@ -320,7 +339,8 @@ 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 -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
|
cmake -B bld -D_CURL_PREFILL=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}
|
||||||
@ -345,7 +365,7 @@ jobs:
|
|||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
if [ -n '${{ matrix.build.generate }}' ]; then
|
if [ -n '${{ matrix.build.generate }}' ]; then
|
||||||
cmake --build bld --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --verbose
|
||||||
else
|
else
|
||||||
make -C bld V=1
|
make -C bld V=1
|
||||||
fi
|
fi
|
||||||
@ -356,7 +376,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 --target testdeps --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target testdeps --verbose
|
||||||
else
|
else
|
||||||
make -C bld V=1 -C tests
|
make -C bld V=1 -C tests
|
||||||
fi
|
fi
|
||||||
@ -364,7 +384,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 --target curl-examples --verbose
|
cmake --build bld ${{ matrix.build.options }} --parallel 4 --target curl-examples --verbose
|
||||||
else
|
else
|
||||||
make -C bld examples V=1
|
make -C bld examples V=1
|
||||||
fi
|
fi
|
||||||
@ -374,9 +394,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:
|
||||||
@ -474,7 +494,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --verbose
|
cmake --build bld --verbose
|
||||||
else
|
else
|
||||||
make -j5 -C bld V=1
|
make -C bld V=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -485,7 +505,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 -j5 -C bld -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -493,7 +513,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 -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
amiga:
|
amiga:
|
||||||
@ -501,6 +521,7 @@ 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:
|
||||||
@ -568,9 +589,9 @@ jobs:
|
|||||||
- name: 'build'
|
- name: 'build'
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --parallel 5
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -j5 -C bld
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -580,18 +601,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 --parallel 5 --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -j5 -C bld -C tests
|
make -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 --parallel 5 --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msdos:
|
msdos:
|
||||||
@ -599,6 +620,7 @@ 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:
|
||||||
@ -678,7 +700,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -j5 -C bld
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -690,7 +712,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 -j5 -C bld -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -699,5 +721,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 -j5 -C bld examples
|
make -C bld examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
273
.github/workflows/windows.yml
vendored
273
.github/workflows/windows.yml
vendored
@ -44,6 +44,7 @@ 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:
|
||||||
@ -83,14 +84,13 @@ 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
|
||||||
PATH="/usr/bin:$(cygpath "${SYSTEMROOT}")/System32"
|
cmake -B bld -G Ninja -D_CURL_PREFILL=ON ${options} \
|
||||||
cmake -B bld -G Ninja ${options} \
|
-DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=30 -DCURL_TEST_BUNDLES=ON \
|
||||||
-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 --config '${{ matrix.type }}'
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 install
|
make -C bld 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 --config '${{ matrix.type }}' --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 -C tests
|
make -C bld 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 --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --target test-ci
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 test-ci
|
make -C bld 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 --config '${{ matrix.type }}' --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 examples
|
make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msys2: # both msys and mingw-w64
|
msys2: # both msys and mingw-w64
|
||||||
@ -168,6 +168,8 @@ jobs:
|
|||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j 5
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@ -180,7 +182,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' }
|
- { 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: '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' }
|
||||||
@ -205,6 +207,7 @@ 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' }}
|
||||||
@ -218,6 +221,7 @@ 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:
|
||||||
@ -241,20 +245,26 @@ 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
|
fi
|
||||||
|
[ '${{ matrix.sys }}' = 'msys' ] && options+=' -D_CURL_PREFILL=ON'
|
||||||
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
[ '${{ matrix.test }}' = 'uwp' ] && options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
||||||
[ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
[ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
cmake -B "bld${_chkprefill}" -G Ninja ${options} \
|
||||||
cmake -B bld -G Ninja ${options} \
|
|
||||||
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
|
-DCMAKE_C_FLAGS="${{ matrix.cflags }} ${CFLAGS_CMAKE} ${CPPFLAGS}" \
|
||||||
-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 \
|
||||||
${{ 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
|
||||||
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 \
|
||||||
@ -277,9 +287,9 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}'
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 install
|
make -C bld V=1 install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl version'
|
- name: 'curl version'
|
||||||
@ -302,9 +312,9 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target testdeps
|
cmake --build bld --target testdeps
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 -C tests
|
make -C bld 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
|
||||||
@ -338,10 +348,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 --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --target test-ci
|
||||||
else
|
else
|
||||||
PATH="$PWD/bld/lib/.libs:$PATH"
|
PATH="$PWD/bld/lib/.libs:$PATH"
|
||||||
make -C bld -j5 V=1 test-ci
|
make -C bld V=1 test-ci
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -349,9 +359,9 @@ jobs:
|
|||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld --config '${{ matrix.type }}' --target curl-examples
|
cmake --build bld --target curl-examples
|
||||||
else
|
else
|
||||||
make -C bld -j5 V=1 examples
|
make -C bld V=1 examples
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mingw-w64-standalone-downloads:
|
mingw-w64-standalone-downloads:
|
||||||
@ -361,6 +371,8 @@ 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:
|
||||||
@ -417,15 +429,21 @@ 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"
|
||||||
[ '${{ matrix.type }}' = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
for _chkprefill in '' ${{ matrix.chkprefill }}; do
|
||||||
[ '${{ matrix.type }}' = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
options=''
|
||||||
cmake -B bld -G 'MSYS Makefiles' ${options} \
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
|
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() }}
|
||||||
@ -440,7 +458,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 --config '${{ matrix.type }}' --parallel 5
|
cmake --build bld
|
||||||
|
|
||||||
- name: 'curl version'
|
- name: 'curl version'
|
||||||
timeout-minutes: 1
|
timeout-minutes: 1
|
||||||
@ -454,7 +472,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 --config '${{ matrix.type }}' --parallel 5 --target testdeps
|
cmake --build bld --target testdeps
|
||||||
|
|
||||||
- name: 'install test prereqs'
|
- name: 'install test prereqs'
|
||||||
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}
|
||||||
@ -464,37 +482,48 @@ 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='-j4 ~WebSockets ${{ matrix.tflags }}'
|
export TFLAGS='-j8 ~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 --config '${{ matrix.type }}' --target test-ci
|
cmake --build bld --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 --config '${{ matrix.type }}' --parallel 5 --target curl-examples
|
cmake --build bld --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
|
||||||
@ -538,7 +567,7 @@ jobs:
|
|||||||
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
||||||
cmake --build bld
|
cmake --build bld
|
||||||
else
|
else
|
||||||
make -C bld -j5
|
make -C bld
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'curl info'
|
- name: 'curl info'
|
||||||
@ -550,7 +579,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 -j5 -C tests
|
make -C bld -C tests
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build examples'
|
- name: 'build examples'
|
||||||
@ -558,7 +587,114 @@ 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 -j5 examples
|
make -C bld 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:
|
||||||
@ -574,16 +710,16 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- 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: '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'
|
||||||
@ -596,16 +732,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: '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: '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'
|
||||||
@ -647,6 +783,7 @@ 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.
|
||||||
@ -683,13 +820,19 @@ 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
|
||||||
|
options=''
|
||||||
if [ '${{ matrix.plat }}' = 'uwp' ]; then
|
if [ '${{ matrix.plat }}' = 'uwp' ]; then
|
||||||
options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
options+=' -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0'
|
||||||
cflags='-DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP'
|
cflags='-DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP'
|
||||||
ldflags='-OPT:NOREF -OPT:NOICF -APPCONTAINER:NO'
|
ldflags='-OPT:NOREF -OPT:NOICF -APPCONTAINER:NO'
|
||||||
vsglobals=';AppxPackage=false;WindowsAppContainer=false'
|
vsglobals=';AppxPackage=false;WindowsAppContainer=false'
|
||||||
fi
|
fi
|
||||||
cmake -B bld ${options} \
|
[ '${{ 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" \
|
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" \
|
||||||
-DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
|
-DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
|
||||||
-DVCPKG_TARGET_TRIPLET='${{ matrix.arch }}-${{ matrix.plat }}' \
|
-DVCPKG_TARGET_TRIPLET='${{ matrix.arch }}-${{ matrix.plat }}' \
|
||||||
@ -697,14 +840,16 @@ jobs:
|
|||||||
-DCMAKE_EXE_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
|
-DCMAKE_EXE_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
|
||||||
-DCMAKE_SHARED_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
|
-DCMAKE_SHARED_LINKER_FLAGS="-INCREMENTAL:NO ${ldflags}" \
|
||||||
-DCMAKE_VS_GLOBALS="TrackFileAccess=false${vsglobals}" \
|
-DCMAKE_VS_GLOBALS="TrackFileAccess=false${vsglobals}" \
|
||||||
-DCMAKE_BUILD_TYPE='${{ matrix.type }}' \
|
|
||||||
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
||||||
-DCURL_WERROR=ON \
|
-DCURL_WERROR=ON \
|
||||||
-DBUILD_SHARED_LIBS=OFF \
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
-DENABLE_DEBUG=ON \
|
-DENABLE_DEBUG=ON \
|
||||||
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
|
||||||
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE= \
|
|
||||||
${{ 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() }}
|
||||||
@ -724,10 +869,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' \) -exec file '{}' \;
|
PATH=/usr/bin find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' -o -name '*.pdb' \) -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:$PATH"
|
PATH="$PWD/bld/lib/${{ matrix.type }}:$PATH"
|
||||||
bld/src/curl.exe --disable --version
|
'bld/src/${{ matrix.type }}/curl.exe' --disable --version
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 'build tests'
|
- name: 'build tests'
|
||||||
@ -749,17 +894,27 @@ 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:$PATH:/c/Program Files (x86)/stunnel/bin:/c/Program Files/OpenSSH-Win64"
|
PATH="$PWD/bld/lib/${{ matrix.type }}:$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
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
elseif(DOS OR AMIGA OR MINGW32CE)
|
||||||
set(CURL_HIDDEN_SYMBOLS OFF)
|
set(CURL_HIDDEN_SYMBOLS OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@ -55,24 +55,17 @@ int main(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* tests for gethostbyname_r */
|
/* tests for gethostbyname_r */
|
||||||
#if defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
|
|
||||||
defined(HAVE_GETHOSTBYNAME_R_5_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) || \
|
#if defined(HAVE_GETHOSTBYNAME_R_3) || \
|
||||||
|
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
|
||||||
defined(HAVE_GETHOSTBYNAME_R_5) || \
|
defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||||
|
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
|
||||||
defined(HAVE_GETHOSTBYNAME_R_6) || \
|
defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||||
defined(TEST_GETHOSTBYFOO_REENTRANT)
|
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
char *address = "example.com";
|
const 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) || \
|
||||||
@ -83,44 +76,31 @@ int main(void)
|
|||||||
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];
|
||||||
int h_errnop;
|
|
||||||
struct hostent *hp;
|
struct hostent *hp;
|
||||||
|
int h_errnop;
|
||||||
#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>
|
||||||
@ -130,10 +110,7 @@ int main(void)
|
|||||||
#endif
|
#endif
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
if(sizeof(bool *))
|
return (int)sizeof(bool *);
|
||||||
return 0;
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -146,18 +123,20 @@ 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))
|
||||||
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
static 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) { return 0; }
|
int main(void)
|
||||||
|
{
|
||||||
|
(void)off_t_is_large;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IOCTLSOCKET
|
#ifdef HAVE_IOCTLSOCKET
|
||||||
@ -167,9 +146,9 @@ int main(void) { return 0; }
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
int socket;
|
int socket = -1;
|
||||||
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
;
|
(void)flags;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +161,6 @@ 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
|
||||||
@ -198,7 +176,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
|
||||||
@ -212,7 +190,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
|
||||||
@ -239,7 +217,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
|
||||||
@ -267,7 +245,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
|
||||||
@ -286,7 +264,6 @@ 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
|
||||||
@ -295,7 +272,7 @@ int main(void)
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
void check(char c) {}
|
static void check(char c) { (void)c; }
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -311,7 +288,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 */
|
||||||
void check(float f) {}
|
static void check(float f) { (void)f; }
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -335,7 +312,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, 0);
|
fsetxattr(0, "", 0, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -344,8 +321,9 @@ int main(void)
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
struct timespec ts = {0, 0};
|
struct timespec ts;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
(void)clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
(void)ts;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -51,6 +51,7 @@ 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)
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -60,6 +60,7 @@ 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)
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -48,6 +48,7 @@ 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()
|
||||||
|
|||||||
@ -57,6 +57,7 @@ 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()
|
||||||
|
|||||||
@ -57,6 +57,7 @@ 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()
|
||||||
|
|||||||
@ -34,11 +34,14 @@ 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}")
|
||||||
@ -84,3 +87,10 @@ 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()
|
||||||
|
|||||||
@ -65,6 +65,9 @@ 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)
|
||||||
{
|
{
|
||||||
@ -104,11 +107,10 @@ if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE)
|
|||||||
check_c_source_compiles("${_source_epilogue}
|
check_c_source_compiles("${_source_epilogue}
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
#ifdef h_errno
|
#ifndef 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)
|
||||||
@ -124,12 +126,11 @@ 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()
|
||||||
|
|||||||
@ -44,6 +44,15 @@ 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")
|
||||||
|
|
||||||
@ -113,6 +122,7 @@ 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
|
||||||
)
|
)
|
||||||
@ -172,13 +182,20 @@ 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 AND MINGW)
|
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
|
||||||
|
list(APPEND _picky_enable
|
||||||
|
-Wjump-misses-init # gcc 4.5
|
||||||
|
)
|
||||||
|
|
||||||
|
if(MINGW)
|
||||||
list(APPEND _picky_enable
|
list(APPEND _picky_enable
|
||||||
-Wno-pedantic-ms-format # gcc 4.5 (MinGW-only)
|
-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
|
||||||
-Wdouble-promotion # clang 3.6 gcc 4.6 appleclang 6.3
|
-Wdouble-promotion # clang 3.6 gcc 4.6 appleclang 6.3
|
||||||
@ -188,7 +205,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 -ftree-vrp # clang 3.0 gcc 5.0 (clang default: -Warray-bounds)
|
-Warray-bounds=2 # 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)
|
||||||
@ -252,6 +269,9 @@ 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()
|
||||||
@ -274,6 +294,6 @@ endif()
|
|||||||
|
|
||||||
if(_picky)
|
if(_picky)
|
||||||
string(REPLACE ";" " " _picky "${_picky}")
|
string(REPLACE ";" " " _picky "${_picky}")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_picky}")
|
string(APPEND CMAKE_C_FLAGS " ${_picky}")
|
||||||
message(STATUS "Picky compiler options: ${_picky}")
|
message(STATUS "Picky compiler options: ${_picky}")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
311
CMake/unix-cache.cmake
Normal file
311
CMake/unix-cache.cmake
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# 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)
|
||||||
@ -35,7 +35,6 @@ 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)
|
||||||
@ -45,21 +44,6 @@ 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)
|
||||||
@ -73,32 +57,36 @@ 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()
|
||||||
set(HAVE_STDATOMIC_H 0)
|
if(MSVC_VERSION GREATER_EQUAL 1600)
|
||||||
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(NOT MSVC_VERSION LESS 1800)
|
if(MSVC_VERSION GREATER_EQUAL 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(NOT MSVC_VERSION LESS 1900)
|
if(MSVC_VERSION GREATER_EQUAL 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)
|
||||||
@ -198,8 +186,59 @@ 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()
|
||||||
|
|||||||
528
CMakeLists.txt
528
CMakeLists.txt
File diff suppressed because it is too large
Load Diff
@ -60,8 +60,12 @@ 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 \
|
||||||
|
|||||||
755
RELEASE-NOTES
755
RELEASE-NOTES
@ -1,272 +1,136 @@
|
|||||||
curl and libcurl 8.12.0
|
curl and libcurl 8.13.0
|
||||||
|
|
||||||
Public curl releases: 264
|
Public curl releases: 266
|
||||||
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: 3332
|
Contributors: 3354
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o curl: add byte range support to --variable reading from file [56]
|
o curl: add write-out variable 'tls_earlydata' [79]
|
||||||
o curl: make --etag-save acknowledge --create-dirs [31]
|
o rustls: add support for CERTINFO [106]
|
||||||
o getinfo: fix CURLINFO_QUEUE_TIME_T and add 'time_queue' var [55]
|
o tool_getparam: make --url support a file with URLs [104]
|
||||||
o getinfo: provide info which auth was used for HTTP and proxy [40]
|
o var: add a '64dec' function that can base64 decode a string [78]
|
||||||
o hyper: drop support [57]
|
o wolfssl: tls early data support [50]
|
||||||
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 altsvc: avoid integer overflow in expire calculation [16]
|
o addrinfo: add curl macro to avoid redefining foreign symbols [29]
|
||||||
o altsvc: return error on dot-only name [178]
|
o asyn-thread: avoid the separate 'struct resdata' alloc [20]
|
||||||
o android: add CI jobs, buildinfo, cmake docs, disable `CURL_USE_PKGCONFIG` by default [185]
|
o asyn-thread: avoid the separate curl_mutex_t alloc [6]
|
||||||
o asyn-ares: acknowledge CURLOPT_DNS_SERVERS set to NULL [190]
|
o asyn-thread: do not allocate thread_data separately [21]
|
||||||
o asyn-ares: fix memory leak [233]
|
o asyn-thread: remove 'status' from struct Curl_async [36]
|
||||||
o asyn-ares: initial HTTPS resolve support [166]
|
o build: add Windows CE / CeGCC support, with CI jobs [87]
|
||||||
o asyn-thread: use c-ares to resolve HTTPS RR [205]
|
o build: drop unused `getpart` tool [107]
|
||||||
o async-thread: avoid closing eventfd twice [9]
|
o build: enable -Wjump-misses-init for GCC 4.5+ [62]
|
||||||
o autotools: add support for mingw UWP builds [192]
|
o build: fix compiler warnings in feature detections [39]
|
||||||
o autotools: silence gcc warnings in libtool code [96]
|
o build: set `HAVE_WRITABLE_ARGV` for Apple cross-builds [8]
|
||||||
o binmode: convert to macro and use it from tests [44]
|
o build: silence bogus `-Wconversion` warnings with gcc 5.1-5.4 [68]
|
||||||
o build: delete `-Wsign-conversion` related FIXMEs [137]
|
o c-ares: error out for unsupported versions, drop unused macros [85]
|
||||||
o build: drop `-Winline` picky warning [53]
|
o ca-native.md: sync with CURLSSLOPT_NATIVE_CA [72]
|
||||||
o build: drop `tool_hugehelp.c.cvs`, tidy up macros, drop `buildconf.bat` [200]
|
o cf-socket: deduplicate Windows Vista detection [11]
|
||||||
o build: drop macro used to enable `-Wsign-conversion` warnings in CI [224]
|
o client writer: handle pause before deocding [61]
|
||||||
o build: drop unused feature macros, update exception list [51]
|
o cmake: `SHARE_LIB_OBJECT=ON` requires CMake 3.12 or newer [46]
|
||||||
o build: fix `-Wtrampolines` picky warning for gcc 4.x versions [156]
|
o cmake: add pre-fill for Unix, enable in GHA/macos, verify pre-fills [42]
|
||||||
o build: fix compiling with GCC 4.x versions [214]
|
o cmake: allow empty `IMPORT_LIB_SUFFIX`, add suffix collision detection [41]
|
||||||
o build: fix the tidy targets for autotools [52]
|
o cmake: avoid `-Wnonnull` warning in `HAVE_FSETXATTR_5` detection [81]
|
||||||
o build: fix unsigned `time_t` detection for cmake, MS-DOS, AmigaOS [104]
|
o cmake: disable HTTPS-proxy as a feature if proxy is disabled [77]
|
||||||
o build: replace configure check with PP condition (Android <21) [97]
|
o cmake: drop `CURL_DISABLE_TESTS` option [94]
|
||||||
o build: stop detecting `sched_yield()` on Windows [176]
|
o cmake: drop `HAVE_IN_ADDR_T` from pre-fill too
|
||||||
o c-ares: fix/tidy-up macro initializations, avoid a deprecated function [209]
|
o cmake: drop two stray TLS feature checks for wolfSSL [9]
|
||||||
o cd2nroff: do not insist on quoted <> within backticks [222]
|
o cmake: fix `HAVE_ATOMIC`/`HAVE_STDATOMIC` pre-fill for clang-cl [28]
|
||||||
o cd2nroff: support "none" as a TLS backend [29]
|
o cmake: fix ECH detection in custom-patched OpenSSL [32]
|
||||||
o cf-https-connect: look into httpsrr alpns when available [152]
|
o cmake: hide empty `MINGW64_VERSION` output for mingw32ce [114]
|
||||||
o cf-socket: error if address can't be copied [72]
|
o cmake: mention 'insecure' in the debug build warning [15]
|
||||||
o cfilters: kill connection filter events attach+detach [217]
|
o cmake: misc tidy-ups [38]
|
||||||
o checksrc.bat: remove explicit SNPRINTF bypass [174]
|
o cmake: pre-fill known type sizes for Windows OSes [100]
|
||||||
o checksrc: ban use of sscanf() [7]
|
o cmake: restrict static CRT builds to static curl exe, test in CI [113]
|
||||||
o checksrc: check for return with parens around a value/name [130]
|
o cmake: sync cutoff version with autotools for picky option `-ftree-vrp` [99]
|
||||||
o checksrc: exclude generated bundle files to avoid race condition [235]
|
o cmake: sync OpenSSL(-fork) feature checks with `./configure` [49]
|
||||||
o checksrc: fix the return() checker [35]
|
o CODE_STYLE: readability and banned functions [35]
|
||||||
o checksrc: introduce 'banfunc' to ban specific functions [117]
|
o configure: silence compiler warnings in feature checks, drop duplicates [86]
|
||||||
o cmake/Find: add `iphlpapi` for c-ares, omit syslibs if dep not found [203]
|
o configure: use `curl_cv_apple` variable [40]
|
||||||
o cmake/FindLDAP: avoid empty 'Requires' item when omitting `pkg-config` module [90]
|
o conn: fix connection reuse when SSL is optional [54]
|
||||||
o cmake/FindLDAP: avoid framework locations for libs too (Apple) [122]
|
o contributors.sh: lowercase 'github' for consistency [52]
|
||||||
o cmake/FindLibpsl: protect against `pkg-config` "half-detection" [89]
|
o contrithanks.sh: update docs/THANKS in place [119]
|
||||||
o cmake/FindLibssh: sync header comment with other modules
|
o cookie: do prefix matching case-sensitively [82]
|
||||||
o cmake/FindMbedTLS: drop lib duplicates early [17]
|
o cookie: minor parser simplification [58]
|
||||||
o cmake: add `librtmp` Find module [86]
|
o cookie: simplify invalid_octets() [24]
|
||||||
o cmake: add LDAP Find module [46]
|
o curl.h: change some enums to defines with L suffix [84]
|
||||||
o cmake: add native `pkg-config` detection for remaining Find modules [37]
|
o curl_msh3: remove verify bypass from DEBUGBUILDs [43]
|
||||||
o cmake: allow `CURL_LTO` regardless of `CURL_BUILD_TYPE`, enable in CI [88]
|
o curl_trc: fix build with CURL_DISABLE_VERBOSE_STRINGS [109]
|
||||||
o cmake: clang-cl improvements [42]
|
o CURLMOPT_SOCKETFUNCTION.md: add advice for socket callback invocation[69]
|
||||||
o cmake: delete accidental debug message
|
o CURLOPT_HTTPHEADER.md: add comments to the example [90]
|
||||||
o cmake: deprecate winbuild, add migration guide from legacy build methods [157]
|
o CURLOPT_HTTPHEADER.md: rephrases [108]
|
||||||
o cmake: detect mingw-w64 version, pre-fill `HAVE_STRTOK_R` [179]
|
o docs: add FD_ZERO to curl_multi_fdset example [19]
|
||||||
o cmake: do not store `MINGW64_VERSION` in cache [175]
|
o docs: bump `rustls` to 0.14.1 [111]
|
||||||
o cmake: drop `CURL_USE_PKGCONFIG` from `curl-config.cmake.in` [208]
|
o docs: correct argument names & URL redirection [4]
|
||||||
o cmake: drop `fseeko()` pre-fill and check for Windows [201]
|
o eventfd: allow use on all CPUs [93]
|
||||||
o cmake: drop duplicate Windows cache value [81]
|
o gnutls: fix connection state check on handshake [80]
|
||||||
o cmake: drop redundant FOUND checks (libgsasl, libssh, libuv) [49]
|
o hash: use single linked list for entries [57]
|
||||||
o cmake: drop redundant opening/closing `.*` from `MATCH` expressions [64]
|
o hostip: make CURLOPT_RESOLVE support replacing IPv6 addresses [47]
|
||||||
o cmake: drop unused `HAVE_SYS_XATTR_H` detection [79]
|
o HTTP3.md: only speak about minimal versions [18]
|
||||||
o cmake: drop VS2010 "Dialog Hell" workaround added in 2013 [136]
|
o http: convert parsers to strparse [48]
|
||||||
o cmake: extend zlib's `AUTO` option to brotli, zstd and enable if found [36]
|
o http: fix NTLM info message typo [22]
|
||||||
o cmake: fix `net/in.h` detection for MS-DOS [103]
|
o http: fix the auth check [88]
|
||||||
o cmake: improve `curl_dumpvars()` and move to `Utilities.cmake` [50]
|
o http: make the RTSP version check stricter [73]
|
||||||
o cmake: make libpsl required by default [45]
|
o http: negotiation and room for alt-svc/https rr to navigate [64]
|
||||||
o cmake: make system libraries `dl`, `m`, `pthread` customizable [123]
|
o http: version negotiation [45]
|
||||||
o cmake: move `pkg-config` names to Find modules [87]
|
o http_aws_sigv4: use strparse more for parsing [55]
|
||||||
o cmake: move GSS init before feature detections [93]
|
o https-rr: implementation improvements [44]
|
||||||
o cmake: move mingw UWP workaround from GHA to `CMakeLists.txt` [194]
|
o httpsrr: fix port detection [51]
|
||||||
o cmake: namespace functions and macros [41]
|
o httpsrr: fix the HTTPS-RR threaded-resolver build combo [67]
|
||||||
o cmake: optimize out 4 picky warning option detections with gcc [78]
|
o INSTALL-CMAKE.md: CMake usage updates [101]
|
||||||
o cmake: pick a better IPv6 feature flag when assembling the feature list [132]
|
o INSTALL-CMAKE.md: mention `ZLIB_USE_STATIC_LIBS` [112]
|
||||||
o cmake: pre-fill `HAVE_STDATOMIC_H`, `HAVE_ATOMIC` for mingw-w64 [180]
|
o lib: better optimized casecompare() and ncasecompare() [3]
|
||||||
o cmake: pre-fill `HAVE_STDINT_H` on Windows [149]
|
o lib: simplify more white space loops [60]
|
||||||
o cmake: prefer dash-style MSVC options [216]
|
o lib: strtoofft.h header cleanup [17]
|
||||||
o cmake: publish/check supported protocols/features via `CURLConfig.cmake` [100]
|
o lib: use Curl_str_* instead of strtok_r() [59]
|
||||||
o cmake: replace `unset(VAR)` with `set(VAR "")` for init [43]
|
o lib: use Curl_str_number() for parsing decimal numbers [13]
|
||||||
o cmake: sync OpenSSL QUIC fork detection with autotools [102]
|
o libtest/libprereq.c: set CURLOPT_FOLLOWLOCATION with a long [89]
|
||||||
o cmake: use `CMAKE_REQUIRED_LINK_DIRECTORIES` [48]
|
o managen: correct the warning for un-escaped '<' and '>' [1]
|
||||||
o cmake: use `STREQUAL` to detect Linux [68]
|
o msvc: drop support for VS2005 and older [96]
|
||||||
o cmake: warn for OpenSSL versions missing TLS 1.3 support [221]
|
o multi: event based rework [74]
|
||||||
o cmdline-opts/version.md: describe multissl, mention SSLS-EXPORT [170]
|
o openssl: check return value of X509_get0_pubkey [105]
|
||||||
o completion.pl: add completion for paths after @ for fish [82]
|
o openssl: drop support for old OpenSSL/LibreSSL versions [95]
|
||||||
o config-mac: drop `MACOS_SSL_SUPPORT` macro [63]
|
o openssl: remove bad `goto`s into other scope [63]
|
||||||
o config: drop unused code and variables [135]
|
o runtests: drop recognizing 'winssl' as Schannel [102]
|
||||||
o configure: do not inline 'dnl' comments
|
o runtests: drop ref to unused external function
|
||||||
o configure: drop unused detections and macros [105]
|
o runtests: recognize AWS-LC as OpenSSL [103]
|
||||||
o configure: streamline Windows large file feature check [138]
|
o runtests: support multi-target cmake, drop workarounds from CI [116]
|
||||||
o configure: UWP and Android follow-up fixes [184]
|
o schannel: deduplicate Windows Vista detection [98]
|
||||||
o conncache: count shutdowns against host and max limits [154]
|
o schannel: enable ALPN support under WINE 6.0+ [92]
|
||||||
o conncache: result_cb comment removed from function docs [1]
|
o schannel: enable ALPN with MinGW, fix ALPN for UWP builds [71]
|
||||||
o content_encoding: drop support for zlib before 1.2.0.4 [211]
|
o schannel: guard ALPN init code to ALPN builds [91]
|
||||||
o content_encoding: namespace GZIP flag constants [147]
|
o scripts/managen: fix option 'single' [31]
|
||||||
o content_encoding: put the decomp buffers into the writer structs [210]
|
o scripts/managen: fix parsing of markdown code sections [30]
|
||||||
o content_encoding: support use of custom libzstd memory functions [186]
|
o setopt: remove unnecesary void pointer typecasts [76]
|
||||||
o cookie: cap expire times to 400 days [111]
|
o ssh: consider sftp quote commands case sensitive [33]
|
||||||
o cookie: fix crash in netscape cookie parsing [84]
|
o ssl session cache: add exportable flag [56]
|
||||||
o cookie: parse only the exact expire date [3]
|
o strparse: make Curl_str_number() return error for no digits [14]
|
||||||
o curl-functions.m4: fix indentation in `CURL_SIZEOF()` [131]
|
o strparse: switch the API to work on 'const char *' [2]
|
||||||
o curl: return error if etag options are used with multiple URLs [5]
|
o strparse: switch to curl_off_t as base data type [7]
|
||||||
o curl_multi_fdset: include the shutdown connections in the set [168]
|
o tests: fix enum/int confusion, fix autotools `CFLAGS` for `servers` [27]
|
||||||
o curl_multi_waitfds.md: tidy up the example [162]
|
o tidy-up: align MSYS2/Cygwin codepaths, follow Cygwin `MAX_PID` bump [97]
|
||||||
o curl_multibyte: support Windows paths longer than MAX_PATH [76]
|
o tidy-up: delete, comment or scope C macros reported unused [16]
|
||||||
o curl_setup: fix missing `ADDRESS_FAMILY` type in rare build cases [144]
|
o tidy-up: drop unused `CURL_INADDR_NONE` macro and `in_addr_t` type [26]
|
||||||
o curl_sha512_256: rename symbols to the curl namespace [124]
|
o tidy-up: use `CURL_ARRAYSIZE()` [37]
|
||||||
o curl_url_set.md: adjust the added-in to 7.62.0 [94]
|
o timediff: fix comment for curlx_mstotv() [25]
|
||||||
o curl_ws_recv.md: fix typo
|
o timediff: remove unnecessary double typecast [53]
|
||||||
o CURLOPT_CONNECT_ONLY.md: an easy handle with this option set cannot be reused [164]
|
o tool_getparam: clear sensitive arguments better [66]
|
||||||
o CURLOPT_PROXY.md: clarify the crendential support in proxy URLs [66]
|
o tool_operate: fail SSH transfers without server auth [70]
|
||||||
o CURLOPT_RESOLVE.md: fix wording [30]
|
o urlapi: simplify junkscan [23]
|
||||||
o CURLOPT_SEEKFUNCTION.md: used for FTP, HTTP and SFTP (only) [109]
|
o variable.md: clarify 'trim' example [12]
|
||||||
o docs/BUGS.md: remove leading space from a link
|
o windows: drop code and curl manifest targeting W2K and older [115]
|
||||||
o docs/cmdline-opts/_ENVIRONMENT.md: minor language fix [119]
|
o wolfssh: retrieve the error using wolfSSH_get_error [5]
|
||||||
o docs/cmdline-opts/location.md: fix typos for location flag [226]
|
o wolfssl: fix CA certificate multiple location import [34]
|
||||||
o docs/HTTP-COOKIES.md: link to more information [125]
|
o wolfssl: warn if CA native import option is ignored [65]
|
||||||
o docs/HTTPSRR.md: initial HTTPS RR documentation [204]
|
o wolfssl: when using PQ KEM, use ML-KEM, not Kyber [10]
|
||||||
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 docs/KNOWN_BUGS (https://curl.se/docs/knownbugs.html)
|
See https://curl.se/docs/knownbugs.html
|
||||||
|
|
||||||
For all changes ever done in curl:
|
For all changes ever done in curl:
|
||||||
|
|
||||||
@ -275,268 +139,135 @@ 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 for details
|
See https://curl.se/dev/deprecate.html
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
9cel, Aleksander Mazur, Andrew Kaster, Andy Pan, Asger Hautop Drewsen,
|
Anthony Hu, Dan Fandrich, Daniel Stenberg, dependabot[bot], Derek Huang,
|
||||||
baranyaib90 on github, Ben Zanin, Brad House, Calvin Ruocco,
|
Dexter Gerig, Harry Sintonen, Jeremy Drake, John Bampton, Joseph Chen,
|
||||||
Christian Heusel, Christian Schmitz, Christopher Dannemiller, Dan Fandrich,
|
kayrus on github, kriztalz, Laurențiu Nicola, lf- on github, Marcel Raad,
|
||||||
Daniel Stenberg, Darren Banfi, Deniz Sökmen, dependabot[bot], Derek Huang,
|
Mark Phillips, qhill on github, Ray Satiro, renovate[bot], rmg-x on github,
|
||||||
Dexter Gerig, Donguk Kim, dwickr, Edoardo Lolletti, Ganesh Viswanathan,
|
RubisetCie on github, Sergey, Stefan Eissing, Tianyi Song, Timo Tijhof,
|
||||||
Harry Sintonen, Hermes Zhang, IcedCoffeee on github, Igor Todorovski,
|
Viktor Szakats, Yedaya Katsman, Zenju on github
|
||||||
Jakub Jelen, Jeroen Ooms, Jiri Stary, Kai Pastor, Kevin Sun, Kuan-Wei Chiu,
|
(28 contributors)
|
||||||
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=15720
|
[1] = https://curl.se/bug/?i=16315
|
||||||
[2] = https://curl.se/bug/?i=15714
|
[2] = https://curl.se/bug/?i=16316
|
||||||
[3] = https://curl.se/bug/?i=15709
|
[3] = https://curl.se/bug/?i=16311
|
||||||
[4] = https://curl.se/bug/?i=15708
|
[4] = https://curl.se/bug/?i=16334
|
||||||
[5] = https://curl.se/bug/?i=15729
|
[5] = https://curl.se/bug/?i=16335
|
||||||
[6] = https://curl.se/bug/?i=15734
|
[6] = https://curl.se/bug/?i=16323
|
||||||
[7] = https://curl.se/bug/?i=15687
|
[7] = https://curl.se/bug/?i=16336
|
||||||
[8] = https://curl.se/bug/?i=15692
|
[8] = https://curl.se/bug/?i=16338
|
||||||
[9] = https://curl.se/bug/?i=15725
|
[9] = https://curl.se/bug/?i=16339
|
||||||
[10] = https://curl.se/bug/?i=15711
|
[10] = https://curl.se/bug/?i=16337
|
||||||
[11] = https://curl.se/bug/?i=15723
|
[11] = https://curl.se/bug/?i=16400
|
||||||
[12] = https://curl.se/bug/?i=15721
|
[12] = https://curl.se/bug/?i=16346
|
||||||
[13] = https://curl.se/bug/?i=15752
|
[13] = https://curl.se/bug/?i=16319
|
||||||
[14] = https://curl.se/bug/?i=15753
|
[14] = https://curl.se/bug/?i=16319
|
||||||
[15] = https://curl.se/bug/?i=15749
|
[15] = https://curl.se/bug/?i=16327
|
||||||
[16] = https://issues.oss-fuzz.com/issues/383911309
|
[16] = https://curl.se/bug/?i=16279
|
||||||
[17] = https://curl.se/bug/?i=15495
|
[17] = https://curl.se/bug/?i=16331
|
||||||
[18] = https://curl.se/bug/?i=15743
|
[18] = https://curl.se/bug/?i=16320
|
||||||
[19] = https://curl.se/bug/?i=15742
|
[19] = https://curl.se/bug/?i=16325
|
||||||
[20] = https://curl.se/bug/?i=15741
|
[20] = https://curl.se/bug/?i=16321
|
||||||
[21] = https://curl.se/bug/?i=15740
|
[21] = https://curl.se/bug/?i=16241
|
||||||
[22] = https://curl.se/bug/?i=15737
|
[22] = https://curl.se/bug/?i=16305
|
||||||
[23] = https://curl.se/bug/?i=15779
|
[23] = https://curl.se/bug/?i=16307
|
||||||
[24] = https://curl.se/bug/?i=15778
|
[24] = https://curl.se/bug/?i=16306
|
||||||
[25] = https://curl.se/bug/?i=15776
|
[25] = https://curl.se/bug/?i=16310
|
||||||
[26] = https://curl.se/bug/?i=15775
|
[26] = https://curl.se/bug/?i=16318
|
||||||
[27] = https://curl.se/bug/?i=15772
|
[27] = https://curl.se/bug/?i=16314
|
||||||
[28] = https://curl.se/bug/?i=15767
|
[28] = https://curl.se/bug/?i=16313
|
||||||
[29] = https://curl.se/bug/?i=15769
|
[29] = https://curl.se/bug/?i=16274
|
||||||
[30] = https://curl.se/bug/?i=15770
|
[30] = https://curl.se/bug/?i=16345
|
||||||
[31] = https://curl.se/bug/?i=15730
|
[31] = https://curl.se/bug/?i=16344
|
||||||
[32] = https://curl.se/bug/?i=15763
|
[32] = https://curl.se/bug/?i=16354
|
||||||
[33] = https://curl.se/bug/?i=15761
|
[33] = https://curl.se/bug/?i=16382
|
||||||
[34] = https://curl.se/bug/?i=15596
|
[34] = https://curl.se/bug/?i=16391
|
||||||
[35] = https://curl.se/bug/?i=15764
|
[35] = https://curl.se/bug/?i=16349
|
||||||
[36] = https://curl.se/bug/?i=15431
|
[36] = https://curl.se/bug/?i=16347
|
||||||
[37] = https://curl.se/bug/?i=15408
|
[37] = https://curl.se/bug/?i=16381
|
||||||
[38] = https://curl.se/bug/?i=15543
|
[38] = https://curl.se/bug/?i=16238
|
||||||
[39] = https://curl.se/bug/?i=15796
|
[39] = https://curl.se/bug/?i=16287
|
||||||
[40] = https://curl.se/bug/?i=15450
|
[40] = https://curl.se/bug/?i=16340
|
||||||
[41] = https://curl.se/bug/?i=15498
|
[41] = https://curl.se/bug/?i=16324
|
||||||
[42] = https://curl.se/bug/?i=15478
|
[42] = https://curl.se/bug/?i=15841
|
||||||
[43] = https://curl.se/bug/?i=15255
|
[43] = https://curl.se/bug/?i=16342
|
||||||
[44] = https://curl.se/bug/?i=15787
|
[44] = https://curl.se/bug/?i=16132
|
||||||
[45] = https://curl.se/bug/?i=15464
|
[45] = https://curl.se/bug/?i=16100
|
||||||
[46] = https://curl.se/bug/?i=15273
|
[46] = https://curl.se/bug/?i=16375
|
||||||
[47] = https://curl.se/bug/?i=15523
|
[47] = https://curl.se/bug/?i=16357
|
||||||
[48] = https://curl.se/bug/?i=15280
|
[48] = https://curl.se/bug/?i=16436
|
||||||
[49] = https://curl.se/bug/?i=15465
|
[49] = https://curl.se/bug/?i=16352
|
||||||
[50] = https://curl.se/bug/?i=15562
|
[50] = https://curl.se/bug/?i=16167
|
||||||
[51] = https://curl.se/bug/?i=15577
|
[51] = https://curl.se/bug/?i=16409
|
||||||
[52] = https://curl.se/bug/?i=15813
|
[52] = https://curl.se/bug/?i=16443
|
||||||
[53] = https://curl.se/bug/?i=15815
|
[53] = https://curl.se/bug/?i=16367
|
||||||
[54] = https://curl.se/bug/?i=15788
|
[54] = https://curl.se/bug/?i=16384
|
||||||
[55] = https://curl.se/bug/?i=15512
|
[55] = https://curl.se/bug/?i=16366
|
||||||
[56] = https://curl.se/bug/?i=15739
|
[56] = https://curl.se/bug/?i=16322
|
||||||
[57] = https://curl.se/bug/?i=15120
|
[57] = https://curl.se/bug/?i=16351
|
||||||
[58] = https://curl.se/bug/?i=15789
|
[58] = https://curl.se/bug/?i=16362
|
||||||
[59] = https://curl.se/bug/?i=15785
|
[59] = https://curl.se/bug/?i=16360
|
||||||
[60] = https://curl.se/bug/?i=15774
|
[60] = https://curl.se/bug/?i=16363
|
||||||
[61] = https://curl.se/bug/?i=15667
|
[61] = https://curl.se/bug/?i=16280
|
||||||
[62] = https://curl.se/bug/?i=15786
|
[62] = https://curl.se/bug/?i=16252
|
||||||
[63] = https://curl.se/bug/?i=15777
|
[63] = https://curl.se/bug/?i=16356
|
||||||
[64] = https://curl.se/bug/?i=15773
|
[64] = https://curl.se/bug/?i=16117
|
||||||
[65] = https://curl.se/bug/?i=15812
|
[65] = https://curl.se/bug/?i=16417
|
||||||
[66] = https://curl.se/bug/?i=15805
|
[66] = https://curl.se/bug/?i=16396
|
||||||
[67] = https://curl.se/bug/?i=15814
|
[67] = https://curl.se/bug/?i=16399
|
||||||
[68] = https://curl.se/bug/?i=15855
|
[68] = https://curl.se/bug/?i=16398
|
||||||
[69] = https://curl.se/bug/?i=15807
|
[69] = https://curl.se/bug/?i=16441
|
||||||
[70] = https://curl.se/bug/?i=15808
|
[70] = https://curl.se/bug/?i=16205
|
||||||
[71] = https://curl.se/bug/?i=15806
|
[71] = https://curl.se/bug/?i=16385
|
||||||
[72] = https://curl.se/bug/?i=15784
|
[72] = https://curl.se/bug/?i=16373
|
||||||
[73] = https://curl.se/bug/?i=15146
|
[73] = https://curl.se/bug/?i=16435
|
||||||
[74] = https://curl.se/bug/?i=15748
|
[74] = https://curl.se/bug/?i=16308
|
||||||
[75] = https://curl.se/bug/?i=15468
|
[76] = https://curl.se/bug/?i=16426
|
||||||
[76] = https://curl.se/bug/?i=13522
|
[77] = https://curl.se/bug/?i=16434
|
||||||
[77] = https://curl.se/bug/?i=15587
|
[78] = https://curl.se/bug/?i=16330
|
||||||
[78] = https://curl.se/bug/?i=15850
|
[79] = https://curl.se/bug/?i=15956
|
||||||
[79] = https://curl.se/bug/?i=15845
|
[80] = https://curl.se/bug/?i=16423
|
||||||
[80] = https://curl.se/bug/?i=15842
|
[81] = https://curl.se/bug/?i=16427
|
||||||
[81] = https://curl.se/bug/?i=15840
|
[82] = https://curl.se/bug/?i=16494
|
||||||
[82] = https://curl.se/bug/?i=15928
|
[84] = https://curl.se/bug/?i=16482
|
||||||
[83] = https://curl.se/bug/?i=15884
|
[85] = https://curl.se/bug/?i=16407
|
||||||
[84] = https://curl.se/bug/?i=15826
|
[86] = https://curl.se/bug/?i=16377
|
||||||
[85] = https://curl.se/bug/?i=15883
|
[87] = https://curl.se/bug/?i=15975
|
||||||
[86] = https://curl.se/bug/?i=15832
|
[88] = https://curl.se/bug/?i=16419
|
||||||
[87] = https://curl.se/bug/?i=15800
|
[89] = https://curl.se/bug/?i=16487
|
||||||
[88] = https://curl.se/bug/?i=15829
|
[90] = https://curl.se/bug/?i=16488
|
||||||
[89] = https://curl.se/bug/?i=15827
|
[91] = https://curl.se/bug/?i=16420
|
||||||
[90] = https://curl.se/bug/?i=15828
|
[92] = https://curl.se/bug/?i=16393
|
||||||
[91] = https://curl.se/bug/?i=15882
|
[93] = https://curl.se/bug/?i=16277
|
||||||
[92] = https://curl.se/bug/?i=15765
|
[94] = https://curl.se/bug/?i=16134
|
||||||
[93] = https://curl.se/bug/?i=15809
|
[95] = https://curl.se/bug/?i=16104
|
||||||
[94] = https://curl.se/bug/?i=15822
|
[96] = https://curl.se/bug/?i=16004
|
||||||
[95] = https://curl.se/bug/?i=15820
|
[97] = https://curl.se/bug/?i=16217
|
||||||
[96] = https://curl.se/bug/?i=15915
|
[98] = https://curl.se/bug/?i=16408
|
||||||
[97] = https://curl.se/bug/?i=15871
|
[99] = https://curl.se/bug/?i=16478
|
||||||
[98] = https://curl.se/bug/?i=15876
|
[100] = https://curl.se/bug/?i=16464
|
||||||
[99] = https://curl.se/bug/?i=15906
|
[101] = https://curl.se/bug/?i=16329
|
||||||
[100] = https://curl.se/bug/?i=15854
|
[102] = https://curl.se/bug/?i=16467
|
||||||
[101] = https://curl.se/bug/?i=15945
|
[103] = https://curl.se/bug/?i=16466
|
||||||
[102] = https://curl.se/bug/?i=15873
|
[104] = https://curl.se/bug/?i=16099
|
||||||
[103] = https://curl.se/bug/?i=15869
|
[105] = https://curl.se/bug/?i=16468
|
||||||
[104] = https://curl.se/bug/?i=15868
|
[106] = https://curl.se/bug/?i=16459
|
||||||
[105] = https://curl.se/bug/?i=15867
|
[107] = https://curl.se/bug/?i=16460
|
||||||
[106] = https://curl.se/bug/?i=15844
|
[108] = https://curl.se/bug/?i=16461
|
||||||
[107] = https://curl.se/bug/?i=15833
|
[109] = https://curl.se/bug/?i=16462
|
||||||
[108] = https://curl.se/bug/?i=15908
|
[111] = https://curl.se/bug/?i=16446
|
||||||
[109] = https://curl.se/bug/?i=15903
|
[112] = https://curl.se/bug/?i=16457
|
||||||
[110] = https://curl.se/bug/?i=15861
|
[113] = https://curl.se/bug/?i=16456
|
||||||
[111] = https://curl.se/bug/?i=15937
|
[114] = https://curl.se/bug/?i=16455
|
||||||
[112] = https://curl.se/bug/?i=15902
|
[115] = https://curl.se/bug/?i=16453
|
||||||
[113] = https://curl.se/bug/?i=15898
|
[116] = https://curl.se/bug/?i=16452
|
||||||
[114] = https://curl.se/bug/?i=15900
|
[119] = https://curl.se/bug/?i=16448
|
||||||
[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
|
|
||||||
|
|||||||
158
acinclude.m4
158
acinclude.m4
@ -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,14 +88,13 @@ 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)
|
||||||
{
|
{
|
||||||
#ifdef $1
|
#ifndef $1
|
||||||
return 0;
|
|
||||||
#else
|
|
||||||
#error force compilation error
|
#error force compilation error
|
||||||
#endif
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
@ -126,12 +125,11 @@ 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;
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
@ -180,7 +178,8 @@ 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
|
||||||
@ -306,6 +305,7 @@ 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,6 +354,7 @@ 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"
|
||||||
@ -433,6 +434,7 @@ 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"
|
||||||
@ -543,6 +545,7 @@ 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"
|
||||||
@ -686,7 +689,8 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
]],[[
|
]],[[
|
||||||
send(0, 0, 0, 0);
|
char s[] = "";
|
||||||
|
send(0, (void *)s, 0, 0);
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -729,7 +733,8 @@ 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"
|
||||||
@ -777,6 +782,7 @@ 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"
|
||||||
@ -793,84 +799,6 @@ 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.
|
||||||
@ -892,6 +820,7 @@ 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])
|
||||||
@ -926,6 +855,7 @@ 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])
|
||||||
@ -972,6 +902,7 @@ 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"
|
||||||
@ -1018,10 +949,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))
|
||||||
exit(0);
|
return 0;
|
||||||
else
|
(void)ts;
|
||||||
exit(1);
|
return 1;
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -1168,7 +1099,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()
|
int main(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1380,16 +1311,13 @@ 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])
|
||||||
case $host_os in
|
if test "$curl_cv_wince" = 'yes'; then
|
||||||
mingw32ce*|cegcc*)
|
|
||||||
dnl Windows CE does not support large files
|
dnl Windows CE does not support large files
|
||||||
curl_win32_has_largefile='no'
|
curl_win32_has_largefile='no'
|
||||||
;;
|
else
|
||||||
*)
|
|
||||||
dnl All mingw-w64 versions support large files
|
dnl All mingw-w64 versions support large files
|
||||||
curl_win32_has_largefile='yes'
|
curl_win32_has_largefile='yes'
|
||||||
;;
|
fi
|
||||||
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
|
||||||
@ -1523,9 +1451,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=""
|
||||||
case $host in
|
if test "$curl_cv_apple" = 'yes'; then
|
||||||
*-apple-*) curl_pflags="${curl_pflags} APPLE";;
|
curl_pflags="${curl_pflags} APPLE"
|
||||||
esac
|
fi
|
||||||
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";;
|
||||||
@ -1546,14 +1474,24 @@ 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
|
||||||
@ -1639,18 +1577,6 @@ dnl with very low deployment targets.
|
|||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_DEFUN([CURL_DARWIN_CFLAGS], [
|
AC_DEFUN([CURL_DARWIN_CFLAGS], [
|
||||||
|
|
||||||
tst_cflags="no"
|
|
||||||
case $host in
|
|
||||||
*-apple-*)
|
|
||||||
tst_cflags="yes"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for good-to-use Darwin CFLAGS])
|
|
||||||
AC_MSG_RESULT([$tst_cflags]);
|
|
||||||
|
|
||||||
if test "$tst_cflags" = "yes"; then
|
|
||||||
old_CFLAGS=$CFLAGS
|
old_CFLAGS=$CFLAGS
|
||||||
CFLAGS="$CFLAGS -Werror=partial-availability"
|
CFLAGS="$CFLAGS -Werror=partial-availability"
|
||||||
AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
|
AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
|
||||||
@ -1658,8 +1584,6 @@ AC_DEFUN([CURL_DARWIN_CFLAGS], [
|
|||||||
[AC_MSG_RESULT([yes])],
|
[AC_MSG_RESULT([yes])],
|
||||||
[AC_MSG_RESULT([no])
|
[AC_MSG_RESULT([no])
|
||||||
CFLAGS=$old_CFLAGS])
|
CFLAGS=$old_CFLAGS])
|
||||||
fi
|
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
91
appveyor.sh
91
appveyor.sh
@ -28,45 +28,75 @@ 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-Win64'
|
openssl_root_win="C:/OpenSSL-v34${openssl_suffix}"
|
||||||
|
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-Win64'
|
openssl_root_win="C:/OpenSSL-v111${openssl_suffix}"
|
||||||
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
|
||||||
|
# results with and without the pre-fill feature. They have to match.
|
||||||
|
for _chkprefill in '' ${CHKPREFILL:-}; do
|
||||||
options=''
|
options=''
|
||||||
[[ "${TARGET:-}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture'
|
[ "${_chkprefill}" = '_chkprefill' ] && options+=' -D_CURL_PREFILL=OFF'
|
||||||
|
[[ "${TARGET}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture'
|
||||||
[ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}"
|
[ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}"
|
||||||
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
|
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
|
||||||
[ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}"
|
[ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}"
|
||||||
[ "${PRJ_CFG}" = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ]; then
|
||||||
[ "${PRJ_CFG}" = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
mkdir "_bld${_chkprefill}"
|
||||||
[[ "${PRJ_GEN}" = *'Visual Studio'* ]] && options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false'
|
cd "_bld${_chkprefill}"
|
||||||
|
options+=' ..'
|
||||||
|
root='..'
|
||||||
|
else
|
||||||
|
options+=" -B _bld${_chkprefill}"
|
||||||
|
options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false'
|
||||||
|
options+=" -DCMAKE_UNITY_BUILD=${UNITY}"
|
||||||
|
root='.'
|
||||||
|
fi
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
cmake -B _bld "-G${PRJ_GEN}" ${TARGET:-} ${options} \
|
time cmake -G "${PRJ_GEN}" ${TARGET} \
|
||||||
"-DCURL_USE_OPENSSL=${OPENSSL}" \
|
-DCURL_TEST_BUNDLES=ON \
|
||||||
"-DCURL_USE_SCHANNEL=${SCHANNEL}" \
|
-DCURL_WERROR=ON \
|
||||||
"-DHTTP_ONLY=${HTTP_ONLY}" \
|
-DBUILD_SHARED_LIBS="${SHARED}" \
|
||||||
"-DBUILD_SHARED_LIBS=${SHARED}" \
|
-DCURL_STATIC_CRT=ON \
|
||||||
"-DCMAKE_UNITY_BUILD=${UNITY}" \
|
-DENABLE_DEBUG="${DEBUG}" \
|
||||||
'-DCURL_TEST_BUNDLES=ON' \
|
-DENABLE_UNICODE="${ENABLE_UNICODE}" \
|
||||||
'-DCURL_WERROR=ON' \
|
-DHTTP_ONLY="${HTTP_ONLY}" \
|
||||||
"-DENABLE_DEBUG=${DEBUG}" \
|
-DCURL_USE_SCHANNEL="${SCHANNEL}" \
|
||||||
"-DENABLE_UNICODE=${ENABLE_UNICODE}" \
|
-DCURL_USE_OPENSSL="${OPENSSL}" \
|
||||||
'-DCMAKE_INSTALL_PREFIX=C:/curl' \
|
-DCURL_USE_LIBPSL=OFF \
|
||||||
"-DCMAKE_BUILD_TYPE=${PRJ_CFG}" \
|
${options} \
|
||||||
'-DCURL_USE_LIBPSL=OFF'
|
|| { cat ${root}/_bld/CMakeFiles/CMake* 2>/dev/null; false; }
|
||||||
if false; then
|
[ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2013' ] && cd ..
|
||||||
cat _bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
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
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}
|
if ! time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}; then
|
||||||
[ "${SHARED}" = 'ON' ] && PATH="$PWD/_bld/lib:$PATH"
|
if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then
|
||||||
[ "${OPENSSL}" = 'ON' ] && PATH="${openssl_root}:$PATH"
|
find . -name BuildLog.htm -exec dos2unix '{}' +
|
||||||
curl='_bld/src/curl.exe'
|
find . -name BuildLog.htm -exec cat '{}' +
|
||||||
|
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
|
||||||
@ -99,7 +129,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' \) -exec file '{}' \;
|
find . \( -name '*.exe' -o -name '*.dll' -o -name '*.lib' -o -name '*.pdb' \) -exec file '{}' \;
|
||||||
if [ -z "${SKIP_RUN:-}" ]; then
|
if [ -z "${SKIP_RUN:-}" ]; then
|
||||||
"${curl}" --disable --version
|
"${curl}" --disable --version
|
||||||
else
|
else
|
||||||
@ -110,13 +140,14 @@ fi
|
|||||||
|
|
||||||
if [ "${TFLAGS}" != 'skipall' ] && \
|
if [ "${TFLAGS}" != 'skipall' ] && \
|
||||||
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps
|
time 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
|
||||||
@ -124,12 +155,12 @@ if [ "${TFLAGS}" != 'skipall' ] && \
|
|||||||
fi
|
fi
|
||||||
TFLAGS+=' -j0'
|
TFLAGS+=' -j0'
|
||||||
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --target test-ci
|
time 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
|
||||||
./runtests.pl
|
time ./runtests.pl
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -138,5 +169,5 @@ fi
|
|||||||
|
|
||||||
if [ "${EXAMPLES}" = 'ON' ] && \
|
if [ "${EXAMPLES}" = 'ON' ] && \
|
||||||
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
[ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
||||||
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples
|
time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples
|
||||||
fi
|
fi
|
||||||
|
|||||||
89
appveyor.yml
89
appveyor.yml
@ -31,8 +31,11 @@
|
|||||||
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'
|
||||||
@ -45,89 +48,77 @@ 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, VS2010, Release, x86, Schannel, Static, Build-tests'
|
- job_name: 'CMake, VS2008, Debug, x86, OpenSSL 1.0.2 + Schannel, Shared, Build-tests & examples'
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2013'
|
||||||
BUILD_SYSTEM: CMake
|
PRJ_GEN: 'Visual Studio 9 2008'
|
||||||
PRJ_GEN: 'Visual Studio 10 2010'
|
|
||||||
TARGET: '-A Win32'
|
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'
|
|
||||||
TARGET: '-A x64'
|
|
||||||
PRJ_CFG: Debug
|
|
||||||
SCHANNEL: 'ON'
|
|
||||||
ENABLE_UNICODE: 'OFF'
|
|
||||||
SHARED: 'ON'
|
|
||||||
EXAMPLES: 'ON'
|
|
||||||
- job_name: 'CMake, VS2012, Debug, x64, OpenSSL 1.1.1, Build-tests'
|
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
|
||||||
BUILD_SYSTEM: CMake
|
|
||||||
PRJ_GEN: 'Visual Studio 11 2012'
|
|
||||||
TARGET: '-A x64'
|
|
||||||
PRJ_CFG: Debug
|
PRJ_CFG: Debug
|
||||||
OPENSSL: 'ON'
|
OPENSSL: 'ON'
|
||||||
SCHANNEL: 'OFF'
|
SCHANNEL: 'ON'
|
||||||
ENABLE_UNICODE: 'OFF'
|
|
||||||
SHARED: 'ON'
|
SHARED: 'ON'
|
||||||
- job_name: 'CMake, VS2013, Debug, x64, OpenSSL 1.1.1, Build-only'
|
EXAMPLES: 'ON'
|
||||||
|
- job_name: 'CMake, VS2010, Debug, x64, Schannel, Shared, Build-tests & examples'
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
||||||
|
PRJ_GEN: 'Visual Studio 10 2010'
|
||||||
|
TARGET: '-A x64'
|
||||||
|
PRJ_CFG: Debug
|
||||||
|
SCHANNEL: 'ON'
|
||||||
|
SHARED: 'ON'
|
||||||
|
EXAMPLES: 'ON'
|
||||||
|
- job_name: 'CMake, VS2012, Release, x86, OpenSSL 1.1.1 + Schannel, Shared, Build-tests'
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015'
|
||||||
|
PRJ_GEN: 'Visual Studio 11 2012'
|
||||||
|
TARGET: '-A Win32'
|
||||||
|
PRJ_CFG: Release
|
||||||
|
OPENSSL: 'ON'
|
||||||
|
SCHANNEL: 'ON'
|
||||||
|
SHARED: 'ON'
|
||||||
|
- job_name: 'CMake, VS2013, Debug, x64, OpenSSL 1.1.1, Shared, 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, Build-only'
|
- job_name: 'CMake, VS2015, Debug, x64, OpenSSL 1.1.1, Static, 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, Build-only'
|
- job_name: 'CMake, VS2017, Debug, x64, OpenSSL 1.1.1, Shared, 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
|
||||||
@ -137,7 +128,6 @@ 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
|
||||||
@ -145,7 +135,6 @@ 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
|
||||||
@ -155,20 +144,14 @@ 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
|
||||||
@ -254,5 +237,5 @@ skip_commits:
|
|||||||
#artifacts:
|
#artifacts:
|
||||||
# - path: '**/curl.exe'
|
# - path: '**/curl.exe'
|
||||||
# name: curl
|
# name: curl
|
||||||
# - path: '**/*curl*.dll'
|
# - path: '**/*.dll'
|
||||||
# name: libcurl dll
|
# name: libcurl dll
|
||||||
|
|||||||
122
configure.ac
122
configure.ac
@ -493,8 +493,12 @@ 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
|
||||||
@ -591,14 +595,16 @@ dnl **********************************************************************
|
|||||||
CURL_CHECK_WIN32_LARGEFILE
|
CURL_CHECK_WIN32_LARGEFILE
|
||||||
CURL_CHECK_WIN32_CRYPTO
|
CURL_CHECK_WIN32_CRYPTO
|
||||||
|
|
||||||
CURL_DARWIN_CFLAGS
|
curl_cv_apple='no'
|
||||||
|
|
||||||
case $host in
|
case $host in
|
||||||
*-apple-*)
|
*-apple-*) curl_cv_apple='yes';;
|
||||||
CURL_SUPPORTS_BUILTIN_AVAILABLE
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test "$curl_cv_apple" = 'yes'; then
|
||||||
|
CURL_DARWIN_CFLAGS
|
||||||
|
CURL_SUPPORTS_BUILTIN_AVAILABLE
|
||||||
|
fi
|
||||||
|
|
||||||
curl_cv_cygwin='no'
|
curl_cv_cygwin='no'
|
||||||
case $host_os in
|
case $host_os in
|
||||||
cygwin*|msys*) curl_cv_cygwin='yes';;
|
cygwin*|msys*) curl_cv_cygwin='yes';;
|
||||||
@ -881,7 +887,7 @@ AS_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
|
|
||||||
if test "$curl_cv_winuwp" = 'yes'; then
|
if test "$curl_cv_winuwp" = 'yes' -o "$curl_cv_wince" = '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
|
||||||
@ -1159,11 +1165,42 @@ 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
|
||||||
@ -1241,7 +1278,8 @@ if test "$HAVE_GETHOSTBYNAME" != "1" -o "${with_amissl+set}" = set; then
|
|||||||
struct Library *SocketBase = NULL;
|
struct Library *SocketBase = NULL;
|
||||||
#endif
|
#endif
|
||||||
]],[[
|
]],[[
|
||||||
gethostbyname("localhost");
|
unsigned char host[] = "localhost";
|
||||||
|
gethostbyname(host);
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
@ -1715,12 +1753,11 @@ 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)
|
||||||
{
|
{
|
||||||
struct sockaddr_in6 s;
|
int s = (int)sizeof(struct sockaddr_in6);
|
||||||
(void)s;
|
(void)s;
|
||||||
return socket(AF_INET6, SOCK_STREAM, 0) < 0;
|
return socket(AF_INET6, SOCK_STREAM, 0) > 0;
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
],
|
],
|
||||||
@ -1731,6 +1768,10 @@ 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])
|
||||||
@ -1752,6 +1793,7 @@ 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])
|
||||||
@ -1788,6 +1830,9 @@ 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])
|
||||||
@ -1933,11 +1978,9 @@ 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
|
||||||
case $host in
|
if test "$curl_cv_apple" = 'yes'; then
|
||||||
*-apple-*)
|
|
||||||
LIBS="-lgssapi_krb5 -lresolv $LIBS"
|
LIBS="-lgssapi_krb5 -lresolv $LIBS"
|
||||||
;;
|
else
|
||||||
*)
|
|
||||||
if test $GSSAPI_ROOT != "/usr"; then
|
if test $GSSAPI_ROOT != "/usr"; then
|
||||||
CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig)
|
CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig)
|
||||||
else
|
else
|
||||||
@ -1976,8 +2019,7 @@ if test x"$want_gss" = xyes; then
|
|||||||
LIBS="-l$gss_libname $LIBS"
|
LIBS="-l$gss_libname $LIBS"
|
||||||
fi
|
fi
|
||||||
fi
|
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"
|
||||||
@ -2059,11 +2101,14 @@ 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="-ladvapi32 -lcrypt32 $LIBS"
|
LIBS="-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"; then
|
if test "x$curl_cv_native_windows" = "xyes" -a "$curl_cv_wince" = 'no'; then
|
||||||
LIBS="-lbcrypt $LIBS"
|
LIBS="-lbcrypt $LIBS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -2329,8 +2374,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.0
|
dnl check for function added in libssh2 version 1.2.8
|
||||||
AC_CHECK_LIB(ssh2, libssh2_session_block_directions)
|
AC_CHECK_LIB(ssh2, libssh2_free)
|
||||||
|
|
||||||
AC_CHECK_HEADER(libssh2.h,
|
AC_CHECK_HEADER(libssh2.h,
|
||||||
curl_ssh_msg="enabled (libssh2)"
|
curl_ssh_msg="enabled (libssh2)"
|
||||||
@ -2608,7 +2653,11 @@ dnl ----------------------------
|
|||||||
dnl check Windows Unicode option
|
dnl check Windows Unicode option
|
||||||
dnl ----------------------------
|
dnl ----------------------------
|
||||||
|
|
||||||
want_winuni="no"
|
if test "$curl_cv_wince" = 'yes'; then
|
||||||
|
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"
|
||||||
@ -2732,8 +2781,7 @@ dnl Check for the presence of AppleIDN
|
|||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
tst_links_appleidn='no'
|
tst_links_appleidn='no'
|
||||||
case $host in
|
if test "$curl_cv_apple" = 'yes'; then
|
||||||
*-apple-*)
|
|
||||||
AC_MSG_CHECKING([whether to build with Apple IDN])
|
AC_MSG_CHECKING([whether to build with Apple IDN])
|
||||||
OPT_IDN="default"
|
OPT_IDN="default"
|
||||||
AC_ARG_WITH(apple-idn,
|
AC_ARG_WITH(apple-idn,
|
||||||
@ -2760,8 +2808,7 @@ AS_HELP_STRING([--without-apple-idn],[Disable AppleIDN]),
|
|||||||
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
|
||||||
@ -4005,8 +4052,6 @@ case $host_os in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
TYPE_IN_ADDR_T
|
|
||||||
|
|
||||||
TYPE_SOCKADDR_STORAGE
|
TYPE_SOCKADDR_STORAGE
|
||||||
|
|
||||||
CURL_CHECK_FUNC_SELECT
|
CURL_CHECK_FUNC_SELECT
|
||||||
@ -4044,8 +4089,6 @@ 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)
|
||||||
@ -4065,14 +4108,12 @@ 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 \
|
||||||
@ -4080,14 +4121,21 @@ AC_CHECK_FUNCS([\
|
|||||||
])
|
])
|
||||||
|
|
||||||
if test "$curl_cv_native_windows" != 'yes'; then
|
if test "$curl_cv_native_windows" != 'yes'; then
|
||||||
AC_CHECK_FUNCS([sched_yield])
|
AC_CHECK_FUNCS([\
|
||||||
|
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_native_windows" = 'yes' -o "$curl_cv_cygwin" = 'yes'; then
|
if test "$curl_cv_wince" = 'no'; then
|
||||||
|
AC_CHECK_FUNCS([setmode])
|
||||||
|
if test "$curl_cv_native_windows" = 'yes' -o "$curl_cv_cygwin" = 'yes'; then
|
||||||
AC_CHECK_FUNCS([_setmode])
|
AC_CHECK_FUNCS([_setmode])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -z "$ssl_backends"; then
|
if test -z "$ssl_backends"; then
|
||||||
@ -4136,7 +4184,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; then
|
if test "$ipv6" = yes -a "$curl_cv_apple" = 'yes'; then
|
||||||
CURL_DARWIN_SYSTEMCONFIGURATION
|
CURL_DARWIN_SYSTEMCONFIGURATION
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -4467,7 +4515,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"; then
|
if test "x$want_unix_sockets" != "xno" -a "$curl_cv_wince" = 'no'; 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])
|
||||||
@ -5017,7 +5065,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"; then
|
if test "x$USE_ARES" = "x1" -a "$want_threaded_resolver" = "yes" -a "x$want_httpsrr" != "xno"; 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
|
||||||
|
|||||||
@ -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
|
||||||
`--chiphers` and `--tl13-ciphers` options curl passes this flag by default.
|
`--ciphers` and `--tls13-ciphers` options curl passes this flag by default.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|||||||
@ -43,15 +43,19 @@ 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.
|
||||||
|
|
||||||
* `ngtcp2`: v1.2.0
|
While any version of `ngtcp2` and `nghttp3` from v1.0.0 on are expected to
|
||||||
* `nghttp3`: v1.1.0
|
work, using the latest versions often brings functional and performance
|
||||||
|
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:
|
Build quictls (any `+quic` tagged version works):
|
||||||
|
|
||||||
% 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
|
||||||
@ -62,7 +66,7 @@ Build quictls:
|
|||||||
Build nghttp3:
|
Build nghttp3:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
|
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3
|
||||||
% cd nghttp3
|
% cd nghttp3
|
||||||
% git submodule update --init
|
% git submodule update --init
|
||||||
% autoreconf -fi
|
% autoreconf -fi
|
||||||
@ -73,7 +77,7 @@ Build nghttp3:
|
|||||||
Build ngtcp2:
|
Build ngtcp2:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
|
% git clone -b $NGTCP2_VERION 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
|
||||||
@ -106,7 +110,7 @@ Build GnuTLS:
|
|||||||
Build nghttp3:
|
Build nghttp3:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
|
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3
|
||||||
% cd nghttp3
|
% cd nghttp3
|
||||||
% git submodule update --init
|
% git submodule update --init
|
||||||
% autoreconf -fi
|
% autoreconf -fi
|
||||||
@ -117,7 +121,7 @@ Build nghttp3:
|
|||||||
Build ngtcp2:
|
Build ngtcp2:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
|
% git clone -b $NGTCP2_VERION 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
|
||||||
@ -148,7 +152,7 @@ Build wolfSSL:
|
|||||||
Build nghttp3:
|
Build nghttp3:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
|
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3
|
||||||
% cd nghttp3
|
% cd nghttp3
|
||||||
% git submodule update --init
|
% git submodule update --init
|
||||||
% autoreconf -fi
|
% autoreconf -fi
|
||||||
@ -159,7 +163,7 @@ Build nghttp3:
|
|||||||
Build ngtcp2:
|
Build ngtcp2:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.2.0 https://github.com/ngtcp2/ngtcp2
|
% git clone -b $NGTCP2_VERION 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
|
||||||
@ -210,10 +214,12 @@ Build curl:
|
|||||||
|
|
||||||
QUIC support is **EXPERIMENTAL**
|
QUIC support is **EXPERIMENTAL**
|
||||||
|
|
||||||
Build OpenSSL 3.3.1:
|
Use OpenSSL 3.3.1 or newer (QUIC support was added in 3.3.0, with
|
||||||
|
shortcomings on some platforms like macOS). 3.4.1 or newer is recommended.
|
||||||
|
Build via:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b openssl-3.3.1 https://github.com/openssl/openssl
|
% git clone -b $OPENSSL_VERSION 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
|
||||||
@ -222,7 +228,7 @@ Build OpenSSL 3.3.1:
|
|||||||
Build nghttp3:
|
Build nghttp3:
|
||||||
|
|
||||||
% cd ..
|
% cd ..
|
||||||
% git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
|
% git clone -b $NGHTTP3_VERION https://github.com/ngtcp2/nghttp3
|
||||||
% cd nghttp3
|
% cd nghttp3
|
||||||
% git submodule update --init
|
% git submodule update --init
|
||||||
% autoreconf -fi
|
% autoreconf -fi
|
||||||
@ -245,7 +251,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
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,12 @@ 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
|
||||||
@ -31,10 +37,14 @@ 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.
|
example). The build directory is created for you. This is recommended over
|
||||||
|
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,
|
||||||
@ -129,6 +139,12 @@ 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
|
||||||
@ -139,6 +155,68 @@ 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`
|
||||||
@ -160,16 +238,17 @@ assumes that CMake generates `Makefile`:
|
|||||||
- `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`). Default: `OFF`
|
- `CURL_STATIC_CRT`: Build libcurl with static CRT with MSVC (`/MT`) (requires static or no curl executable). 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`
|
- `IMPORT_LIB_SUFFIX`: Import library suffix. Default: `_imp` for MSVC-like toolchains, otherwise empty.
|
||||||
- `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
|
||||||
@ -305,6 +384,7 @@ 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
|
||||||
|
|
||||||
@ -378,7 +458,7 @@ Details via CMake
|
|||||||
|
|
||||||
# Migrating from Visual Studio IDE Project Files
|
# Migrating from Visual Studio IDE Project Files
|
||||||
|
|
||||||
We recommend CMake to build curl with MSVC.
|
We recommend using 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.
|
||||||
@ -398,8 +478,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`
|
`Debug` | `CMAKE_BUILD_TYPE=Debug` (`-G "NMake Makefiles"` only)
|
||||||
`Release` | `CMAKE_BUILD_TYPE=Release`
|
`Release` | `CMAKE_BUILD_TYPE=Release` (`-G "NMake Makefiles"` only)
|
||||||
`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`
|
||||||
@ -413,7 +493,13 @@ For example these commands:
|
|||||||
|
|
||||||
translate to:
|
translate to:
|
||||||
|
|
||||||
> 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 . -G "Visual Studio 12 2013" -A x64 -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
|
||||||
|
|
||||||
@ -436,7 +522,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` | see CMake `-G` [options](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
|
`VC`: `<N>` | see the CMake [Visual Studio generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators)
|
||||||
`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`
|
||||||
@ -466,4 +552,8 @@ For example this command-line:
|
|||||||
|
|
||||||
translates to:
|
translates to:
|
||||||
|
|
||||||
> 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 . -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 --build . --config Debug
|
||||||
|
|
||||||
|
We use `--config` with `cmake --build` because the Visual Studio CMake
|
||||||
|
generators are multi-config and therefore ignore `CMAKE_BUILD_TYPE`.
|
||||||
|
|||||||
@ -24,11 +24,13 @@ versions of libs and build tools.
|
|||||||
|
|
||||||
We aim to support these or later versions.
|
We aim to support these or later versions.
|
||||||
|
|
||||||
- OpenSSL 0.9.7
|
- OpenSSL 1.0.2a
|
||||||
|
- LibreSSL 2.9.1
|
||||||
- GnuTLS 3.1.10
|
- GnuTLS 3.1.10
|
||||||
- zlib 1.2.0.4
|
- zlib 1.2.0.4
|
||||||
- libssh2 1.0
|
- libssh2 1.2.8
|
||||||
- c-ares 1.16.0
|
- c-ares 1.6.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
|
||||||
|
|||||||
@ -17,7 +17,6 @@ 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
|
||||||
@ -68,7 +67,8 @@ 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. SOCKS
|
10. Connection
|
||||||
|
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,14 +136,6 @@ 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
|
||||||
@ -445,7 +437,23 @@ 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. SOCKS
|
10. Connection
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
@ -625,7 +633,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 observered that by making the speed limit less accurate we could
|
It has been observed 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?
|
||||||
|
|||||||
@ -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.com:8080
|
proxy = proxy.our.domain.example.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.
|
||||||
|
|||||||
@ -52,6 +52,7 @@ 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 \
|
||||||
|
|||||||
@ -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 depends on version v0.14.0 of rustls-ffi.
|
version of curl is compatible with `rustls-ffi` v0.14.x.
|
||||||
|
|
||||||
# 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.0
|
% git clone https://github.com/rustls/rustls-ffi -b v0.14.1
|
||||||
% cd rustls-ffi
|
% cd rustls-ffi
|
||||||
% make
|
% make
|
||||||
% make DESTDIR=${HOME}/rustls-ffi-built/ install
|
% make DESTDIR=${HOME}/rustls-ffi-built/ install
|
||||||
|
|||||||
@ -25,7 +25,8 @@ 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).
|
page](https://curl.se/sponsors.html), assuming they meet the project's
|
||||||
|
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
|
||||||
@ -45,3 +46,10 @@ 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.
|
||||||
|
|||||||
11
docs/THANKS
11
docs/THANKS
@ -182,6 +182,7 @@ 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
|
||||||
@ -259,6 +260,7 @@ 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
|
||||||
@ -596,6 +598,7 @@ 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
|
||||||
@ -738,6 +741,7 @@ 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
|
||||||
@ -975,6 +979,7 @@ 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
|
||||||
@ -2162,6 +2167,7 @@ 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ı
|
||||||
@ -2258,6 +2264,7 @@ 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
|
||||||
@ -2485,6 +2492,7 @@ 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
|
||||||
@ -2513,6 +2521,7 @@ 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
|
||||||
@ -2968,6 +2977,7 @@ 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
|
||||||
@ -2978,6 +2988,7 @@ 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
|
||||||
|
|||||||
@ -156,3 +156,5 @@ 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
|
||||||
|
|||||||
@ -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.
|
||||||
|
|
||||||
## Experiments
|
## Debug & 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, are not eligible for a reward and we do not
|
documented as experimental, or exist only in debug mode, are not eligible for a
|
||||||
consider them security problems.
|
reward and we do not consider them security problems.
|
||||||
|
|
||||||
## URL inconsistencies
|
## URL inconsistencies
|
||||||
|
|
||||||
|
|||||||
@ -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` or base64 encode it with `b64`.
|
with `json`, URL encode the string with `url`, base64 encode it with `b64` and
|
||||||
To apply functions to a variable expansion, add them colon separated to the
|
base64 decode it with `64dec`. To apply functions to a variable expansion, add
|
||||||
right side of the variable. Variable content holding null bytes that are not
|
them colon separated to the right side of the variable. Variable content
|
||||||
encoded when expanded cause error.
|
holding null bytes that are not 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
|
||||||
|
|||||||
@ -12,18 +12,27 @@ 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 CA store from the native operating system to verify the peer. By
|
Use the operating system's native CA store for certificate verification.
|
||||||
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 works for curl on Windows when built to use OpenSSL, wolfSSL
|
This option is independent of other CA certificate locations set at run time or
|
||||||
(added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on Windows is built to
|
build time. Those locations are searched in addition to the native CA store.
|
||||||
use Schannel, this feature is implied and curl then only uses the native CA
|
|
||||||
store.
|
This option works with OpenSSL and its forks (LibreSSL, BoringSSL, etc) on
|
||||||
|
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.
|
||||||
|
|||||||
@ -55,10 +55,14 @@ 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.
|
||||||
|
|||||||
@ -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.domain.com with username 'myself' and password 'secret' could
|
the machine host.example.com with username 'myself' and password 'secret' could
|
||||||
look similar to:
|
look similar to:
|
||||||
|
|
||||||
machine host.domain.com
|
machine host.example.com
|
||||||
login myself
|
login myself
|
||||||
password secret
|
password secret
|
||||||
|
|||||||
@ -8,6 +8,7 @@ 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
|
||||||
@ -18,11 +19,12 @@ Example:
|
|||||||
|
|
||||||
# `--proxy-ca-native`
|
# `--proxy-ca-native`
|
||||||
|
|
||||||
Use the CA store from the native operating system to verify the HTTPS proxy.
|
Use the operating system's native CA store for certificate verification of the
|
||||||
By default, curl uses a CA store provided in a single file or directory, but
|
HTTPS proxy.
|
||||||
when using this option it interfaces the operating system's own vault.
|
|
||||||
|
|
||||||
This option works for curl on Windows when built to use OpenSSL, wolfSSL
|
This option is independent of other HTTPS proxy CA certificate locations set at
|
||||||
(added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on Windows is built to
|
run time or build time. Those locations are searched in addition to the native
|
||||||
use Schannel, this feature is implied and curl then only uses the native CA
|
CA store.
|
||||||
store.
|
|
||||||
|
Equivalent to --ca-native but used in HTTPS proxy context. Refer to --ca-native
|
||||||
|
for TLS backend limitations.
|
||||||
|
|||||||
@ -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 --ftp-ssl-reqd and --ftp-ssl-control.
|
work, including --ssl-reqd and --ftp-ssl-control.
|
||||||
|
|||||||
@ -41,9 +41,10 @@ specifies two separate 100-byte ranges(*) (HTTP)
|
|||||||
|
|
||||||
##
|
##
|
||||||
|
|
||||||
(*) = NOTE that these make the server reply with a multipart response, which
|
(*) = NOTE that if specifying multiple ranges and the server supports it then
|
||||||
is returned as-is by curl. Parsing or otherwise transforming this response is
|
it replies with a multiple part response that curl returns as-is. It
|
||||||
the responsibility of the caller.
|
contains meta information in addition to the requested bytes. Parsing or
|
||||||
|
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
|
||||||
|
|||||||
@ -12,6 +12,7 @@ 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`
|
||||||
@ -20,8 +21,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
|
the number used for the specific protocol the host is used for. It means you
|
||||||
you need several entries if you want to provide address for the same host but
|
need several entries if you want to provide addresses 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
|
||||||
@ -37,9 +38,13 @@ 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.
|
||||||
|
|||||||
@ -38,5 +38,8 @@ 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.
|
||||||
|
|||||||
@ -2,16 +2,19 @@
|
|||||||
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>
|
Arg: <url/file>
|
||||||
Help: URL to work with
|
Help: URL(s) 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`
|
||||||
@ -32,3 +35,15 @@ 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.
|
||||||
|
|||||||
@ -66,30 +66,45 @@ 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/{{url:trim}}
|
curl --expand-url https://example.com/{{var: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)
|
||||||
|
|||||||
@ -53,3 +53,8 @@ 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.
|
||||||
|
|||||||
@ -32,10 +32,11 @@ 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 headers from the most recent request by using *%header{name}*
|
Output HTTP header values from the transfer's most recent server response by
|
||||||
where *name* is the case insensitive name of the header (without the trailing
|
using *%header{name}* where *name* is the case insensitive name of the header
|
||||||
colon). The header contents are exactly as sent over the network, with leading
|
(without the trailing colon). The header contents are exactly as delivered over
|
||||||
and trailing whitespace trimmed (added in 7.84.0).
|
the network but with leading and trailing whitespace and newlines stripped off
|
||||||
|
(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
|
||||||
@ -61,7 +62,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 and Secure Transport backends. (Added in 7.88.0)
|
GnuTLS, Schannel, Rustls, 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
|
||||||
@ -87,6 +88,11 @@ 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
|
||||||
@ -122,7 +128,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 and Secure Transport backends.
|
the OpenSSL, GnuTLS, Schannel, Rustls and Secure Transport backends.
|
||||||
(Added in 7.88.0)
|
(Added in 7.88.0)
|
||||||
|
|
||||||
## `num_connects`
|
## `num_connects`
|
||||||
@ -143,6 +149,12 @@ 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)
|
||||||
@ -250,6 +262,12 @@ 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)
|
||||||
|
|
||||||
|
|||||||
@ -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,22 +104,21 @@ 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`
|
||||||
~~~
|
|
||||||
|
|||||||
@ -44,6 +44,9 @@ 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)
|
||||||
|
|||||||
@ -103,7 +103,11 @@ 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);
|
||||||
|
|||||||
@ -29,9 +29,9 @@
|
|||||||
* filter IP addresses.
|
* filter IP addresses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __AMIGA__
|
#if defined(__AMIGA__) || defined(UNDER_CE)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
int main(void) { printf("AmigaOS is not supported.\n"); return 1; }
|
int main(void) { printf("Platform not supported.\n"); return 1; }
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -298,14 +298,19 @@ int main(void)
|
|||||||
|
|
||||||
filter = (struct connection_filter *)calloc(1, sizeof(*filter));
|
filter = (struct connection_filter *)calloc(1, sizeof(*filter));
|
||||||
if(!filter)
|
if(!filter)
|
||||||
exit(1);
|
return 1;
|
||||||
|
|
||||||
if(curl_global_init(CURL_GLOBAL_DEFAULT))
|
if(curl_global_init(CURL_GLOBAL_DEFAULT)) {
|
||||||
exit(1);
|
free(filter);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(!curl)
|
if(!curl) {
|
||||||
exit(1);
|
curl_global_cleanup();
|
||||||
|
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");
|
||||||
|
|||||||
@ -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);
|
||||||
exit(1);
|
return 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());
|
||||||
exit(1);
|
return 1;
|
||||||
case 'a':
|
case 'a':
|
||||||
case 'A':
|
case 'A':
|
||||||
prtall = 1;
|
prtall = 1;
|
||||||
|
|||||||
@ -34,8 +34,7 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <curl/mprintf.h>
|
#include <curl/mprintf.h>
|
||||||
|
|
||||||
static void
|
static int print_cookies(CURL *curl)
|
||||||
print_cookies(CURL *curl)
|
|
||||||
{
|
{
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
struct curl_slist *cookies;
|
struct curl_slist *cookies;
|
||||||
@ -47,7 +46,7 @@ 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));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
nc = cookies;
|
nc = cookies;
|
||||||
i = 1;
|
i = 1;
|
||||||
@ -60,6 +59,8 @@ print_cookies(CURL *curl)
|
|||||||
printf("(none)\n");
|
printf("(none)\n");
|
||||||
}
|
}
|
||||||
curl_slist_free_all(cookies);
|
curl_slist_free_all(cookies);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
@ -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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g->fifofd = sockfd;
|
g->fifofd = sockfd;
|
||||||
@ -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");
|
||||||
exit(1);
|
return 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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&its, 0, sizeof(struct itimerspec));
|
memset(&its, 0, sizeof(struct itimerspec));
|
||||||
@ -496,7 +496,8 @@ 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);
|
||||||
|
|
||||||
init_fifo(&g);
|
if(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 */
|
||||||
@ -521,7 +522,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
perror("epoll_wait");
|
perror("epoll_wait");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
g->input = fdopen(sockfd, "r");
|
g->input = fdopen(sockfd, "r");
|
||||||
|
|
||||||
@ -436,7 +436,8 @@ 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);
|
||||||
|
|
||||||
init_fifo(&g);
|
if(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.);
|
||||||
|
|||||||
@ -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 _WIN32
|
#ifdef _MSC_VER
|
||||||
#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,7 +46,11 @@
|
|||||||
#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"
|
||||||
|
|||||||
@ -51,7 +51,11 @@ 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 */
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,11 @@
|
|||||||
#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
|
||||||
|
|||||||
@ -77,7 +77,9 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
exit(1);
|
return CURL_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo(fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return CURL_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
|
||||||
|
|
||||||
if(socket == -1) {
|
if(socket == CURL_SOCKET_BAD) {
|
||||||
perror("open");
|
perror("open");
|
||||||
exit(1);
|
return socket;
|
||||||
}
|
}
|
||||||
MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
|
MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
|
||||||
|
|
||||||
@ -421,6 +421,8 @@ 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);
|
||||||
|
|||||||
@ -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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unlink(fifo);
|
unlink(fifo);
|
||||||
if(mkfifo (fifo, 0600) == -1) {
|
if(mkfifo (fifo, 0600) == -1) {
|
||||||
perror("mkfifo");
|
perror("mkfifo");
|
||||||
exit(1);
|
return 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");
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
g->input = fdopen(sockfd, "r");
|
g->input = fdopen(sockfd, "r");
|
||||||
|
|
||||||
@ -440,7 +440,8 @@ 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();
|
||||||
init_fifo(&g);
|
if(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);
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
exit(EXIT_FAILURE);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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]);
|
||||||
exit(EXIT_FAILURE);
|
return 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");
|
||||||
exit(EXIT_FAILURE);
|
return 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);
|
||||||
exit(EXIT_FAILURE);
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the (assumed) HTML code
|
// Parse the (assumed) HTML code
|
||||||
|
|||||||
@ -28,7 +28,11 @@
|
|||||||
#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>
|
||||||
@ -138,7 +142,7 @@ int my_trace(CURL *handle, curl_infotype type,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup(struct transfer *t, int num)
|
static int setup(struct transfer *t, int num)
|
||||||
{
|
{
|
||||||
char filename[128];
|
char filename[128];
|
||||||
CURL *hnd;
|
CURL *hnd;
|
||||||
@ -151,7 +155,7 @@ static void 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));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write to this file */
|
/* write to this file */
|
||||||
@ -175,6 +179,7 @@ static void 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -200,7 +205,8 @@ 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++) {
|
||||||
setup(&trans[i], i);
|
if(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);
|
||||||
|
|||||||
@ -30,7 +30,11 @@
|
|||||||
#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
|
||||||
@ -196,7 +200,7 @@ static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup(struct input *i, int num, const char *upload)
|
static int setup(struct input *i, int num, const char *upload)
|
||||||
{
|
{
|
||||||
FILE *out;
|
FILE *out;
|
||||||
char url[256];
|
char url[256];
|
||||||
@ -205,14 +209,15 @@ static void setup(struct input *i, int num, const char *upload)
|
|||||||
curl_off_t uploadsize;
|
curl_off_t uploadsize;
|
||||||
CURL *hnd;
|
CURL *hnd;
|
||||||
|
|
||||||
hnd = i->hnd = curl_easy_init();
|
hnd = i->hnd = NULL;
|
||||||
|
|
||||||
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));
|
||||||
exit(1);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num);
|
curl_msnprintf(url, 256, "https://localhost:8443/upload-%d", num);
|
||||||
@ -221,7 +226,8 @@ static void 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));
|
||||||
exit(1);
|
fclose(out);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadsize = file_info.st_size;
|
uploadsize = file_info.st_size;
|
||||||
@ -230,9 +236,12 @@ static void 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));
|
||||||
exit(1);
|
fclose(out);
|
||||||
|
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);
|
||||||
|
|
||||||
@ -265,6 +274,7 @@ static void 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -297,7 +307,8 @@ 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++) {
|
||||||
setup(&trans[i], i, filename);
|
if(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);
|
||||||
|
|||||||
@ -90,7 +90,9 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +101,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);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined(_WIN32) && !defined(UNDER_CE)
|
||||||
_fseeki64(f, remoteFileSizeByte, SEEK_SET);
|
_fseeki64(f, remoteFileSizeByte, SEEK_SET);
|
||||||
#else
|
#else
|
||||||
fseek(f, (long)remoteFileSizeByte, SEEK_SET);
|
fseek(f, (long)remoteFileSizeByte, SEEK_SET);
|
||||||
|
|||||||
@ -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://your.favourite.ssl.site");
|
curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://secure.site.example");
|
||||||
curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile);
|
curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile);
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
|||||||
@ -27,6 +27,14 @@ 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
|
||||||
@ -314,3 +322,42 @@ 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
|
||||||
|
|||||||
127
docs/internals/MULTI-EV.md
Normal file
127
docs/internals/MULTI-EV.md
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
@ -30,6 +30,19 @@ 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
|
||||||
@ -94,11 +107,32 @@ 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, size_t *nump, size_t max);
|
int Curl_str_number(char **linep, curl_size_t *nump, size_t max);
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Get an unsigned decimal number. Leading zeroes are just swallowed. Return
|
Get an unsigned decimal number not larger than `max`. Leading zeroes are just
|
||||||
non-zero on error.
|
swallowed. Return non-zero on error. Returns error if there was not a single
|
||||||
|
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`
|
||||||
|
|
||||||
@ -107,3 +141,30 @@ 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.
|
||||||
|
|||||||
@ -28,11 +28,10 @@ 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_easyoption* struct, holding information about the curl_easy_setopt(3)
|
||||||
curl_easy_setopt(3) option using that id. The option id is the CURLOPT_
|
option using that id. The option id is the `CURLOPT_` prefixed ones provided
|
||||||
prefix ones provided in the standard curl/curl.h header file. This function
|
in the standard curl/curl.h header file. This function returns the non-alias
|
||||||
returns the non-alias version of the cases where there is an alias function as
|
version of the cases where there is an alias function as well.
|
||||||
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.
|
||||||
|
|
||||||
|
|||||||
@ -27,11 +27,10 @@ const struct curl_easyoption *curl_easy_option_by_name(const char *name);
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Given a **name**, this function returns a pointer to the
|
Given a **name**, this function returns a pointer to the *curl_easyoption*
|
||||||
*curl_easyoption* struct, holding information about the
|
struct, holding information about the curl_easy_setopt(3) option using that
|
||||||
curl_easy_setopt(3) option using that name. The name should be specified
|
name. The name should be specified without the `CURLOPT_` prefix and the name
|
||||||
without the "CURLOPT_" prefix and the name comparison is made case
|
comparison is made case insensitive.
|
||||||
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.
|
||||||
|
|
||||||
|
|||||||
@ -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\>*.
|
||||||
|
|||||||
@ -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
|
The *curl_formget_callback* is invoked for each part of the HTTP POST chain.
|
||||||
character buffer passed to the callback must not be freed. The callback should
|
The character buffer passed to the callback must not be freed. The callback
|
||||||
return the buffer length passed to it on success.
|
should 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.
|
||||||
|
|||||||
@ -64,16 +64,17 @@ 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.
|
||||||
|
|
||||||
# OpenSSL
|
# Names
|
||||||
|
|
||||||
|
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.
|
provide the same API. curl_version_info(3) can return more specific info about
|
||||||
|
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
|
||||||
|
|
||||||
|
|||||||
@ -97,13 +97,38 @@ 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`
|
||||||
|
|
||||||
Tracing of DNS-over-HTTP operations to resolve hostnames.
|
Former name for DNS-over-HTTP operations. Now an alias for `dns`.
|
||||||
|
|
||||||
|
## `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 server.
|
Traces reading of upload data from the application in order to send it to the
|
||||||
|
server.
|
||||||
|
|
||||||
## `ssls`
|
## `ssls`
|
||||||
|
|
||||||
|
|||||||
@ -100,6 +100,10 @@ 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
Loading…
Reference in New Issue
Block a user