diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2020-04-13 15:38:20 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2020-04-13 15:38:20 +0200 |
commit | c1f396592c5942222fb5446207ab56e8714420e8 (patch) | |
tree | fa8c058b24658ee85fb10ea3ef7484e6b8af9768 /libbuild2/cc | |
parent | 4dc1a0acf65b837206cfc03c546ffa9ed6623be1 (diff) |
Add ../share/pkgconfig/ search directory by default on Linux
Diffstat (limited to 'libbuild2/cc')
-rw-r--r-- | libbuild2/cc/common.hxx | 2 | ||||
-rw-r--r-- | libbuild2/cc/pkgconfig.cxx | 28 |
2 files changed, 20 insertions, 10 deletions
diff --git a/libbuild2/cc/common.hxx b/libbuild2/cc/common.hxx index ee722bd..422b761 100644 --- a/libbuild2/cc/common.hxx +++ b/libbuild2/cc/common.hxx @@ -354,7 +354,7 @@ namespace build2 using pkgconfig_callback = function<bool (dir_path&& d)>; bool - pkgconfig_search (const dir_path&, const pkgconfig_callback&) const; + pkgconfig_derive (const dir_path&, const pkgconfig_callback&) const; pair<path, path> pkgconfig_search (const dir_path&, diff --git a/libbuild2/cc/pkgconfig.cxx b/libbuild2/cc/pkgconfig.cxx index f95599f..bcab64e 100644 --- a/libbuild2/cc/pkgconfig.cxx +++ b/libbuild2/cc/pkgconfig.cxx @@ -499,13 +499,13 @@ namespace build2 // #ifndef BUILD2_BOOTSTRAP - // Iterate over pkgconf directories that correspond to the specified - // library directory, passing them to the callback function for as long as - // it returns false (not found). Return true if the callback returned + // Derive pkgconf search directories from the specified library search + // directory passing them to the callback function for as long as it + // returns false (e.g., not found). Return true if the callback returned // true. // bool common:: - pkgconfig_search (const dir_path& d, const pkgconfig_callback& f) const + pkgconfig_derive (const dir_path& d, const pkgconfig_callback& f) const { dir_path pd (d); @@ -519,7 +519,17 @@ namespace build2 // Platform-specific locations. // - if (tsys == "freebsd") + if (tsys == "linux-gnu") + { + // On Linux (at least on Debain and Fedora) .pc files for header-only + // libraries often go to /usr/share/pkgconfig/. + // + (((pd = d) /= "..") /= "share") /= "pkgconfig"; + + if (exists (pd) && f (move (pd))) + return true; + } + else if (tsys == "freebsd") { // On FreeBSD .pc files go to libdata/pkgconfig/, not lib/pkgconfig/. // @@ -623,7 +633,7 @@ namespace build2 pair<path, path> r; - if (pkgconfig_search (libd, check)) + if (pkgconfig_derive (libd, check)) { r.first = move (d.a); r.second = move (d.s); @@ -1205,9 +1215,9 @@ namespace build2 return false; }; - pkgconfig_search (libd, add_pc_dir); - for (const dir_path& d: top_usrd) pkgconfig_search (d, add_pc_dir); - for (const dir_path& d: top_sysd) pkgconfig_search (d, add_pc_dir); + pkgconfig_derive (libd, add_pc_dir); + for (const dir_path& d: top_usrd) pkgconfig_derive (d, add_pc_dir); + for (const dir_path& d: top_sysd) pkgconfig_derive (d, add_pc_dir); bool pa (at != nullptr && !ap.empty ()); if (pa || sp.empty ()) |