summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
Commit message (Collapse)AuthorAgeFilesLines
* cmake: speed up and extend picky clang/gcc optionsViktor Szakats2023-04-161-22/+1
| | | | | | | | | | | | | | | | | | | | Extend existing picky compiler options with ones missing compared to autotools builds. Also sync options between clang and gcc. Redesign the way we enable these options to avoid the slow option detection almost completely. This reduces the number of detections from 35 to zero for clang and 3 for gcc, even after adding a bunch of new options. clang 3.0 (2011-11-29) and gcc 2.95 (1999-07-31) now required. Also show enabled picky options. Ref: https://github.com/libssh2/libssh2/pull/952 Reviewed-by: Daniel Stenberg Closes #10973
* CMakeLists.txt: fix typo for Haiku detectionDouglas R. Reno2023-04-121-1/+1
| | | | Closes #10937
* cmake: do not add zlib headers for opensslViktor Szakats2023-03-311-2/+1
| | | | | | | | | Logic copied earlier from wolfSSL. wolfSSL requires zlib headers for its public headers. OpenSSL does not, so stop adding zlib headers for it. Follow-up to 1e3319a167d2f32d295603167486e9e88af9bb4e Closes #10878
* openssl: interop with AWS-LCJim King2023-03-301-0/+4
| | | | | | | | | | | | | * Configure changes to detect AWS-LC * CMakeLists.txt changes to detect AWS-LC * Compile-time branches needed to support AWS-LC * Correctly set OSSL_VERSION and report AWS-LC release number * GitHub Actions script to build with autoconf and cmake against AWS-LC AWS-LC is a BoringSSL/OpenSSL derivative For more information see https://github.com/awslabs/aws-lc/ Closes #10320
* cmake: picky-linker fixes for openssl, ZLIB, H3 and moreViktor Szakats2023-03-301-67/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - fix HTTP/3 support detection with OpenSSL/quictls built with ZLIB. (Requires curl be built with ZLIB option also.) - fix HTTP/3 support detection with OpenSSL/quictls/LibreSSL and `ld` linker on Windows. - fix HTTP/3 support detection with wolfSSL to automatically add `ws2_32` to the lib list on Windows. For all linkers. - reposition ZLIB (and other compression) detection _after_ TLS detection, but before calling HTTP/3-support detection via `CheckQuicSupportInOpenSSL`. May be a regression from ebef55a61df0094b9790710a42f63c48e7de3c13 May fix #10832 (Reported-by: Micah Snyder) This also seems to fix an odd case, where OpenSSL/quictls is correctly detected, but its header path is not set while compiling, breaking build at `src/curl_ntlm_core.c`. Reason for this remains undiscovered. - satisfy "picky" linkers such as `ld` with MinGW, that are highly sensitive to lib order, by also adding brotli to the beginning of the lib list. - satisfy "picky" linkers by adding certain Windows systems libs to the lib list for OpenSSL/LibreSSL. (Might need additional ones for other forks, such as `pthread` for BoringSSL.) Note: It'd make sense to _always_ add `ws2_32`, `crypt32` (except Windows App targets perhaps?), `bcrypt` (except old-mingw!) on Windows at this point. They are almost always required, and if some aren't, they are ignored by the linker with no effect on final binaries. Closes #10857
* lib: use correct printf flags for sockets and timediffsDaniel Stenberg2023-03-291-0/+2
| | | | | | | | Introduces CURL_FORMAT_SOCKET_T for outputting socket numbers. Fixes #10737 Reported-by: Gisle Vanem Closes #10855
* CMake: make config version 8 compatible with 7Kai Pastor2023-03-251-0/+9
| | | | | Reviewed-by: Jakub Zakrzewski Closes #10819
* cmake: bring in the network library on Haiku.Douglas R. Reno2023-03-221-0/+5
| | | | | | | | | | | When cross-compiling for Haiku, the networking library needs to be brought in. Without this, an unknown type of "Error" is reported in lib/curl_setup_once.h. This is also needed when using CMake natively on Haiku to build libcurl. Fixes #10296 Closes #10792
* wolfssl: add quic/ngtcp2 detection in cmake, and fix buildsViktor Szakats2023-03-141-59/+78
| | | | | | | | | | | | | | | | | - add QUIC/ngtcp2 detection in CMake with wolfSSL. Because wolfSSL uses zlib if available, move compression detection before TLS detection. (OpenSSL might also need this in the future.) - wolfSSL 5.5.0 started using C99 types in its `quic.h` header, but it doesn't #include the necessary C99 header itself, breaking builds (unless another dependency pulled it by chance.) Add local workaround for it. For this to work with all build tools, we had to fix our header detection first. Ref: #10745 Ref: https://github.com/curl/curl-for-win/commit/6ad5f6ecc15620c15625fc443476b3a1ecef4f3f Closes #10739
* cmake: delete unused HAVE__STRTOI64Viktor Szakats2023-03-131-1/+0
| | | | | | | Also delete obsolete surrounding comments. Reviewed-by: Daniel Stenberg Closes #10756
* build: fix stdint/inttypes detection with non-autotoolsViktor Szakats2023-03-131-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | Fix `stdint.h` and `inttypes.h` detection with non-autotools builds on Windows. (autotools already auto-detected them accurately.) `lib/config-win32.h` builds (e.g. `Makefile.mk`): - set `HAVE_STDINT_H` where supported. - set `HAVE_INTTYPES_H` for MinGW. CMake: - auto-detect them on Windows. (They were both force-disabled.) - delete unused `CURL_PULL_STDINT_H`. - delete unused `CURL_PULL_INTTYPES_H`. - stop detecting `HAVE_STDINT_H` twice. Present since the initial CMake commit: 4c5307b45655ba75ab066564afdc0c111a8b9291 curl doesn't use these C99 headers, we need them now to workaround broken wolfSSL builds. Ref: #10739 Once that clears up, we can delete these detections and macros (unless we want to keep them for future us.) Reviewed-by: Daniel Stenberg Closes #10745
* cmake: fix enabling LDAPS on WindowsViktor Szakats2023-03-051-0/+2
| | | | | | | | | | | | | | | | | | | | Before this patch, enabling LDAPS required a manual C flag: https://github.com/curl/curl-for-win/blob/c1cfc31cfc04f24f7a4f946564d6f0e1b4d7dd36/curl-cmake.sh#L105 Fix this and enable LDAPS automatically when using `wldap32` (and when not explicitly disabled). This matches autotools and `Makefile.mk` behavior. Also remove issue from KNOWN_BUGS. Add workaround for MSVS 2010 warning triggered by LDAPS now enabled in more CI tests: `ldap.c(360): warning C4306: 'type cast' : conversion from 'int' to 'void *' of greater size` Ref: https://ci.appveyor.com/project/curlorg/curl/builds/46408284/job/v8mwl9yfbmoeqwlr#L312 Reported-by: JackBoosY on github Reviewed-by: Jay Satiro Reviewed-by: Marcel Raad Fixes #6284 Closes #10674
* cmake: skip CA-path/bundle auto-detection in cross-buildsViktor Szakats2023-03-051-2/+4
| | | | | | | | | Also remove issue from KNOWN_BUGS. Reported-by: Cristian Morales Vega Reviewed-by: Marcel Raad Fixes #6178 Closes #10676
* curl_setup: Suppress OpenSSL 3 deprecation warningsJay Satiro2023-02-181-2/+0
| | | | | | | | | | | - Define OPENSSL_SUPPRESS_DEPRECATED. OpenSSL 3 has deprecated some of the functions libcurl uses such as those with DES, MD5 and ENGINE prefix. We don't have replacements for those functions so the warnings were disabled in autotools and cmake builds, but still showed in other builds. Closes https://github.com/curl/curl/pull/10543
* cmake: fix Windows check for CryptAcquireContextALittleDruid2023-02-181-1/+1
| | | | | | | Check for CryptAcquireContext in windows.h and wincrypt.h only, since otherwise this check may fail due to third party headers not found. Closes https://github.com/curl/curl/pull/10353
* cmake: delete redundant macro definition `SECURITY_WIN32`Viktor Szakats2023-01-251-1/+0
| | | | | | | | | | | | Stop explicitly defining `SECURITY_WIN32` in CMake builds. No other build systems define this macro, because it's unconditionally defined in `lib/curl_sspi.h` already. This is the only curl source using the `sspi.h` and `security.h` Win32 headers, and no other Win32 headers need this macro. Reviewed-by: Jay Satiro Closes #10341
* cmake: use list APPEND syntax for CMAKE_REQUIRED_DEFINITIONSMarc Aldorasi2023-01-241-4/+4
| | | | | | | - Use list() instead of set() for CMAKE_REQUIRED_DEFINITIONS list since the former is clearer. Closes https://github.com/curl/curl/pull/10272
* cmake: Remove deprecated symbols checkxgladius2023-01-201-18/+0
| | | | | | | | curl stopped use of CMAKE_USE_ as a prefix for its own build symbols in 2021 and added a check, meant to last 1 year, to fatally error on those symbols. This commit removes that check. Closes https://github.com/curl/curl/pull/10314
* copyright: update all copyright lines and remove year rangesDaniel Stenberg2023-01-031-1/+1
| | | | | | | | | | | | - they are mostly pointless in all major jurisdictions - many big corporations and projects already don't use them - saves us from pointless churn - git keeps history for us - the year range is kept in COPYING checksrc is updated to allow non-year using copyright statements Closes #10205
* cmake: check for sendmsgDaniel Stenberg2023-01-031-0/+1
| | | | | | Used by ngtcp2 Closes #10211
* cmake: bump requirement to 3.7Daniel Stenberg2022-12-271-1/+1
| | | | | | | | | Because this is the cmake version (released in November 2016) that introduced GREATER_EQUAL, which is used already. Reported-by: nick-telia on github Fixes #10128 Closes #10161
* cmake: fix the snprintf detectionYurii Rashkovskii2022-12-261-1/+1
| | | | | | | | | I haven't had the time to check other configurations, but on my macOS Ventura 13.1 with XCode 14.2 cmake does not find `snprintf`. Solution: ensure stdio.h is checked for definitions Closes #10155
* build: assume errno.h is always availableJay Satiro2022-12-071-1/+0
| | | | | | | | - Remove errno.h detection from all build configurations. errno.h is a standard header according to C89. Closes https://github.com/curl/curl/pull/9986
* build: assume assert.h is always availableJay Satiro2022-12-071-1/+0
| | | | | | | | | | | | | - Remove assert.h detection from all build configurations. assert.h is a standard header according to C89. I had proposed this several years ago as part of a larger change that was abandoned. Ref: https://github.com/curl/curl/issues/1237#issuecomment-277500720 Closes https://github.com/curl/curl/pull/9985
* CMake: fix build with `CURL_USE_GSSAPI`Jakub Zakrzewski2022-12-021-0/+1
| | | | | | | | CMAKE_*_LINKER_FLAGS must be a string but GSS_LINKER_FLAGS is a list, so we need to replace semicolons with spaces when setting those. Fixes #9017 Closes #1022
* tls: backends use connection filters for IO, enabling HTTPS-proxyStefan Eissing2022-11-281-1/+4
| | | | | | | | | | | | | | | | | | - OpenSSL (and compatible) - BearSSL - gnutls - mbedtls - rustls - schannel - secure-transport - wolfSSL (v5.0.0 and newer) This leaves only the following without HTTPS-proxy support: - gskit - nss - wolfSSL (versions earlier than v5.0.0) Closes #9962
* lib: sync guard for Curl_getaddrinfo_ex() definition and useViktor Szakats2022-11-011-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | `Curl_getaddrinfo_ex()` gets _defined_ with `HAVE_GETADDRINFO` set. But, `hostip4.c` _used_ it with `HAVE_GETADDRINFO_THREADSAFE` set alone. It meant a build with the latter, but without the former flag could result in calling this function but not defining it, and failing to link. Patch this by adding an extra check for `HAVE_GETATTRINFO` around the call. Before this patch, build systems prevented this condition. Now they don't need to. While here, simplify the related CMake logic on Windows by setting `HAVE_GETADDRINFO_THREADSAFE` to the detection result of `HAVE_GETADDRINFO`. This expresses the following intent clearer than the previous patch and keeps the logic in a single block of code: When we have `getaddrinfo()` on Windows, it's always threadsafe. Follow-up to 67d88626d44ec04b9e11dca4cfbf62cd29fe9781 Reviewed-by: Jay Satiro Closes #9734
* tidy-up: process.h detection and useViktor Szakats2022-11-011-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch aims to cleanup the use of `process.h` header and the macro `HAVE_PROCESS_H` associated with it. - `process.h` is always available on Windows. In curl, it is required only for `_beginthreadex()` in `lib/curl_threads.c`. - `process.h` is also available in MS-DOS. In curl, its only use was in `lib/smb.c` for `getpid()`. But `getpid()` is in fact declared by `unistd.h`, which is always enabled via `lib/config-dos.h`. So the header is not necessary. - `HAVE_PROCESS_H` was detected by CMake, forced to 1 on Windows and left to real detection for other platforms. It was also set to always-on in `lib/config-win32.h` and `lib/config-dos.h`. In autotools builds, there was no detection and the macro was never set. Based on these observations, in this patch we: - Rework Windows `getpid` logic in `lib/smb.c` to always use the equivalent direct Win32 API function `GetCurrentProcessId()`, as we already did for Windows UWP apps. This makes `process.h` unnecessary here on Windows. - Stop #including `process.h` into files where it was not necessary. This is everywhere, except `lib/curl_threads.c`. > Strangely enough, `lib/curl_threads.c` compiled fine with autotools > because `process.h` is also indirecty included via `unistd.h`. This > might have been broken in autotools MSVC builds, where the latter > header is missing. - Delete all remaining `HAVE_PROCESS_H` feature guards, for they were unnecessary. - Delete `HAVE_PROCESS_H` detection from CMake and predefined values from `lib/config-*.h` headers. Reviewed-by: Jay Satiro Closes #9703
* cmake: really enable warnings with clangViktor Szakats2022-10-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Even though `PICKY_COMPILER=ON` is the default, warnings were not enabled when using llvm/clang, because `CMAKE_COMPILER_IS_CLANG` was always false (in my tests at least). This is the single use of this variable in curl, and in a different place we already use `CMAKE_C_COMPILER_ID MATCHES "Clang"`, which works as expected, so change the condition to use that instead. Also fix the warnings uncovered by the above: - lib: add casts to silence clang warnings - schannel: add casts to silence clang warnings in ALPN code Assuming the code is correct, solve the warnings with a cast. This particular build case isn't CI tested. There is a chance the warning is relevant for some platforms, perhaps Windows 32-bit ARM7. Closes #9783
* winidn: drop WANT_IDN_PROTOTYPESViktor Szakats2022-10-261-1/+0
| | | | | | | | | | | | | | | | | | | | | `WANT_IDN_PROTOTYPES` was necessary to avoid using a header that came via an optional package. MS stopped distributing this package some years ago and the winidn definitions are part of standard headers (via `windows.h`) since Vista. Auto-detect Vista inside `lib/idn_win32.c` and enable the manual definitions if building for an older Windows. This allows to delete this manual knob from all build-systems. Also drop the `_SAL_VERSION` sub-case: Our manual definitions are now only enabled with old systems. We assume that code analysis is not run on such systems, allowing us to delete the SAL-friendly flavour of these. Reviewed-by: Jay Satiro Closes #9793
* cmake: improve usability of CMake build as a sub-projectJeremy Maitin-Shepard2022-10-211-29/+63
| | | | | | | - Renames `uninstall` -> `curl_uninstall` - Ensures all export rules are guarded by CURL_ENABLE_EXPORT_TARGET Closes #9638
* cmake: set HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID on WindowsViktor Szakats2022-10-141-1/+0
| | | | | | | | | | | | | | | | | | | | | | | `lib/config-win32.h` enables this configuration option unconditionally. Make it apply to CMake builds as well. While here, delete a broken check for `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` from `CMakeLists.txt`. This came with the initial commit [1], but did not include the actual verification code inside `CMake/CurlTests.c`, so it always failed. A later commit [2] added a second test, for non-Windows platforms. Enabling this flag causes test 1056 to fail with CMake builds, as they do with autotools builds. Let's apply the same solution and ignore the results here as well. [1] 4c5307b45655ba75ab066564afdc0c111a8b9291 [2] aec7c5a87c8482b6ddffa352d7d220698652262e Reviewed-by: Daniel Stenberg Assisted-by: Marcel Raad Closes #9726
* cmake: set HAVE_GETADDRINFO_THREADSAFE on WindowsViktor Szakats2022-10-141-0/+3
| | | | | | | | | | | | | | | | | | | | | | autotools enables this configuration option unconditionally for Windows [^1]. Do the same in CMake. The above will make this work for all reasonably recent environments. The logic present in `lib/config-win32.h` [^2] has the following exceptions which we did not cover in this CMake update: - Builds targeting Windows 2000 and earlier - MS Visual C++ 5.0 (1997) and earlier Also make sure to disable this feature when `HAVE_GETADDRINFO` isn't set, to avoid a broken build. We might want to handle that in the C sources in a future commit. [^1]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/m4/curl-functions.m4#L2067-L2070 [^2]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/lib/config-win32.h#L511-L528 Closes #9727
* cmake: sync HAVE_SIGNAL detection with autotoolsViktor Szakats2022-10-141-5/+1
| | | | | | | | | | | | | | | | | | | | | | | `HAVE_SIGNAL` means the availability of the `signal()` function in autotools, while in CMake it meant the availability of that function _and_ the symbol `SIGALRM`. The latter is not available on Windows, but the function is, which means on Windows, autotools did define `HAVE_SIGNAL`, but CMake did not, introducing a slight difference into the binaries. This patch syncs CMake behaviour with autotools to look for the function only. The logic came with the initial commit adding CMake support to curl, so the commit history doesn't reveal the reason behind it. In any case, it's best to check the existence of `SIGALRM` directly in the source before use. For now, curl builds fine with `HAVE_SIGNAL` enabled and `SIGALRM` missing. Follow-up to 68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6 Closes #9725
* cmake: delete duplicate HAVE_GETADDRINFO testViktor Szakats2022-10-141-1/+0
| | | | | | | | | | | | | | A custom `HAVE_GETADDRINFO` check came with the initial CMake commit [1]. A later commit [2] added a standard check for it as well. The standard check run before the custom one, so CMake ignored the latter. The custom check was also non-portable, so this patch deletes it in favor of the standard check. [1] 4c5307b45655ba75ab066564afdc0c111a8b9291 [2] aec7c5a87c8482b6ddffa352d7d220698652262e Closes #9731
* cmake: enable more detection on WindowsViktor Szakats2022-10-111-0/+2
| | | | | | | | | | | | | | | | | | | | Enable `HAVE_UNISTD_H`, `HAVE_STRTOK_R` and `HAVE_STRCASECMP` detection on Windows, instead of having predefined values. With these features detected correctly, CMake Windows builds get closer to the autotools and `config-win32.h` ones. This also fixes detecting `HAVE_FTRUNCATE` correctly, which required `unistd.h`. Fixing `ftruncate()` in turn causes a build warning/error with legacy MinGW/MSYS1 due to an offset type size mismatch. This env misses to detect `HAVE_FILE_OFFSET_BITS`, which may be a reason. This patch force-disables `HAVE_FTRUNCATE` for this platform. Reviewed-by: Daniel Stenberg Closes #9687
* cmake: add missing inet_ntop checkViktor Szakats2022-10-111-0/+4
| | | | | | | | | | | | This adds the missing half of the check, next to the other half already present in `lib/curl_config.h.cmake`. Force disable `HAVE_INET_NTOP` for old MSVC where it caused compiler warnings. Reviewed-by: Daniel Stenberg Closes #9689
* cmake: add the check of HAVE_SOCKETPAIRXiang Xiao2022-10-101-0/+1
| | | | | | | | which is used by Curl_socketpair Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com> Closes #9686
* tidy-up: delete parallel/unused feature flagsViktor Szakats2022-10-061-36/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Detecting headers and lib separately makes sense when headers come in variations or with extra ones, but this wasn't the case here. These were duplicate/parallel macros that we had to keep in sync with each other for a working build. This patch leaves a single macro for each of these dependencies: - Rely on `HAVE_LIBZ`, delete parallel `HAVE_ZLIB_H`. Also delete CMake logic making sure these two were in sync, along with a toggle to turn off that logic, called `CURL_SPECIAL_LIBZ`. Also delete stray `HAVE_ZLIB` defines. There is also a `USE_ZLIB` variant in `lib/config-dos.h`. This patch retains it for compatibility and deprecates it. - Rely on `USE_LIBSSH2`, delete parallel `HAVE_LIBSSH2_H`. Also delete `LIBSSH2_WIN32`, `LIBSSH2_LIBRARY` from `winbuild/MakefileBuild.vc`, these have a role when building libssh2 itself. And `CURL_USE_LIBSSH`, which had no use at all. Also delete stray `HAVE_LIBSSH2` defines. - Rely on `USE_LIBSSH`, delete parallel `HAVE_LIBSSH_LIBSSH_H`. Also delete `LIBSSH_WIN32`, `LIBSSH_LIBRARY` and `HAVE_LIBSSH` from `winbuild/MakefileBuild.vc`, these were the result of copy-pasting the libssh2 line, and were not having any use. - Delete unused `HAVE_LIBPSL_H` and `HAVE_LIBPSL`. Reviewed-by: Daniel Stenberg Closes #9652
* functypes: provide the recv and send arg and return typesDaniel Stenberg2022-09-281-0/+2
| | | | | | | | | | | | This header is for providing the argument types for recv() and send() when built to not use a dedicated config-[platfor].h file. Remove the slow brute-force checks from configure and cmake. This change also removes the use of the types for select, as they were not used in code. Closes #9592
* mprintf: use snprintf if availableDaniel Stenberg2022-09-221-0/+5
| | | | | | | | | | | | This is the single place in libcurl code where it uses the "native" s(n)printf() function. Used for writing floats. The use has been reviewed and vetted and uses a HUGE target buffer, but switching to snprintf() still makes this safer and removes build-time warnings. Reported-by: Philip Heiduck Fixes #9569 Closes #9570
* ws: initial websockets supportDaniel Stenberg2022-09-091-0/+12
| | | | Closes #8995
* cmake: skip superfluous hex2dec conversion using math exprMarc Hoersken2022-09-051-3/+3
| | | | | | | | | | | | | CMake seems to be able to compare two hex values just fine. Also make sure CURL_TARGET_WINDOWS_VERSION is respected. Assisted-by: Marcel Raad Reviewed-by: Viktor Szakats Reported-by: Keitagit-kun on github Follow up to #9312 Fixes #9406 Closes #9411
* cmake: fix original MinGW buildsViktor Szakats2022-08-311-1/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Re-enable `HAVE_GETADDRINFO` detection on Windows Commit d08ee3c83d6bd416aef62ff844c98e47c4682429 (in 2013) added logic that automatically assumed `getaddrinfo()` to be present for builds with IPv6 enabled. As it turns out, certain toolchains (e.g. original MinGW) by default target older Windows versions, and thus do not support `getaddrinfo()` out of the box. The issue was masked for a while by CMake builds forcing a newer Windows version, but that logic got deleted in commit 8ba22ffb2030ed91312fc8634e29516cdf0a9761. Since then, some CI builds started failing due to IPv6 enabled, `HAVE_GETADDRINFO` set, but `getaddrinfo()` in fact missing. It also turns out that IPv6 works without `getaddrinfo()` since commit 67a08dca27a6a07b36c7f97252e284ca957ff1a5 (from 2019, via #4662). So, to resolve all this, we can now revert the initial commit, thus restoring `getaddrinfo()` detection and support IPv6 regardless of its outcome. Reported-by: Daniel Stenberg 2. Omit `bcrypt` with original MinGW Original (aka legacy/old) MinGW versions do not support `bcrypt` (introduced with Vista). We already have logic to handle that in `lib/rand.c` and autotools builds, where we do not call the unsupported API and do not link `bcrypt`, respectively, when using original MinGW. This patch ports that logic to CMake, fixing the link error: `c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: cannot find -lbcrypt` Ref: https://ci.appveyor.com/project/curlorg/curl/builds/44624888/job/40vle84cn4vle7s0#L508 Regression since 76172511e7adcf720f4c77bd91f49278300ec97e Fixes #9214 Fixes #9393 Fixes #9395 Closes #9396
* cmake: set feature PSL if presentDaniel Stenberg2022-08-301-0/+1
| | | | | | ... make test 1014 pass when libpsl is used. Closes #9391
* cmake: add detection of threadsafe featureMarc Hoersken2022-08-261-0/+17
| | | | | | | | | | Avoids failing test 1014 by replicating configure checks for HAVE_ATOMIC and _WIN32_WINNT with custom CMake tests. Reviewed-by: Marcel Raad Follow up to #8680 Closes #9312
* config: remove the check for and use of SIZEOF_SHORTDaniel Stenberg2022-08-111-1/+0
| | | | | | shorts are 2 bytes on all platforms curl runs and have ever run on. Closes #9291
* tidy-up: delete unused build configuration macrosViktor Szakats2022-07-191-52/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of them feature guards: - `CURL_INCLUDES_SYS_UIO` [1] - `HAVE_ALLOCA_H` [2] - `HAVE_CRYPTO_CLEANUP_ALL_EX_DATA` (unused since de71e68000c8624ea13f90b136f8734dd0fb1bdc) - `HAVE_DLFCN_H` - `HAVE_DLOPEN` - `HAVE_DOPRNT` - `HAVE_FCNTL` - `HAVE_GETHOSTBYNAME` [3] - `HAVE_GETOPT_H` - `HAVE_GETPASS` - `HAVE_GETPROTOBYNAME` - `HAVE_GETSERVBYNAME` - `HAVE_IDN_FREE*` - `HAVE_INET_ADDR` - `HAVE_IOCTL` - `HAVE_KRB4` - `HAVE_KRB_GET_OUR_IP_FOR_REALM` - `HAVE_KRB_H` - `HAVE_LDAPSSL_H` - `HAVE_LDAP_INIT_FD` - `HAVE_LIBDL` - `HAVE_LIBNSL` - `HAVE_LIBRESOLV*` - `HAVE_LIBUCB` - `HAVE_LL` - `HAVE_LOCALTIME_R` - `HAVE_MALLOC_H` - `HAVE_MEMCPY` - `HAVE_MEMORY_H` - `HAVE_NETINET_IF_ETHER_H` - `HAVE_NI_WITHSCOPEID` - `HAVE_OPENSSL_CRYPTO_H` - `HAVE_OPENSSL_ERR_H` - `HAVE_OPENSSL_PEM_H` - `HAVE_OPENSSL_PKCS12_H` - `HAVE_OPENSSL_RAND_H` - `HAVE_OPENSSL_RSA_H` - `HAVE_OPENSSL_SSL_H` - `HAVE_OPENSSL_X509_H` - `HAVE_PEM_H` - `HAVE_POLL` - `HAVE_RAND_SCREEN` - `HAVE_RAND_STATUS` - `HAVE_RECVFROM` - `HAVE_SETSOCKOPT` - `HAVE_SETVBUF` - `HAVE_SIZEOF_LONG_DOUBLE` - `HAVE_SOCKIO_H` - `HAVE_SOCK_OPTS` - `HAVE_STDIO_H` - `HAVE_STRCASESTR` - `HAVE_STRFTIME` - `HAVE_STRLCAT` - `HAVE_STRNCMPI` - `HAVE_STRNICMP` - `HAVE_STRSTR` - `HAVE_STRUCT_IN6_ADDR` - `HAVE_TLD_H` - `HAVE_TLD_STRERROR` - `HAVE_UNAME` - `HAVE_USLEEP` - `HAVE_WINBER_H` - `HAVE_WRITEV` - `HAVE_X509_H` - `LT_OBJDIR` - `NEED_BASENAME_PROTO` - `NOT_NEED_LIBNSL` - `OPENSSL_NO_KRB5` - `RECVFROM_TYPE*` - `SIZEOF_LONG_DOUBLE` - `STRERROR_R_TYPE_ARG3` - `USE_YASSLEMUL` - `_USRDLL` (from CMake) [4] [1] Related parts in `m4/curl-functions.m4` and `configure.ac` might also be deleted. [2] Related comment can possibly be deleted in `packages/vms/generate_config_vms_h_curl.com`. [3] There are more instances of this in autotools, but I did not dare to touch those. Looked like it's used to detect socket support. [4] This is necessary for MFC (Microsoft Foundation Class) DLLs to force linking MFC components statically to the DLL. `libcurl.dll` does not use MFC, so we can delete this define. Ref: https://docs.microsoft.com/cpp/build/regular-dlls-statically-linked-to-mfc Script that can help finding unused settings like above: ```shell autoheader configure.ac # generate lib/curl_config.h.in { grep -o -E 'set\([A-Z][A-Z0-9_]{3,}' CMake/Platforms/WindowsCache.cmake | sed -E 's|set\(||g' grep -o -E -h '#define +[A-Z][A-Z0-9_]{3,}' lib/config-*.h | sed -E 's|#define +||g' grep -o -E '#cmakedefine +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.cmake | sed -E 's|#cmakedefine +||g' grep -o -E '#undef +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.in | sed -E 's|#undef +||g' } | sort -u | grep -v -F 'HEADER_CURL_' | while read -r def; do c="$(git grep -w -F "${def}" | grep -v -E -c '(/libcurl\.tmpl|^lib/config-|^lib/curl_config\.h\.cmake|^CMakeLists\.txt|^CMake/Platforms/WindowsCache\.cmake|^packages/vms/config_h\.com|^m4/curl-functions\.m4|^acinclude\.m4|^configure\.ac)')" if [ "${c}" = '0' ]; then echo "${def}" fi done ``` Reviewed-by: Daniel Stenberg Closes #9044
* build: improve OS string in CMake and `config-win32.h`Viktor Szakats2022-07-111-1/+5
| | | | | | | | | | | | | | | | | | | This patch makes CMake fill the "OS string" with the value of `CMAKE_C_COMPILER_TARGET`, if passed. This typically contains a triplet, the same we can pass to `./configure` via `--host=`. For non-CMake, non-autotools, Windows builds, this patch adds the ability to override the default `OS` value in `lib/config-win32.h`. With these its possible to get the same OS string across the three build systems. This patch supersedes the earlier, partial, CMake-only solution: 435f395f3f8c11eebfcc243ca55ebcc11a19b8b8, thus retiring the `CURL_OS_SUFFIX` CMake option. Reviewed-by: Jay Satiro Closes #9117
* cmake: support ngtcp2 boringssl backendDon2022-07-051-2/+7
| | | | | | | | | Update the ngtcp2 find module to detect the boringssl backend. Determine if the underlying OpenSSL implementation is BoringSSL and if so use that as the ngtcp2 backend. Reviewed-by: Jakub Zakrzewski Closes #9065