-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmake: add native pkg-config
detection for remaining Find modules
#15408
Conversation
b2b30b6
to
352f651
Compare
Analysis of PR #15408 at 352f651e: Test 575 failed, which has NOT been flaky recently, so there could be a real issue in this PR. Test 1631 failed, which has NOT been flaky recently, so there could be a real issue in this PR. Test 1632 failed, which has NOT been flaky recently, so there could be a real issue in this PR. Test 510 failed, which has NOT been flaky recently, so there could be a real issue in this PR. Generated by Testclutch |
681ee77
to
690f075
Compare
Bogus empty version number when undetected: ``` Could NOT find NGHTTP2 (missing: NGHTTP2_INCLUDE_DIR NGHTTP2_LIBRARY) (found version "") ``` https://github.com/curl/curl/actions/runs/11509727553/job/32040378958?pr=15408#step:31:80
What seems to be happening on macOS, is that CMake is reporting This wasn't happening earlier when working on this PR. It might be I see 3 ways to fix it:
Then the question remains if this is a systemic issue that may |
690f075
to
2528e11
Compare
Probably requires curl#15408
Same as seen before with libssh2. Follow-up to 39c741b curl#15408 Might be due to broken local installation. This also doesn't help: export PKG_CONFIG_PATH="$(brew --prefix icu4c)/lib/pkgconfig" where the expression resolves to the non-existing: /usr/local/opt/icu4c@76/lib/pkgconfig Seen on macOS with Homebrew: ``` -- Checking for module 'libpsl' -- Found libpsl, version 0.21.5 Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found -- Found Libpsl (via pkg-config): (found version "0.21.5") [...] In file included from curl/_bld/lib/CMakeFiles/libcurl_static.dir/Unity/unity_0_c.c:4: In file included from curl/lib/altsvc.c:32: In file included from curl/lib/urldata.h:145: curl/lib/psl.h:28:10: fatal error: 'libpsl.h' file not found ^~~~~~~~~~ 1 error generated. ```
Same issue as seen before with libssh2: `libpsl`'s pkg-config module depends on another module, but that's not found. CMake ends up reporting `LIBPSL_FOUND=YES`, while leaving `LIBPSL_INCLUDE_DIRS` empty. Then the build fails to find `psl.h`. The missing dependency in this case is `icu4c`, which is "keg-only", meaning it's not exposed in the default Homebrew header, pkg-config, lib, etc locations. It must be added to the `PKG_CONFIG_PATH` env, as suggested by the warnings messages of `pkgconf`. To avoid this fallout, let's ensure that `LIBPSL_INCLUDE_DIRS` is non-empty when detecting via `pkg-config` and fall back to the CMake detection method otherwise. This was an issue till Homebrew libpsl 0.21.5_1, fixed in 0.21.5_2, that no longer depends on `icu4c`. Example log: ``` -- Checking for module 'libpsl' -- Found libpsl, version 0.21.5 Package icu-uc was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-uc.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-uc', required by 'libpsl', not found [...] -- Found Libpsl (via pkg-config): (found version "0.21.5") [...] In file included from curl/_bld/lib/CMakeFiles/libcurl_static.dir/Unity/unity_0_c.c:4: In file included from curl/lib/altsvc.c:32: In file included from curl/lib/urldata.h:145: curl/lib/psl.h:28:10: fatal error: 'libpsl.h' file not found ^~~~~~~~~~ 1 error generated. ``` Follow-up to 39c741b #15408 Closes #15827
brotli, c-ares, libpsl, libssh2, nghttp2, nghttp3, ntgcp2, zstd.
Also:
Add workaround for CMake reporting successful libssh2 detection, but
leaving the header directory empty, and causing
libssh2.h
not foundwhile compiling. It happens when
pkgconf
is not detecting libssh2dependency libcrypto in Homebrew after
brew unlink openssl
(as inGHA/macos). The workaround is to require a non-empty header directory
to consider the detection successful. This workaround may need to be
tweaked and/or applied to other Find modules.
Follow-up to 7bab201 #15193
w/o whitespace: https://github.com/curl/curl/pull/15408/files?w=1
list(REVERSE ..)
to FindBrotli for correctness. (current lib list isn't affected)libcurl.pc
unless found viapkg-config
#15573.