]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Meson: Detect C++ filesystem library
authorFred Morcos <fred.morcos@open-xchange.com>
Wed, 18 Oct 2023 08:29:13 +0000 (10:29 +0200)
committerFred Morcos <fred.morcos@open-xchange.com>
Wed, 20 Mar 2024 12:28:53 +0000 (13:28 +0100)
meson.build
meson/cxx-fs/cxx-fs.cc [new file with mode: 0644]
meson/cxx-fs/meson.build [new file with mode: 0644]

index 230ddf8dbe0085d67026b39c421915a42d5aa54c..0e6584c5c6eda472ba950e15805f04cb5bba1140 100644 (file)
@@ -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 (file)
index 0000000..0b87fb3
--- /dev/null
@@ -0,0 +1,8 @@
+#include <iostream>
+#include <filesystem>
+
+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 (file)
index 0000000..73c22bc
--- /dev/null
@@ -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')