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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user