From d4acbd39ef5b1aa8a5c1f6dbf0d98feaeb574b9a Mon Sep 17 00:00:00 2001 From: Fred Morcos Date: Wed, 18 Oct 2023 10:29:13 +0200 Subject: [PATCH] Meson: Detect C++ filesystem library --- meson.build | 2 +- meson/cxx-fs/cxx-fs.cc | 8 ++++++++ meson/cxx-fs/meson.build | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 meson/cxx-fs/cxx-fs.cc create mode 100644 meson/cxx-fs/meson.build diff --git a/meson.build b/meson.build index 230ddf8dbe..0e6584c5c6 100644 --- a/meson.build +++ b/meson.build @@ -139,7 +139,7 @@ all_modules = { 'lua2': {'deps': [], 'exts': []}, 'remote': {'deps': ['prog-curl', 'zeromq'], 'exts': []}, 'tinydns': {'deps': ['cdb'], 'exts': []}, - 'geoip': {'deps': ['geoip', 'mmdb'], 'exts': []}, + 'geoip': {'deps': ['geoip', 'mmdb', 'cxx-fs'], 'exts': []}, 'lmdb': {'deps': ['lmdb', 'boost-serialization'], 'exts': ['lmdb-safe']}, } diff --git a/meson/cxx-fs/cxx-fs.cc b/meson/cxx-fs/cxx-fs.cc new file mode 100644 index 0000000000..0b87fb3be4 --- /dev/null +++ b/meson/cxx-fs/cxx-fs.cc @@ -0,0 +1,8 @@ +#include +#include + +int main() { + std::filesystem::path path("."); + [[maybe_unused]] std::filesystem::file_status status = std::filesystem::status(path); + return 0; +} diff --git a/meson/cxx-fs/meson.build b/meson/cxx-fs/meson.build new file mode 100644 index 0000000000..73c22bc9ad --- /dev/null +++ b/meson/cxx-fs/meson.build @@ -0,0 +1,33 @@ +dep_cxx_fs = dependency('', required: false) +need_cxx_fs = false + +prog = fs.read('cxx-fs.cc') +if not cxx.links(prog, name: '-lstdc++fs and -lc++fs are not needed') + lib_cxx_fs = cxx.find_library('stdc++fs', disabler: true, required: false) + if lib_cxx_fs.found() + if cxx.links(prog, name: '-lstdc++fs is needed', dependencies: lib_cxx_fs) + need_cxx_fs = '-lstdc++fs' + dep_cxx_fs = declare_dependency(dependencies: lib_cxx_fs) + summary('Filesystem library', lib_cxx_fs, section: 'System') + endif + endif + + if need_cxx_fs == false + lib_cxx_fs = cxx.find_library('c++fs', disabler: true, required: false) + if lib_cxx_fs.found() + if cxx.links(prog, name: '-lc++fs is needed', dependencies: lib_cxx_fs) + need_cxx_fs = '-lc++fs' + dep_cxx_fs = declare_dependency(dependencies: lib_cxx_fs) + summary('Filesystem library', lib_cxx_fs, section: 'System') + else + error('C++ Filesystem library was found but linking against it failed') + endif + else + error('C++ Filesystem library is needed but could not be found') + endif + endif +else + dep_cxx_fs = declare_dependency() +endif + +summary('Need -lstdc++fs or -lc++fs', need_cxx_fs, bool_yn: true, section: 'System') -- 2.47.3