Chris@16: /*============================================================================= Chris@16: Boost.Wave: A Standard compliant C++ preprocessor library Chris@16: Chris@16: http://www.boost.org/ Chris@16: Chris@16: Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost Chris@16: Software License, Version 1.0. (See accompanying file Chris@16: LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: Chris@16: #if !defined(BOOST_WAVE_FILESYSTEM_COMPATIBILITY_MAR_09_2009_0142PM) Chris@16: #define BOOST_WAVE_FILESYSTEM_COMPATIBILITY_MAR_09_2009_0142PM Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace wave { namespace util Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // filesystem wrappers allowing to handle different Boost versions Chris@16: #if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) Chris@16: // interface wrappers for older Boost versions Chris@16: inline boost::filesystem::path initial_path() Chris@16: { Chris@16: return boost::filesystem::initial_path(); Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path current_path() Chris@16: { Chris@16: return boost::filesystem::current_path(); Chris@16: } Chris@16: Chris@16: template Chris@16: inline boost::filesystem::path create_path(String const& p) Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return boost::filesystem::path(p); Chris@16: #else Chris@16: return boost::filesystem::path(p, boost::filesystem::native); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline std::string leaf(boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return p.leaf().string(); Chris@16: #else Chris@16: return p.leaf(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path branch_path(boost::filesystem::path const& p) Chris@16: { Chris@16: return p.branch_path(); Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path normalize(boost::filesystem::path& p) Chris@16: { Chris@16: return p.normalize(); Chris@16: } Chris@16: Chris@16: inline std::string native_file_string(boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return p.string(); Chris@16: #else Chris@16: return p.native_file_string(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path complete_path( Chris@16: boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: #if BOOST_VERSION >= 105000 Chris@16: return boost::filesystem::complete(p, initial_path()); Chris@16: #else Chris@16: return boost::filesystem3::complete(p, initial_path()); Chris@16: #endif Chris@16: #else Chris@16: return boost::filesystem::complete(p, initial_path()); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path complete_path( Chris@16: boost::filesystem::path const& p, boost::filesystem::path const& base) Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: #if BOOST_VERSION >= 105000 Chris@16: return boost::filesystem::complete(p, base); Chris@16: #else Chris@16: return boost::filesystem3::complete(p, base); Chris@16: #endif Chris@16: #else Chris@16: return boost::filesystem::complete(p, base); Chris@16: #endif Chris@16: } Chris@16: Chris@16: #else Chris@16: Chris@16: // interface wrappers if deprecated functions do not exist Chris@16: inline boost::filesystem::path initial_path() Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: #if BOOST_VERSION >= 105000 Chris@16: return boost::filesystem::detail::initial_path(); Chris@16: #else Chris@16: return boost::filesystem3::detail::initial_path(); Chris@16: #endif Chris@16: #else Chris@16: return boost::filesystem::initial_path(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path current_path() Chris@16: { Chris@16: #if BOOST_FILESYSTEM_VERSION >= 3 Chris@16: #if BOOST_VERSION >= 105000 Chris@16: return boost::filesystem::current_path(); Chris@16: #else Chris@16: return boost::filesystem3::current_path(); Chris@16: #endif Chris@16: #else Chris@16: return boost::filesystem::current_path(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: template Chris@16: inline boost::filesystem::path create_path(String const& p) Chris@16: { Chris@16: return boost::filesystem::path(p); Chris@16: } Chris@16: Chris@16: inline std::string leaf(boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return p.filename().string(); Chris@16: #else Chris@16: return p.filename(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path branch_path(boost::filesystem::path const& p) Chris@16: { Chris@16: return p.parent_path(); Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path normalize(boost::filesystem::path& p) Chris@16: { Chris@16: return p; // function doesn't exist anymore Chris@16: } Chris@16: Chris@16: inline std::string native_file_string(boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_VERSION >= 104600 Chris@16: return p.string(); Chris@16: #else Chris@16: return p.file_string(); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path complete_path( Chris@16: boost::filesystem::path const& p) Chris@16: { Chris@16: #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return boost::filesystem::absolute(p, initial_path()); Chris@16: #else Chris@16: return boost::filesystem::complete(p, initial_path()); Chris@16: #endif Chris@16: } Chris@16: Chris@16: inline boost::filesystem::path complete_path( Chris@16: boost::filesystem::path const& p, boost::filesystem::path const& base) Chris@16: { Chris@16: #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 Chris@16: return boost::filesystem::absolute(p, base); Chris@16: #else Chris@16: return boost::filesystem::complete(p, base); Chris@16: #endif Chris@16: } Chris@16: #endif Chris@16: Chris@16: // starting withBoost V1.50 create_directories throws if given an empty path Chris@16: inline bool create_directories(boost::filesystem::path const& p) Chris@16: { Chris@16: if (p.string().empty()) Chris@16: return true; Chris@16: return boost::filesystem::create_directories(p); Chris@16: } Chris@16: }}} Chris@16: Chris@16: #endif