cmake/FindLibpsl: protect against pkg-config "half-detection"#15827
Closed
vszakats wants to merge 1 commit intocurl:masterfrom
Closed
cmake/FindLibpsl: protect against pkg-config "half-detection"#15827vszakats wants to merge 1 commit intocurl:masterfrom
pkg-config "half-detection"#15827vszakats wants to merge 1 commit intocurl:masterfrom
Conversation
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. ```
pkg-config "half-detection"
pps83
pushed a commit
to pps83/curl
that referenced
this pull request
Apr 26, 2025
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 curl#15408
Closes curl#15827
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Same issue as seen before with libssh2:
libpsl's pkg-config moduledepends on another module, but that's not found. CMake ends up reporting
LIBPSL_FOUND=YES, while leavingLIBPSL_INCLUDE_DIRSempty. Thenthe 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_PATHenv, assuggested by the warnings messages of
pkgconf.To avoid this fallout, let's ensure that
LIBPSL_INCLUDE_DIRSisnon-empty when detecting via
pkg-configand fall back to the CMakedetection 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:
Follow-up to 39c741b #15408