fix compilation with boost::filesystem

CMakeLists.txt:
---------------------------
Until now build with boost::filesystem was completely broken,
since cmake exported definitions with wrong name prefixes, and
nana always defaulted to internal filesystem implementation.

After fixing the boost definitions, a number of errors came up
due to incompatibility of boost::filesystem with nana and std
filesystems. This commit tries to fix them all.

filesystem.cpp, filesystem.hpp, filebox.cpp:
--------------------------------------------
boost::filesystem doesn't have a file_time_type, so declared
it in the filesystem.hpp header.

boost::filesystem::last_write_time has a return type std::time_t
unlike the other two implementations of this function in nana
and std, so added ifdef to convert the result to file_time_type.

fixed build on gcc-4.9, since it doesn't have a std::put_time
function, included <nana/stdc++.hpp> in that case.

boost::filesystem::file_type types have different names than
std::experimental::filesystem::file_type types, fixed it by
creating an enum class file_type with the same type names as
in std::experimental::filesystem::file_type. This fix
requires static_cast from functions results to internal file_type,
since boost file_type and std file_type a different enum classes.

changed switch to if, bacause old gcc fails on converting
enum class members to int.

stdc++.hpp:
-----------
added ifndef guards to prevent errors on multiple includes of this header.

wvl.cpp:
--------
added boost/chrono.hpp include for the cases when std::thread is not
available.

travis:
-------
added boost system, thread, chrono libs to install, they are needed
for the nana-demo to compile.
This commit is contained in:
pavelxdd
2017-11-25 04:26:01 +03:00
parent a57c7ac409
commit 7e68068c25
7 changed files with 57 additions and 19 deletions

View File

@@ -53,6 +53,7 @@
#undef NANA_USING_BOOST_FILESYSTEM
#define NANA_USING_BOOST_FILESYSTEM 1
# include <chrono>
# include <boost/filesystem.hpp>
// add boost::filesystem into std::experimental::filesystem
@@ -60,6 +61,20 @@ namespace std {
namespace experimental {
namespace filesystem {
using namespace boost::filesystem;
using file_time_type = std::chrono::time_point<std::chrono::system_clock>;
enum class file_type {
none = boost::filesystem::file_type::status_unknown,
not_found = boost::filesystem::file_type::file_not_found,
regular = boost::filesystem::file_type::regular_file,
directory = boost::filesystem::file_type::directory_file,
symlink = boost::filesystem::file_type::symlink_file,
block = boost::filesystem::file_type::block_file,
character = boost::filesystem::file_type::character_file,
fifo = boost::filesystem::file_type::fifo_file,
socket = boost::filesystem::file_type::socket_file,
unknown = boost::filesystem::file_type::type_unknown,
};
} // filesystem
} // experimental
} // std

View File

@@ -12,6 +12,9 @@
* @brief Implement the lack support of standard library.
*/
#ifndef NANA_STDCXX_INCLUDED
#define NANA_STDCXX_INCLUDED
#include "c++defines.hpp"
//Implement workarounds for GCC/MinGW which version is below 4.8.2
@@ -153,4 +156,6 @@ namespace std
return (v < lo ? lo : (hi < v ? hi : v));
}
}
#endif
#endif
#endif // NANA_STDCXX_INCLUDED