aboutsummaryrefslogtreecommitdiff
path: root/build-aux/m4
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2021-06-28 16:00:06 +0800
committerfanquake <fanquake@gmail.com>2022-02-03 18:35:41 +0800
commitffc89d1f21258553c0087b774a9ea1ce84139d4f (patch)
tree583c400f93118c6aee958a78e426dcba46232a0d /build-aux/m4
parentc194293883fbb656779102309b2cb3e60889feff (diff)
build: add support for std::filesystem
Add a macro to check if linking with -lstdc++fs or -lc++fs is required.
Diffstat (limited to 'build-aux/m4')
-rw-r--r--build-aux/m4/l_filesystem.m447
1 files changed, 47 insertions, 0 deletions
diff --git a/build-aux/m4/l_filesystem.m4 b/build-aux/m4/l_filesystem.m4
new file mode 100644
index 0000000000..ca3a0cd41c
--- /dev/null
+++ b/build-aux/m4/l_filesystem.m4
@@ -0,0 +1,47 @@
+dnl Copyright (c) 2022 The Bitcoin Core developers
+dnl Distributed under the MIT software license, see the accompanying
+dnl file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+# GCC 8.1 and earlier requires -lstdc++fs
+# Clang 8.0.0 (libc++) and earlier requires -lc++fs
+
+m4_define([_CHECK_FILESYSTEM_testbody], [[
+ #include <filesystem>
+
+ namespace fs = std::filesystem;
+
+ int main() {
+ (void)fs::current_path().root_name();
+ return 0;
+ }
+]])
+
+AC_DEFUN([CHECK_FILESYSTEM], [
+
+ AC_LANG_PUSH(C++)
+
+ AC_MSG_CHECKING([whether std::filesystem can be used without link library])
+
+ AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ SAVED_LIBS="$LIBS"
+ LIBS="$SAVED_LIBS -lstdc++fs"
+ AC_MSG_CHECKING([whether std::filesystem needs -lstdc++fs])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ AC_MSG_CHECKING([whether std::filesystem needs -lc++fs])
+ LIBS="$SAVED_LIBS -lc++fs"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_FAILURE([cannot figure out how to use std::filesystem])
+ ])
+ ])
+ ])
+
+ AC_LANG_POP
+])