diff --git a/include/boost/filesystem/operations.hpp b/include/boost/filesystem/operations.hpp index 59d67b3..ef75bde 100644 --- a/include/boost/filesystem/operations.hpp +++ b/include/boost/filesystem/operations.hpp @@ -657,7 +657,7 @@ namespace boost // [Note: If either p or base is_relative(), user may wish to wrap the call to that // argument in a call to absolute(). -- end note] { - return lexically_relative(semi_canonical(p), semi_canonical(base)); + return semi_canonical(p).relative(semi_canonical(base)); } inline diff --git a/include/boost/filesystem/path.hpp b/include/boost/filesystem/path.hpp index ff9e6d7..4caaa01 100644 --- a/include/boost/filesystem/path.hpp +++ b/include/boost/filesystem/path.hpp @@ -501,6 +501,12 @@ namespace filesystem } bool is_relative() const { return !is_absolute(); } + // ----- lexical operations ----- + + path relative(const path& p) const; + // TODO: document dangers of lack of symlink following, no normalization, + // difference of "symlink/.." handling between Windows and POSIX + // ----- iterators ----- class iterator; @@ -695,9 +701,6 @@ namespace filesystem inline path operator/(const path& lhs, const path& rhs) { return path(lhs) /= rhs; } - BOOST_FILESYSTEM_DECL - path lexically_relative(const path& p, const path& base); - // inserters and extractors // use boost::io::quoted() to handle spaces in paths // use '&' as escape character to ease use for Windows paths diff --git a/src/path.cpp b/src/path.cpp index 5fc8606..10cbe1c 100644 --- a/src/path.cpp +++ b/src/path.cpp @@ -388,7 +388,42 @@ namespace filesystem : path(name.m_pathname.c_str() + pos); } - // m_normalize ----------------------------------------------------------------------// + // lexical operations --------------------------------------------------------------// + + namespace detail + { + // C++14 provide a mismatch algorithm with four iterator arguments(), but earlier + // standard libraries didn't, so provide this needed functionality. + inline + std::pair mismatch(path::iterator it1, + path::iterator it1end, path::iterator it2, path::iterator it2end) + { + for (; it1 != it1end && it2 != it2end && *it1 == *it2;) + { + ++it1; + ++it2; + } + return std::make_pair(it1, it2); + } + } + + path path::relative(const path& base) const + { + std::pair mm + = detail::mismatch(begin(), end(), base.begin(), base.end()); + if (mm.first == begin() && mm.second == base.begin()) + return path(); + if (mm.first == end() && mm.second == base.end()) + return detail::dot_path(); + path tmp; + for (; mm.second != base.end(); ++mm.second) + tmp /= detail::dot_dot_path(); + for (; mm.first != end(); ++mm.first) + tmp /= *mm.first; + return tmp; + } + + // m_normalize ---------------------------------------------------------------------// path& path::m_normalize() { @@ -807,50 +842,6 @@ namespace filesystem it.m_element.m_pathname = separator_string; // generic format; see docs } - //--------------------------------------------------------------------------------------// - // // - // class path non-member functions implementation // - // // - //--------------------------------------------------------------------------------------// - - namespace detail - { - // C++14 provide a mismatch algorithm with four iterator arguments(), but earlier - // standard libraries didn't, so provide the needed functionality here in detail. - inline - std::pair mismatch(path::iterator it1, - path::iterator it1end, path::iterator it2, path::iterator it2end) - { - for (; it1 != it1end && it2 != it2end && *it1 == *it2;) - { - ++it1; - ++it2; - } - return std::make_pair(it1, it2); - } - } - - BOOST_FILESYSTEM_DECL - path lexically_relative(const path& p, const path& base) - { - std::pair mm - = detail::mismatch(p.begin(), p.end(), base.begin(), base.end()); - if (mm.first == p.end() - || mm.second != base.end()) - { - throw filesystem_error( - "lexically_relative: p does not begin with base, so can not be made relative to base", - p, base, boost::system::error_code(boost::system::errc::invalid_argument, - boost::system::generic_category())); - } - path tmp(*mm.first++); - for (; mm.first != p.end(); ++mm.first) - { - tmp /= *mm.first; - } - return tmp; - } - } // namespace filesystem } // namespace boost diff --git a/test/msvc/filesystem.sln b/test/msvc/filesystem.sln index f72b622..da6bdc9 100644 --- a/test/msvc/filesystem.sln +++ b/test/msvc/filesystem.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22310.1 +VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_unit_test", "path_unit_test\path_unit_test.vcxproj", "{3C77F610-2E31-4087-9DF2-7CD45198A02D}" EndProject @@ -112,142 +112,220 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "headers", "headers\headers. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bug-reporting", "bug-reporting\bug-reporting.vcxproj", "{534B6F8A-B899-4C68-A10C-BB98FFCB35D6}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "relative_test", "relative_test\relative_test.vcxproj", "{44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.ActiveCfg = Debug|Win32 {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.Build.0 = Debug|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|x64.ActiveCfg = Debug|Win32 {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.ActiveCfg = Release|Win32 {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.Build.0 = Release|Win32 + {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|x64.ActiveCfg = Release|Win32 {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.ActiveCfg = Debug|Win32 {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.Build.0 = Debug|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|x64.ActiveCfg = Debug|Win32 {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.ActiveCfg = Release|Win32 {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.Build.0 = Release|Win32 + {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|x64.ActiveCfg = Release|Win32 {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.ActiveCfg = Debug|Win32 {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.Build.0 = Debug|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|x64.ActiveCfg = Debug|Win32 {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.ActiveCfg = Release|Win32 {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.Build.0 = Release|Win32 + {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|x64.ActiveCfg = Release|Win32 {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.ActiveCfg = Debug|Win32 {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.Build.0 = Debug|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|x64.ActiveCfg = Debug|Win32 {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.ActiveCfg = Release|Win32 {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.Build.0 = Release|Win32 + {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|x64.ActiveCfg = Release|Win32 {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.ActiveCfg = Debug|Win32 {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.Build.0 = Debug|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|x64.ActiveCfg = Debug|Win32 {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.ActiveCfg = Release|Win32 {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.Build.0 = Release|Win32 + {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|x64.ActiveCfg = Release|Win32 {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.ActiveCfg = Debug|Win32 {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.Build.0 = Debug|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|x64.ActiveCfg = Debug|Win32 {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.ActiveCfg = Release|Win32 {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.Build.0 = Release|Win32 + {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|x64.ActiveCfg = Release|Win32 {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.ActiveCfg = Debug|Win32 {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.Build.0 = Debug|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|x64.ActiveCfg = Debug|Win32 {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.ActiveCfg = Release|Win32 {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.Build.0 = Release|Win32 + {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|x64.ActiveCfg = Release|Win32 {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.ActiveCfg = Debug|Win32 {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.Build.0 = Debug|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|x64.ActiveCfg = Debug|Win32 {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.ActiveCfg = Release|Win32 {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.Build.0 = Release|Win32 + {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|x64.ActiveCfg = Release|Win32 {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.ActiveCfg = Debug|Win32 {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.Build.0 = Debug|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|x64.ActiveCfg = Debug|Win32 {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.ActiveCfg = Release|Win32 {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.Build.0 = Release|Win32 + {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|x64.ActiveCfg = Release|Win32 {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.ActiveCfg = Debug|Win32 {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.Build.0 = Debug|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|x64.ActiveCfg = Debug|Win32 {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.ActiveCfg = Release|Win32 {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.Build.0 = Release|Win32 + {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|x64.ActiveCfg = Release|Win32 {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.ActiveCfg = Debug|Win32 {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.Build.0 = Debug|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|x64.ActiveCfg = Debug|Win32 {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.ActiveCfg = Release|Win32 {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.Build.0 = Release|Win32 + {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|x64.ActiveCfg = Release|Win32 {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.ActiveCfg = Debug|Win32 {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.Build.0 = Debug|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|x64.ActiveCfg = Debug|Win32 {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.ActiveCfg = Release|Win32 {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.Build.0 = Release|Win32 + {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|x64.ActiveCfg = Release|Win32 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.ActiveCfg = Debug|Win32 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.Build.0 = Debug|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|x64.ActiveCfg = Debug|Win32 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.ActiveCfg = Release|Win32 {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.Build.0 = Release|Win32 + {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|x64.ActiveCfg = Release|Win32 {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.ActiveCfg = Debug|Win32 {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.Build.0 = Debug|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|x64.ActiveCfg = Debug|Win32 {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.ActiveCfg = Release|Win32 {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.Build.0 = Release|Win32 + {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|x64.ActiveCfg = Release|Win32 {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.ActiveCfg = Debug|Win32 {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.Build.0 = Debug|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|x64.ActiveCfg = Debug|Win32 {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.ActiveCfg = Release|Win32 {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.Build.0 = Release|Win32 + {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|x64.ActiveCfg = Release|Win32 {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.ActiveCfg = Debug|Win32 {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.Build.0 = Debug|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|x64.ActiveCfg = Debug|Win32 {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.ActiveCfg = Release|Win32 {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.Build.0 = Release|Win32 + {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|x64.ActiveCfg = Release|Win32 {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.ActiveCfg = Debug|Win32 {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.Build.0 = Debug|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|x64.ActiveCfg = Debug|Win32 {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.ActiveCfg = Release|Win32 {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.Build.0 = Release|Win32 + {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|x64.ActiveCfg = Release|Win32 {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.ActiveCfg = Debug|Win32 {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.Build.0 = Debug|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|x64.ActiveCfg = Debug|Win32 {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.ActiveCfg = Release|Win32 {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.Build.0 = Release|Win32 + {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|x64.ActiveCfg = Release|Win32 {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.ActiveCfg = Debug|Win32 {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.Build.0 = Debug|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|x64.ActiveCfg = Debug|Win32 {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.ActiveCfg = Release|Win32 {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.Build.0 = Release|Win32 + {23C735E1-0195-467F-BE9F-314829402FCF}.Release|x64.ActiveCfg = Release|Win32 {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.ActiveCfg = Debug|Win32 {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.Build.0 = Debug|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|x64.ActiveCfg = Debug|Win32 {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.ActiveCfg = Release|Win32 {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.Build.0 = Release|Win32 + {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|x64.ActiveCfg = Release|Win32 {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.ActiveCfg = Debug|Win32 {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.Build.0 = Debug|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|x64.ActiveCfg = Debug|Win32 {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.ActiveCfg = Release|Win32 {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.Build.0 = Release|Win32 + {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|x64.ActiveCfg = Release|Win32 {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.ActiveCfg = Debug|Win32 {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.Build.0 = Debug|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|x64.ActiveCfg = Debug|Win32 {3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.ActiveCfg = Release|Win32 {3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.Build.0 = Release|Win32 + {3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|x64.ActiveCfg = Release|Win32 {3640605D-6F82-493D-879F-8F30762DA554}.Debug|Win32.ActiveCfg = Debug|Win32 {3640605D-6F82-493D-879F-8F30762DA554}.Debug|Win32.Build.0 = Debug|Win32 + {3640605D-6F82-493D-879F-8F30762DA554}.Debug|x64.ActiveCfg = Debug|Win32 {3640605D-6F82-493D-879F-8F30762DA554}.Release|Win32.ActiveCfg = Release|Win32 {3640605D-6F82-493D-879F-8F30762DA554}.Release|Win32.Build.0 = Release|Win32 + {3640605D-6F82-493D-879F-8F30762DA554}.Release|x64.ActiveCfg = Release|Win32 {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Debug|Win32.ActiveCfg = Debug|Win32 {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Debug|Win32.Build.0 = Debug|Win32 + {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Debug|x64.ActiveCfg = Debug|Win32 {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Release|Win32.ActiveCfg = Release|Win32 {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Release|Win32.Build.0 = Release|Win32 + {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Release|x64.ActiveCfg = Release|Win32 {3B3010C5-D6D7-4320-A992-4EA61F256279}.Debug|Win32.ActiveCfg = Debug|Win32 {3B3010C5-D6D7-4320-A992-4EA61F256279}.Debug|Win32.Build.0 = Debug|Win32 + {3B3010C5-D6D7-4320-A992-4EA61F256279}.Debug|x64.ActiveCfg = Debug|Win32 {3B3010C5-D6D7-4320-A992-4EA61F256279}.Release|Win32.ActiveCfg = Release|Win32 {3B3010C5-D6D7-4320-A992-4EA61F256279}.Release|Win32.Build.0 = Release|Win32 + {3B3010C5-D6D7-4320-A992-4EA61F256279}.Release|x64.ActiveCfg = Release|Win32 {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Debug|Win32.ActiveCfg = Debug|Win32 {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Debug|Win32.Build.0 = Debug|Win32 + {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Debug|x64.ActiveCfg = Debug|Win32 {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Release|Win32.ActiveCfg = Release|Win32 {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Release|Win32.Build.0 = Release|Win32 + {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Release|x64.ActiveCfg = Release|Win32 {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Debug|Win32.ActiveCfg = Debug|Win32 {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Debug|Win32.Build.0 = Debug|Win32 + {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Debug|x64.ActiveCfg = Debug|Win32 {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Release|Win32.ActiveCfg = Release|Win32 {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Release|Win32.Build.0 = Release|Win32 + {3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}.Release|x64.ActiveCfg = Release|Win32 {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Debug|Win32.ActiveCfg = Debug|Win32 {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Debug|Win32.Build.0 = Debug|Win32 + {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Debug|x64.ActiveCfg = Debug|Win32 {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Release|Win32.ActiveCfg = Release|Win32 {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Release|Win32.Build.0 = Release|Win32 + {C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}.Release|x64.ActiveCfg = Release|Win32 {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Debug|Win32.ActiveCfg = Debug|Win32 {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Debug|Win32.Build.0 = Debug|Win32 + {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Debug|x64.ActiveCfg = Debug|Win32 {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Release|Win32.ActiveCfg = Release|Win32 {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Release|Win32.Build.0 = Release|Win32 + {1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}.Release|x64.ActiveCfg = Release|Win32 {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Debug|Win32.ActiveCfg = Debug|Win32 {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Debug|Win32.Build.0 = Debug|Win32 + {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Debug|x64.ActiveCfg = Debug|Win32 {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Release|Win32.ActiveCfg = Release|Win32 {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Release|Win32.Build.0 = Release|Win32 + {3D74D9C5-31B1-4D5B-B49C-8725E26CF768}.Release|x64.ActiveCfg = Release|Win32 {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Debug|Win32.ActiveCfg = Debug|Win32 {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Debug|Win32.Build.0 = Debug|Win32 + {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Debug|x64.ActiveCfg = Debug|Win32 {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Release|Win32.ActiveCfg = Release|Win32 {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Release|Win32.Build.0 = Release|Win32 + {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Release|x64.ActiveCfg = Release|Win32 {5FFA4555-E967-4632-A3E6-ED8826E9FDED}.Debug|Win32.ActiveCfg = Debug|Win32 + {5FFA4555-E967-4632-A3E6-ED8826E9FDED}.Debug|x64.ActiveCfg = Debug|Win32 {5FFA4555-E967-4632-A3E6-ED8826E9FDED}.Release|Win32.ActiveCfg = Release|Win32 + {5FFA4555-E967-4632-A3E6-ED8826E9FDED}.Release|x64.ActiveCfg = Release|Win32 {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Debug|Win32.ActiveCfg = Debug|Win32 {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Debug|Win32.Build.0 = Debug|Win32 + {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Debug|x64.ActiveCfg = Debug|Win32 {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Release|Win32.ActiveCfg = Release|Win32 {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Release|Win32.Build.0 = Release|Win32 + {534B6F8A-B899-4C68-A10C-BB98FFCB35D6}.Release|x64.ActiveCfg = Release|Win32 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Debug|Win32.ActiveCfg = Debug|Win32 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Debug|Win32.Build.0 = Debug|Win32 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Debug|x64.ActiveCfg = Debug|x64 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Debug|x64.Build.0 = Debug|x64 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Release|Win32.ActiveCfg = Release|Win32 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Release|Win32.Build.0 = Release|Win32 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Release|x64.ActiveCfg = Release|x64 + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/test/msvc/relative_test/relative_test.vcxproj b/test/msvc/relative_test/relative_test.vcxproj new file mode 100644 index 0000000..ce24690 --- /dev/null +++ b/test/msvc/relative_test/relative_test.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {44FE7C6C-F483-44BE-B8E1-6D76F33F24D8} + Win32Proj + relative_test + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + "$(TargetDir)\$(TargetName).exe" + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + "$(TargetDir)\$(TargetName).exe" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + "$(TargetDir)\$(TargetName).exe" + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + "$(TargetDir)\$(TargetName).exe" + + + + + + + + {ffd738f7-96f0-445c-81ea-551665ef53d1} + + + {f94ccadd-a90b-480c-a304-c19d015d36b1} + + + + + + \ No newline at end of file