diff options
47 files changed, 694 insertions, 422 deletions
@@ -28,11 +28,11 @@ Debian and Fedora distributions. The configuration options defining these sets are specified in the Debian's rules and Fedora's RPM .spec files. These files can be obtained as follows: -$ wget http://deb.debian.org/debian/pool/main/c/curl/curl_7.67.0-2.debian.tar.xz -$ tar xf curl_7.67.0-2.debian.tar.xz debian/rules +$ wget http://deb.debian.org/debian/pool/main/c/curl/curl_8.3.0-3.debian.tar.xz +$ tar xf curl_8.3.0-3.debian.tar.xz -$ wget https://kojipkgs.fedoraproject.org//packages/curl/7.67.0/2.fc32/src/curl-7.67.0-2.fc32.src.rpm -$ rpm2cpio curl-7.67.0-2.fc32.src.rpm | cpio -civ '*.spec' +$ wget https://kojipkgs.fedoraproject.org/packages/curl/8.4.0/1.fc40/src/curl-8.4.0-1.fc40.src.rpm +$ rpm2cpio curl-8.4.0-1.fc40.src.rpm | cpio -civ '*.spec' As a side note, on Debian and Fedora the source, library, headers, and tools are packaged as follows: @@ -42,49 +42,64 @@ Debian/Ubuntu: curl libcurl4 libcurl4-openssl-dev curl Fedora/RHEL: curl libcurl libcurl-devel curl Search for the Debian and Fedora packages at https://packages.debian.org/search -and https://apps.fedoraproject.org/packages/. +and https://src.fedoraproject.org/. Here are the discovered configuration options. Debian: - --disable-symbol-hiding --enable-versioned-symbols - --enable-threaded-resolver --with-lber-lib=lber - --with-gssapi=/usr --with-libssh2 --with-nghttp2 + --disable-dependency-tracking --disable-symbol-hiding + --enable-versioned-symbols --enable-threaded-resolver --with-lber-lib=lber + --with-gssapi=/usr --with-nghttp2 --with-zsh-functions-dir=/usr/share/zsh/vendor-completions + --without-libssh --with-libssh2 + --with-openssl --with-gnutls --with-ca-path=/etc/ssl/certs + --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt Fedora: - --disable-static --enable-symbol-hiding --enable-ipv6 - --enable-threaded-resolver --with-gssapi --with-nghttp2 --with-ssl - --with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt - --enable-ldap --enable-ldaps --enable-manual --with-brotli --with-libidn2 - --with-libmetalink --with-libpsl --with-libssh + --disable-static --enable-hsts --enable-ipv6 --enable-symbol-hiding + --enable-threaded-resolver --without-zstd --with-gssapi --with-libidn2 + --with-nghttp2 --with-ssl --with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt + --enable-dict --enable-gopher --enable-imap --enable-ldap --enable-ldaps + --enable-manual --enable-mqtt --enable-ntlm --enable-ntlm-wb --enable-pop3 + --enable-rtsp --enable-smb --enable-smtp --enable-telnet --enable-tftp + --enable-tls-srp --enable-websockets --with-brotli --with-libpsl + --with-libssh The union of these feature sets translates into the following options: --enable-symbol-hiding --enable-versioned-symbols --enable-threaded-resolver --with-lber-lib=lber --with-gssapi --with-libssh2 --with-nghttp2 --with-zsh-functions-dir=<path> --with-ca-path=<path> - --with-ca-bundle=<path> --enable-ipv6 --with-ssl --enable-ldap + --with-ca-bundle=<path> --enable-ipv6 --with-openssl --enable-ldap --enable-ldaps --enable-manual --with-brotli --with-libidn2 - --with-libmetalink --with-libpsl --with-libssh + --with-libpsl --with-libssh --with-gnutls + --enable-hsts --enable-dict --enable-gopher --enable-imap + --enable-mqtt --enable-ntlm --enable-ntlm-wb --enable-pop3 --enable-rtsp + --enable-smb --enable-smtp --enable-telnet --enable-tftp --enable-tls-srp + --enable-websockets We, however, drop the external dependencies that are not packaged for build2, disable default CA bundle/directory and use --with-ca-fallback instead, explicitly request to use zlib and end up with the following options: --enable-symbol-hiding --enable-versioned-symbols --enable-threaded-resolve - --enable-ipv6 --with-ssl --with-zlib --disable-ldap --disable-ldaps + --enable-ipv6 --with-openssl --with-zlib --disable-ldap --disable-ldaps --disable-ares --disable-esni --disable-manual --without-lber-lib --without-gssapi --without-libssh --without-libssh2 --without-nghttp2 --without-zsh-functions-dir --without-brotli --without-libidn2 - --without-libmetalink --without-libpsl --without-ca-bundle --without-ca-path - --with-ca-fallback + --without-libpsl --without-bearssl --without-libgsasl --without-hyper + --without-rustls --without-wolfssh --without-gnutls + --without-ca-bundle --without-ca-path --with-ca-fallback + --enable-hsts --enable-dict --enable-gopher --enable-imap + --enable-mqtt --enable-ntlm --enable-ntlm-wb --enable-pop3 --enable-rtsp + --enable-smb --enable-smtp --enable-telnet --enable-tftp --enable-tls-srp + --enable-websockets See the configuration options description at the "Install from source" page -(https://curl.haxx.se/docs/install.html). +(https://curl.se/docs/install.html). On Windows and MacOS we also enable the SSL backend provided by the system and make it a default one. On MacOS we add the following configuration options: @@ -93,7 +108,7 @@ make it a default one. On MacOS we add the following configuration options: Note, though, that on MacOS building curl with GCC fails for the Secure Transport backend enabled (see curl issue 4821 for details). Thus, we disable -it for GCC on MacOS. +it for GCC on MacOS (see libcurl/curl_config.h for details). For MSVC there is no easy way to request that via the configuration script, so we apply the following patch to winbuild/MakefileBuild.vc: @@ -111,27 +126,36 @@ we apply the following patch to winbuild/MakefileBuild.vc: Normally, when packaging a project, we need to replace some auto-generated headers with our own implementations and deduce compilation/linking options. -For cURL we can rely for that on m4/curl-compilers.m4, {lib,src}/Makefile.am, -and winbuild/MakefileBuild.vc. In practice, however, that can be uneasy and -error prone, so you may also need to see the auto-generated files and the -actual compiler and linker command lines in the build log. If that's the case, -you can configure/build the upstream package on the platform of interest -running the following commands in the upstream project root directory. - -On POSIX and for MinGW GCC (add --with-secure-transport ---with-default-ssl-backend=secure-transport for MacOS and --with-schannel ---with-default-ssl-backend=schannel for MinGW GCC): - -$ ./buildconf +For cURL we can rely for that on configure.ac, m4/curl-compilers.m4, +{lib,src}/Makefile.am, and winbuild/MakefileBuild.vc. In practice, however, +that can be uneasy and error prone, so you may also need to see the +auto-generated files and the actual compiler and linker command lines in the +build log. If that's the case, you can configure/build the upstream package on +the platform of interest running the following commands in the upstream +project root directory. + +On POSIX and for MinGW GCC (add +--with-secure-transport --with-default-ssl-backend=secure-transport for MacOS +and +--with-schannel --with-default-ssl-backend=schannel for MinGW GCC): + +$ autoreconf -fi $ mkdir build $ cd build $ ../configure --enable-symbol-hiding --enable-versioned-symbols \ - --enable-threaded-resolve --enable-ipv6 --with-ssl --with-zlib \ + --enable-threaded-resolve --enable-ipv6 --with-openssl --with-zlib \ --disable-ldap --disable-ldaps --disable-ares --disable-esni \ --disable-manual --without-lber-lib --without-gssapi --without-libssh \ --without-libssh2 --without-nghttp2 --without-zsh-functions-dir \ - --without-brotli --without-libidn2 --without-libmetalink --without-libpsl \ - --without-ca-bundle --without-ca-path --with-ca-fallback >build.log 2>&1 + --without-brotli --without-libidn2 --without-libpsl \ + --without-bearssl --without-libgsasl --without-hyper \ + --without-rustls --without-wolfssh \ + --without-ca-bundle --without-ca-path --with-ca-fallback \ + --enable-hsts --enable-dict --enable-gopher --enable-imap \ + --enable-mqtt --enable-ntlm --enable-ntlm-wb --enable-pop3 --enable-rtsp \ + --enable-smb --enable-smtp --enable-telnet --enable-tftp --enable-tls-srp \ + --enable-websockets \ + >build.log 2>&1 $ make V=1 >>build.log 2>&1 For MSVC: @@ -0,0 +1,12 @@ +On the revision: + +On the release: + + Note that here we record items that require bumping build2 version + requirement to the latest released version of the toolchain. + +Additional (permanent) notes: + +- Review '@@ TMP' notes. + +- Add/remove 'priority: security' manifest value, if required. @@ -1,5 +1,5 @@ # file : buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file # Glue buildfile that "pulls" all the packages. diff --git a/curl/.gitignore b/curl/.gitignore index 4c4fec7..d4a1da2 100644 --- a/curl/.gitignore +++ b/curl/.gitignore @@ -3,11 +3,17 @@ *.d *.t *.i +*.i.* *.ii +*.ii.* *.o *.obj +*.gcm +*.pcm +*.ifc *.so *.so.* +*.dylib *.dll *.a *.lib diff --git a/curl/README b/curl/README index b5338d6..1d9c311 100644 --- a/curl/README +++ b/curl/README @@ -2,7 +2,7 @@ cURL is a client-side software for transferring data using URLs. The curl command line tool makes the various features of libcurl available from the shell. For more information see: -https://curl.haxx.se/ +https://curl.se/ This package contains the original curl program source code overlaid with the build2-based build system and packaged for the build2 package manager (bpkg). diff --git a/curl/README-DEV b/curl/README-DEV index 6b9f99e..fa202e4 100644 --- a/curl/README-DEV +++ b/curl/README-DEV @@ -5,12 +5,16 @@ understanding will be useful when upgrading to a new upstream version. See Symlink the required upstream directories into curl/: $ ln -s ../../upstream/{src,lib} curl -$ ln -s lib/{strtoofft,nonblock,warnless,curl_ctype}.c curl -$ ln -s src/tool_hugehelp.c.cvs curl/tool_hugehelp.c +$ ln -s lib/{strtoofft,nonblock,warnless,dynbuf,version_win32,curl_multibyte,base64}.c curl $ ln -s ../../libcurl/libcurl/curl_config.h curl Patch curl to use CA certificate bundle provided by the libca-certificates-curl package by default: +$ cp curl/src/tool_main.c curl/tool_main.c.orig $ cp curl/src/tool_main.c curl -$ patch -p0 <curl/tool_main.c.patch +$ git apply curl/tool_main.c.patch + +Note that the above patch is produced by the following command: + +$ git diff >curl/tool_main.c.patch diff --git a/curl/build/bootstrap.build b/curl/build/bootstrap.build index 194c20d..5b04660 100644 --- a/curl/build/bootstrap.build +++ b/curl/build/bootstrap.build @@ -1,5 +1,5 @@ # file : build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file project = curl diff --git a/curl/build/export.build b/curl/build/export.build index dd03416..f887593 100644 --- a/curl/build/export.build +++ b/curl/build/export.build @@ -1,5 +1,5 @@ # file : build/export.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file $out_root/ { diff --git a/curl/build/root.build b/curl/build/root.build index 4c90074..e4a2753 100644 --- a/curl/build/root.build +++ b/curl/build/root.build @@ -1,5 +1,5 @@ # file : build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file using c diff --git a/curl/buildfile b/curl/buildfile index fbdfe23..fd6af50 100644 --- a/curl/buildfile +++ b/curl/buildfile @@ -1,7 +1,7 @@ # file : buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file -./: {*/ -build/} doc{COPYING INSTALL README} manifest +./: {*/ -build/} doc{INSTALL README} legal{COPYING} manifest # Don't install tests or the INSTALL file. # diff --git a/curl/curl/.gitattributes b/curl/curl/.gitattributes new file mode 100644 index 0000000..a6bfc4e --- /dev/null +++ b/curl/curl/.gitattributes @@ -0,0 +1,2 @@ +lib symlink=dir +src symlink=dir diff --git a/curl/curl/base64.c b/curl/curl/base64.c new file mode 120000 index 0000000..6a380e3 --- /dev/null +++ b/curl/curl/base64.c @@ -0,0 +1 @@ +lib/base64.c
\ No newline at end of file diff --git a/curl/curl/buildfile b/curl/curl/buildfile index 7b88ae7..cdd8f9f 100644 --- a/curl/curl/buildfile +++ b/curl/curl/buildfile @@ -1,5 +1,5 @@ # file : curl/buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file import libs = libcurl%lib{curl} import libs += libca-certificates-curl%lib{ca-certificates-curl} @@ -11,31 +11,26 @@ tsys = $c.target.system # Build options. # -c.poptions += -DHAVE_CONFIG_H +c.poptions += -DBUILDING_CURL -DHAVE_CONFIG_H -# Note that the upstream package uses the -pthread compiler/linker option on -# Linux and FreeBSD. The option is unsupported by build2 so we pass -# -D_REENTRANT and -lpthread preprocessor/linker options instead. -# switch $tclass, $tsys { - case 'linux' | 'bsd' - c.poptions += -D_REENTRANT - case 'windows', 'win32-msvc' c.poptions += -DWIN32 } c.poptions =+ "-I$src_base" "-I$src_base/src" "-I$src_base/lib" -switch $c.class, $tsys +switch $c.class { case 'gcc' { - # Disable the Clang targeting MSVC warnings. + # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem + # to care about these and it is not easy to disable specific warnings in a + # way that works across compilers/version (some -Wno-* options are only + # recognized in newer versions). # - if ($c.id == 'clang' && $tsys == 'win32-msvc') - c.coptions += -Wno-deprecated-declarations + c.coptions += -Wno-all -Wno-extra -Wno-deprecated-declarations } case 'msvc' { @@ -48,7 +43,7 @@ switch $c.class, $tsys switch $tclass, $tsys { case 'linux' | 'bsd' - c.libs += -lpthread + c.libs += -pthread case 'windows', 'mingw32' c.libs+= -lws2_32 diff --git a/curl/curl/curl_ctype.c b/curl/curl/curl_ctype.c deleted file mode 120000 index 23515cd..0000000 --- a/curl/curl/curl_ctype.c +++ /dev/null @@ -1 +0,0 @@ -lib/curl_ctype.c
\ No newline at end of file diff --git a/curl/curl/curl_multibyte.c b/curl/curl/curl_multibyte.c new file mode 120000 index 0000000..a44109d --- /dev/null +++ b/curl/curl/curl_multibyte.c @@ -0,0 +1 @@ +lib/curl_multibyte.c
\ No newline at end of file diff --git a/curl/curl/dynbuf.c b/curl/curl/dynbuf.c new file mode 120000 index 0000000..6ebb8c1 --- /dev/null +++ b/curl/curl/dynbuf.c @@ -0,0 +1 @@ +lib/dynbuf.c
\ No newline at end of file diff --git a/curl/curl/tool_hugehelp.c b/curl/curl/tool_hugehelp.c deleted file mode 100644 index bc33e2f..0000000 --- a/curl/curl/tool_hugehelp.c +++ /dev/null @@ -1,3 +0,0 @@ -/* built-in manual is disabled, blank function */ -#include "tool_hugehelp.h" -void hugehelp(void) {} diff --git a/curl/curl/tool_main.c b/curl/curl/tool_main.c index 0a86304..494ec02 100644 --- a/curl/curl/tool_main.c +++ b/curl/curl/tool_main.c @@ -5,11 +5,11 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. + * 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.haxx.se/docs/copyright.html. + * 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 @@ -18,18 +18,21 @@ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * + * SPDX-License-Identifier: curl + * ***************************************************************************/ #include "tool_setup.h" #include <sys/stat.h> -#ifdef HAVE_SIGNAL_H -#include <signal.h> +#ifdef WIN32 +#include <tchar.h> #endif -#ifdef USE_NSS -#include <nspr.h> -#include <plarenas.h> +#include <signal.h> + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> #endif #include <stdlib.h> /* setenv(), _putenv() */ @@ -41,14 +44,13 @@ #include "curlx.h" #include "tool_cfgable.h" -#include "tool_convert.h" #include "tool_doswin.h" #include "tool_msgs.h" #include "tool_operate.h" -#include "tool_panykey.h" #include "tool_vms.h" #include "tool_main.h" #include "tool_libinfo.h" +#include "tool_stderr.h" /* * This is low-level hard-hacking memory leak tracking and similar. Using @@ -73,35 +75,37 @@ int vms_show = 0; * when command-line argument globbing is enabled under the MSYS shell, so turn * it off. */ +extern int _CRT_glob; int _CRT_glob = 0; #endif /* __MINGW32__ */ /* if we build a static library for unit tests, there is no main() function */ #ifndef UNITTESTS +#if defined(HAVE_PIPE) && defined(HAVE_FCNTL) /* * Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are * open before starting to run. Otherwise, the first three network * sockets opened by curl could be used for input sources, downloaded data * or error logs as they will effectively be stdin, stdout and/or stderr. + * + * fcntl's F_GETFD instruction returns -1 if the file descriptor is closed, + * otherwise it returns "the file descriptor flags (which typically can only + * be FD_CLOEXEC, which is not set here). */ -static void main_checkfds(void) +static int main_checkfds(void) { -#ifdef HAVE_PIPE - int fd[2] = { STDIN_FILENO, STDIN_FILENO }; - while(fd[0] == STDIN_FILENO || - fd[0] == STDOUT_FILENO || - fd[0] == STDERR_FILENO || - fd[1] == STDIN_FILENO || - fd[1] == STDOUT_FILENO || - fd[1] == STDERR_FILENO) - if(pipe(fd) < 0) - return; /* Out of handles. This isn't really a big problem now, but - will be when we try to create a socket later. */ - close(fd[0]); - close(fd[1]); -#endif + int fd[2]; + while((fcntl(STDIN_FILENO, F_GETFD) == -1) || + (fcntl(STDOUT_FILENO, F_GETFD) == -1) || + (fcntl(STDERR_FILENO, F_GETFD) == -1)) + if(pipe(fd)) + return 1; + return 0; } +#else +#define main_checkfds() 0 +#endif #ifdef CURLDEBUG static void memory_tracking_init(void) @@ -118,7 +122,7 @@ static void memory_tracking_init(void) curl_free(env); curl_dbg_memdebug(fname); /* this weird stuff here is to make curl_free() get called before - curl_gdb_memdebug() as otherwise memory tracking will log a free() + curl_dbg_memdebug() as otherwise memory tracking will log a free() without an alloc! */ } /* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */ @@ -185,8 +189,7 @@ static CURLcode main_init(struct GlobalConfig *config) #endif /* Initialise the global config */ - config->showerror = -1; /* Will show errors */ - config->errors = stderr; /* Default errors to stderr */ + config->showerror = FALSE; /* show errors when silent */ config->styled_output = TRUE; /* enable detection */ config->parallel_max = PARALLEL_DEFAULT; @@ -205,17 +208,17 @@ static CURLcode main_init(struct GlobalConfig *config) config->first->global = config; } else { - helpf(stderr, "error retrieving curl library information\n"); + errorf(config, "error retrieving curl library information"); free(config->first); } } else { - helpf(stderr, "error initializing curl library\n"); + errorf(config, "error initializing curl library"); free(config->first); } } else { - helpf(stderr, "error initializing curl\n"); + errorf(config, "error initializing curl"); result = CURLE_FAILED_INIT; } @@ -226,10 +229,6 @@ static void free_globalconfig(struct GlobalConfig *config) { Curl_safefree(config->trace_dump); - if(config->errors_fopened && config->errors) - fclose(config->errors); - config->errors = NULL; - if(config->trace_fopened && config->trace_stream) fclose(config->trace_stream); config->trace_stream = NULL; @@ -246,16 +245,6 @@ static void main_free(struct GlobalConfig *config) /* Cleanup the easy handle */ /* Main cleanup */ curl_global_cleanup(); - convert_cleanup(); - metalink_cleanup(); -#ifdef USE_NSS - if(PR_Initialized()) { - /* prevent valgrind from reporting still reachable mem from NSRP arenas */ - PL_ArenaFinish(); - /* prevent valgrind from reporting possibly lost memory (fd cache, ...) */ - PR_Cleanup(); - } -#endif free_globalconfig(config); /* Free the config structures */ @@ -264,64 +253,48 @@ static void main_free(struct GlobalConfig *config) config->last = NULL; } -#ifdef WIN32 -/* TerminalSettings for Windows */ -static struct TerminalSettings { - HANDLE hStdOut; - DWORD dwOutputMode; -} TerminalSettings; - -static void configure_terminal(void) -{ - /* - * If we're running Windows, enable VT output. - * Note: VT mode flag can be set on any version of Windows, but VT - * processing only performed on Win10 >= Creators Update) - */ - - /* Define the VT flags in case we're building with an older SDK */ -#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING - #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 -#endif - - memset(&TerminalSettings, 0, sizeof(TerminalSettings)); - - /* Enable VT output */ - TerminalSettings.hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); - if((TerminalSettings.hStdOut != INVALID_HANDLE_VALUE) - && (GetConsoleMode(TerminalSettings.hStdOut, - &TerminalSettings.dwOutputMode))) { - SetConsoleMode(TerminalSettings.hStdOut, - TerminalSettings.dwOutputMode - | ENABLE_VIRTUAL_TERMINAL_PROCESSING); - } -} -#else -#define configure_terminal() -#endif - -static void restore_terminal(void) -{ -#ifdef WIN32 - /* Restore Console output mode and codepage to whatever they were - * when Curl started */ - SetConsoleMode(TerminalSettings.hStdOut, TerminalSettings.dwOutputMode); -#endif -} - /* ** curl tool main function. */ +#ifdef _UNICODE +#if defined(__GNUC__) +/* GCC doesn't know about wmain() */ +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#endif +int wmain(int argc, wchar_t *argv[]) +#else int main(int argc, char *argv[]) +#endif { CURLcode result = CURLE_OK; struct GlobalConfig global; memset(&global, 0, sizeof(global)); - /* Perform any platform-specific terminal configuration */ - configure_terminal(); + tool_init_stderr(); + +#ifdef WIN32 + /* Undocumented diagnostic option to list the full paths of all loaded + modules. This is purposely pre-init. */ + if(argc == 2 && !_tcscmp(argv[1], _T("--dump-module-paths"))) { + struct curl_slist *item, *head = GetLoadedModulePaths(); + for(item = head; item; item = item->next) + printf("%s\n", item->data); + curl_slist_free_all(head); + return head ? 0 : 1; + } + /* win32_init must be called before other init routines. */ + result = win32_init(); + if(result) { + errorf(&global, "(%d) Windows-specific init failed", result); + return result; + } +#endif - main_checkfds(); + if(main_checkfds()) { + errorf(&global, "out of file descriptors"); + return CURLE_FAILED_INIT; + } #if defined(HAVE_SIGNAL) && defined(SIGPIPE) (void)signal(SIGPIPE, SIG_IGN); @@ -333,40 +306,17 @@ int main(int argc, char *argv[]) /* Initialize the curl library - do not call any libcurl functions before this point */ result = main_init(&global); - -#ifdef WIN32 - /* Undocumented diagnostic option to list the full paths of all loaded - modules, regardless of whether or not initialization succeeded. */ - if(argc == 2 && !strcmp(argv[1], "--dump-module-paths")) { - struct curl_slist *item, *head = GetLoadedModulePaths(); - for(item = head; item; item = item->next) { - printf("%s\n", item->data); - } - curl_slist_free_all(head); - if(!result) - main_free(&global); - } - else -#endif /* WIN32 */ if(!result) { /* Start our curl operation */ result = operate(&global, argc, argv); -#ifdef __SYMBIAN32__ - if(global.showerror) - tool_pressanykey(); -#endif - /* Perform the main cleanup */ main_free(&global); } - /* Return the terminal to its original state */ - restore_terminal(); - -#ifdef __NOVELL_LIBC__ - if(getenv("_IN_NETWARE_BASH_") == NULL) - tool_pressanykey(); +#ifdef WIN32 + /* Flush buffers of all streams opened in write or update mode */ + fflush(NULL); #endif #ifdef __VMS diff --git a/curl/curl/tool_main.c.orig b/curl/curl/tool_main.c.orig new file mode 100644 index 0000000..2f132e2 --- /dev/null +++ b/curl/curl/tool_main.c.orig @@ -0,0 +1,290 @@ +/*************************************************************************** + * _ _ ____ _ + * 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 + * + ***************************************************************************/ +#include "tool_setup.h" + +#include <sys/stat.h> + +#ifdef WIN32 +#include <tchar.h> +#endif + +#include <signal.h> + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif + +#define ENABLE_CURLX_PRINTF +/* use our own printf() functions */ +#include "curlx.h" + +#include "tool_cfgable.h" +#include "tool_doswin.h" +#include "tool_msgs.h" +#include "tool_operate.h" +#include "tool_vms.h" +#include "tool_main.h" +#include "tool_libinfo.h" +#include "tool_stderr.h" + +/* + * This is low-level hard-hacking memory leak tracking and similar. Using + * the library level code from this client-side is ugly, but we do this + * anyway for convenience. + */ +#include "memdebug.h" /* keep this as LAST include */ + +#ifdef __VMS +/* + * vms_show is a global variable, used in main() as parameter for + * function vms_special_exit() to allow proper curl tool exiting. + * Its value may be set in other tool_*.c source files thanks to + * forward declaration present in tool_vms.h + */ +int vms_show = 0; +#endif + +#ifdef __MINGW32__ +/* + * There seems to be no way to escape "*" in command-line arguments with MinGW + * when command-line argument globbing is enabled under the MSYS shell, so turn + * it off. + */ +extern int _CRT_glob; +int _CRT_glob = 0; +#endif /* __MINGW32__ */ + +/* if we build a static library for unit tests, there is no main() function */ +#ifndef UNITTESTS + +#if defined(HAVE_PIPE) && defined(HAVE_FCNTL) +/* + * Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are + * open before starting to run. Otherwise, the first three network + * sockets opened by curl could be used for input sources, downloaded data + * or error logs as they will effectively be stdin, stdout and/or stderr. + * + * fcntl's F_GETFD instruction returns -1 if the file descriptor is closed, + * otherwise it returns "the file descriptor flags (which typically can only + * be FD_CLOEXEC, which is not set here). + */ +static int main_checkfds(void) +{ + int fd[2]; + while((fcntl(STDIN_FILENO, F_GETFD) == -1) || + (fcntl(STDOUT_FILENO, F_GETFD) == -1) || + (fcntl(STDERR_FILENO, F_GETFD) == -1)) + if(pipe(fd)) + return 1; + return 0; +} +#else +#define main_checkfds() 0 +#endif + +#ifdef CURLDEBUG +static void memory_tracking_init(void) +{ + char *env; + /* if CURL_MEMDEBUG is set, this starts memory tracking message logging */ + env = curlx_getenv("CURL_MEMDEBUG"); + if(env) { + /* use the value as file name */ + char fname[CURL_MT_LOGFNAME_BUFSIZE]; + if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE) + env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0'; + strcpy(fname, env); + curl_free(env); + curl_dbg_memdebug(fname); + /* this weird stuff here is to make curl_free() get called before + curl_dbg_memdebug() as otherwise memory tracking will log a free() + without an alloc! */ + } + /* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */ + env = curlx_getenv("CURL_MEMLIMIT"); + if(env) { + char *endptr; + long num = strtol(env, &endptr, 10); + if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) + curl_dbg_memlimit(num); + curl_free(env); + } +} +#else +# define memory_tracking_init() Curl_nop_stmt +#endif + +/* + * This is the main global constructor for the app. Call this before + * _any_ libcurl usage. If this fails, *NO* libcurl functions may be + * used, or havoc may be the result. + */ +static CURLcode main_init(struct GlobalConfig *config) +{ + CURLcode result = CURLE_OK; + +#if defined(__DJGPP__) || defined(__GO32__) + /* stop stat() wasting time */ + _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; +#endif + + /* Initialise the global config */ + config->showerror = FALSE; /* show errors when silent */ + config->styled_output = TRUE; /* enable detection */ + config->parallel_max = PARALLEL_DEFAULT; + + /* Allocate the initial operate config */ + config->first = config->last = malloc(sizeof(struct OperationConfig)); + if(config->first) { + /* Perform the libcurl initialization */ + result = curl_global_init(CURL_GLOBAL_DEFAULT); + if(!result) { + /* Get information about libcurl */ + result = get_libcurl_info(); + + if(!result) { + /* Initialise the config */ + config_init(config->first); + config->first->global = config; + } + else { + errorf(config, "error retrieving curl library information"); + free(config->first); + } + } + else { + errorf(config, "error initializing curl library"); + free(config->first); + } + } + else { + errorf(config, "error initializing curl"); + result = CURLE_FAILED_INIT; + } + + return result; +} + +static void free_globalconfig(struct GlobalConfig *config) +{ + Curl_safefree(config->trace_dump); + + if(config->trace_fopened && config->trace_stream) + fclose(config->trace_stream); + config->trace_stream = NULL; + + Curl_safefree(config->libcurl); +} + +/* + * This is the main global destructor for the app. Call this after + * _all_ libcurl usage is done. + */ +static void main_free(struct GlobalConfig *config) +{ + /* Cleanup the easy handle */ + /* Main cleanup */ + curl_global_cleanup(); + free_globalconfig(config); + + /* Free the config structures */ + config_free(config->last); + config->first = NULL; + config->last = NULL; +} + +/* +** curl tool main function. +*/ +#ifdef _UNICODE +#if defined(__GNUC__) +/* GCC doesn't know about wmain() */ +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#endif +int wmain(int argc, wchar_t *argv[]) +#else +int main(int argc, char *argv[]) +#endif +{ + CURLcode result = CURLE_OK; + struct GlobalConfig global; + memset(&global, 0, sizeof(global)); + + tool_init_stderr(); + +#ifdef WIN32 + /* Undocumented diagnostic option to list the full paths of all loaded + modules. This is purposely pre-init. */ + if(argc == 2 && !_tcscmp(argv[1], _T("--dump-module-paths"))) { + struct curl_slist *item, *head = GetLoadedModulePaths(); + for(item = head; item; item = item->next) + printf("%s\n", item->data); + curl_slist_free_all(head); + return head ? 0 : 1; + } + /* win32_init must be called before other init routines. */ + result = win32_init(); + if(result) { + errorf(&global, "(%d) Windows-specific init failed", result); + return result; + } +#endif + + if(main_checkfds()) { + errorf(&global, "out of file descriptors"); + return CURLE_FAILED_INIT; + } + +#if defined(HAVE_SIGNAL) && defined(SIGPIPE) + (void)signal(SIGPIPE, SIG_IGN); +#endif + + /* Initialize memory tracking */ + memory_tracking_init(); + + /* Initialize the curl library - do not call any libcurl functions before + this point */ + result = main_init(&global); + if(!result) { + /* Start our curl operation */ + result = operate(&global, argc, argv); + + /* Perform the main cleanup */ + main_free(&global); + } + +#ifdef WIN32 + /* Flush buffers of all streams opened in write or update mode */ + fflush(NULL); +#endif + +#ifdef __VMS + vms_special_exit(result, vms_show); +#else + return (int)result; +#endif +} + +#endif /* ndef UNITTESTS */ diff --git a/curl/curl/tool_main.c.patch b/curl/curl/tool_main.c.patch index cae1787..b344940 100644 --- a/curl/curl/tool_main.c.patch +++ b/curl/curl/tool_main.c.patch @@ -1,9 +1,11 @@ ---- curl/src/tool_main.c 2020-01-18 23:47:34.559751631 +0300 -+++ curl/tool_main.c 2020-01-20 16:07:17.183814044 +0300 -@@ -32,6 +32,10 @@ - #include <plarenas.h> +diff --git a/curl/curl/tool_main.c b/curl/curl/tool_main.c +index 2f132e2..494ec02 100644 +--- a/curl/curl/tool_main.c ++++ b/curl/curl/tool_main.c +@@ -35,6 +35,10 @@ + #include <fcntl.h> #endif - + +#include <stdlib.h> /* setenv(), _putenv() */ + +#include <libca-certificates-curl/path.h> @@ -11,7 +13,7 @@ #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ #include "curlx.h" -@@ -138,6 +142,41 @@ static void memory_tracking_init(void) +@@ -142,6 +146,41 @@ static void memory_tracking_init(void) */ static CURLcode main_init(struct GlobalConfig *config) { @@ -51,5 +53,5 @@ + return CURLE_FAILED_INIT; + CURLcode result = CURLE_OK; - + #if defined(__DJGPP__) || defined(__GO32__) diff --git a/curl/curl/version_win32.c b/curl/curl/version_win32.c new file mode 120000 index 0000000..85da520 --- /dev/null +++ b/curl/curl/version_win32.c @@ -0,0 +1 @@ +lib/version_win32.c
\ No newline at end of file diff --git a/curl/manifest b/curl/manifest index e12ccaa..de26719 100644 --- a/curl/manifest +++ b/curl/manifest @@ -1,19 +1,21 @@ : 1 name: curl -version: 7.67.0+8 +version: 8.4.0 +priority: security summary: Command line tool for transferring data with URLs -license: cURL ; MIT/X derivate license. +license: curl ; MIT/X derivate license. topics: HTTP, FTP, URL, data transfer description-file: README -url: https://curl.haxx.se/ -doc-url: https://curl.haxx.se/docs/manpage.html +url: https://curl.se/ +doc-url: https://curl.se/docs/manpage.html src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/curl/ package-url: https://git.build2.org/cgit/packaging/curl/ -email: curl-users@cool.haxx.se ; Mailing list. +email: curl-users@lists.haxx.se ; Mailing list. package-email: packaging@build2.org ; Mailing list. -build-email: builds@build2.org +build-warning-email: builds@build2.org builds: all -depends: * build2 >= 0.12.0 -depends: * bpkg >= 0.12.0 +builds: -wasm +depends: * build2 >= 0.15.0 +depends: * bpkg >= 0.15.0 depends: libcurl == $ -depends: libca-certificates-curl >= 1.0.0 +depends: libca-certificates-curl ^1.0.0 diff --git a/curl/tests/build/bootstrap.build b/curl/tests/build/bootstrap.build index b1c5f94..cd8314a 100644 --- a/curl/tests/build/bootstrap.build +++ b/curl/tests/build/bootstrap.build @@ -1,5 +1,5 @@ # file : tests/build/bootstrap.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file project = # Unnamed tests subproject. diff --git a/curl/tests/build/root.build b/curl/tests/build/root.build index b75fafe..5aff06b 100644 --- a/curl/tests/build/root.build +++ b/curl/tests/build/root.build @@ -1,9 +1,9 @@ # file : tests/build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file # We need to configure C module to obtain the target information (see below). # -using c +using c.config # Setup the curl program that we are testing. # diff --git a/curl/tests/buildfile b/curl/tests/buildfile index 1c3ad5d..332d4f0 100644 --- a/curl/tests/buildfile +++ b/curl/tests/buildfile @@ -1,4 +1,4 @@ # file : tests/buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file ./: testscript{*} file{empty.pem} $curl diff --git a/curl/tests/http.testscript b/curl/tests/http.testscript index c73bd23..aa96e06 100644 --- a/curl/tests/http.testscript +++ b/curl/tests/http.testscript @@ -1,5 +1,5 @@ # file : tests/http.testscript -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file : basic : diff --git a/curl/tests/https.testscript b/curl/tests/https.testscript index eb4aea1..fabdd69 100644 --- a/curl/tests/https.testscript +++ b/curl/tests/https.testscript @@ -1,5 +1,5 @@ # file : tests/https.testscript -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file : default : diff --git a/libcurl/.gitignore b/libcurl/.gitignore index 4c4fec7..d4a1da2 100644 --- a/libcurl/.gitignore +++ b/libcurl/.gitignore @@ -3,11 +3,17 @@ *.d *.t *.i +*.i.* *.ii +*.ii.* *.o *.obj +*.gcm +*.pcm +*.ifc *.so *.so.* +*.dylib *.dll *.a *.lib diff --git a/libcurl/README b/libcurl/README index e508068..34837e0 100644 --- a/libcurl/README +++ b/libcurl/README @@ -1,8 +1,8 @@ cURL is a client-side software for transferring data using URLs with the -libcurl C library providing the data transfer and URL manipulation APIs. -For more information see: +libcurl C library providing the data transfer and URL manipulation APIs. For +more information see: -https://curl.haxx.se/ +https://curl.se/ This package contains the original libcurl library source code overlaid with the build2-based build system and packaged for the build2 package manager diff --git a/libcurl/README-DEV b/libcurl/README-DEV index cea97e1..d4e099d 100644 --- a/libcurl/README-DEV +++ b/libcurl/README-DEV @@ -13,17 +13,13 @@ Some macro values cannot be easily determined at the preprocessing time. We define them based on the supported platform tests and add libcurl/assert.c, containing compile-time assertions for the macros in question. -Copy the upstream's libtool-generated for MacOS libcurl-symbols.expsym file -and comment out (with #) the _curl_jmpenv symbol in it since it causes the -'cannot export hidden symbol' linked warning on MacOS. - Note that re-creating libcurl/curl_config.h from scratch every time we upgrade to a new upstream version would be a real pain. Instead we can only (un)define the newly introduced macros, comparing the already defined and currently used -macro sets. For the comparison we can use config-win32.h and auto-generated on +macro sets. For the comparison we can use config-*.h and auto-generated on Linux upstream's curl_config.h: -$ for m in `cat <upstream-build-dir>/lib/curl_config.h libcurl/lib/config-win32.h | \ +$ for m in `cat <upstream-build-dir>/lib/curl_config.h libcurl/lib/config-*.h | \ sed -n 's/^.*#\s*\(define\|undef\)\s\{1,\}\([_A-Z0-9]\{1,\}\)\(\s.*\)\{0,1\}$/\2/p' | \ sort -u`; do if grep -q -e "\b$m\b" `find -L . ../curl -name '*.h' -a ! -name curl_config.h -a ! -name 'config-*.h' -o -name '*.c'`; then diff --git a/libcurl/build/bootstrap.build b/libcurl/build/bootstrap.build index f608fd0..9704ab7 100644 --- a/libcurl/build/bootstrap.build +++ b/libcurl/build/bootstrap.build @@ -1,5 +1,5 @@ -# file : build/root.build -# license : cURL License; see accompanying COPYING file +# file : build/bootstrap.build +# license : curl License; see accompanying COPYING file project = libcurl @@ -14,21 +14,20 @@ using dist # changes are made, the minor version when new features are added, and the # patch version is increased for bug fixes. See also: # -# https://curl.haxx.se/docs/versions.html +# https://curl.se/docs/versions.html # # The ABI version doesn't correlate with the release version and is assigned -# via the libtool's -version-info <current>:<revision>:<age> option -# (VERSIONINFO in lib/Makefile.am). As it follows from the comment in the +# via the libtool's -version-info <current>:<revision>:<age> option (VERSION* +# variables in lib/Makefile.soname). As it follows from the comment in the # makefile, the major version (current - age) is incremented for backwards- # incompatible ABI changes. See also: # -# https://curl.haxx.se/libcurl/abi.html +# https://curl.se/libcurl/abi.html # -if ($version.major == 7 && $version.minor == 67 && $version.patch == 0) +if ($version.major == 8 && $version.minor == 4 && $version.patch == 0) { - abi_version_major = 4 - abi_version = "$abi_version_major.6.0" # <current - age>.<age>.<revision> + abi_version = "$abi_version_major.8.0" # <current - age>.<age>.<revision> } else fail 'increment the ABI version?' diff --git a/libcurl/build/export.build b/libcurl/build/export.build index 77bc612..3ead5b4 100644 --- a/libcurl/build/export.build +++ b/libcurl/build/export.build @@ -1,5 +1,5 @@ # file : build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file $out_root/ { diff --git a/libcurl/build/root.build b/libcurl/build/root.build index 042c9d3..2a2c784 100644 --- a/libcurl/build/root.build +++ b/libcurl/build/root.build @@ -1,5 +1,5 @@ # file : build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file using in diff --git a/libcurl/buildfile b/libcurl/buildfile index da9bfb2..44df8d4 100644 --- a/libcurl/buildfile +++ b/libcurl/buildfile @@ -1,7 +1,7 @@ # file : buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file # -./: {*/ -build/} doc{COPYING INSTALL README} manifest +./: {*/ -build/} doc{INSTALL README} legal{COPYING} manifest # Don't install tests or the INSTALL file. # diff --git a/libcurl/libcurl/.gitattributes b/libcurl/libcurl/.gitattributes new file mode 100644 index 0000000..c58ac78 --- /dev/null +++ b/libcurl/libcurl/.gitattributes @@ -0,0 +1,2 @@ +include symlink=dir +lib symlink=dir diff --git a/libcurl/libcurl/assert.c b/libcurl/libcurl/assert.c index e5ceeb6..12160b2 100644 --- a/libcurl/libcurl/assert.c +++ b/libcurl/libcurl/assert.c @@ -1,11 +1,11 @@ /* file : libcurl/assert.c -*- C -*- - * license : cURL License; see accompanying COPYING file + * license : curl License; see accompanying COPYING file */ #include <curl_config.h> #ifdef _MSC_VER -# include <windows.h> // C_ASSERT() +# include <windows.h> /* C_ASSERT() */ #endif #include <time.h> diff --git a/libcurl/libcurl/buildfile b/libcurl/libcurl/buildfile index 583aaf9..62c8680 100644 --- a/libcurl/libcurl/buildfile +++ b/libcurl/libcurl/buildfile @@ -1,16 +1,11 @@ # file : libcurl/buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file # Version script. # define vsc: file vsc{*}: extension = vers -# Exported symbols. -# -define esm: file -esm{*}: extension = expsym - import imp_libs = libssl%lib{ssl} import imp_libs += libcrypto%lib{crypto} import imp_libs += libz%lib{z} @@ -25,8 +20,7 @@ bsd = ($tclass == 'bsd') macos = ($tclass == 'macos') windows = ($tclass == 'windows') -lib{curl}: vsc{libcurl}: include = ($linux || $bsd ? adhoc : false) -lib{curl}: esm{libcurl-symbols}: include = ($macos ? adhoc : false) +libs{curl}: vsc{libcurl}: include = ($linux || $bsd ? adhoc : false) vsc{libcurl}: lib/in{libcurl} { @@ -35,6 +29,40 @@ vsc{libcurl}: lib/in{libcurl} CURL_LT_SHLIB_VERSIONED_FLAVOUR = 'OPENSSL_' } +# It seems that for earlier versions of clang the __has_include_next() macro +# is broken in the -frewrite-includes mode. So, in particular, the following +# fragment of llvm-6.0's stdatomic.h: +# +# #if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>) +# # include_next <stdatomic.h> +# #else +# ... +# typedef _Atomic(_Bool) atomic_bool; +# ... +# #endif +# +# expands into: +# +# #if __STDC_HOSTED__ && (1)/*__has_include_next(<stdatomic.h>)*/ +# #if 0 /* expanded by -frewrite-includes */ +# # include_next <stdatomic.h> +# #endif /* expanded by -frewrite-includes */ +# # 31 "/usr/lib/llvm-6.0/lib/clang/6.0.0/include/stdatomic.h" 3 +# # 32 "/usr/lib/llvm-6.0/lib/clang/6.0.0/include/stdatomic.h" 3 +# #else +# ... +# typedef _Atomic(_Bool) atomic_bool; +# ... +# #endif +# +# This ends up with no atomic_* types defined, etc. +# +# Thus, we enable reprocessing for the source files which (indirectly) include +# <stdatomic.h> for Clang versions prior to 7.0. +# +if ($c.id == 'clang' && $c.version.major < 7) + lib/obj{easy version hostip}: cc.reprocess = true + # Build options. # c.poptions += -DBUILDING_LIBCURL -DHAVE_CONFIG_H \ @@ -43,15 +71,8 @@ c.poptions += -DBUILDING_LIBCURL -DHAVE_CONFIG_H \ if! $windows c.poptions += -DCURL_HIDDEN_SYMBOLS -# Note that the upstream package uses the -pthread compiler/linker option on -# Linux and FreeBSD. The option is unsupported by build2 so we pass -# -D_REENTRANT and -lpthread preprocessor/linker options instead. -# switch $tclass, $tsys { - case 'linux' | 'bsd' - c.poptions += -D_REENTRANT - case 'windows', 'win32-msvc' c.poptions += -DWIN32 } @@ -63,22 +84,24 @@ obja{*}: c.poptions += -DCURL_STATICLIB if! $windows c.coptions += -fvisibility=hidden -switch $c.class, $tsys +switch $c.class { case 'gcc' { # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem # to care about these and it is not easy to disable specific warnings in a # way that works across compilers/version (some -Wno-* options are only - # recognized in newer versions). + # recognized in newer versions). There are still some warnings left that + # appear for certain platforms/compilers. We pass them through but disable + # treating them as errors. # - c.coptions += -Wno-all -Wno-extra -Wno-deprecated-declarations + c.coptions += -Wno-all -Wno-extra -Wno-deprecated-declarations -Wno-error } case 'msvc' { # Disable warnings that pop up with /W3. # - c.coptions += /wd4996 + c.coptions += /wd4028 /wd4996 } } @@ -91,17 +114,24 @@ switch $tclass, $tsys c.loptions += -Wl,--no-undefined c.loptions += "-Wl,--version-script=$out_base/libcurl.vers" - c.libs += -lpthread + c.libs += -pthread } case 'macos' { - c.loptions += "-Wl,-exported_symbols_list,$src_base/libcurl-symbols.expsym" - c.libs += -framework CoreFoundation -framework Security + # Note that upstream generates the libcurl-symbols.expsym file on MacOS + # and passes it to linker via the -exported_symbols_list option. This + # looks redundant, since the __visibility__("default") attribute is also + # used for the API function declarations. Thus, we don't bother + # generating/passing the exported symbol list file. + # + c.libs += -framework CoreFoundation \ + -framework SystemConfiguration \ + -framework Security } case 'windows', 'mingw32' { c.loptions += -Wl,--enable-auto-image-base - c.libs += -lws2_32 -lcrypt32 + c.libs += -lws2_32 -lcrypt32 -lbcrypt } case 'windows' { diff --git a/libcurl/libcurl/curl_config.h b/libcurl/libcurl/curl_config.h index f41ca14..2ccc522 100644 --- a/libcurl/libcurl/curl_config.h +++ b/libcurl/libcurl/curl_config.h @@ -1,5 +1,5 @@ /* file : libcurl/curl_config.h -*- C -*- - * license : cURL License; see accompanying COPYING file + * license : curl License; see accompanying COPYING file */ #ifndef LIBCURL_CURL_CONFIG_H @@ -15,10 +15,12 @@ */ /* These macros are defined via the -D preprocessor option. Keep them listed - * (in this exact form) for the change tracking (see ../README-DEV). + * (in this exact form) for the change tracking. #define OS #define VERSION +#define BUILDING_LIBCURL +#define CURL_STATICLIB */ @@ -45,17 +47,15 @@ #define CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG 1 -#undef HAVE_BORINGSSL #undef USE_WOLFSSL /* Enabled features. */ -#define ENABLE_IPV6 1 -#define HAVE_ZLIB_H 1 -#define HAVE_LIBZ 1 +#define ENABLE_IPV6 1 +#define HAVE_LIBZ 1 +#define USE_WEBSOCKETS 1 #undef CURL_DISABLE_COOKIES -#undef CURL_DISABLE_CRYPTO_AUTH #undef CURL_DISABLE_DICT #undef CURL_DISABLE_DOH #undef CURL_DISABLE_FILE @@ -78,6 +78,21 @@ #undef CURL_DISABLE_TELNET #undef CURL_DISABLE_TFTP #undef CURL_DISABLE_VERBOSE_STRINGS +#undef CURL_DISABLE_ALTSVC +#undef CURL_DISABLE_GETOPTIONS +#undef CURL_DISABLE_MQTT +#undef CURL_DISABLE_SOCKETPAIR +#undef CURL_DISABLE_HEADERS_API +#undef CURL_DISABLE_HSTS +#undef CURL_DISABLE_NTLM +#undef CURL_DISABLE_AWS +#undef CURL_DISABLE_BASIC_AUTH +#undef CURL_DISABLE_BEARER_AUTH +#undef CURL_DISABLE_BINDLOCAL +#undef CURL_DISABLE_DIGEST_AUTH +#undef CURL_DISABLE_FORM_API +#undef CURL_DISABLE_KERBEROS_AUTH +#undef CURL_DISABLE_NEGOTIATE_AUTH /* Diabled features. */ @@ -88,29 +103,26 @@ #undef HAVE_LDAP_SSL #undef HAVE_LDAP_SSL_H #undef HAVE_LDAP_URL_PARSE - #undef USE_LIBSSH #undef USE_LIBSSH2 -#undef HAVE_LIBSSH2_H -#undef HAVE_LIBSSH_LIBSSH_H #undef USE_AMISSL #undef USE_GNUTLS -#undef USE_GNUTLS_NETTLE #undef USE_ARES -#undef USE_ESNI #undef USE_LIBPSL #undef USE_MANUAL #undef USE_MBEDTLS -#undef USE_MESALINK -#undef USE_METALINK #undef USE_NGHTTP2 #undef USE_NGHTTP3 #undef USE_NGTCP2 -#undef USE_NSS #undef USE_OPENLDAP -#undef USE_ALTSVC #undef USE_LIBRTMP #undef USE_QUICHE +#undef USE_BEARSSL +#undef USE_GSASL +#undef USE_HYPER +#undef USE_RUSTLS +#undef USE_WOLFSSH +#undef USE_MSH3 /* Specific for (non-) Linux. */ @@ -146,17 +158,21 @@ */ #if defined(__FreeBSD__) || defined(__APPLE__) # define HAVE_SYS_SOCKIO_H 1 +# define HAVE_ARC4RANDOM 1 #endif /* Specific for Linux and Mac OS. */ #if defined(__linux__) || defined(__APPLE__) -# define HAVE_FSETXATTR 1 +# define HAVE_FSETXATTR 1 +# define HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1 #endif /* Specific for POSIX. */ #ifndef _WIN32 +# define USE_UNIX_SOCKETS 1 + # define HAVE_ARPA_INET_H 1 # define HAVE_IFADDRS_H 1 # define HAVE_NETDB_H 1 @@ -166,6 +182,7 @@ # define HAVE_POLL_H 1 # define HAVE_PWD_H 1 # define HAVE_ALARM 1 +# define HAVE_FCNTL 1 # define HAVE_FCNTL_O_NONBLOCK 1 # define HAVE_FNMATCH 1 # define HAVE_GETEUID 1 @@ -191,13 +208,17 @@ # define HAVE_SYS_WAIT_H 1 # define HAVE_TERMIOS_H 1 # define HAVE_UTIMES 1 -# define NTLM_WB_ENABLED 1 -# define USE_UNIX_SOCKETS 1 +# define HAVE_SUSECONDS_T 1 +# define HAVE_FCHMOD 1 +# define HAVE_NETINET_UDP_H 1 +# define HAVE_SENDMSG 1 # define CURL_SA_FAMILY_T sa_family_t # define GETHOSTNAME_TYPE_ARG2 size_t +# define NTLM_WB_ENABLED 1 # define NTLM_WB_FILE "/usr/bin/ntlm_auth" + # define RANDOM_FILE "/dev/urandom" # define CURL_EXTERN_SYMBOL __attribute__ ((__visibility__ ("default"))) @@ -205,19 +226,21 @@ /* Specific for Windows. */ #else -# define HAVE_PROCESS_H 1 # define USE_WIN32_CRYPTO 1 +# define USE_WIN32_IDN 1 +# define USE_WIN32_LARGE_FILES 1 +# define USE_WINDOWS_SSPI 1 + # define HAVE_CLOSESOCKET 1 # define HAVE_IOCTLSOCKET_FIONBIO 1 # define HAVE_IO_H 1 # define HAVE_SYS_UTIME_H 1 # define HAVE_WINDOWS_H 1 # define HAVE_WINSOCK2_H 1 -# define HAVE_WINSOCK_H 1 -# define USE_WIN32_IDN 1 -# define USE_WIN32_LARGE_FILES 1 -# define USE_WINDOWS_SSPI 1 -# define WANT_IDN_PROTOTYPES 1 +# define HAVE__FSEEKI64 1 + +# undef _UNICODE +# undef UNICODE # undef SOCKET # undef USE_LWIPSOCK @@ -233,6 +256,7 @@ # undef CURL_SA_FAMILY_T # undef GETHOSTNAME_TYPE_ARG2 # undef USE_WINSOCK +# undef WIN32_LEAN_AND_MEAN /* Unused on Windows (see include/curl/curl.h for details). */ @@ -251,56 +275,52 @@ /* Specific for (non-) VC. */ #ifndef _MSC_VER +# define USE_THREADS_POSIX 1 +# undef USE_THREADS_WIN32 + # define HAVE_BASENAME 1 # define HAVE_CLOCK_GETTIME_MONOTONIC 1 # define HAVE_INET_NTOP 1 # define HAVE_INET_PTON 1 # define HAVE_LIBGEN_H 1 # define HAVE_PTHREAD_H 1 -# define HAVE_SETJMP_H 1 # define HAVE_SIGNAL 1 # define HAVE_STRCASECMP 1 # define HAVE_STRINGS_H 1 -# define HAVE_STRING_H 1 # define HAVE_STRTOK_R 1 # define HAVE_SYS_PARAM_H 1 # define HAVE_SYS_TIME_H 1 # define HAVE_UNISTD_H 1 # define HAVE_UTIME_H 1 # define HAVE_VARIADIC_MACROS_GCC 1 -# define TIME_WITH_SYS_TIME 1 -# define USE_THREADS_POSIX 1 -# undef USE_THREADS_WIN32 +# define HAVE_OPENSSL_SRP 1 +# define HAVE_FTRUNCATE 1 +# define HAVE_SCHED_YIELD 1 +# define HAVE_FSEEKO 1 #else -# define NEED_MALLOC_H 1 # define USE_THREADS_WIN32 1 # undef USE_THREADS_POSIX + +# define NEED_MALLOC_H 1 #endif /* Common for all supported OSes/compilers. */ -#define HAVE_ASSERT_H 1 #define HAVE_STDBOOL_H 1 #define HAVE_BOOL_T 1 -#define HAVE_ERRNO_H 1 #define HAVE_FCNTL_H 1 #define HAVE_WS2TCPIP_H 1 -#define HAVE_SIGNAL_H 1 #define HAVE_LOCALE_H 1 #define HAVE_SETLOCALE 1 #define HAVE_GETADDRINFO 1 #define HAVE_FREEADDRINFO 1 #define HAVE_GETADDRINFO_THREADSAFE 1 -#define HAVE_FTRUNCATE 1 -#define HAVE_GETHOSTBYNAME 1 #define HAVE_GETHOSTNAME 1 #define HAVE_GETPEERNAME 1 #define HAVE_GETSOCKNAME 1 #define HAVE_LONGLONG 1 -#define HAVE_OPENSSL_VERSION 1 #define HAVE_SOCKET 1 #define HAVE_SELECT 1 -#define HAVE_SIG_ATOMIC_T 1 #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 #define HAVE_STRDUP 1 #define HAVE_STRTOLL 1 @@ -308,13 +328,26 @@ #define HAVE_STRUCT_TIMEVAL 1 #define HAVE_SYS_STAT_H 1 #define HAVE_SYS_TYPES_H 1 -#define HAVE_TIME_H 1 #define HAVE_UTIME 1 #define HAVE_VARIADIC_MACROS_C99 1 -#define STDC_HEADERS 1 +#define HAVE_STRICMP 1 +#define HAVE_SNPRINTF 1 +#define HAVE_STDATOMIC_H 1 +#define HAVE_ATOMIC 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 + +/* SSL_set0_wbio() was added in OpenSSL 1.1.0 and we don't care about earlier + * versions. + */ +#define HAVE_SSL_SET0_WBIO 1 + +#define STDC_HEADERS 1 #undef _ALL_SOURCE #undef _LARGE_FILES +#undef _FILE_OFFSET_BITS + #undef HAVE_LBER_H #undef HAVE_NETINET_IN6_H #undef HAVE_GSSAPI_GSSAPI_GENERIC_H @@ -322,52 +355,42 @@ #undef HAVE_IDN2_H #undef HAVE_LIBIDN2 #undef HAVE_BROTLI -#undef EGD_SOCKET -#undef DEBUGBUILD -#undef HAVE_STRUCT_POLLFD #undef HAVE_DECL_GETPWUID_R_MISSING #undef HAVE_GETPASS_R -#undef HAVE_GNUTLS_ALPN_SET_PROTOCOLS -#undef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 -#undef HAVE_GNUTLS_OCSP_REQ_INIT #undef HAVE_GSSAPI #undef HAVE_GSSGNU #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO #undef HAVE_OLD_GSSMIT -#undef HAVE_PK11_CREATEMANAGEDGENERICOBJECT #undef HAVE_PROTO_BSDSOCKET_H -#undef HAVE_RAND_EGD -#undef HAVE_SETSOCKOPT_SO_NONBLOCK -#undef HAVE_SIG_ATOMIC_T_VOLATILE -#undef HAVE_SSLV2_CLIENT_METHOD #undef HAVE_STRCMPI #undef HAVE_STROPTS_H #undef HAVE_TERMIO_H #undef HAVE_TIME_T_UNSIGNED -#undef HAVE_WOLFSSLV3_CLIENT_METHOD #undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE #undef HAVE_WOLFSSL_USEALPN #undef HAVE_WRITABLE_ARGV -#undef NEED_MEMORY_H +#undef HAVE_CLOSESOCKET_CAMEL +#undef HAVE_GLIBC_STRERROR_R +#undef HAVE_GNUTLS_SRP +#undef HAVE_QUICHE_CONN_SET_QLOG_FD +#undef HAVE_WOLFSSL_DES_ECB_ENCRYPT +#undef HAVE_ZSTD +#undef HAVE_CLOSE_S +#undef HAVE_EXTRA_STRDUP_H +#undef HAVE_EXTRA_STRICMP_H +#undef HAVE_SSL_GET_SHUTDOWN +#undef HAVE_IOCTLSOCKET_CAMEL +#undef HAVE_WOLFSSL_FULL_BIO + #undef NEED_REENTRANT #undef NEED_THREAD_SAFE +#undef USE_OS400CRYPTO + +#undef BSD #undef CURLDEBUG -#undef HAVE_GETNAMEINFO -#undef GETNAMEINFO_QUAL_ARG1 -#undef GETNAMEINFO_TYPE_ARG1 -#undef GETNAMEINFO_TYPE_ARG2 -#undef GETNAMEINFO_TYPE_ARG46 -#undef GETNAMEINFO_TYPE_ARG7 - -#undef HAVE_RECVFROM -#undef RECVFROM_TYPE_ARG1 -#undef RECVFROM_TYPE_ARG2 -#undef RECVFROM_TYPE_ARG3 -#undef RECVFROM_TYPE_ARG4 -#undef RECVFROM_TYPE_ARG5 -#undef RECVFROM_TYPE_ARG6 -#undef RECVFROM_TYPE_RETV +#undef DEBUGBUILD +#undef ENABLE_QUIC /* While upstream defines the macro for Clang, it fails to build for older * version of Clang on Mac OS. Thus, we never define it. @@ -455,17 +478,26 @@ */ #define SIZEOF_CURL_OFF_T 8 -#define RETSIGTYPE void #define SEND_QUAL_ARG2 const -/* We can probably assume that on platforms we build for, these keywords/types - * doesn't require definition. +/* We can probably assume that on platforms we build for, these keywords, + * types, and macros do not require definition. #undef const #undef inline #undef size_t #undef ssize_t -*/ +#undef EAGAIN +#undef ENOMEM +#undef ENOSPC + +#undef F_OK +#undef O_RDONLY + +#undef LONG_MAX +#undef LONG_MIN + + */ #endif /* LIBCURL_CURL_CONFIG_H */ diff --git a/libcurl/libcurl/libcurl-symbols.expsym b/libcurl/libcurl/libcurl-symbols.expsym deleted file mode 100644 index aada9a9..0000000 --- a/libcurl/libcurl/libcurl-symbols.expsym +++ /dev/null @@ -1,82 +0,0 @@ -_curl_easy_cleanup -_curl_easy_duphandle -_curl_easy_escape -_curl_easy_getinfo -_curl_easy_init -_curl_easy_pause -_curl_easy_perform -_curl_easy_recv -_curl_easy_reset -_curl_easy_send -_curl_easy_setopt -_curl_easy_strerror -_curl_easy_unescape -_curl_easy_upkeep -_curl_escape -_curl_formadd -_curl_formfree -_curl_formget -_curl_free -_curl_getdate -_curl_getenv -_curl_global_cleanup -_curl_global_init -_curl_global_init_mem -_curl_global_sslset -#_curl_jmpenv -_curl_maprintf -_curl_mfprintf -_curl_mime_addpart -_curl_mime_data -_curl_mime_data_cb -_curl_mime_encoder -_curl_mime_filedata -_curl_mime_filename -_curl_mime_free -_curl_mime_headers -_curl_mime_init -_curl_mime_name -_curl_mime_subparts -_curl_mime_type -_curl_mprintf -_curl_msnprintf -_curl_msprintf -_curl_multi_add_handle -_curl_multi_assign -_curl_multi_cleanup -_curl_multi_fdset -_curl_multi_info_read -_curl_multi_init -_curl_multi_perform -_curl_multi_poll -_curl_multi_remove_handle -_curl_multi_setopt -_curl_multi_socket -_curl_multi_socket_action -_curl_multi_socket_all -_curl_multi_strerror -_curl_multi_timeout -_curl_multi_wait -_curl_mvaprintf -_curl_mvfprintf -_curl_mvprintf -_curl_mvsnprintf -_curl_mvsprintf -_curl_pushheader_byname -_curl_pushheader_bynum -_curl_share_cleanup -_curl_share_init -_curl_share_setopt -_curl_share_strerror -_curl_slist_append -_curl_slist_free_all -_curl_strequal -_curl_strnequal -_curl_unescape -_curl_url -_curl_url_cleanup -_curl_url_dup -_curl_url_get -_curl_url_set -_curl_version -_curl_version_info diff --git a/libcurl/manifest b/libcurl/manifest index 83cb99f..31fda3b 100644 --- a/libcurl/manifest +++ b/libcurl/manifest @@ -1,21 +1,23 @@ : 1 name: libcurl -version: 7.67.0+8 +version: 8.4.0 project: curl +priority: security summary: C library for transferring data with URLs -license: cURL ; MIT/X derivate license. +license: curl ; MIT/X derivate license. topics: C, HTTP, FTP, URL, data transfer description-file: README -url: https://curl.haxx.se/ -doc-url: https://curl.haxx.se/libcurl/c/ +url: https://curl.se/ +doc-url: https://curl.se/libcurl/c/ src-url: https://git.build2.org/cgit/packaging/curl/curl/tree/libcurl/ package-url: https://git.build2.org/cgit/packaging/curl/ -email: curl-library@cool.haxx.se ; Mailing list. +email: curl-library@lists.haxx.se ; Mailing list. package-email: packaging@build2.org ; Mailing list. -build-email: builds@build2.org +build-error-email: builds@build2.org builds: all -depends: * build2 >= 0.12.0 -depends: * bpkg >= 0.12.0 -depends: libz >= 1.2.1100 -depends: libcrypto >= 1.1.1 -depends: libssl >= 1.1.1 +builds: -wasm +depends: * build2 >= 0.15.0 +depends: * bpkg >= 0.15.0 +depends: libz ^1.2.1100 +depends: libcrypto ^1.1.1 +depends: libssl ^1.1.1 diff --git a/libcurl/tests/basic/buildfile b/libcurl/tests/basic/buildfile index 9dd8436..2495559 100644 --- a/libcurl/tests/basic/buildfile +++ b/libcurl/tests/basic/buildfile @@ -1,5 +1,5 @@ # file : tests/basic/buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file import libs = libcurl%lib{curl} diff --git a/libcurl/tests/basic/driver.c b/libcurl/tests/basic/driver.c index 13b731c..9bd7354 100644 --- a/libcurl/tests/basic/driver.c +++ b/libcurl/tests/basic/driver.c @@ -1,5 +1,5 @@ /* file : tests/basic/driver.c - * license : cURL License; see accompanying COPYING file + * license : curl License; see accompanying COPYING file */ #include <stdio.h> #include <assert.h> @@ -53,7 +53,7 @@ main (int argc, char* argv[]) fprintf (stderr, "calling curl_easy_setopt()\n"); curl_easy_setopt (curl, CURLOPT_URL, url); - curl_easy_setopt (curl, CURLOPT_TIMEOUT, 600L); // 10 mins. + curl_easy_setopt (curl, CURLOPT_TIMEOUT, 600L); /* 10 mins. */ curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1L); char agent[] = "libcurl-test/" LIBCURL_VERSION; diff --git a/libcurl/tests/basic/testscript b/libcurl/tests/basic/testscript index 2294ba0..85a2cff 100644 --- a/libcurl/tests/basic/testscript +++ b/libcurl/tests/basic/testscript @@ -1,5 +1,5 @@ # file : tests/basic/testscript -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file : http : diff --git a/libcurl/tests/build/bootstrap.build b/libcurl/tests/build/bootstrap.build index a776805..d32cc53 100644 --- a/libcurl/tests/build/bootstrap.build +++ b/libcurl/tests/build/bootstrap.build @@ -1,5 +1,5 @@ # file : tests/build/bootstrap.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file project = # Unnamed subproject. diff --git a/libcurl/tests/build/root.build b/libcurl/tests/build/root.build index 60fd379..08770bf 100644 --- a/libcurl/tests/build/root.build +++ b/libcurl/tests/build/root.build @@ -1,5 +1,5 @@ # file : tests/build/root.build -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file using c diff --git a/libcurl/tests/buildfile b/libcurl/tests/buildfile index 8b91020..78efeea 100644 --- a/libcurl/tests/buildfile +++ b/libcurl/tests/buildfile @@ -1,4 +1,4 @@ # file : tests/buildfile -# license : cURL License; see accompanying COPYING file +# license : curl License; see accompanying COPYING file ./: {*/ -build/} diff --git a/upstream b/upstream -Subproject 2e9b725f67d49a9d7a1f053fe52dd4920c9ab1a +Subproject d755a5f7c009dd63a61b2c745180d8ba937cbfe |