mirror of
https://github.com/cemu-project/vcpkg.git
synced 2025-02-23 02:57:09 +01:00
[vcpkg] Add CMake heuristics for header-only libraries (#12386)
* [vcpkg] Add CMake heuristics for header-only libraries * [vcpkg] Update toolsrc/src/vcpkg/install.cpp Handles the case of: ``` triplet/lib/ triplet/lib/x.pc ``` Co-authored-by: nicole mazzuca <mazzucan@outlook.com> Co-authored-by: Robert Schumacher <roschuma@microsoft.com> Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
This commit is contained in:
parent
52a9d9a9e4
commit
7b3eea9481
@ -578,6 +578,8 @@ namespace vcpkg::Install
|
|||||||
{
|
{
|
||||||
std::map<std::string, std::string> config_files;
|
std::map<std::string, std::string> config_files;
|
||||||
std::map<std::string, std::vector<std::string>> library_targets;
|
std::map<std::string, std::vector<std::string>> library_targets;
|
||||||
|
bool is_header_only = true;
|
||||||
|
std::string header_path;
|
||||||
|
|
||||||
for (auto&& suffix : *p_lines)
|
for (auto&& suffix : *p_lines)
|
||||||
{
|
{
|
||||||
@ -617,10 +619,42 @@ namespace vcpkg::Install
|
|||||||
config_files[find_package_name] = root;
|
config_files[find_package_name] = root;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Strings::case_insensitive_ascii_contains(suffix, "/lib/") ||
|
||||||
|
Strings::case_insensitive_ascii_contains(suffix, "/bin/"))
|
||||||
|
{
|
||||||
|
if (!Strings::ends_with(suffix, ".pc") && !Strings::ends_with(suffix, "/")) is_header_only = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_header_only && header_path.empty())
|
||||||
|
{
|
||||||
|
auto it = suffix.find("/include/");
|
||||||
|
if (it != std::string::npos && !Strings::ends_with(suffix, "/"))
|
||||||
|
{
|
||||||
|
header_path = suffix.substr(it + 9);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (library_targets.empty())
|
if (library_targets.empty())
|
||||||
{
|
{
|
||||||
|
if (is_header_only && !header_path.empty())
|
||||||
|
{
|
||||||
|
static auto cmakeify = [](std::string name) {
|
||||||
|
auto n = Strings::ascii_to_uppercase(Strings::replace_all(std::move(name), "-", "_"));
|
||||||
|
if (n.empty() || Parse::ParserBase::is_ascii_digit(n[0]))
|
||||||
|
{
|
||||||
|
n.insert(n.begin(), '_');
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto name = cmakeify(bpgh.spec.name());
|
||||||
|
auto msg = Strings::concat(
|
||||||
|
"The package ", bpgh.spec, " is header only and can be used from CMake via:\n\n");
|
||||||
|
Strings::append(msg, " find_path(", name, "_INCLUDE_DIRS \"", header_path, "\")\n");
|
||||||
|
Strings::append(msg, " target_include_directories(main PRIVATE ${", name, "_INCLUDE_DIRS})\n\n");
|
||||||
|
System::print2(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user