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:
@@ -505,21 +505,18 @@ namespace nana
|
||||
|
||||
auto fpath = i->path().native();
|
||||
auto fattr = fs::status(fpath);
|
||||
auto ftype = static_cast<fs::file_type>(fattr.type());
|
||||
|
||||
item_fs m;
|
||||
m.name = name;
|
||||
m.directory = fs::is_directory(fattr);
|
||||
|
||||
switch(fattr.type())
|
||||
{
|
||||
case fs::file_type::not_found:
|
||||
case fs::file_type::unknown:
|
||||
case fs::file_type::directory:
|
||||
if (ftype == fs::file_type::not_found ||
|
||||
ftype == fs::file_type::unknown ||
|
||||
ftype == fs::file_type::directory)
|
||||
m.bytes = 0;
|
||||
break;
|
||||
default:
|
||||
else
|
||||
m.bytes = fs::file_size(fpath);
|
||||
}
|
||||
|
||||
fs_ext::modified_file_time(fpath, m.modified_time);
|
||||
|
||||
@@ -692,13 +689,12 @@ namespace nana
|
||||
return;
|
||||
}
|
||||
|
||||
using file_type = fs::file_type;
|
||||
|
||||
fs::path fspath(fb_.addr_.filesystem + path);
|
||||
|
||||
auto fst = fs::status(fspath);
|
||||
auto fattr = fs::status(fspath);
|
||||
auto ftype = static_cast<fs::file_type>(fattr.type());
|
||||
|
||||
if(fst.type() != file_type::not_found && fst.type() != file_type::none)
|
||||
if(ftype != fs::file_type::not_found && ftype != fs::file_type::none)
|
||||
{
|
||||
mb<<i18n("NANA_FILEBOX_ERROR_RENAME_FOLDER_BECAUSE_OF_EXISTING");
|
||||
mb();
|
||||
@@ -800,6 +796,7 @@ namespace nana
|
||||
tar = addr_.filesystem + file;
|
||||
|
||||
auto fattr = fs::status(tar);
|
||||
auto ftype = static_cast<fs::file_type>(fattr.type());
|
||||
|
||||
//Check if the selected name is a directory
|
||||
auto is_dir = fs::is_directory(fattr);
|
||||
@@ -808,6 +805,7 @@ namespace nana
|
||||
{
|
||||
//Add the extension, then check if it is a directory again.
|
||||
fattr = fs::status(tar);
|
||||
ftype = static_cast<fs::file_type>(fattr.type());
|
||||
is_dir = fs::is_directory(fattr);
|
||||
}
|
||||
|
||||
@@ -820,7 +818,7 @@ namespace nana
|
||||
|
||||
if(io_read_)
|
||||
{
|
||||
if(fs::file_type::not_found == fattr.type())
|
||||
if(fs::file_type::not_found == ftype)
|
||||
{
|
||||
msgbox mb(*this, caption());
|
||||
mb.icon(msgbox::icon_information);
|
||||
@@ -832,7 +830,7 @@ namespace nana
|
||||
}
|
||||
else
|
||||
{
|
||||
if(fs::file_type::not_found != fattr.type())
|
||||
if(fs::file_type::not_found != ftype)
|
||||
{
|
||||
msgbox mb(*this, caption(), msgbox::yes_no);
|
||||
mb.icon(msgbox::icon_question);
|
||||
|
||||
Reference in New Issue
Block a user