Line data Source code
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 26 0 : inline boost::filesystem::path initial_path() 27 : { 28 0 : return boost::filesystem::initial_path(); 29 : } 30 : 31 : inline boost::filesystem::path current_path() 32 : { 33 : return boost::filesystem::current_path(); 34 : } 35 : 36 : template <typename String> 37 0 : inline boost::filesystem::path create_path(String const& p) 38 : { 39 : #if BOOST_FILESYSTEM_VERSION >= 3 40 0 : return boost::filesystem::path(p); 41 : #else 42 : return boost::filesystem::path(p, boost::filesystem::native); 43 : #endif 44 : } 45 : 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 : 55 0 : inline boost::filesystem::path branch_path(boost::filesystem::path const& p) 56 : { 57 0 : return p.branch_path(); 58 : } 59 : 60 0 : inline boost::filesystem::path normalize(boost::filesystem::path& p) 61 : { 62 0 : return p.normalize().make_preferred(); 63 : } 64 : 65 0 : inline std::string native_file_string(boost::filesystem::path const& p) 66 : { 67 : #if BOOST_FILESYSTEM_VERSION >= 3 68 0 : return p.string(); 69 : #else 70 : return p.native_file_string(); 71 : #endif 72 : } 73 : 74 0 : 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 0 : 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 : 88 0 : 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 0 : 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 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