summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2019-11-08 13:42:59 +0100
committerJan Holesovsky <kendy@collabora.com>2019-11-08 13:56:09 +0100
commit07d5f8cf2aa2495bf803e04afff42a5da911f5b5 (patch)
treed07e3b1d68f03326cbd69431d6a4a18e7e450d98 /configure.ac
parent9d535ca76d652734c138fea3eae40190211e5f71 (diff)
killpoco: Remove POCO usage from FileUtil.cpp when C++17 is available.
This introduces basic C++17 support, because the functionality needed here is easy to implement using std::filesystem. Adds also the necessary checks to ./configure. The code still uses POCO when C++17 is not available in the compiler. Change-Id: I03353834d10201bf0a13ea72715560b9b9b16265 Reviewed-on: https://gerrit.libreoffice.org/82294 Reviewed-by: Jan Holesovsky <kendy@collabora.com> Tested-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac47
1 files changed, 45 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 159204888..401738c67 100644
--- a/configure.ac
+++ b/configure.ac
@@ -506,8 +506,8 @@ fi
# check for C++11 support
HAVE_CXX11=
-AC_MSG_CHECKING([whether $CXX supports C++14 or C++11])
-for flag in -std=gnu++14 -std=gnu++1y -std=c++14 -std=c++1y -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x ; do
+AC_MSG_CHECKING([whether $CXX supports C++17, C++14 or C++11])
+for flag in -std=c++17 -std=gnu++14 -std=gnu++1y -std=c++14 -std=c++1y -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x ; do
save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$CXXFLAGS $flag -Werror"
AC_LANG_PUSH([C++])
@@ -532,6 +532,49 @@ else
AC_MSG_ERROR(no)
fi
+STD_FILESYSTEM=
+if test "$CXXFLAGS_CXX11" = "-std=c++17" ; then
+ save_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS -Werror"
+ save_LIBS=$LIBS
+ LIBS="$save_LIBS -lstdc++fs"
+ AC_LANG_PUSH([C++])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <experimental/filesystem>
+ int main()
+ {
+ if (!std::experimental::filesystem::temp_directory_path().empty())
+ return 0;
+ return 1;
+ }
+ ]])],[STD_FILESYSTEM=experimental])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #include <filesystem>
+ int main()
+ {
+ if (!std::filesystem::temp_directory_path().empty())
+ return 0;
+ return 1;
+ }
+ ]])],[STD_FILESYSTEM=TRUE])
+ AC_LANG_POP([C++])
+ CXXFLAGS=$save_CXXFLAGS
+ LIBS=$save_LIBS
+fi
+
+if test -n "$STD_FILESYSTEM" ; then
+ LIBS="$LIBS -lstdc++fs"
+ AC_DEFINE([HAVE_STD_FILESYSTEM],1,[Whether the used C++ has support for std::filesystem.])
+ if test "$STD_FILESYSTEM" = "experimental" ; then
+ AC_DEFINE([HAVE_STD_FILESYSTEM_EXPERIMENTAL],1,[Whether the std::filesystem is in the experimental header.])
+ else
+ AC_DEFINE([HAVE_STD_FILESYSTEM_EXPERIMENTAL],0,[Whether the std::filesystem is in the experimental header.])
+ fi
+else
+ AC_DEFINE([HAVE_STD_FILESYSTEM],0,[Whether the used C++ has support for std::filesystem.])
+ AC_DEFINE([HAVE_STD_FILESYSTEM_EXPERIMENTAL],0,[Whether the std::filesystem is in the experimental header.])
+fi
+
AS_IF([test -n "$LOKIT_PATH"],
[CPPFLAGS="$CPPFLAGS -I${LOKIT_PATH}"])
lokit_msg="$LOKIT_PATH"