1 /*============================================================================= 2 Boost.Wave: A Standard compliant C++ preprocessor library 3 4 http://www.boost.org/ 5 6 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost 7 Software License, Version 1.0. (See accompanying file 8 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 =============================================================================*/ 10 11 #if !defined(BOOST_WAVE_FILESYSTEM_COMPATIBILITY_MAR_09_2009_0142PM) 12 #define BOOST_WAVE_FILESYSTEM_COMPATIBILITY_MAR_09_2009_0142PM 13 14 #include <string> 15 16 #include <boost/version.hpp> 17 #include <boost/filesystem/path.hpp> 18 #include <boost/filesystem/operations.hpp> 19 20 namespace boost { namespace wave { namespace util 21 { 22 /////////////////////////////////////////////////////////////////////////////// 23 // filesystem wrappers allowing to handle different Boost versions 24 #if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) 25 // interface wrappers for older Boost versions initial_path()26 inline boost::filesystem::path initial_path() 27 { 28 return boost::filesystem::initial_path(); 29 } 30 current_path()31 inline boost::filesystem::path current_path() 32 { 33 return boost::filesystem::current_path(); 34 } 35 36 template <typename String> create_path(String const & p)37 inline boost::filesystem::path create_path(String const& p) 38 { 39 #if BOOST_FILESYSTEM_VERSION >= 3 40 return boost::filesystem::path(p); 41 #else 42 return boost::filesystem::path(p, boost::filesystem::native); 43 #endif 44 } 45 leaf(boost::filesystem::path const & p)46 inline std::string leaf(boost::filesystem::path const& p) 47 { 48 #if BOOST_FILESYSTEM_VERSION >= 3 49 return p.leaf().string(); 50 #else 51 return p.leaf(); 52 #endif 53 } 54 branch_path(boost::filesystem::path const & p)55 inline boost::filesystem::path branch_path(boost::filesystem::path const& p) 56 { 57 return p.branch_path(); 58 } 59 normalize(boost::filesystem::path & p)60 inline boost::filesystem::path normalize(boost::filesystem::path& p) 61 { 62 return p.normalize().make_preferred(); 63 } 64 native_file_string(boost::filesystem::path const & p)65 inline std::string native_file_string(boost::filesystem::path const& p) 66 { 67 #if BOOST_FILESYSTEM_VERSION >= 3 68 return p.string(); 69 #else 70 return p.native_file_string(); 71 #endif 72 } 73 complete_path(boost::filesystem::path const & p)74 inline boost::filesystem::path complete_path( 75 boost::filesystem::path const& p) 76 { 77 #if BOOST_FILESYSTEM_VERSION >= 3 78 #if BOOST_VERSION >= 105000 79 return boost::filesystem::complete(p, initial_path()); 80 #else 81 return boost::filesystem3::complete(p, initial_path()); 82 #endif 83 #else 84 return boost::filesystem::complete(p, initial_path()); 85 #endif 86 } 87 complete_path(boost::filesystem::path const & p,boost::filesystem::path const & base)88 inline boost::filesystem::path complete_path( 89 boost::filesystem::path const& p, boost::filesystem::path const& base) 90 { 91 #if BOOST_FILESYSTEM_VERSION >= 3 92 #if BOOST_VERSION >= 105000 93 return boost::filesystem::complete(p, base); 94 #else 95 return boost::filesystem3::complete(p, base); 96 #endif 97 #else 98 return boost::filesystem::complete(p, base); 99 #endif 100 } 101 102 #else 103 104 // interface wrappers if deprecated functions do not exist 105 inline boost::filesystem::path initial_path() 106 { 107 #if BOOST_FILESYSTEM_VERSION >= 3 108 #if BOOST_VERSION >= 105000 109 return boost::filesystem::detail::initial_path(); 110 #else 111 return boost::filesystem3::detail::initial_path(); 112 #endif 113 #else 114 return boost::filesystem::initial_path<boost::filesystem::path>(); 115 #endif 116 } 117 118 inline boost::filesystem::path current_path() 119 { 120 #if BOOST_FILESYSTEM_VERSION >= 3 121 #if BOOST_VERSION >= 105000 122 return boost::filesystem::current_path(); 123 #else 124 return boost::filesystem3::current_path(); 125 #endif 126 #else 127 return boost::filesystem::current_path<boost::filesystem::path>(); 128 #endif 129 } 130 131 template <typename String> 132 inline boost::filesystem::path create_path(String const& p) 133 { 134 return boost::filesystem::path(p); 135 } 136 137 inline std::string leaf(boost::filesystem::path const& p) 138 { 139 #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 140 return p.filename().string(); 141 #else 142 return p.filename(); 143 #endif 144 } 145 146 inline boost::filesystem::path branch_path(boost::filesystem::path const& p) 147 { 148 return p.parent_path(); 149 } 150 151 inline boost::filesystem::path normalize(boost::filesystem::path& p) 152 { 153 return p; // function doesn't exist anymore 154 } 155 156 inline std::string native_file_string(boost::filesystem::path const& p) 157 { 158 #if BOOST_VERSION >= 104600 159 return p.string(); 160 #else 161 return p.file_string(); 162 #endif 163 } 164 165 inline boost::filesystem::path complete_path( 166 boost::filesystem::path const& p) 167 { 168 #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 169 return boost::filesystem::absolute(p, initial_path()); 170 #else 171 return boost::filesystem::complete(p, initial_path()); 172 #endif 173 } 174 175 inline boost::filesystem::path complete_path( 176 boost::filesystem::path const& p, boost::filesystem::path const& base) 177 { 178 #if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3 179 return boost::filesystem::absolute(p, base); 180 #else 181 return boost::filesystem::complete(p, base); 182 #endif 183 } 184 #endif 185 186 // starting withBoost V1.50 create_directories throws if given an empty path create_directories(boost::filesystem::path const & p)187 inline bool create_directories(boost::filesystem::path const& p) 188 { 189 if (p.string().empty()) 190 return true; 191 return boost::filesystem::create_directories(p); 192 } 193 }}} 194 195 #endif 196