summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/filesystem
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/filesystem
parentInitial commit. (diff)
downloadceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz
ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/filesystem')
-rw-r--r--src/boost/libs/filesystem/CMakeLists.txt59
-rw-r--r--src/boost/libs/filesystem/README.md28
-rw-r--r--src/boost/libs/filesystem/bug/Jamfile.v217
-rw-r--r--src/boost/libs/filesystem/bug/bug.cpp19
-rw-r--r--src/boost/libs/filesystem/bug/index.html13
-rw-r--r--src/boost/libs/filesystem/build/Jamfile.v239
-rw-r--r--src/boost/libs/filesystem/example/Jamfile.v225
-rw-r--r--src/boost/libs/filesystem/example/directory_symlink_parent_resolution.cpp41
-rw-r--r--src/boost/libs/filesystem/example/error_demo.cpp185
-rw-r--r--src/boost/libs/filesystem/example/file_size.cpp44
-rw-r--r--src/boost/libs/filesystem/example/file_status.cpp117
-rw-r--r--src/boost/libs/filesystem/example/mbcopy.cpp90
-rw-r--r--src/boost/libs/filesystem/example/mbpath.cpp80
-rw-r--r--src/boost/libs/filesystem/example/mbpath.hpp44
-rw-r--r--src/boost/libs/filesystem/example/msvc/common.props15
-rw-r--r--src/boost/libs/filesystem/example/msvc/directory_symlink_parent_resolution/directory_symlink_parent_resolution.vcxproj170
-rw-r--r--src/boost/libs/filesystem/example/msvc/filesystem-tutorials.sln88
-rw-r--r--src/boost/libs/filesystem/example/msvc/path_info/path_info.vcxproj158
-rw-r--r--src/boost/libs/filesystem/example/msvc/tut1/tut1.vcxproj158
-rw-r--r--src/boost/libs/filesystem/example/msvc/tut2/tut2.vcxproj158
-rw-r--r--src/boost/libs/filesystem/example/msvc/tut3/tut3.vcxproj170
-rw-r--r--src/boost/libs/filesystem/example/msvc/tut4/tut4.vcxproj170
-rw-r--r--src/boost/libs/filesystem/example/msvc/tut5/tut5.vcxproj158
-rw-r--r--src/boost/libs/filesystem/example/path_info.cpp82
-rw-r--r--src/boost/libs/filesystem/example/simple_ls.cpp92
-rw-r--r--src/boost/libs/filesystem/example/stems.cpp31
-rw-r--r--src/boost/libs/filesystem/example/tchar.cpp39
-rw-r--r--src/boost/libs/filesystem/example/test/Jamfile.v229
-rw-r--r--src/boost/libs/filesystem/example/test/build.bat7
-rwxr-xr-xsrc/boost/libs/filesystem/example/test/build.sh8
-rw-r--r--src/boost/libs/filesystem/example/test/setup.bat13
-rwxr-xr-xsrc/boost/libs/filesystem/example/test/setup.sh19
-rw-r--r--src/boost/libs/filesystem/example/tut0.cpp23
-rw-r--r--src/boost/libs/filesystem/example/tut1.cpp23
-rw-r--r--src/boost/libs/filesystem/example/tut2.cpp40
-rw-r--r--src/boost/libs/filesystem/example/tut3.cpp52
-rw-r--r--src/boost/libs/filesystem/example/tut4.cpp61
-rw-r--r--src/boost/libs/filesystem/example/tut5.cpp52
-rw-r--r--src/boost/libs/filesystem/example/tut6a.cpp48
-rw-r--r--src/boost/libs/filesystem/example/tut6b.cpp50
-rw-r--r--src/boost/libs/filesystem/example/tut6c.cpp40
-rw-r--r--src/boost/libs/filesystem/index.html13
-rw-r--r--src/boost/libs/filesystem/meta/libraries.json15
-rw-r--r--src/boost/libs/filesystem/src/codecvt_error_category.cpp80
-rw-r--r--src/boost/libs/filesystem/src/directory.cpp887
-rw-r--r--src/boost/libs/filesystem/src/error_handling.hpp107
-rw-r--r--src/boost/libs/filesystem/src/exception.cpp145
-rw-r--r--src/boost/libs/filesystem/src/operations.cpp1996
-rw-r--r--src/boost/libs/filesystem/src/path.cpp958
-rw-r--r--src/boost/libs/filesystem/src/path_traits.cpp196
-rw-r--r--src/boost/libs/filesystem/src/portability.cpp115
-rw-r--r--src/boost/libs/filesystem/src/unique_path.cpp173
-rw-r--r--src/boost/libs/filesystem/src/utf8_codecvt_facet.cpp26
-rw-r--r--src/boost/libs/filesystem/src/windows_file_codecvt.cpp77
-rw-r--r--src/boost/libs/filesystem/src/windows_file_codecvt.hpp56
-rw-r--r--src/boost/libs/filesystem/src/windows_tools.hpp54
-rw-r--r--src/boost/libs/filesystem/test/Jamfile.v254
-rw-r--r--src/boost/libs/filesystem/test/boost_test.bat30
-rw-r--r--src/boost/libs/filesystem/test/config_info.cpp52
-rw-r--r--src/boost/libs/filesystem/test/convenience_test.cpp179
-rw-r--r--src/boost/libs/filesystem/test/deprecated_test.cpp251
-rw-r--r--src/boost/libs/filesystem/test/design_use_cases.cpp81
-rw-r--r--src/boost/libs/filesystem/test/equivalent.cpp39
-rw-r--r--src/boost/libs/filesystem/test/foreach_test.cpp62
-rw-r--r--src/boost/libs/filesystem/test/fstream_test.cpp169
-rw-r--r--src/boost/libs/filesystem/test/issues/10038.cpp8
-rw-r--r--src/boost/libs/filesystem/test/issues/10205.cpp17
-rw-r--r--src/boost/libs/filesystem/test/issues/10485.cpp14
-rw-r--r--src/boost/libs/filesystem/test/issues/10641.cpp20
-rw-r--r--src/boost/libs/filesystem/test/issues/11166-remove-race.cpp38
-rw-r--r--src/boost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp25
-rw-r--r--src/boost/libs/filesystem/test/issues/3332/test.cpp37
-rw-r--r--src/boost/libs/filesystem/test/issues/4329.-basename.cpp20
-rw-r--r--src/boost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp0
-rw-r--r--src/boost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp36
-rw-r--r--src/boost/libs/filesystem/test/issues/70-71-copy.cpp20
-rw-r--r--src/boost/libs/filesystem/test/issues/8930.cpp7
-rw-r--r--src/boost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp10
-rw-r--r--src/boost/libs/filesystem/test/issues/9219.cpp40
-rw-r--r--src/boost/libs/filesystem/test/issues/Jamfile.v238
-rw-r--r--src/boost/libs/filesystem/test/issues/boost-no-inspect0
-rw-r--r--src/boost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp14
-rw-r--r--src/boost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp38
-rw-r--r--src/boost/libs/filesystem/test/issues/hello_filesystem.cpp39
-rw-r--r--src/boost/libs/filesystem/test/issues/readme.txt9
-rw-r--r--src/boost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp132
-rw-r--r--src/boost/libs/filesystem/test/large_file_support_test.cpp42
-rw-r--r--src/boost/libs/filesystem/test/locale_info.cpp88
-rw-r--r--src/boost/libs/filesystem/test/long_path_test.cpp59
-rw-r--r--src/boost/libs/filesystem/test/macro_default_test.cpp36
-rw-r--r--src/boost/libs/filesystem/test/msvc/boost-no-inspect0
-rw-r--r--src/boost/libs/filesystem/test/msvc/common.props18
-rw-r--r--src/boost/libs/filesystem/test/msvc/config_info/config_info.vcxproj164
-rw-r--r--src/boost/libs/filesystem/test/msvc/convenience_test/convenience_test.vcxproj109
-rw-r--r--src/boost/libs/filesystem/test/msvc/deprecated_test/deprecated_test.vcxproj109
-rw-r--r--src/boost/libs/filesystem/test/msvc/exec_monitor_dll/exec_monitor_dll.vcxproj88
-rw-r--r--src/boost/libs/filesystem/test/msvc/exec_monitor_lib/exec_monitor_lib.vcxproj81
-rw-r--r--src/boost/libs/filesystem/test/msvc/file_status/file_status.vcxproj103
-rw-r--r--src/boost/libs/filesystem/test/msvc/filesystem.sln344
-rw-r--r--src/boost/libs/filesystem/test/msvc/filesystem_dll/filesystem_dll.vcxproj110
-rw-r--r--src/boost/libs/filesystem/test/msvc/filesystem_lib/filesystem_lib.vcxproj94
-rw-r--r--src/boost/libs/filesystem/test/msvc/fstream_test/fstream_test.vcxproj109
-rw-r--r--src/boost/libs/filesystem/test/msvc/headers/headers.vcxproj96
-rw-r--r--src/boost/libs/filesystem/test/msvc/hello_filesystem/hello_filesystem.vcxproj111
-rw-r--r--src/boost/libs/filesystem/test/msvc/issue_test/issue_test.vcxproj104
-rw-r--r--src/boost/libs/filesystem/test/msvc/issues_test_static/issues_test_static.vcxproj171
-rw-r--r--src/boost/libs/filesystem/test/msvc/locale_info/locale_info.vcxproj99
-rw-r--r--src/boost/libs/filesystem/test/msvc/long_path_test/long_path_test.vcxproj103
-rw-r--r--src/boost/libs/filesystem/test/msvc/macro_default_test/macro_default_test.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/odr_test/odr_test.vcxproj98
-rw-r--r--src/boost/libs/filesystem/test/msvc/operations_test/operations_test.vcxproj108
-rw-r--r--src/boost/libs/filesystem/test/msvc/operations_unit_test/operations_unit_test.vcxproj111
-rw-r--r--src/boost/libs/filesystem/test/msvc/path_test/path_test.vcxproj109
-rw-r--r--src/boost/libs/filesystem/test/msvc/path_test_static/path_test_static.vcxproj107
-rw-r--r--src/boost/libs/filesystem/test/msvc/path_timings/path_timings.vcxproj99
-rw-r--r--src/boost/libs/filesystem/test/msvc/path_unit_test/path_unit_test.vcxproj109
-rw-r--r--src/boost/libs/filesystem/test/msvc/recurse_dir_iter_test/recurse_dir_iter_test.vcxproj97
-rw-r--r--src/boost/libs/filesystem/test/msvc/relative_test/relative_test.vcxproj178
-rw-r--r--src/boost/libs/filesystem/test/msvc/stems/stems.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/system_dll/system_dll.vcxproj96
-rw-r--r--src/boost/libs/filesystem/test/msvc/system_lib/system_lib.vcxproj82
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut1/tut1.vcxproj103
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut2/tut2.vcxproj104
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut3/tut3.vcxproj103
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut4/tut4.vcxproj107
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut5/tut5.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut6a/tut6a.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut6b/tut6b.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/tut6c/tut6c.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/msvc/windows_attributes/windows_attributes.vcxproj95
-rw-r--r--src/boost/libs/filesystem/test/odr1_test.cpp24
-rw-r--r--src/boost/libs/filesystem/test/odr2_test.cpp18
-rw-r--r--src/boost/libs/filesystem/test/operations_test.cpp2323
-rw-r--r--src/boost/libs/filesystem/test/operations_unit_test.cpp402
-rw-r--r--src/boost/libs/filesystem/test/path_test.cpp2046
-rw-r--r--src/boost/libs/filesystem/test/path_times.cpp103
-rw-r--r--src/boost/libs/filesystem/test/path_unit_test.cpp1253
-rw-r--r--src/boost/libs/filesystem/test/quick.cpp24
-rw-r--r--src/boost/libs/filesystem/test/relative_test.cpp118
-rw-r--r--src/boost/libs/filesystem/test/sample_test.cpp63
-rw-r--r--src/boost/libs/filesystem/test/test_codecvt.hpp79
-rw-r--r--src/boost/libs/filesystem/test/test_links.html1405
-rw-r--r--src/boost/libs/filesystem/test/test_status.html56
-rw-r--r--src/boost/libs/filesystem/test/windows_attributes.cpp108
-rw-r--r--src/boost/libs/filesystem/tools/backup.bat27
-rw-r--r--src/boost/libs/filesystem/tools/exclude.txt14
-rw-r--r--src/boost/libs/filesystem/tools/publish.bat8
147 files changed, 21717 insertions, 0 deletions
diff --git a/src/boost/libs/filesystem/CMakeLists.txt b/src/boost/libs/filesystem/CMakeLists.txt
new file mode 100644
index 000000000..94f03b356
--- /dev/null
+++ b/src/boost/libs/filesystem/CMakeLists.txt
@@ -0,0 +1,59 @@
+# Copyright 2019 Mike Dev
+# Distributed under the Boost Software License, Version 1.0.
+# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
+#
+# NOTE: CMake support for Boost.Filesystem is currently experimental at best
+# and the interface is likely to change in the future
+
+cmake_minimum_required( VERSION 3.5 )
+project( BoostFilesystem )
+
+add_library( boost_filesystem
+ src/codecvt_error_category.cpp
+ src/exception.cpp
+ src/operations.cpp
+ src/directory.cpp
+ src/path.cpp
+ src/path_traits.cpp
+ src/portability.cpp
+ src/unique_path.cpp
+ src/utf8_codecvt_facet.cpp
+ src/windows_file_codecvt.cpp
+)
+
+add_library( Boost::filesystem ALIAS boost_filesystem )
+
+target_include_directories( boost_filesystem PUBLIC include )
+
+target_compile_definitions( boost_filesystem
+ PUBLIC
+ # NOTE:
+ # We deactivate autolinking, because cmake based builds don't need it
+ # and we don't implement name mangling for the library file anyway.
+ # Ususally the parent CMakeLists.txt file should already have globally defined BOOST_ALL_NO_LIB
+ BOOST_FILESYSTEM_NO_LIB
+ $<$<STREQUAL:$<TARGET_PROPERTY:boost_filesystem,TYPE>,SHARED_LIBRARY>:BOOST_FILESYSTEM_DYN_LINK=1>
+ $<$<STREQUAL:$<TARGET_PROPERTY:boost_filesystem,TYPE>,STATIC_LIBRARY>:BOOST_FILESYSTEM_STATIC_LINK=1>
+
+ PRIVATE
+ BOOST_FILESYSTEM_SOURCE
+)
+
+target_link_libraries( boost_filesystem
+ PUBLIC
+ Boost::assert
+ Boost::config
+ Boost::container_hash
+ Boost::core
+ Boost::detail
+ Boost::io
+ Boost::iterator
+ Boost::smart_ptr
+ Boost::system
+ Boost::type_traits
+)
+
+target_link_libraries( boost_filesystem
+ PRIVATE
+ Boost::winapi
+)
diff --git a/src/boost/libs/filesystem/README.md b/src/boost/libs/filesystem/README.md
new file mode 100644
index 000000000..834d870f6
--- /dev/null
+++ b/src/boost/libs/filesystem/README.md
@@ -0,0 +1,28 @@
+# Boost.Filesystem
+
+Boost.Filesystem, part of collection of the [Boost C++ Libraries](https://github.com/boostorg), provides facilities to manipulate files and directories, and the paths that identify them.
+
+### Directories
+
+* **doc** - Documentation sources
+* **include** - Interface headers of Boost.Filesystem
+* **src** - Compilable source files of Boost.Filesystem
+* **test** - Boost.Filesystem unit tests
+* **example** - Boost.Filesystem usage examples
+
+### More information
+
+* [Documentation](https://boost.org/libs/filesystem)
+* [Report bugs](https://github.com/boostorg/filesystem/issues/new). Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
+* Submit your patches as [pull requests](https://github.com/boostorg/filesystem/compare) against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
+
+### Build status
+
+Branch | Travis CI | AppVeyor | Test Matrix | Dependencies |
+:-------------: | --------- | -------- | ----------- | ------------ |
+[`master`](https://github.com/boostorg/filesystem/tree/master) | [![Travis CI](https://travis-ci.org/boostorg/filesystem.svg?branch=master)](https://travis-ci.org/boostorg/filesystem) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/nx3e7bcavvn3q953?svg=true)](https://ci.appveyor.com/project/Lastique/filesystem/branch/master) | [![Tests](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/filesystem.html) | [![Dependencies](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/filesystem.html)
+[`develop`](https://github.com/boostorg/filesystem/tree/develop) | [![Travis CI](https://travis-ci.org/boostorg/filesystem.svg?branch=develop)](https://travis-ci.org/boostorg/filesystem) | [![AppVeyor](https://ci.appveyor.com/api/projects/status/nx3e7bcavvn3q953/branch/develop?svg=true)](https://ci.appveyor.com/project/Lastique/filesystem/branch/develop) | [![Tests](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/filesystem.html) | [![Dependencies](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/filesystem.html)
+
+### License
+
+Distributed under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
diff --git a/src/boost/libs/filesystem/bug/Jamfile.v2 b/src/boost/libs/filesystem/bug/Jamfile.v2
new file mode 100644
index 000000000..c6e8d6e6b
--- /dev/null
+++ b/src/boost/libs/filesystem/bug/Jamfile.v2
@@ -0,0 +1,17 @@
+# Boost Filesystem Library Bug report Jamfile
+
+# Copyright Beman Dawes 2014
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
+ ;
+
+exe bug : bug.cpp : <link>static ;
+
+# install in ./bin; invoke via "b2", not "b2 install"
+install bin : bug ;
diff --git a/src/boost/libs/filesystem/bug/bug.cpp b/src/boost/libs/filesystem/bug/bug.cpp
new file mode 100644
index 000000000..6a1aea91e
--- /dev/null
+++ b/src/boost/libs/filesystem/bug/bug.cpp
@@ -0,0 +1,19 @@
+// filesystem/bug/bug.cpp
+
+#include <boost/detail/lightweight_test_report.hpp>
+#include <boost/filesystem.hpp>
+
+namespace fs = boost::filesystem;
+
+int test_main(int, char*[]) // note name
+{
+ BOOST_TEST(2 + 2 == 5); // one convertible-to-bool argument
+ BOOST_TEST_EQ(4 + 4, 9); // two EqualityComparible arguments
+ BOOST_TEST(fs::exists(".")); // should pass, so nothing reported
+
+ return ::boost::report_errors(); // required
+}
+
+// Copyright Beman Dawes 2014
+// Distributed under the Boost Software License, Version 1.0.
+// www.boost.org/LICENSE_1_0.txt
diff --git a/src/boost/libs/filesystem/bug/index.html b/src/boost/libs/filesystem/bug/index.html
new file mode 100644
index 000000000..985b9c0cc
--- /dev/null
+++ b/src/boost/libs/filesystem/bug/index.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../doc/issue_reporting.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="../doc/issue_reporting.html">../doc/issue_reporting.html</a>.
+<hr>
+<p>&copy; Copyright Beman Dawes, 2014</p>
+<p> Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt</p>
+</body>
+</html>
diff --git a/src/boost/libs/filesystem/build/Jamfile.v2 b/src/boost/libs/filesystem/build/Jamfile.v2
new file mode 100644
index 000000000..01c33753b
--- /dev/null
+++ b/src/boost/libs/filesystem/build/Jamfile.v2
@@ -0,0 +1,39 @@
+# Boost Filesystem Library Build Jamfile
+
+# (C) Copyright Beman Dawes 2002-2006
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# See library home page at http://www.boost.org/libs/filesystem
+
+project boost/filesystem
+ : requirements <host-os>hpux,<toolset>gcc:<define>_INCLUDE_STDC__SOURCE_199901
+ : source-location ../src
+ : usage-requirements # pass these requirement to dependents (i.e. users)
+ <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
+ ;
+
+SOURCES =
+ codecvt_error_category
+ exception
+ directory
+ operations
+ path
+ path_traits
+ portability
+ unique_path
+ utf8_codecvt_facet
+ windows_file_codecvt
+ ;
+
+lib boost_filesystem
+ : $(SOURCES).cpp
+ : <define>BOOST_FILESYSTEM_SOURCE
+ <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
+ :
+ :
+ ;
+
+boost-install boost_filesystem ;
diff --git a/src/boost/libs/filesystem/example/Jamfile.v2 b/src/boost/libs/filesystem/example/Jamfile.v2
new file mode 100644
index 000000000..797228352
--- /dev/null
+++ b/src/boost/libs/filesystem/example/Jamfile.v2
@@ -0,0 +1,25 @@
+# Boost Filesystem Library Example Jamfile
+
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
+ <link>static
+ ;
+
+exe tut0 : tut0.cpp ;
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
+exe file_status : file_status.cpp ;
+exe file_size : file_size.cpp ;
+exe directory_symlink_parent_resolution : directory_symlink_parent_resolution.cpp ; \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/directory_symlink_parent_resolution.cpp b/src/boost/libs/filesystem/example/directory_symlink_parent_resolution.cpp
new file mode 100644
index 000000000..a204b6e9d
--- /dev/null
+++ b/src/boost/libs/filesystem/example/directory_symlink_parent_resolution.cpp
@@ -0,0 +1,41 @@
+// directory_symlink_parent_resolution.cpp -------------------------------------------//
+
+// Copyright Beman Dawes 2015
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/string_file.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <iostream>
+#include <string>
+using std::cout;
+using std::endl;
+using namespace boost::filesystem;
+
+int cpp_main(int argc, char* argv[])
+{
+# ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API" << endl;
+# else
+ cout << "BOOST_POSIX_API" << endl;
+# endif
+
+ path test_dir(current_path() / "dspr_demo");
+
+ remove_all(test_dir);
+ create_directories(test_dir / "a/c/d");
+ current_path(test_dir / "a");
+ create_directory_symlink("c/d", "b");
+ save_string_file("name.txt", "Windows");
+ save_string_file("c/name.txt", "POSIX");
+ current_path(test_dir);
+ std::string s;
+ load_string_file("a/b/../name.txt", s);
+ cout << s << endl;
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/error_demo.cpp b/src/boost/libs/filesystem/example/error_demo.cpp
new file mode 100644
index 000000000..ce16b3bc4
--- /dev/null
+++ b/src/boost/libs/filesystem/example/error_demo.cpp
@@ -0,0 +1,185 @@
+// error_demo.cpp --------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+// //
+// The purpose of this program is to demonstrate how error reporting works. //
+// //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/system/system_error.hpp>
+#include <iostream>
+
+using std::cout;
+using boost::filesystem::path;
+using boost::filesystem::filesystem_error;
+using boost::system::error_code;
+using boost::system::system_error;
+namespace fs = boost::filesystem;
+
+namespace
+{
+ void report_system_error(const system_error& ex)
+ {
+ cout << " threw system_error:\n"
+ << " ex.code().value() is " << ex.code().value() << '\n'
+ << " ex.code().category().name() is " << ex.code().category().name() << '\n'
+ << " ex.what() is " << ex.what() << '\n'
+ ;
+ }
+
+ void report_filesystem_error(const system_error& ex)
+ {
+ cout << " threw filesystem_error exception:\n"
+ << " ex.code().value() is " << ex.code().value() << '\n'
+ << " ex.code().category().name() is " << ex.code().category().name() << '\n'
+ << " ex.what() is " << ex.what() << '\n'
+ ;
+ }
+
+ void report_status(fs::file_status s)
+ {
+ cout << " file_status::type() is ";
+ switch (s.type())
+ {
+ case fs::status_error:
+ cout << "status_error\n"; break;
+ case fs::file_not_found:
+ cout << "file_not_found\n"; break;
+ case fs::regular_file:
+ cout << "regular_file\n"; break;
+ case fs::directory_file:
+ cout << "directory_file\n"; break;
+ case fs::symlink_file:
+ cout << "symlink_file\n"; break;
+ case fs::block_file:
+ cout << "block_file\n"; break;
+ case fs::character_file:
+ cout << "character_file\n"; break;
+ case fs::fifo_file:
+ cout << "fifo_file\n"; break;
+ case fs::socket_file:
+ cout << "socket_file\n"; break;
+ case fs::type_unknown:
+ cout << "type_unknown\n"; break;
+ default:
+ cout << "not a valid enumeration constant\n";
+ }
+ }
+
+ void report_error_code(const error_code& ec)
+ {
+ cout << " ec:\n"
+ << " value() is " << ec.value() << '\n'
+ << " category().name() is " << ec.category().name() << '\n'
+ << " message() is " << ec.message() << '\n'
+ ;
+ }
+
+ bool threw_exception;
+
+}
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ cout << "Usage: error_demo path\n";
+ return 1;
+ }
+
+ error_code ec;
+
+ //// construct path - no error_code
+
+ //try { path p1(argv[1]); }
+ //catch (const system_error& ex)
+ //{
+ // cout << "construct path without error_code";
+ // report_system_error(ex);
+ //}
+
+ //// construct path - with error_code
+
+ path p (argv[1]);
+
+ fs::file_status s;
+ bool b (false);
+ fs::directory_iterator di;
+
+ // get status - no error_code
+
+ cout << "\nstatus(\"" << p.string() << "\");\n";
+ threw_exception = false;
+
+ try { s = fs::status(p); }
+ catch (const system_error& ex)
+ {
+ report_filesystem_error(ex);
+ threw_exception = true;
+ }
+ if (!threw_exception)
+ cout << " Did not throw exception\n";
+ report_status(s);
+
+ // get status - with error_code
+
+ cout << "\nstatus(\"" << p.string() << "\", ec);\n";
+ s = fs::status(p, ec);
+ report_status(s);
+ report_error_code(ec);
+
+ // query existence - no error_code
+
+ cout << "\nexists(\"" << p.string() << "\");\n";
+ threw_exception = false;
+
+ try { b = fs::exists(p); }
+ catch (const system_error& ex)
+ {
+ report_filesystem_error(ex);
+ threw_exception = true;
+ }
+ if (!threw_exception)
+ {
+ cout << " Did not throw exception\n"
+ << " Returns: " << (b ? "true" : "false") << '\n';
+ }
+
+ // query existence - with error_code
+
+ // directory_iterator - no error_code
+
+ cout << "\ndirectory_iterator(\"" << p.string() << "\");\n";
+ threw_exception = false;
+
+ try { di = fs::directory_iterator(p); }
+ catch (const system_error& ex)
+ {
+ report_filesystem_error(ex);
+ threw_exception = true;
+ }
+ if (!threw_exception)
+ {
+ cout << " Did not throw exception\n"
+ << (di == fs::directory_iterator() ? " Equal" : " Not equal")
+ << " to the end iterator\n";
+ }
+
+ // directory_iterator - with error_code
+
+ cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n";
+ di = fs::directory_iterator(p, ec);
+ cout << (di == fs::directory_iterator() ? " Equal" : " Not equal")
+ << " to the end iterator\n";
+ report_error_code(ec);
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/file_size.cpp b/src/boost/libs/filesystem/example/file_size.cpp
new file mode 100644
index 000000000..3fbfa4ea5
--- /dev/null
+++ b/src/boost/libs/filesystem/example/file_size.cpp
@@ -0,0 +1,44 @@
+// file_size program -------------------------------------------------------//
+
+// Copyright Beman Dawes, 2004
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/filesystem for documentation.
+
+#include <boost/filesystem/operations.hpp>
+#include <iostream>
+
+namespace fs = boost::filesystem;
+
+int main( int argc, char* argv[] )
+{
+
+ if ( argc != 2 )
+ {
+ std::cout << "Usage: file_size path\n";
+ return 1;
+ }
+
+ std::cout << "sizeof(intmax_t) is " << sizeof(boost::intmax_t) << '\n';
+
+ fs::path p( argv[1] );
+
+ if ( !fs::exists( p ) )
+ {
+ std::cout << "not found: " << argv[1] << std::endl;
+ return 1;
+ }
+
+ if ( !fs::is_regular( p ) )
+ {
+ std::cout << "not a regular file: " << argv[1] << std::endl;
+ return 1;
+ }
+
+ std::cout << "size of " << argv[1] << " is " << fs::file_size( p )
+ << std::endl;
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/file_status.cpp b/src/boost/libs/filesystem/example/file_status.cpp
new file mode 100644
index 000000000..5d3774fdd
--- /dev/null
+++ b/src/boost/libs/filesystem/example/file_status.cpp
@@ -0,0 +1,117 @@
+// status.cpp ------------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2011
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/version.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout; using std::endl;
+using namespace boost::filesystem;
+
+namespace
+{
+ path p;
+
+ void print_boost_macros()
+ {
+ std::cout << "Boost "
+ << BOOST_VERSION / 100000 << '.'
+ << BOOST_VERSION / 100 % 1000 << '.'
+ << BOOST_VERSION % 100 << ", "
+# ifndef _WIN64
+ << BOOST_COMPILER << ", "
+# else
+ << BOOST_COMPILER << " with _WIN64 defined, "
+# endif
+ << BOOST_STDLIB << ", "
+ << BOOST_PLATFORM
+ << std::endl;
+ }
+
+ const char* file_type_tab[] =
+ { "status_error", "file_not_found", "regular_file", "directory_file",
+ "symlink_file", "block_file", "character_file", "fifo_file", "socket_file",
+ "type_unknown"
+ };
+
+ const char* file_type_c_str(enum file_type t)
+ {
+ return file_type_tab[t];
+ }
+
+ void show_status(file_status s, boost::system::error_code ec)
+ {
+ boost::system::error_condition econd;
+
+ if (ec)
+ {
+ econd = ec.default_error_condition();
+ cout << "sets ec to indicate an error:\n"
+ << " ec.value() is " << ec.value() << '\n'
+ << " ec.message() is \"" << ec.message() << "\"\n"
+ << " ec.default_error_condition().value() is " << econd.value() << '\n'
+ << " ec.default_error_condition().message() is \"" << econd.message() << "\"\n";
+ }
+ else
+ cout << "clears ec.\n";
+
+ cout << "s.type() is " << s.type()
+ << ", which is defined as \"" << file_type_c_str(s.type()) << "\"\n";
+
+ cout << "exists(s) is " << (exists(s) ? "true" : "false") << "\n";
+ cout << "status_known(s) is " << (status_known(s) ? "true" : "false") << "\n";
+ cout << "is_regular_file(s) is " << (is_regular_file(s) ? "true" : "false") << "\n";
+ cout << "is_directory(s) is " << (is_directory(s) ? "true" : "false") << "\n";
+ cout << "is_other(s) is " << (is_other(s) ? "true" : "false") << "\n";
+ cout << "is_symlink(s) is " << (is_symlink(s) ? "true" : "false") << "\n";
+ }
+
+ void try_exists()
+ {
+ cout << "\nexists(" << p << ") ";
+ try
+ {
+ bool result = exists(p);
+ cout << "is " << (result ? "true" : "false") << "\n";
+ }
+ catch (const filesystem_error& ex)
+ {
+ cout << "throws a filesystem_error exception: " << ex.what() << "\n";
+ }
+ }
+
+}
+
+int cpp_main(int argc, char* argv[])
+{
+ print_boost_macros();
+
+ if (argc < 2)
+ {
+ std::cout << "Usage: file_status <path>\n";
+ p = argv[0];
+ }
+ else
+ p = argv[1];
+
+ boost::system::error_code ec;
+ file_status s = status(p, ec);
+ cout << "\nfile_status s = status(" << p << ", ec) ";
+ show_status(s, ec);
+
+ s = symlink_status(p, ec);
+ cout << "\nfile_status s = symlink_status(" << p << ", ec) ";
+ show_status(s, ec);
+
+ try_exists();
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/mbcopy.cpp b/src/boost/libs/filesystem/example/mbcopy.cpp
new file mode 100644
index 000000000..2b1f60382
--- /dev/null
+++ b/src/boost/libs/filesystem/example/mbcopy.cpp
@@ -0,0 +1,90 @@
+// Boost.Filesystem mbcopy.cpp ---------------------------------------------//
+
+// Copyright Beman Dawes 2005
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Copy the files in a directory, using mbpath to represent the new file names
+// See http://../doc/path.htm#mbpath for more information
+
+// See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+# error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <iostream>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include "../src/utf8_codecvt_facet.hpp"
+
+namespace fs = boost::filesystem;
+
+namespace
+{
+ // we can't use boost::filesystem::copy_file() because the argument types
+ // differ, so provide a not-very-smart replacement.
+
+ void copy_file( const fs::wpath & from, const user::mbpath & to )
+ {
+ fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary );
+ if ( !from_file ) { std::cout << "input open failed\n"; return; }
+
+ fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary );
+ if ( !to_file ) { std::cout << "output open failed\n"; return; }
+
+ char c;
+ while ( from_file.get(c) )
+ {
+ to_file.put(c);
+ if ( to_file.fail() ) { std::cout << "write error\n"; return; }
+ }
+
+ if ( !from_file.eof() ) { std::cout << "read error\n"; }
+ }
+}
+
+int main( int argc, char * argv[] )
+{
+ if ( argc != 2 )
+ {
+ std::cout << "Copy files in the current directory to a target directory\n"
+ << "Usage: mbcopy <target-dir>\n";
+ return 1;
+ }
+
+ // For encoding, use Boost UTF-8 codecvt
+ std::locale global_loc = std::locale();
+ std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
+ user::mbpath_traits::imbue( loc );
+
+ std::string target_string( argv[1] );
+ user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) );
+
+ if ( !fs::is_directory( target_dir ) )
+ {
+ std::cout << "Error: " << argv[1] << " is not a directory\n";
+ return 1;
+ }
+
+ for ( fs::wdirectory_iterator it( L"." );
+ it != fs::wdirectory_iterator(); ++it )
+ {
+ if ( fs::is_regular_file(it->status()) )
+ {
+ copy_file( *it, target_dir / it->path().filename() );
+ }
+ }
+
+ return 0;
+}
+
+
+
+
+
diff --git a/src/boost/libs/filesystem/example/mbpath.cpp b/src/boost/libs/filesystem/example/mbpath.cpp
new file mode 100644
index 000000000..43590010f
--- /dev/null
+++ b/src/boost/libs/filesystem/example/mbpath.cpp
@@ -0,0 +1,80 @@
+// Boost.Filesystem mbpath.cpp ---------------------------------------------//
+
+// (c) Copyright Beman Dawes 2005
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See Boost.Filesystem home page at http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+# error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <boost/system/system_error.hpp>
+#include <boost/scoped_array.hpp>
+
+namespace fs = boost::filesystem;
+
+namespace
+{
+ // ISO C calls this "the locale-specific native environment":
+ std::locale loc("");
+
+ const std::codecvt<wchar_t, char, std::mbstate_t> *
+ cvt( &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+ ( loc ) );
+}
+
+namespace user
+{
+ mbpath_traits::external_string_type
+ mbpath_traits::to_external( const mbpath & ph,
+ const internal_string_type & src )
+ {
+ std::size_t work_size( cvt->max_length() * (src.size()+1) );
+ boost::scoped_array<char> work( new char[ work_size ] );
+ std::mbstate_t state;
+ const internal_string_type::value_type * from_next;
+ external_string_type::value_type * to_next;
+ if ( cvt->out(
+ state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
+ work.get()+work_size, to_next ) != std::codecvt_base::ok )
+ boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
+ fs::basic_filesystem_error<mbpath>(
+ "user::mbpath::to_external conversion error",
+ ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
+ *to_next = '\0';
+ return external_string_type( work.get() );
+ }
+
+ mbpath_traits::internal_string_type
+ mbpath_traits::to_internal( const external_string_type & src )
+ {
+ std::size_t work_size( src.size()+1 );
+ boost::scoped_array<wchar_t> work( new wchar_t[ work_size ] );
+ std::mbstate_t state;
+ const external_string_type::value_type * from_next;
+ internal_string_type::value_type * to_next;
+ if ( cvt->in(
+ state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
+ work.get()+work_size, to_next ) != std::codecvt_base::ok )
+ boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
+ fs::basic_filesystem_error<mbpath>(
+ "user::mbpath::to_internal conversion error",
+ boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
+ *to_next = L'\0';
+ return internal_string_type( work.get() );
+ }
+
+ void mbpath_traits::imbue( const std::locale & new_loc )
+ {
+ loc = new_loc;
+ cvt = &std::use_facet
+ <std::codecvt<wchar_t, char, std::mbstate_t> >( loc );
+ }
+
+} // namespace user
diff --git a/src/boost/libs/filesystem/example/mbpath.hpp b/src/boost/libs/filesystem/example/mbpath.hpp
new file mode 100644
index 000000000..f752b3fd0
--- /dev/null
+++ b/src/boost/libs/filesystem/example/mbpath.hpp
@@ -0,0 +1,44 @@
+// Boost.Filesystem mbpath.hpp ---------------------------------------------//
+
+// Copyright Beman Dawes 2005
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Encodes wide character paths as MBCS
+// See http://../doc/path.htm#mbpath for more information
+
+#include <boost/filesystem/path.hpp>
+#include <cwchar> // for std::mbstate_t
+#include <string>
+#include <locale>
+
+namespace user
+{
+ struct mbpath_traits;
+
+ typedef boost::filesystem::basic_path<std::wstring, mbpath_traits> mbpath;
+
+ struct mbpath_traits
+ {
+ typedef std::wstring internal_string_type;
+ typedef std::string external_string_type;
+
+ static external_string_type to_external( const mbpath & ph,
+ const internal_string_type & src );
+
+ static internal_string_type to_internal( const external_string_type & src );
+
+ static void imbue( const std::locale & loc );
+ };
+} // namespace user
+
+namespace boost
+{
+ namespace filesystem
+ {
+ template<> struct is_basic_path<user::mbpath>
+ { static const bool value = true; };
+ }
+}
diff --git a/src/boost/libs/filesystem/example/msvc/common.props b/src/boost/libs/filesystem/example/msvc/common.props
new file mode 100644
index 000000000..527c3c8a0
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/common.props
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ImportGroup Label="PropertySheets" />
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..\..\..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>..\..\..\..\..\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup />
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/directory_symlink_parent_resolution/directory_symlink_parent_resolution.vcxproj b/src/boost/libs/filesystem/example/msvc/directory_symlink_parent_resolution/directory_symlink_parent_resolution.vcxproj
new file mode 100644
index 000000000..243e4d68e
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/directory_symlink_parent_resolution/directory_symlink_parent_resolution.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\directory_symlink_parent_resolution.cpp" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{489B5052-4C97-4551-B8C5-1C0C3BD040E8}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>directory_symlink_parent_resolution</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/filesystem-tutorials.sln b/src/boost/libs/filesystem/example/msvc/filesystem-tutorials.sln
new file mode 100644
index 000000000..e41ee55ad
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/filesystem-tutorials.sln
@@ -0,0 +1,88 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcxproj", "{04A56B6F-9901-4F6D-8936-9554A44E0DD6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcxproj", "{BA9220FA-FECF-4B28-80A0-7F5017524EB5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcxproj", "{747CF49E-27D8-4C5E-BB46-25779FD8DDEB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcxproj", "{50FB30B4-F088-44E3-81BB-0C9CA65693CB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut5", "tut5\tut5.vcxproj", "{F17107D6-32E8-40EA-89A2-83BA9BA44A56}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_info", "path_info\path_info.vcxproj", "{A37B7F28-3261-41BF-8BC1-8384BD4C8E47}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "directory_symlink_parent_resolution", "directory_symlink_parent_resolution\directory_symlink_parent_resolution.vcxproj", "{489B5052-4C97-4551-B8C5-1C0C3BD040E8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Debug|x64.ActiveCfg = Debug|x64
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Debug|x64.Build.0 = Debug|x64
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Debug|x86.ActiveCfg = Debug|Win32
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Debug|x86.Build.0 = Debug|Win32
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Release|x64.ActiveCfg = Release|x64
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Release|x64.Build.0 = Release|x64
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Release|x86.ActiveCfg = Release|Win32
+ {04A56B6F-9901-4F6D-8936-9554A44E0DD6}.Release|x86.Build.0 = Release|Win32
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Debug|x64.ActiveCfg = Debug|x64
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Debug|x64.Build.0 = Debug|x64
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Debug|x86.ActiveCfg = Debug|Win32
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Debug|x86.Build.0 = Debug|Win32
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Release|x64.ActiveCfg = Release|x64
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Release|x64.Build.0 = Release|x64
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Release|x86.ActiveCfg = Release|Win32
+ {BA9220FA-FECF-4B28-80A0-7F5017524EB5}.Release|x86.Build.0 = Release|Win32
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Debug|x64.ActiveCfg = Debug|x64
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Debug|x64.Build.0 = Debug|x64
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Debug|x86.ActiveCfg = Debug|Win32
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Debug|x86.Build.0 = Debug|Win32
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Release|x64.ActiveCfg = Release|x64
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Release|x64.Build.0 = Release|x64
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Release|x86.ActiveCfg = Release|Win32
+ {747CF49E-27D8-4C5E-BB46-25779FD8DDEB}.Release|x86.Build.0 = Release|Win32
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Debug|x64.ActiveCfg = Debug|x64
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Debug|x64.Build.0 = Debug|x64
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Debug|x86.ActiveCfg = Debug|Win32
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Debug|x86.Build.0 = Debug|Win32
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Release|x64.ActiveCfg = Release|x64
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Release|x64.Build.0 = Release|x64
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Release|x86.ActiveCfg = Release|Win32
+ {50FB30B4-F088-44E3-81BB-0C9CA65693CB}.Release|x86.Build.0 = Release|Win32
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Debug|x64.ActiveCfg = Debug|x64
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Debug|x64.Build.0 = Debug|x64
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Debug|x86.ActiveCfg = Debug|Win32
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Debug|x86.Build.0 = Debug|Win32
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Release|x64.ActiveCfg = Release|x64
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Release|x64.Build.0 = Release|x64
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Release|x86.ActiveCfg = Release|Win32
+ {F17107D6-32E8-40EA-89A2-83BA9BA44A56}.Release|x86.Build.0 = Release|Win32
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Debug|x64.ActiveCfg = Debug|x64
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Debug|x64.Build.0 = Debug|x64
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Debug|x86.ActiveCfg = Debug|Win32
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Debug|x86.Build.0 = Debug|Win32
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Release|x64.ActiveCfg = Release|x64
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Release|x64.Build.0 = Release|x64
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Release|x86.ActiveCfg = Release|Win32
+ {A37B7F28-3261-41BF-8BC1-8384BD4C8E47}.Release|x86.Build.0 = Release|Win32
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Debug|x64.ActiveCfg = Debug|x64
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Debug|x64.Build.0 = Debug|x64
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Debug|x86.ActiveCfg = Debug|Win32
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Debug|x86.Build.0 = Debug|Win32
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Release|x64.ActiveCfg = Release|x64
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Release|x64.Build.0 = Release|x64
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Release|x86.ActiveCfg = Release|Win32
+ {489B5052-4C97-4551-B8C5-1C0C3BD040E8}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/boost/libs/filesystem/example/msvc/path_info/path_info.vcxproj b/src/boost/libs/filesystem/example/msvc/path_info/path_info.vcxproj
new file mode 100644
index 000000000..64fe4ea9b
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/path_info/path_info.vcxproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{A37B7F28-3261-41BF-8BC1-8384BD4C8E47}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>path_info</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_info.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/tut1/tut1.vcxproj b/src/boost/libs/filesystem/example/msvc/tut1/tut1.vcxproj
new file mode 100644
index 000000000..7178454c8
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/tut1/tut1.vcxproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{04A56B6F-9901-4F6D-8936-9554A44E0DD6}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut1</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\tut1.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/tut2/tut2.vcxproj b/src/boost/libs/filesystem/example/msvc/tut2/tut2.vcxproj
new file mode 100644
index 000000000..b7ec3fd3c
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/tut2/tut2.vcxproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{BA9220FA-FECF-4B28-80A0-7F5017524EB5}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut2</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\tut2.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/tut3/tut3.vcxproj b/src/boost/libs/filesystem/example/msvc/tut3/tut3.vcxproj
new file mode 100644
index 000000000..f452e0d1a
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/tut3/tut3.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{747CF49E-27D8-4C5E-BB46-25779FD8DDEB}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut3</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\tut3.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/tut4/tut4.vcxproj b/src/boost/libs/filesystem/example/msvc/tut4/tut4.vcxproj
new file mode 100644
index 000000000..f080b019f
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/tut4/tut4.vcxproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{50FB30B4-F088-44E3-81BB-0C9CA65693CB}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut4</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\tut4.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/msvc/tut5/tut5.vcxproj b/src/boost/libs/filesystem/example/msvc/tut5/tut5.vcxproj
new file mode 100644
index 000000000..ca6fe0863
--- /dev/null
+++ b/src/boost/libs/filesystem/example/msvc/tut5/tut5.vcxproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F17107D6-32E8-40EA-89A2-83BA9BA44A56}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut5</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\tut5.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/example/path_info.cpp b/src/boost/libs/filesystem/example/path_info.cpp
new file mode 100644
index 000000000..42e4bdfb8
--- /dev/null
+++ b/src/boost/libs/filesystem/example/path_info.cpp
@@ -0,0 +1,82 @@
+// path_info.cpp ---------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+const char * say_what(bool b) { return b ? "true" : "false"; }
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ cout << "Usage: path_info path-element [path-element...]\n"
+ "Composes a path via operator/= from one or more path-element arguments\n"
+ "Example: path_info foo/bar baz\n"
+# ifdef BOOST_POSIX_API
+ " would report info about the composed path foo/bar/baz\n";
+# else // BOOST_WINDOWS_API
+ " would report info about the composed path foo/bar\\baz\n";
+# endif
+ return 1;
+ }
+
+ path p;
+ for (; argc > 1; --argc, ++argv)
+ p /= argv[1]; // compose path p from the command line arguments
+
+ cout << "\ncomposed path:\n";
+ cout << " operator<<()---------: " << p << "\n";
+ cout << " make_preferred()-----: " << p.make_preferred() << "\n";
+
+ cout << "\nelements:\n";
+ for (auto element : p)
+ cout << " " << element << '\n';
+
+ cout << "\nobservers, native format:" << endl;
+# ifdef BOOST_POSIX_API
+ cout << " native()-------------: " << p.native() << endl;
+ cout << " c_str()--------------: " << p.c_str() << endl;
+# else // BOOST_WINDOWS_API
+ wcout << L" native()-------------: " << p.native() << endl;
+ wcout << L" c_str()--------------: " << p.c_str() << endl;
+# endif
+ cout << " string()-------------: " << p.string() << endl;
+ wcout << L" wstring()------------: " << p.wstring() << endl;
+
+ cout << "\nobservers, generic format:\n";
+ cout << " generic_string()-----: " << p.generic_string() << endl;
+ wcout << L" generic_wstring()----: " << p.generic_wstring() << endl;
+
+ cout << "\ndecomposition:\n";
+ cout << " root_name()----------: " << p.root_name() << '\n';
+ cout << " root_directory()-----: " << p.root_directory() << '\n';
+ cout << " root_path()----------: " << p.root_path() << '\n';
+ cout << " relative_path()------: " << p.relative_path() << '\n';
+ cout << " parent_path()--------: " << p.parent_path() << '\n';
+ cout << " filename()-----------: " << p.filename() << '\n';
+ cout << " stem()---------------: " << p.stem() << '\n';
+ cout << " extension()----------: " << p.extension() << '\n';
+
+ cout << "\nquery:\n";
+ cout << " empty()--------------: " << say_what(p.empty()) << '\n';
+ cout << " is_absolute()--------: " << say_what(p.is_absolute()) << '\n';
+ cout << " has_root_name()------: " << say_what(p.has_root_name()) << '\n';
+ cout << " has_root_directory()-: " << say_what(p.has_root_directory()) << '\n';
+ cout << " has_root_path()------: " << say_what(p.has_root_path()) << '\n';
+ cout << " has_relative_path()--: " << say_what(p.has_relative_path()) << '\n';
+ cout << " has_parent_path()----: " << say_what(p.has_parent_path()) << '\n';
+ cout << " has_filename()-------: " << say_what(p.has_filename()) << '\n';
+ cout << " has_stem()-----------: " << say_what(p.has_stem()) << '\n';
+ cout << " has_extension()------: " << say_what(p.has_extension()) << '\n';
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/simple_ls.cpp b/src/boost/libs/filesystem/example/simple_ls.cpp
new file mode 100644
index 000000000..c914a51ee
--- /dev/null
+++ b/src/boost/libs/filesystem/example/simple_ls.cpp
@@ -0,0 +1,92 @@
+// simple_ls program -------------------------------------------------------//
+
+// Copyright Jeff Garland and Beman Dawes, 2002
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/filesystem for documentation.
+
+#define BOOST_FILESYSTEM_VERSION 3
+
+// As an example program, we don't want to use any deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/directory.hpp>
+#include <boost/filesystem/path.hpp>
+#include <iostream>
+
+namespace fs = boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ fs::path p(fs::current_path());
+
+ if (argc > 1)
+ p = fs::system_complete(argv[1]);
+ else
+ std::cout << "\nusage: simple_ls [path]" << std::endl;
+
+ unsigned long file_count = 0;
+ unsigned long dir_count = 0;
+ unsigned long other_count = 0;
+ unsigned long err_count = 0;
+
+ if (!fs::exists(p))
+ {
+ std::cout << "\nNot found: " << p << std::endl;
+ return 1;
+ }
+
+ if (fs::is_directory(p))
+ {
+ std::cout << "\nIn directory: " << p << "\n\n";
+ fs::directory_iterator end_iter;
+ for (fs::directory_iterator dir_itr(p);
+ dir_itr != end_iter;
+ ++dir_itr)
+ {
+ try
+ {
+ if (fs::is_directory(dir_itr->status()))
+ {
+ ++dir_count;
+ std::cout << dir_itr->path().filename() << " [directory]\n";
+ }
+ else if (fs::is_regular_file(dir_itr->status()))
+ {
+ ++file_count;
+ std::cout << dir_itr->path().filename() << "\n";
+ }
+ else
+ {
+ ++other_count;
+ std::cout << dir_itr->path().filename() << " [other]\n";
+ }
+
+ }
+ catch (const std::exception & ex)
+ {
+ ++err_count;
+ std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
+ }
+ }
+ std::cout << "\n" << file_count << " files\n"
+ << dir_count << " directories\n"
+ << other_count << " others\n"
+ << err_count << " errors\n";
+ }
+ else // must be a file
+ {
+ std::cout << "\nFound: " << p << "\n";
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/stems.cpp b/src/boost/libs/filesystem/example/stems.cpp
new file mode 100644
index 000000000..3699fa81f
--- /dev/null
+++ b/src/boost/libs/filesystem/example/stems.cpp
@@ -0,0 +1,31 @@
+// filesystem example stems.cpp ------------------------------------------------------//
+
+// Copyright Beman Dawes 2011
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <iostream>
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: stems <path>\n";
+ return 1;
+ }
+
+ boost::filesystem::path p(argv[1]), name(p.filename());
+
+ for(;;)
+ {
+ std::cout << "filename " << name << " has stem " << name.stem()
+ << " and extension " << name.extension() << "\n";
+ if (name.stem().empty() || name.extension().empty())
+ return 0;
+ name = name.stem();
+ }
+}
diff --git a/src/boost/libs/filesystem/example/tchar.cpp b/src/boost/libs/filesystem/example/tchar.cpp
new file mode 100644
index 000000000..5f33d69e0
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tchar.cpp
@@ -0,0 +1,39 @@
+// Example use of Microsoft TCHAR ----------------------------------------------------//
+
+// Copyright Beman Dawes 2008
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <string>
+#include <cassert>
+#include <windows.h>
+#include <winnt.h>
+
+namespace fs = boost::filesystem;
+
+typedef std::basic_string<TCHAR> tstring;
+
+void func( const fs::path & p )
+{
+ assert( fs::exists( p ) );
+}
+
+int main()
+{
+ // get a path that is known to exist
+ fs::path cp = fs::current_path();
+
+ // demo: get tstring from the path
+ tstring cp_as_tstring = cp.string<tstring>();
+
+ // demo: pass tstring to filesystem function taking path
+ assert( fs::exists( cp_as_tstring ) );
+
+ // demo: pass tstring to user function taking path
+ func( cp_as_tstring );
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/test/Jamfile.v2 b/src/boost/libs/filesystem/example/test/Jamfile.v2
new file mode 100644
index 000000000..22a163251
--- /dev/null
+++ b/src/boost/libs/filesystem/example/test/Jamfile.v2
@@ -0,0 +1,29 @@
+# Boost Filesystem Library Tutorial Jamfile
+
+# (C) Copyright Beman Dawes 2010
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
+ ;
+
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
+
+install tut1-copy : tut1 : <location>. ;
+install tut2-copy : tut2 : <location>. ;
+install tut3-copy : tut3 : <location>. ;
+install tut4-copy : tut4 : <location>. ;
+install tut5-copy : tut5 : <location>. ;
+install path_info-copy : path_info : <location>. ;
+
diff --git a/src/boost/libs/filesystem/example/test/build.bat b/src/boost/libs/filesystem/example/test/build.bat
new file mode 100644
index 000000000..1921ca1cd
--- /dev/null
+++ b/src/boost/libs/filesystem/example/test/build.bat
@@ -0,0 +1,7 @@
+@echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+echo Compiling example programs...
+b2 %* >b2.log
+find "error" <b2.log
diff --git a/src/boost/libs/filesystem/example/test/build.sh b/src/boost/libs/filesystem/example/test/build.sh
new file mode 100755
index 000000000..19b1a788e
--- /dev/null
+++ b/src/boost/libs/filesystem/example/test/build.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+echo Compiling example programs...
+b2 $* >b2.log
+grep "error" <b2.log
diff --git a/src/boost/libs/filesystem/example/test/setup.bat b/src/boost/libs/filesystem/example/test/setup.bat
new file mode 100644
index 000000000..59822a513
--- /dev/null
+++ b/src/boost/libs/filesystem/example/test/setup.bat
@@ -0,0 +1,13 @@
+@echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+echo Copying example programs...
+copy /y ..\tut1.cpp >nul
+copy /y ..\tut2.cpp >nul
+copy /y ..\tut3.cpp >nul
+copy /y ..\tut4.cpp >nul
+copy /y ..\tut5.cpp >nul
+copy /y ..\path_info.cpp >nul
+del *.exe 2>nul
+del *.pdb 2>nul
diff --git a/src/boost/libs/filesystem/example/test/setup.sh b/src/boost/libs/filesystem/example/test/setup.sh
new file mode 100755
index 000000000..cb1ba684c
--- /dev/null
+++ b/src/boost/libs/filesystem/example/test/setup.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+echo Copying example programs...
+cp ../tut1.cpp .
+cp ../tut2.cpp .
+cp ../tut3.cpp .
+cp ../tut4.cpp .
+cp ../tut5.cpp .
+cp ../path_info.cpp .
+rm tut1 2>~/junk
+rm tut2 2>~/junk
+rm tut3 2>~/junk
+rm tut4 2>~/junk
+rm tut5 2>~/junk
+rm path_info 2>~/junk
+
diff --git a/src/boost/libs/filesystem/example/tut0.cpp b/src/boost/libs/filesystem/example/tut0.cpp
new file mode 100644
index 000000000..3e294c02f
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut0.cpp
@@ -0,0 +1,23 @@
+// filesystem tut0.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+namespace fs = boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut0 path\n";
+ return 1;
+ }
+ std::cout << argv[1] << '\n';
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut1.cpp b/src/boost/libs/filesystem/example/tut1.cpp
new file mode 100644
index 000000000..3ac85b903
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut1.cpp
@@ -0,0 +1,23 @@
+// filesystem tut1.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut1 path\n";
+ return 1;
+ }
+ std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut2.cpp b/src/boost/libs/filesystem/example/tut2.cpp
new file mode 100644
index 000000000..147dc3d8d
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut2.cpp
@@ -0,0 +1,40 @@
+// filesystem tut2.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ cout << "Usage: tut2 path\n";
+ return 1;
+ }
+
+ path p(argv[1]); // avoid repeated path construction below
+
+ if (exists(p)) // does path p actually exist?
+ {
+ if (is_regular_file(p)) // is path p a regular file?
+ cout << p << " size is " << file_size(p) << '\n';
+
+ else if (is_directory(p)) // is path p a directory?
+ cout << p << " is a directory\n";
+
+ else
+ cout << p << " exists, but is not a regular file or directory\n";
+ }
+ else
+ cout << p << " does not exist\n";
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut3.cpp b/src/boost/libs/filesystem/example/tut3.cpp
new file mode 100644
index 000000000..f930e1018
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut3.cpp
@@ -0,0 +1,52 @@
+// filesystem tut3.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ cout << "Usage: tut3 path\n";
+ return 1;
+ }
+
+ path p (argv[1]);
+
+ try
+ {
+ if (exists(p))
+ {
+ if (is_regular_file(p))
+ cout << p << " size is " << file_size(p) << '\n';
+
+ else if (is_directory(p))
+ {
+ cout << p << " is a directory containing:\n";
+
+ for (const directory_entry& x : directory_iterator(p))
+ cout << " " << x.path() << '\n';
+ }
+ else
+ cout << p << " exists, but is not a regular file or directory\n";
+ }
+ else
+ cout << p << " does not exist\n";
+ }
+
+ catch (const filesystem_error& ex)
+ {
+ cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut4.cpp b/src/boost/libs/filesystem/example/tut4.cpp
new file mode 100644
index 000000000..513a5e62e
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut4.cpp
@@ -0,0 +1,61 @@
+// filesystem tut4.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <vector>
+#include <algorithm>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ cout << "Usage: tut4 path\n";
+ return 1;
+ }
+
+ path p (argv[1]);
+
+ try
+ {
+ if (exists(p))
+ {
+ if (is_regular_file(p))
+ cout << p << " size is " << file_size(p) << '\n';
+
+ else if (is_directory(p))
+ {
+ cout << p << " is a directory containing:\n";
+
+ std::vector<path> v;
+
+ for (auto&& x : directory_iterator(p))
+ v.push_back(x.path());
+
+ std::sort(v.begin(), v.end());
+
+ for (auto&& x : v)
+ cout << " " << x.filename() << '\n';
+ }
+ else
+ cout << p << " exists, but is not a regular file or directory\n";
+ }
+ else
+ cout << p << " does not exist\n";
+ }
+
+ catch (const filesystem_error& ex)
+ {
+ cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut5.cpp b/src/boost/libs/filesystem/example/tut5.cpp
new file mode 100644
index 000000000..d665b0db0
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut5.cpp
@@ -0,0 +1,52 @@
+// filesystem tut5.cpp ---------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/fstream.hpp>
+#include <string>
+#include <list>
+namespace fs = boost::filesystem;
+
+int main()
+{
+ // \u263A is "Unicode WHITE SMILING FACE = have a nice day!"
+ std::string narrow_string ("smile2");
+ std::wstring wide_string (L"smile2\u263A");
+ std::list<char> narrow_list;
+ narrow_list.push_back('s');
+ narrow_list.push_back('m');
+ narrow_list.push_back('i');
+ narrow_list.push_back('l');
+ narrow_list.push_back('e');
+ narrow_list.push_back('3');
+ std::list<wchar_t> wide_list;
+ wide_list.push_back(L's');
+ wide_list.push_back(L'm');
+ wide_list.push_back(L'i');
+ wide_list.push_back(L'l');
+ wide_list.push_back(L'e');
+ wide_list.push_back(L'3');
+ wide_list.push_back(L'\u263A');
+
+ { fs::ofstream f("smile"); }
+ { fs::ofstream f(L"smile\u263A"); }
+ { fs::ofstream f(narrow_string); }
+ { fs::ofstream f(wide_string); }
+ { fs::ofstream f(narrow_list); }
+ { fs::ofstream f(wide_list); }
+ narrow_list.pop_back();
+ narrow_list.push_back('4');
+ wide_list.pop_back();
+ wide_list.pop_back();
+ wide_list.push_back(L'4');
+ wide_list.push_back(L'\u263A');
+ { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
+ { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut6a.cpp b/src/boost/libs/filesystem/example/tut6a.cpp
new file mode 100644
index 000000000..f579a4275
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut6a.cpp
@@ -0,0 +1,48 @@
+// filesystem tut6a.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6a path\n";
+ return 1;
+ }
+
+ try
+ {
+ for (recursive_directory_iterator it (argv[1]);
+ it != recursive_directory_iterator();
+ ++it)
+ {
+ if (it.level() > 1)
+ it.pop();
+ else
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+ }
+ }
+ }
+
+ catch (const std::exception& ex)
+ {
+ std::cout << "************* exception *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut6b.cpp b/src/boost/libs/filesystem/example/tut6b.cpp
new file mode 100644
index 000000000..90f54efc0
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut6b.cpp
@@ -0,0 +1,50 @@
+// filesystem tut6b.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6b path\n";
+ return 1;
+ }
+
+ try
+ {
+ for (recursive_directory_iterator it (argv[1]);
+ it != recursive_directory_iterator();
+ )
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+
+ try { ++it; }
+ catch (const filesystem_error& ex)
+ {
+ std::cout << "************* filesystem_error *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+ }
+ }
+
+ catch (const std::exception& ex)
+ {
+ std::cout << "************* exception *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/example/tut6c.cpp b/src/boost/libs/filesystem/example/tut6c.cpp
new file mode 100644
index 000000000..2b73f774a
--- /dev/null
+++ b/src/boost/libs/filesystem/example/tut6c.cpp
@@ -0,0 +1,40 @@
+// filesystem tut6c.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+#include <boost/system/error_code.hpp>
+
+using namespace boost::filesystem;
+using namespace boost::system;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6c path\n";
+ return 1;
+ }
+
+ error_code ec;
+ for (recursive_directory_iterator it (argv[1], ec);
+ it != recursive_directory_iterator();
+ )
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+
+ it.increment(ec);
+ }
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/index.html b/src/boost/libs/filesystem/index.html
new file mode 100644
index 000000000..1803c23ca
--- /dev/null
+++ b/src/boost/libs/filesystem/index.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.htm">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/index.htm">doc/index.htm</a>.
+<hr>
+<p>&copy; Copyright Beman Dawes, 2003</p>
+<p> Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt</p>
+</body>
+</html>
diff --git a/src/boost/libs/filesystem/meta/libraries.json b/src/boost/libs/filesystem/meta/libraries.json
new file mode 100644
index 000000000..25cfa5ff6
--- /dev/null
+++ b/src/boost/libs/filesystem/meta/libraries.json
@@ -0,0 +1,15 @@
+{
+ "key": "filesystem",
+ "name": "Filesystem",
+ "authors": [
+ "Beman Dawes"
+ ],
+ "description": "The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories.",
+ "category": [
+ "System"
+ ],
+ "maintainers": [
+ "Beman Dawes <bdawes -at- acm.org>",
+ "Andrey Semashev <andrey.semashev -at- gmail.com>"
+ ]
+}
diff --git a/src/boost/libs/filesystem/src/codecvt_error_category.cpp b/src/boost/libs/filesystem/src/codecvt_error_category.cpp
new file mode 100644
index 000000000..c8d1cca49
--- /dev/null
+++ b/src/boost/libs/filesystem/src/codecvt_error_category.cpp
@@ -0,0 +1,80 @@
+// codecvt_error_category implementation file ----------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt)
+
+// Library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
+#include <boost/system/error_code.hpp>
+#include <locale>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+ class codecvt_error_cat : public boost::system::error_category
+ {
+ public:
+ codecvt_error_cat(){}
+ const char* name() const BOOST_SYSTEM_NOEXCEPT;
+ std::string message(int ev) const;
+ };
+
+ const char* codecvt_error_cat::name() const BOOST_SYSTEM_NOEXCEPT
+ {
+ return "codecvt";
+ }
+
+ std::string codecvt_error_cat::message(int ev) const
+ {
+ std::string str;
+ switch (ev)
+ {
+ case std::codecvt_base::ok:
+ str = "ok";
+ break;
+ case std::codecvt_base::partial:
+ str = "partial";
+ break;
+ case std::codecvt_base::error:
+ str = "error";
+ break;
+ case std::codecvt_base::noconv:
+ str = "noconv";
+ break;
+ default:
+ str = "unknown error";
+ }
+ return str;
+ }
+
+} // unnamed namespace
+
+namespace boost
+{
+ namespace filesystem
+ {
+
+ BOOST_FILESYSTEM_DECL const boost::system::error_category& codecvt_error_category()
+ {
+ static const codecvt_error_cat codecvt_error_cat_const;
+ return codecvt_error_cat_const;
+ }
+
+ } // namespace filesystem
+} // namespace boost
diff --git a/src/boost/libs/filesystem/src/directory.cpp b/src/boost/libs/filesystem/src/directory.cpp
new file mode 100644
index 000000000..438b722e9
--- /dev/null
+++ b/src/boost/libs/filesystem/src/directory.cpp
@@ -0,0 +1,887 @@
+// operations.cpp --------------------------------------------------------------------//
+
+// Copyright 2002-2009, 2014 Beman Dawes
+// Copyright 2001 Dietmar Kuehl
+// Copyright 2019 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r() needs this
+#endif
+
+// Include Boost.Predef first so that windows.h is guaranteed to be not included
+#include <boost/predef/os/windows.h>
+#if BOOST_OS_WINDOWS
+#include <boost/winapi/config.hpp>
+#endif
+
+#include <boost/filesystem/directory.hpp>
+#include <boost/filesystem/exception.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/file_status.hpp>
+
+#include <cstddef>
+#include <cerrno>
+#include <cstring>
+#include <cstdlib> // std::malloc, std::free
+#include <new> // std::nothrow, std::bad_alloc
+#include <limits>
+#include <string>
+#include <utility> // std::move
+#include <boost/assert.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/smart_ptr/intrusive_ptr.hpp>
+
+#ifdef BOOST_POSIX_API
+
+#include <dirent.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0)\
+ && defined(_SC_THREAD_SAFE_FUNCTIONS)\
+ && !defined(__CYGWIN__)\
+ && !(defined(linux) || defined(__linux) || defined(__linux__))\
+ && !defined(__ANDROID__)\
+ && (!defined(__hpux) || defined(_REENTRANT)) \
+ && (!defined(_AIX) || defined(__THREAD_SAFE))
+#define BOOST_FILESYSTEM_USE_READDIR_R
+#endif
+
+#else // BOOST_WINDOWS_API
+
+#include <cwchar>
+#include <windows.h>
+
+#include "windows_tools.hpp"
+
+#endif // BOOST_WINDOWS_API
+
+#include "error_handling.hpp"
+
+// BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in
+// dir_itr_increment. The config tests are placed here because some of the
+// macros being tested come from dirent.h.
+//
+// TODO: find out what macros indicate dirent::d_type present in more libraries
+#if defined(BOOST_WINDOWS_API)\
+ || defined(_DIRENT_HAVE_D_TYPE)// defined by GNU C library if d_type present
+#define BOOST_FILESYSTEM_STATUS_CACHE
+#endif
+
+namespace fs = boost::filesystem;
+using boost::system::error_code;
+using boost::system::system_category;
+
+namespace boost {
+namespace filesystem {
+
+//--------------------------------------------------------------------------------------//
+// //
+// directory_entry //
+// //
+//--------------------------------------------------------------------------------------//
+
+BOOST_FILESYSTEM_DECL
+file_status directory_entry::get_status(system::error_code* ec) const
+{
+ if (!status_known(m_status))
+ {
+ // optimization: if the symlink status is known, and it isn't a symlink,
+ // then status and symlink_status are identical so just copy the
+ // symlink status to the regular status.
+ if (status_known(m_symlink_status) && !is_symlink(m_symlink_status))
+ {
+ m_status = m_symlink_status;
+ if (ec != 0)
+ ec->clear();
+ }
+ else
+ {
+ m_status = detail::status(m_path, ec);
+ }
+ }
+ else if (ec != 0)
+ {
+ ec->clear();
+ }
+
+ return m_status;
+}
+
+BOOST_FILESYSTEM_DECL
+file_status directory_entry::get_symlink_status(system::error_code* ec) const
+{
+ if (!status_known(m_symlink_status))
+ m_symlink_status = detail::symlink_status(m_path, ec);
+ else if (ec != 0)
+ ec->clear();
+
+ return m_symlink_status;
+}
+
+// dispatch directory_entry supplied here rather than in
+// <boost/filesystem/path_traits.hpp>, thus avoiding header circularity.
+// test cases are in operations_unit_test.cpp
+
+namespace path_traits {
+
+void dispatch(const directory_entry& de,
+#ifdef BOOST_WINDOWS_API
+ std::wstring& to,
+#else
+ std::string& to,
+#endif
+ const codecvt_type&)
+{
+ to = de.path().native();
+}
+
+void dispatch(const directory_entry& de,
+#ifdef BOOST_WINDOWS_API
+ std::wstring& to
+#else
+ std::string& to
+#endif
+ )
+{
+ to = de.path().native();
+}
+
+} // namespace path_traits
+
+//--------------------------------------------------------------------------------------//
+// //
+// directory_iterator //
+// //
+//--------------------------------------------------------------------------------------//
+
+namespace detail {
+
+namespace {
+
+#ifdef BOOST_POSIX_API
+
+#if defined(BOOST_FILESYSTEM_USE_READDIR_R)
+
+// Obtains maximum length of a path, not including the terminating zero
+inline std::size_t get_path_max()
+{
+ // this code is based on Stevens and Rago, Advanced Programming in the
+ // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49
+ std::size_t max = 0;
+ errno = 0;
+ long res = ::pathconf("/", _PC_PATH_MAX);
+ if (res < 0)
+ {
+#if defined(PATH_MAX)
+ max = PATH_MAX;
+#else
+ max = 4096;
+#endif
+ }
+ else
+ {
+ max = static_cast< std::size_t >(res); // relative root
+#if defined(PATH_MAX)
+ if (max < PATH_MAX)
+ max = PATH_MAX;
+#endif
+ }
+
+ if ((max + 1) < sizeof(dirent().d_name))
+ max = sizeof(dirent().d_name) - 1;
+
+ return max;
+}
+
+// Returns maximum length of a path, not including the terminating zero
+inline std::size_t path_max()
+{
+ static const std::size_t max = get_path_max();
+ return max;
+}
+
+#endif // BOOST_FILESYSTEM_USE_READDIR_R
+
+error_code dir_itr_first(void*& handle, void*& buffer,
+ const char* dir, std::string& target,
+ fs::file_status&, fs::file_status&)
+{
+ if ((handle = ::opendir(dir)) == 0)
+ {
+ const int err = errno;
+ return error_code(err, system_category());
+ }
+ target.assign("."); // string was static but caused trouble
+ // when iteration called from dtor, after
+ // static had already been destroyed
+ return error_code();
+}
+
+// *result set to NULL on end of directory
+inline int readdir_r_simulator(DIR* dirp, void*& buffer, struct dirent** result)
+{
+#if defined(BOOST_FILESYSTEM_USE_READDIR_R)
+ errno = 0;
+
+ if (::sysconf(_SC_THREAD_SAFE_FUNCTIONS) >= 0)
+ {
+ struct dirent* storage = static_cast< struct dirent* >(buffer);
+ if (BOOST_UNLIKELY(!storage))
+ {
+ // According to readdir description, there's no reliable way to predict the length of the d_name string.
+ // It may exceed NAME_MAX and pathconf(_PC_NAME_MAX) limits. We are being conservative here and allocate
+ // buffer that is enough for PATH_MAX as the directory name. Still, this doesn't guarantee there won't be
+ // a buffer overrun. The readdir_r API is fundamentally flawed and we should avoid it as much as possible
+ // in favor of readdir.
+ const std::size_t name_size = path_max();
+ const std::size_t buffer_size = (sizeof(dirent) - sizeof(dirent().d_name)) + name_size + 1; // + 1 for "\0"
+ buffer = storage = static_cast< struct dirent* >(std::malloc(buffer_size));
+ if (BOOST_UNLIKELY(!storage))
+ return boost::system::errc::not_enough_memory;
+ std::memset(storage, 0, buffer_size);
+ }
+
+ return ::readdir_r(dirp, storage, result);
+ }
+#endif
+
+ errno = 0;
+
+ struct dirent* p = ::readdir(dirp);
+ *result = p;
+ if (!p)
+ return errno;
+ return 0;
+}
+
+error_code dir_itr_increment(void*& handle, void*& buffer,
+ std::string& target, fs::file_status& sf, fs::file_status& symlink_sf)
+{
+ dirent* result = NULL;
+ int err = readdir_r_simulator(static_cast<DIR*>(handle), buffer, &result);
+ if (BOOST_UNLIKELY(err != 0))
+ return error_code(err, system_category());
+ if (result == NULL)
+ return fs::detail::dir_itr_close(handle, buffer);
+
+ target = result->d_name;
+
+#ifdef BOOST_FILESYSTEM_STATUS_CACHE
+ if (result->d_type == DT_UNKNOWN) // filesystem does not supply d_type value
+ {
+ sf = symlink_sf = fs::file_status(fs::status_error);
+ }
+ else // filesystem supplies d_type value
+ {
+ if (result->d_type == DT_DIR)
+ sf = symlink_sf = fs::file_status(fs::directory_file);
+ else if (result->d_type == DT_REG)
+ sf = symlink_sf = fs::file_status(fs::regular_file);
+ else if (result->d_type == DT_LNK)
+ {
+ sf = fs::file_status(fs::status_error);
+ symlink_sf = fs::file_status(fs::symlink_file);
+ }
+ else
+ sf = symlink_sf = fs::file_status(fs::status_error);
+ }
+#else
+ sf = symlink_sf = fs::file_status(fs::status_error);
+#endif
+ return error_code();
+}
+
+#else // BOOST_WINDOWS_API
+
+error_code dir_itr_first(void*& handle, const fs::path& dir,
+ std::wstring& target, fs::file_status& sf, fs::file_status& symlink_sf)
+// Note: an empty root directory has no "." or ".." entries, so this
+// causes a ERROR_FILE_NOT_FOUND error which we do not considered an
+// error. It is treated as eof instead.
+{
+ // use a form of search Sebastian Martel reports will work with Win98
+ std::wstring dirpath(dir.wstring());
+ dirpath += (dirpath.empty()
+ || (dirpath[dirpath.size()-1] != L'\\'
+ && dirpath[dirpath.size()-1] != L'/'
+ && dirpath[dirpath.size()-1] != L':'))? L"\\*" : L"*";
+
+ WIN32_FIND_DATAW data;
+ if ((handle = ::FindFirstFileW(dirpath.c_str(), &data))
+ == INVALID_HANDLE_VALUE)
+ {
+ handle = 0; // signal eof
+ DWORD error = ::GetLastError();
+ return error_code( (error == ERROR_FILE_NOT_FOUND
+ // Windows Mobile returns ERROR_NO_MORE_FILES; see ticket #3551
+ || error == ERROR_NO_MORE_FILES)
+ ? 0 : error, system_category() );
+ }
+ target = data.cFileName;
+ if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+ // reparse points are complex, so don't try to handle them here; instead just mark
+ // them as status_error which causes directory_entry caching to call status()
+ // and symlink_status() which do handle reparse points fully
+ {
+ sf.type(fs::status_error);
+ symlink_sf.type(fs::status_error);
+ }
+ else
+ {
+ if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ sf.type(fs::directory_file);
+ symlink_sf.type(fs::directory_file);
+ }
+ else
+ {
+ sf.type(fs::regular_file);
+ symlink_sf.type(fs::regular_file);
+ }
+ sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes));
+ symlink_sf.permissions(sf.permissions());
+ }
+ return error_code();
+}
+
+error_code dir_itr_increment(void*& handle, std::wstring& target, fs::file_status& sf, fs::file_status& symlink_sf)
+{
+ WIN32_FIND_DATAW data;
+ if (::FindNextFileW(handle, &data)== 0)// fails
+ {
+ DWORD error = ::GetLastError();
+ fs::detail::dir_itr_close(handle);
+ return error_code(error == ERROR_NO_MORE_FILES ? 0 : error, system_category());
+ }
+ target = data.cFileName;
+ if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+ // reparse points are complex, so don't try to handle them here; instead just mark
+ // them as status_error which causes directory_entry caching to call status()
+ // and symlink_status() which do handle reparse points fully
+ {
+ sf.type(fs::status_error);
+ symlink_sf.type(fs::status_error);
+ }
+ else
+ {
+ if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ sf.type(fs::directory_file);
+ symlink_sf.type(fs::directory_file);
+ }
+ else
+ {
+ sf.type(fs::regular_file);
+ symlink_sf.type(fs::regular_file);
+ }
+ sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes));
+ symlink_sf.permissions(sf.permissions());
+ }
+ return error_code();
+}
+#endif
+
+BOOST_CONSTEXPR_OR_CONST err_t not_found_error_code =
+#ifdef BOOST_WINDOWS_API
+ ERROR_PATH_NOT_FOUND
+#else
+ ENOENT
+#endif
+;
+
+} // namespace
+
+// dir_itr_close is called both from the ~dir_itr_imp()destructor
+// and dir_itr_increment()
+BOOST_FILESYSTEM_DECL
+system::error_code dir_itr_close( // never throws
+ void*& handle
+#if defined(BOOST_POSIX_API)
+ , void*& buffer
+#endif
+ ) BOOST_NOEXCEPT
+{
+#ifdef BOOST_POSIX_API
+
+ if (buffer != NULL)
+ {
+ std::free(buffer);
+ buffer = NULL;
+ }
+
+ if (handle != NULL)
+ {
+ DIR* h = static_cast<DIR*>(handle);
+ handle = NULL;
+ int err = 0;
+ if (BOOST_UNLIKELY(::closedir(h) != 0))
+ {
+ err = errno;
+ return error_code(err, system_category());
+ }
+ }
+
+ return error_code();
+
+#else
+
+ if (handle != NULL)
+ {
+ ::FindClose(handle);
+ handle = NULL;
+ }
+ return error_code();
+
+#endif
+}
+
+BOOST_FILESYSTEM_DECL
+void directory_iterator_construct(directory_iterator& it, const path& p, unsigned int opts, system::error_code* ec)
+{
+ if (error(p.empty() ? not_found_error_code : 0, p, ec,
+ "boost::filesystem::directory_iterator::construct"))
+ {
+ return;
+ }
+
+ boost::intrusive_ptr< detail::dir_itr_imp > imp;
+ if (!ec)
+ {
+ imp = new detail::dir_itr_imp();
+ }
+ else
+ {
+ imp = new (std::nothrow) detail::dir_itr_imp();
+ if (BOOST_UNLIKELY(!imp))
+ {
+ *ec = make_error_code(system::errc::not_enough_memory);
+ return;
+ }
+ }
+
+ try
+ {
+ path::string_type filename;
+ file_status file_stat, symlink_file_stat;
+ error_code result = dir_itr_first(imp->handle,
+# if defined(BOOST_POSIX_API)
+ imp->buffer,
+# endif
+ p.c_str(), filename, file_stat, symlink_file_stat);
+
+ if (result)
+ {
+ if (result != make_error_condition(system::errc::permission_denied) ||
+ (opts & static_cast< unsigned int >(directory_options::skip_permission_denied)) == 0u)
+ {
+ error(result.value(), p,
+ ec, "boost::filesystem::directory_iterator::construct");
+ }
+
+ return;
+ }
+
+ if (imp->handle)
+ {
+ // Not eof
+ it.m_imp.swap(imp);
+ it.m_imp->dir_entry.assign(p / filename, file_stat, symlink_file_stat);
+ const path::string_type::value_type* filename_str = filename.c_str();
+ if (filename_str[0] == path::dot // dot or dot-dot
+ && (filename_str[1] == static_cast< path::string_type::value_type >('\0') ||
+ (filename_str[1] == path::dot && filename_str[2] == static_cast< path::string_type::value_type >('\0'))))
+ {
+ detail::directory_iterator_increment(it, ec);
+ }
+ }
+ }
+ catch (std::bad_alloc&)
+ {
+ if (!ec)
+ throw;
+
+ *ec = make_error_code(boost::system::errc::not_enough_memory);
+ it.m_imp.reset();
+ }
+}
+
+BOOST_FILESYSTEM_DECL
+void directory_iterator_increment(directory_iterator& it, system::error_code* ec)
+{
+ BOOST_ASSERT_MSG(!it.is_end(), "attempt to increment end iterator");
+
+ if (ec)
+ ec->clear();
+
+ try
+ {
+ path::string_type filename;
+ file_status file_stat, symlink_file_stat;
+ system::error_code increment_ec;
+
+ for (;;)
+ {
+ increment_ec = dir_itr_increment(it.m_imp->handle,
+# if defined(BOOST_POSIX_API)
+ it.m_imp->buffer,
+# endif
+ filename, file_stat, symlink_file_stat);
+
+ if (BOOST_UNLIKELY(!!increment_ec)) // happens if filesystem is corrupt, such as on a damaged optical disc
+ {
+ boost::intrusive_ptr< detail::dir_itr_imp > imp;
+ imp.swap(it.m_imp);
+ path error_path(imp->dir_entry.path().parent_path()); // fix ticket #5900
+ if (ec == NULL)
+ {
+ BOOST_FILESYSTEM_THROW(
+ filesystem_error("boost::filesystem::directory_iterator::operator++",
+ error_path,
+ increment_ec));
+ }
+ *ec = increment_ec;
+ return;
+ }
+
+ if (it.m_imp->handle == NULL) // eof, make end
+ {
+ it.m_imp.reset();
+ return;
+ }
+
+ const path::string_type::value_type* filename_str = filename.c_str();
+ if (!(filename_str[0] == path::dot // !(dot or dot-dot)
+ && (filename_str[1] == static_cast< path::string_type::value_type >('\0') ||
+ (filename_str[1] == path::dot && filename_str[2] == static_cast< path::string_type::value_type >('\0')))))
+ {
+ it.m_imp->dir_entry.replace_filename(filename, file_stat, symlink_file_stat);
+ return;
+ }
+ }
+ }
+ catch (std::bad_alloc&)
+ {
+ if (!ec)
+ throw;
+
+ it.m_imp.reset();
+ *ec = make_error_code(boost::system::errc::not_enough_memory);
+ }
+}
+
+//--------------------------------------------------------------------------------------//
+// //
+// recursive_directory_iterator //
+// //
+//--------------------------------------------------------------------------------------//
+
+BOOST_FILESYSTEM_DECL
+void recursive_directory_iterator_construct(recursive_directory_iterator& it, const path& dir_path, unsigned int opts, system::error_code* ec)
+{
+ if (ec)
+ ec->clear();
+
+ directory_iterator dir_it;
+ detail::directory_iterator_construct(dir_it, dir_path, opts, ec);
+ if ((ec && *ec) || dir_it == directory_iterator())
+ return;
+
+ boost::intrusive_ptr< detail::recur_dir_itr_imp > imp;
+ if (!ec)
+ {
+ imp = new detail::recur_dir_itr_imp(opts);
+ }
+ else
+ {
+ imp = new (std::nothrow) detail::recur_dir_itr_imp(opts);
+ if (BOOST_UNLIKELY(!imp))
+ {
+ *ec = make_error_code(system::errc::not_enough_memory);
+ return;
+ }
+ }
+
+ try
+ {
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ imp->m_stack.push_back(std::move(dir_it));
+#else
+ imp->m_stack.push_back(dir_it);
+#endif
+
+ it.m_imp.swap(imp);
+ }
+ catch (std::bad_alloc&)
+ {
+ if (ec)
+ {
+ *ec = make_error_code(system::errc::not_enough_memory);
+ return;
+ }
+
+ throw;
+ }
+}
+
+namespace {
+
+void recursive_directory_iterator_pop_on_error(detail::recur_dir_itr_imp* imp)
+{
+ imp->m_stack.pop_back();
+
+ while (!imp->m_stack.empty())
+ {
+ directory_iterator& dir_it = imp->m_stack.back();
+ system::error_code increment_ec;
+ detail::directory_iterator_increment(dir_it, &increment_ec);
+ if (!increment_ec && dir_it != directory_iterator())
+ break;
+
+ imp->m_stack.pop_back();
+ }
+}
+
+} // namespace
+
+BOOST_FILESYSTEM_DECL
+void recursive_directory_iterator_pop(recursive_directory_iterator& it, system::error_code* ec)
+{
+ BOOST_ASSERT_MSG(!it.is_end(), "pop() on end recursive_directory_iterator");
+ detail::recur_dir_itr_imp* const imp = it.m_imp.get();
+
+ if (ec)
+ ec->clear();
+
+ imp->m_stack.pop_back();
+
+ while (true)
+ {
+ if (imp->m_stack.empty())
+ {
+ it.m_imp.reset(); // done, so make end iterator
+ break;
+ }
+
+ directory_iterator& dir_it = imp->m_stack.back();
+ system::error_code increment_ec;
+ detail::directory_iterator_increment(dir_it, &increment_ec);
+ if (BOOST_UNLIKELY(!!increment_ec))
+ {
+ if ((imp->m_options & static_cast< unsigned int >(directory_options::pop_on_error)) == 0u)
+ {
+ // Make an end iterator on errors
+ it.m_imp.reset();
+ }
+ else
+ {
+ recursive_directory_iterator_pop_on_error(imp);
+
+ if (imp->m_stack.empty())
+ it.m_imp.reset(); // done, so make end iterator
+ }
+
+ if (ec == NULL)
+ {
+ BOOST_FILESYSTEM_THROW(
+ filesystem_error("boost::filesystem::recursive_directory_iterator::pop", increment_ec));
+ }
+
+ *ec = increment_ec;
+ return;
+ }
+
+ if (dir_it != directory_iterator())
+ break;
+
+ imp->m_stack.pop_back();
+ }
+}
+
+namespace {
+
+enum push_directory_result
+{
+ directory_not_pushed = 0u,
+ directory_pushed = 1u,
+ keep_depth = 1u << 1
+};
+
+// Returns: true if push occurs, otherwise false. Always returns false on error.
+inline push_directory_result recursive_directory_iterator_push_directory(detail::recur_dir_itr_imp* imp, system::error_code& ec) BOOST_NOEXCEPT
+{
+ push_directory_result result = directory_not_pushed;
+ try
+ {
+ // Discover if the iterator is for a directory that needs to be recursed into,
+ // taking symlinks and options into account.
+
+ if ((imp->m_options & static_cast< unsigned int >(directory_options::_detail_no_push)) != 0u)
+ {
+ imp->m_options &= ~static_cast< unsigned int >(directory_options::_detail_no_push);
+ return result;
+ }
+
+ file_status symlink_stat;
+
+ // if we are not recursing into symlinks, we are going to have to know if the
+ // stack top is a symlink, so get symlink_status and verify no error occurred
+ if ((imp->m_options & static_cast< unsigned int >(directory_options::follow_directory_symlink)) == 0u ||
+ (imp->m_options & static_cast< unsigned int >(directory_options::skip_dangling_symlinks)) != 0u)
+ {
+ symlink_stat = imp->m_stack.back()->symlink_status(ec);
+ if (ec)
+ return result;
+ }
+
+ // Logic for following predicate was contributed by Daniel Aarno to handle cyclic
+ // symlinks correctly and efficiently, fixing ticket #5652.
+ // if (((m_options & directory_options::follow_directory_symlink) == directory_options::follow_directory_symlink
+ // || !is_symlink(m_stack.back()->symlink_status()))
+ // && is_directory(m_stack.back()->status())) ...
+ // The predicate code has since been rewritten to pass error_code arguments,
+ // per ticket #5653.
+
+ if ((imp->m_options & static_cast< unsigned int >(directory_options::follow_directory_symlink)) != 0u || !fs::is_symlink(symlink_stat))
+ {
+ file_status stat = imp->m_stack.back()->status(ec);
+ if (BOOST_UNLIKELY(!!ec))
+ {
+ if (ec == make_error_condition(system::errc::no_such_file_or_directory) && fs::is_symlink(symlink_stat) &&
+ (imp->m_options & static_cast< unsigned int >(directory_options::follow_directory_symlink | directory_options::skip_dangling_symlinks))
+ == static_cast< unsigned int >(directory_options::follow_directory_symlink | directory_options::skip_dangling_symlinks))
+ {
+ // Skip dangling symlink and continue iteration on the current depth level
+ ec = error_code();
+ }
+
+ return result;
+ }
+
+ if (!fs::is_directory(stat))
+ return result;
+
+ if (BOOST_UNLIKELY((imp->m_stack.size() - 1u) >= static_cast< std::size_t >((std::numeric_limits< int >::max)())))
+ {
+ // We cannot let depth to overflow
+ ec = make_error_code(system::errc::value_too_large);
+ // When depth overflow happens, avoid popping the current directory iterator
+ // and attempt to continue iteration on the current depth.
+ result = keep_depth;
+ return result;
+ }
+
+ directory_iterator next(imp->m_stack.back()->path(), static_cast< BOOST_SCOPED_ENUM_NATIVE(directory_options) >(imp->m_options), ec);
+ if (!ec && next != directory_iterator())
+ {
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ imp->m_stack.push_back(std::move(next)); // may throw
+#else
+ imp->m_stack.push_back(next); // may throw
+#endif
+ return directory_pushed;
+ }
+ }
+ }
+ catch (std::bad_alloc&)
+ {
+ ec = make_error_code(system::errc::not_enough_memory);
+ }
+
+ return result;
+}
+
+} // namespace
+
+BOOST_FILESYSTEM_DECL
+void recursive_directory_iterator_increment(recursive_directory_iterator& it, system::error_code* ec)
+{
+ BOOST_ASSERT_MSG(!it.is_end(), "increment() on end recursive_directory_iterator");
+ detail::recur_dir_itr_imp* const imp = it.m_imp.get();
+
+ if (ec)
+ ec->clear();
+
+ system::error_code local_ec;
+
+ // if various conditions are met, push a directory_iterator into the iterator stack
+ push_directory_result push_result = recursive_directory_iterator_push_directory(imp, local_ec);
+ if (push_result == directory_pushed)
+ return;
+
+ // report errors if any
+ if (BOOST_UNLIKELY(!!local_ec))
+ {
+ on_error:
+ if ((imp->m_options & static_cast< unsigned int >(directory_options::pop_on_error)) == 0u)
+ {
+ // Make an end iterator on errors
+ it.m_imp.reset();
+ }
+ else
+ {
+ if ((push_result & keep_depth) != 0u)
+ {
+ system::error_code increment_ec;
+ directory_iterator& dir_it = imp->m_stack.back();
+ detail::directory_iterator_increment(dir_it, &increment_ec);
+ if (!increment_ec && dir_it != directory_iterator())
+ goto on_error_return;
+ }
+
+ recursive_directory_iterator_pop_on_error(imp);
+
+ if (imp->m_stack.empty())
+ it.m_imp.reset(); // done, so make end iterator
+ }
+
+ on_error_return:
+ if (ec == NULL)
+ {
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "filesystem::recursive_directory_iterator increment error",
+ local_ec));
+ }
+
+ *ec = local_ec;
+ return;
+ }
+
+ // Do the actual increment operation on the top iterator in the iterator
+ // stack, popping the stack if necessary, until either the stack is empty or a
+ // non-end iterator is reached.
+ while (true)
+ {
+ if (imp->m_stack.empty())
+ {
+ it.m_imp.reset(); // done, so make end iterator
+ break;
+ }
+
+ directory_iterator& dir_it = imp->m_stack.back();
+ detail::directory_iterator_increment(dir_it, &local_ec);
+ if (BOOST_UNLIKELY(!!local_ec))
+ goto on_error;
+
+ if (dir_it != directory_iterator())
+ break;
+
+ imp->m_stack.pop_back();
+ }
+}
+
+} // namespace detail
+
+} // namespace filesystem
+} // namespace boost
diff --git a/src/boost/libs/filesystem/src/error_handling.hpp b/src/boost/libs/filesystem/src/error_handling.hpp
new file mode 100644
index 000000000..16211c4fc
--- /dev/null
+++ b/src/boost/libs/filesystem/src/error_handling.hpp
@@ -0,0 +1,107 @@
+// error_handling.hpp --------------------------------------------------------------------//
+
+// Copyright 2002-2009, 2014 Beman Dawes
+// Copyright 2019 Andrey Semashev
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_
+#define BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_
+
+#include <cerrno>
+#include <boost/system/error_code.hpp>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/exception.hpp>
+
+#if defined(BOOST_WINDOWS_API)
+#include <boost/winapi/basic_types.hpp>
+#include <boost/winapi/get_last_error.hpp>
+#include <boost/winapi/error_codes.hpp>
+#endif
+
+namespace boost {
+namespace filesystem {
+
+#if defined(BOOST_POSIX_API)
+
+typedef int err_t;
+
+// POSIX uses a 0 return to indicate success
+#define BOOST_ERRNO errno
+
+#define BOOST_ERROR_NOT_SUPPORTED ENOSYS
+#define BOOST_ERROR_ALREADY_EXISTS EEXIST
+
+#else
+
+typedef boost::winapi::DWORD_ err_t;
+
+// Windows uses a non-0 return to indicate success
+#define BOOST_ERRNO boost::winapi::GetLastError()
+
+#define BOOST_ERROR_ALREADY_EXISTS boost::winapi::ERROR_ALREADY_EXISTS_
+#define BOOST_ERROR_NOT_SUPPORTED boost::winapi::ERROR_NOT_SUPPORTED_
+
+#endif
+
+// error handling helpers ----------------------------------------------------------//
+
+// Implemented in exception.cpp
+void emit_error(err_t error_num, system::error_code* ec, const char* message);
+void emit_error(err_t error_num, const path& p, system::error_code* ec, const char* message);
+void emit_error(err_t error_num, const path& p1, const path& p2, system::error_code* ec, const char* message);
+
+inline bool error(err_t error_num, system::error_code* ec, const char* message)
+{
+ if (BOOST_LIKELY(!error_num))
+ {
+ if (ec)
+ ec->clear();
+ return false;
+ }
+ else
+ { // error
+ filesystem::emit_error(error_num, ec, message);
+ return true;
+ }
+}
+
+inline bool error(err_t error_num, const path& p, system::error_code* ec, const char* message)
+{
+ if (BOOST_LIKELY(!error_num))
+ {
+ if (ec)
+ ec->clear();
+ return false;
+ }
+ else
+ { // error
+ filesystem::emit_error(error_num, p, ec, message);
+ return true;
+ }
+}
+
+inline bool error(err_t error_num, const path& p1, const path& p2, system::error_code* ec, const char* message)
+{
+ if (BOOST_LIKELY(!error_num))
+ {
+ if (ec)
+ ec->clear();
+ return false;
+ }
+ else
+ { // error
+ filesystem::emit_error(error_num, p1, p2, ec, message);
+ return true;
+ }
+}
+
+} // namespace filesystem
+} // namespace boost
+
+#endif // BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_
diff --git a/src/boost/libs/filesystem/src/exception.cpp b/src/boost/libs/filesystem/src/exception.cpp
new file mode 100644
index 000000000..9824f0f2b
--- /dev/null
+++ b/src/boost/libs/filesystem/src/exception.cpp
@@ -0,0 +1,145 @@
+// boost/filesystem/exception.hpp -----------------------------------------------------//
+
+// Copyright Beman Dawes 2003
+// Copyright Andrey Semashev 2019
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <string>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/exception.hpp>
+
+#include "error_handling.hpp"
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+namespace boost {
+namespace filesystem {
+
+filesystem_error::filesystem_error(const std::string& what_arg, system::error_code ec) :
+ system::system_error(ec, what_arg)
+{
+ try
+ {
+ m_imp_ptr.reset(new impl());
+ }
+ catch (...)
+ {
+ m_imp_ptr.reset();
+ }
+}
+
+filesystem_error::filesystem_error(const std::string& what_arg, const path& path1_arg, system::error_code ec) :
+ system::system_error(ec, what_arg)
+{
+ try
+ {
+ m_imp_ptr.reset(new impl(path1_arg));
+ }
+ catch (...)
+ {
+ m_imp_ptr.reset();
+ }
+}
+
+filesystem_error::filesystem_error(const std::string& what_arg, const path& path1_arg, const path& path2_arg, system::error_code ec) :
+ system::system_error(ec, what_arg)
+{
+ try
+ {
+ m_imp_ptr.reset(new impl(path1_arg, path2_arg));
+ }
+ catch (...)
+ {
+ m_imp_ptr.reset();
+ }
+}
+
+filesystem_error::filesystem_error(filesystem_error const& that) :
+ system::system_error(static_cast< system::system_error const& >(that)),
+ m_imp_ptr(that.m_imp_ptr)
+{
+}
+
+filesystem_error& filesystem_error::operator= (filesystem_error const& that)
+{
+ static_cast< system::system_error& >(*this) = static_cast< system::system_error const& >(that);
+ m_imp_ptr = that.m_imp_ptr;
+ return *this;
+}
+
+filesystem_error::~filesystem_error() BOOST_NOEXCEPT_OR_NOTHROW
+{
+}
+
+const char* filesystem_error::what() const BOOST_NOEXCEPT_OR_NOTHROW
+{
+ if (m_imp_ptr.get()) try
+ {
+ if (m_imp_ptr->m_what.empty())
+ {
+ m_imp_ptr->m_what = system::system_error::what();
+ if (!m_imp_ptr->m_path1.empty())
+ {
+ m_imp_ptr->m_what += ": \"";
+ m_imp_ptr->m_what += m_imp_ptr->m_path1.string();
+ m_imp_ptr->m_what += "\"";
+ }
+ if (!m_imp_ptr->m_path2.empty())
+ {
+ m_imp_ptr->m_what += ", \"";
+ m_imp_ptr->m_what += m_imp_ptr->m_path2.string();
+ m_imp_ptr->m_what += "\"";
+ }
+ }
+
+ return m_imp_ptr->m_what.c_str();
+ }
+ catch (...)
+ {
+ m_imp_ptr->m_what.clear();
+ }
+
+ return system::system_error::what();
+}
+
+const path& filesystem_error::get_empty_path() BOOST_NOEXCEPT
+{
+ static const path empty_path;
+ return empty_path;
+}
+
+// error handling helpers declared in error_handling.hpp -----------------------------------------------------//
+
+void emit_error(err_t error_num, system::error_code* ec, const char* message)
+{
+ if (!ec)
+ BOOST_FILESYSTEM_THROW(filesystem_error(message, system::error_code(error_num, system::system_category())));
+ else
+ ec->assign(error_num, system::system_category());
+}
+
+void emit_error(err_t error_num, const path& p, system::error_code* ec, const char* message)
+{
+ if (!ec)
+ BOOST_FILESYSTEM_THROW(filesystem_error(message, p, system::error_code(error_num, system::system_category())));
+ else
+ ec->assign(error_num, system::system_category());
+}
+
+void emit_error(err_t error_num, const path& p1, const path& p2, system::error_code* ec, const char* message)
+{
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(message, p1, p2, system::error_code(error_num, system::system_category())));
+ else
+ ec->assign(error_num, system::system_category());
+}
+
+} // namespace filesystem
+} // namespace boost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
diff --git a/src/boost/libs/filesystem/src/operations.cpp b/src/boost/libs/filesystem/src/operations.cpp
new file mode 100644
index 000000000..306875c5f
--- /dev/null
+++ b/src/boost/libs/filesystem/src/operations.cpp
@@ -0,0 +1,1996 @@
+// operations.cpp --------------------------------------------------------------------//
+
+// Copyright 2002-2009, 2014 Beman Dawes
+// Copyright 2001 Dietmar Kuehl
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+// define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355)
+#if defined(__ANDROID__) && defined(__ANDROID_API__) && __ANDROID_API__ < 24
+// Android fully supports 64-bit file offsets only for API 24 and above.
+//
+// Trying to define _FILE_OFFSET_BITS=64 for APIs below 24
+// leads to compilation failure for one or another reason,
+// depending on target Android API level, Android NDK version,
+// used STL, order of include paths and more.
+// For more information, please see:
+// - https://github.com/boostorg/filesystem/issues/65
+// - https://github.com/boostorg/filesystem/pull/69
+//
+// Android NDK developers consider it the expected behavior.
+// See their official position here:
+// - https://github.com/android-ndk/ndk/issues/501#issuecomment-326447479
+// - https://android.googlesource.com/platform/bionic/+/a34817457feee026e8702a1d2dffe9e92b51d7d1/docs/32-bit-abi.md#32_bit-abi-bugs
+//
+// Thus we do not define _FILE_OFFSET_BITS in such case.
+#else
+// Defining _FILE_OFFSET_BITS=64 should kick in 64-bit off_t's
+// (and thus st_size) on 32-bit systems that provide the Large File
+// Support (LFS) interface, such as Linux, Solaris, and IRIX.
+//
+// At the time of this comment writing (March 2018), on most systems
+// _FILE_OFFSET_BITS=64 definition is harmless:
+// either the definition is supported and enables 64-bit off_t,
+// or the definition is not supported and is ignored, in which case
+// off_t does not change its default size for the target system
+// (which may be 32-bit or 64-bit already).
+// Thus it makes sense to have _FILE_OFFSET_BITS=64 defined by default,
+// instead of listing every system that supports the definition.
+// Those few systems, on which _FILE_OFFSET_BITS=64 is harmful,
+// for example this definition causes compilation failure on those systems,
+// should be exempt from defining _FILE_OFFSET_BITS by adding
+// an appropriate #elif block above with the appropriate comment.
+//
+// _FILE_OFFSET_BITS must be defined before any headers are included
+// to ensure that the definition is available to all included headers.
+// That is required at least on Solaris, and possibly on other
+// systems as well.
+#define _FILE_OFFSET_BITS 64
+#endif
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r() needs this
+#endif
+
+// Include Boost.Predef first so that windows.h is guaranteed to be not included
+#include <boost/predef/os/windows.h>
+#if BOOST_OS_WINDOWS
+#include <boost/winapi/config.hpp>
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/file_status.hpp>
+#include <boost/filesystem/exception.hpp>
+#include <boost/filesystem/directory.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/smart_ptr/scoped_array.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <new> // std::bad_alloc
+#include <limits>
+#include <string>
+#include <cstddef>
+#include <cstdlib> // for malloc, free
+#include <cstring>
+#include <cstdio> // for remove, rename
+#if defined(__QNXNTO__) // see ticket #5355
+# include <stdio.h>
+#endif
+#include <cerrno>
+
+#ifdef BOOST_FILEYSTEM_INCLUDE_IOSTREAM
+# include <iostream>
+#endif
+
+# ifdef BOOST_POSIX_API
+
+# include <sys/types.h>
+# include <sys/stat.h>
+# if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__ANDROID__) \
+ && !defined(__VXWORKS__)
+# include <sys/statvfs.h>
+# define BOOST_STATVFS statvfs
+# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
+# else
+# ifdef __OpenBSD__
+# include <sys/param.h>
+# elif defined(__ANDROID__)
+# include <sys/vfs.h>
+# endif
+# if !defined(__VXWORKS__)
+# include <sys/mount.h>
+# endif
+# define BOOST_STATVFS statfs
+# define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>(vfs.f_bsize)
+# endif
+# include <unistd.h>
+# include <fcntl.h>
+# if _POSIX_C_SOURCE < 200809L
+# include <utime.h>
+# endif
+# include "limits.h"
+
+# else // BOOST_WINDOWS_API
+
+# include <boost/winapi/dll.hpp> // get_proc_address, GetModuleHandleW
+# include <cwchar>
+# include <io.h>
+# include <windows.h>
+# include <winnt.h>
+# if defined(__BORLANDC__) || defined(__MWERKS__)
+# if defined(__BORLANDC__)
+ using std::time_t;
+# endif
+# include <utime.h>
+# else
+# include <sys/utime.h>
+# endif
+
+#include "windows_tools.hpp"
+
+# endif // BOOST_WINDOWS_API
+
+#include "error_handling.hpp"
+
+namespace fs = boost::filesystem;
+using boost::filesystem::path;
+using boost::filesystem::filesystem_error;
+using boost::filesystem::perms;
+using boost::system::error_code;
+using boost::system::system_category;
+
+# if defined(BOOST_WINDOWS_API)
+
+// REPARSE_DATA_BUFFER related definitions are found in ntifs.h, which is part of the
+// Windows Device Driver Kit. Since that's inconvenient, the definitions are provided
+// here. See http://msdn.microsoft.com/en-us/library/ms791514.aspx
+
+#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE) // mingw winnt.h does provide the defs
+
+#define SYMLINK_FLAG_RELATIVE 1
+
+typedef struct _REPARSE_DATA_BUFFER {
+ ULONG ReparseTag;
+ USHORT ReparseDataLength;
+ USHORT Reserved;
+ union {
+ struct {
+ USHORT SubstituteNameOffset;
+ USHORT SubstituteNameLength;
+ USHORT PrintNameOffset;
+ USHORT PrintNameLength;
+ ULONG Flags;
+ WCHAR PathBuffer[1];
+ /* Example of distinction between substitute and print names:
+ mklink /d ldrive c:\
+ SubstituteName: c:\\??\
+ PrintName: c:\
+ */
+ } SymbolicLinkReparseBuffer;
+ struct {
+ USHORT SubstituteNameOffset;
+ USHORT SubstituteNameLength;
+ USHORT PrintNameOffset;
+ USHORT PrintNameLength;
+ WCHAR PathBuffer[1];
+ } MountPointReparseBuffer;
+ struct {
+ UCHAR DataBuffer[1];
+ } GenericReparseBuffer;
+ };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+#define REPARSE_DATA_BUFFER_HEADER_SIZE \
+ FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
+
+#endif
+
+#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
+#endif
+
+# ifndef FSCTL_GET_REPARSE_POINT
+# define FSCTL_GET_REPARSE_POINT 0x900a8
+# endif
+
+# ifndef IO_REPARSE_TAG_SYMLINK
+# define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
+# endif
+
+# endif // BOOST_WINDOWS_API
+
+// POSIX/Windows macros ----------------------------------------------------//
+
+// Portions of the POSIX and Windows API's are very similar, except for name,
+// order of arguments, and meaning of zero/non-zero returns. The macros below
+// abstract away those differences. They follow Windows naming and order of
+// arguments, and return true to indicate no error occurred. [POSIX naming,
+// order of arguments, and meaning of return were followed initially, but
+// found to be less clear and cause more coding errors.]
+
+# if defined(BOOST_POSIX_API)
+
+# define BOOST_SET_CURRENT_DIRECTORY(P)(::chdir(P)== 0)
+# define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0)
+# define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0)
+# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0)
+# define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0)
+# define BOOST_DELETE_FILE(P)(::unlink(P)== 0)
+# define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\
+ || ::mkdir(to.c_str(),from_stat.st_mode)!= 0))
+# define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool)
+# define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0)
+# define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0)
+
+# else // BOOST_WINDOWS_API
+
+# define BOOST_SET_CURRENT_DIRECTORY(P)(::SetCurrentDirectoryW(P)!= 0)
+# define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0)
+# define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0)
+# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0)
+# define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0)
+# define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0)
+# define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0)
+# define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0)
+# define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED)!= 0)
+# define BOOST_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0)
+# define BOOST_READ_SYMLINK(P,T)
+
+# endif
+
+namespace boost {
+namespace filesystem {
+namespace detail {
+
+//--------------------------------------------------------------------------------------//
+// //
+// helpers (all operating systems) //
+// //
+//--------------------------------------------------------------------------------------//
+
+namespace {
+
+// Absolute maximum path length, in bytes, that we're willing to accept from various system calls.
+// This value is arbitrary, it is supposed to be a hard limit to avoid memory exhaustion
+// in some of the algorithms below in case of some corrupted or maliciously broken filesystem.
+BOOST_CONSTEXPR_OR_CONST std::size_t absolute_path_max = 16u * 1024u * 1024u;
+
+fs::file_type query_file_type(const path& p, error_code* ec);
+
+// general helpers -----------------------------------------------------------------//
+
+bool is_empty_directory(const path& p, error_code* ec)
+{
+ return (ec != 0 ? fs::directory_iterator(p, *ec) : fs::directory_iterator(p))
+ == fs::directory_iterator();
+}
+
+bool not_found_error(int errval) BOOST_NOEXCEPT; // forward declaration
+
+// only called if directory exists
+bool remove_directory(const path& p) // true if succeeds or not found
+{
+ return BOOST_REMOVE_DIRECTORY(p.c_str())
+ || not_found_error(BOOST_ERRNO); // mitigate possible file system race. See #11166
+}
+
+// only called if file exists
+bool remove_file(const path& p) // true if succeeds or not found
+{
+ return BOOST_DELETE_FILE(p.c_str())
+ || not_found_error(BOOST_ERRNO); // mitigate possible file system race. See #11166
+}
+
+// called by remove and remove_all_aux
+bool remove_file_or_directory(const path& p, fs::file_type type, error_code* ec)
+ // return true if file removed, false if not removed
+{
+ if (type == fs::file_not_found)
+ {
+ if (ec != 0) ec->clear();
+ return false;
+ }
+
+ if (type == fs::directory_file
+# ifdef BOOST_WINDOWS_API
+ || type == fs::_detail_directory_symlink
+# endif
+ )
+ {
+ if (error(!remove_directory(p) ? BOOST_ERRNO : 0, p, ec,
+ "boost::filesystem::remove"))
+ return false;
+ }
+ else
+ {
+ if (error(!remove_file(p) ? BOOST_ERRNO : 0, p, ec,
+ "boost::filesystem::remove"))
+ return false;
+ }
+ return true;
+}
+
+boost::uintmax_t remove_all_aux(const path& p, fs::file_type type,
+ error_code* ec)
+{
+ boost::uintmax_t count = 0;
+
+ if (type == fs::directory_file) // but not a directory symlink
+ {
+ fs::directory_iterator itr;
+ if (ec != 0)
+ {
+ itr = fs::directory_iterator(p, *ec);
+ if (*ec)
+ return count;
+ }
+ else
+ itr = fs::directory_iterator(p);
+
+ const fs::directory_iterator end_dit;
+ while(itr != end_dit)
+ {
+ fs::file_type tmp_type = query_file_type(itr->path(), ec);
+ if (ec != 0 && *ec)
+ return count;
+
+ count += remove_all_aux(itr->path(), tmp_type, ec);
+ if (ec != 0 && *ec)
+ return count;
+
+ fs::detail::directory_iterator_increment(itr, ec);
+ if (ec != 0 && *ec)
+ return count;
+ }
+ }
+
+ remove_file_or_directory(p, type, ec);
+ if (ec != 0 && *ec)
+ return count;
+
+ return ++count;
+}
+
+#ifdef BOOST_POSIX_API
+
+//--------------------------------------------------------------------------------------//
+// //
+// POSIX-specific helpers //
+// //
+//--------------------------------------------------------------------------------------//
+
+BOOST_CONSTEXPR_OR_CONST char dot = '.';
+
+inline bool not_found_error(int errval) BOOST_NOEXCEPT
+{
+ return errval == ENOENT || errval == ENOTDIR;
+}
+
+bool // true if ok
+copy_file_api(const std::string& from_p,
+ const std::string& to_p, bool fail_if_exists)
+{
+ BOOST_CONSTEXPR_OR_CONST std::size_t buf_sz = 65536;
+ boost::scoped_array<char> buf(new char [buf_sz]);
+ int infile=-1, outfile=-1; // -1 means not open
+
+ // bug fixed: code previously did a stat()on the from_file first, but that
+ // introduced a gratuitous race condition; the stat()is now done after the open()
+
+ if ((infile = ::open(from_p.c_str(), O_RDONLY))< 0)
+ { return false; }
+
+ struct stat from_stat;
+ if (::stat(from_p.c_str(), &from_stat)!= 0)
+ {
+ ::close(infile);
+ return false;
+ }
+
+ int oflag = O_CREAT | O_WRONLY | O_TRUNC;
+ if (fail_if_exists)
+ oflag |= O_EXCL;
+ if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode)) < 0)
+ {
+ const int open_errno = errno;
+ BOOST_ASSERT(infile >= 0);
+ ::close(infile);
+ errno = open_errno;
+ return false;
+ }
+
+ ssize_t sz, sz_read=1, sz_write;
+ while (sz_read > 0
+ && (sz_read = ::read(infile, buf.get(), buf_sz)) > 0)
+ {
+ // Allow for partial writes - see Advanced Unix Programming (2nd Ed.),
+ // Marc Rochkind, Addison-Wesley, 2004, page 94
+ sz_write = 0;
+ do
+ {
+ BOOST_ASSERT(sz_read - sz_write > 0); // #1
+ // ticket 4438 claimed possible infinite loop if write returns 0. My analysis
+ // is that POSIX specifies 0 return only if 3rd arg is 0, and that will never
+ // happen due to loop entry and coninuation conditions. BOOST_ASSERT #1 above
+ // and #2 below added to verify that analysis.
+ if ((sz = ::write(outfile, buf.get() + sz_write,
+ sz_read - sz_write)) < 0)
+ {
+ sz_read = sz; // cause read loop termination
+ break; // and error reported after closes
+ }
+ BOOST_ASSERT(sz > 0); // #2
+ sz_write += sz;
+ } while (sz_write < sz_read);
+ }
+
+ if (::close(infile)< 0)
+ sz_read = -1;
+ if (::close(outfile)< 0)
+ sz_read = -1;
+
+ return sz_read >= 0;
+}
+
+inline fs::file_type query_file_type(const path& p, error_code* ec)
+{
+ return fs::detail::symlink_status(p, ec).type();
+}
+
+# else
+
+//--------------------------------------------------------------------------------------//
+// //
+// Windows-specific helpers //
+// //
+//--------------------------------------------------------------------------------------//
+
+BOOST_CONSTEXPR_OR_CONST std::size_t buf_size = 128;
+
+BOOST_CONSTEXPR_OR_CONST wchar_t dot = L'.';
+
+inline std::wstring wgetenv(const wchar_t* name)
+{
+ // use a separate buffer since C++03 basic_string is not required to be contiguous
+ const DWORD size = ::GetEnvironmentVariableW(name, NULL, 0);
+ if (size > 0)
+ {
+ boost::scoped_array<wchar_t> buf(new wchar_t[size]);
+ if (BOOST_LIKELY(::GetEnvironmentVariableW(name, buf.get(), size) > 0))
+ return std::wstring(buf.get());
+ }
+
+ return std::wstring();
+}
+
+inline bool not_found_error(int errval) BOOST_NOEXCEPT
+{
+ return errval == ERROR_FILE_NOT_FOUND
+ || errval == ERROR_PATH_NOT_FOUND
+ || errval == ERROR_INVALID_NAME // "tools/jam/src/:sys:stat.h", "//foo"
+ || errval == ERROR_INVALID_DRIVE // USB card reader with no card inserted
+ || errval == ERROR_NOT_READY // CD/DVD drive with no disc inserted
+ || errval == ERROR_INVALID_PARAMETER // ":sys:stat.h"
+ || errval == ERROR_BAD_PATHNAME // "//nosuch" on Win64
+ || errval == ERROR_BAD_NETPATH; // "//nosuch" on Win32
+}
+
+// these constants come from inspecting some Microsoft sample code
+std::time_t to_time_t(const FILETIME & ft)
+{
+ __int64 t = (static_cast<__int64>(ft.dwHighDateTime)<< 32)
+ + ft.dwLowDateTime;
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+ t -= 116444736000000000LL;
+# else
+ t -= 116444736000000000;
+# endif
+ t /= 10000000;
+ return static_cast<std::time_t>(t);
+}
+
+void to_FILETIME(std::time_t t, FILETIME & ft)
+{
+ __int64 temp = t;
+ temp *= 10000000;
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+ temp += 116444736000000000LL;
+# else
+ temp += 116444736000000000;
+# endif
+ ft.dwLowDateTime = static_cast<DWORD>(temp);
+ ft.dwHighDateTime = static_cast<DWORD>(temp >> 32);
+}
+
+// Thanks to Jeremy Maitin-Shepard for much help and for permission to
+// base the equivalent()implementation on portions of his
+// file-equivalence-win32.cpp experimental code.
+
+struct handle_wrapper
+{
+ HANDLE handle;
+ handle_wrapper(HANDLE h)
+ : handle(h){}
+ ~handle_wrapper()
+ {
+ if (handle != INVALID_HANDLE_VALUE)
+ ::CloseHandle(handle);
+ }
+};
+
+HANDLE create_file_handle(const path& p, DWORD dwDesiredAccess,
+ DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile)
+{
+ return ::CreateFileW(p.c_str(), dwDesiredAccess, dwShareMode,
+ lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
+ hTemplateFile);
+}
+
+bool is_reparse_point_a_symlink(const path& p)
+{
+ handle_wrapper h(create_file_handle(p, FILE_READ_EA,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL));
+ if (h.handle == INVALID_HANDLE_VALUE)
+ return false;
+
+ boost::scoped_array<char> buf(new char [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]);
+
+ // Query the reparse data
+ DWORD dwRetLen;
+ BOOL result = ::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buf.get(),
+ MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &dwRetLen, NULL);
+ if (!result) return false;
+
+ return reinterpret_cast<const REPARSE_DATA_BUFFER*>(buf.get())->ReparseTag
+ == IO_REPARSE_TAG_SYMLINK
+ // Issue 9016 asked that NTFS directory junctions be recognized as directories.
+ // That is equivalent to recognizing them as symlinks, and then the normal symlink
+ // mechanism will take care of recognizing them as directories.
+ //
+ // Directory junctions are very similar to symlinks, but have some performance
+ // and other advantages over symlinks. They can be created from the command line
+ // with "mklink /j junction-name target-path".
+ || reinterpret_cast<const REPARSE_DATA_BUFFER*>(buf.get())->ReparseTag
+ == IO_REPARSE_TAG_MOUNT_POINT; // aka "directory junction" or "junction"
+}
+
+inline std::size_t get_full_path_name(
+ const path& src, std::size_t len, wchar_t* buf, wchar_t** p)
+{
+ return static_cast<std::size_t>(
+ ::GetFullPathNameW(src.c_str(), static_cast<DWORD>(len), buf, p));
+}
+
+fs::file_status process_status_failure(const path& p, error_code* ec)
+{
+ int errval(::GetLastError());
+ if (ec != 0) // always report errval, even though some
+ ec->assign(errval, system_category()); // errval values are not status_errors
+
+ if (not_found_error(errval))
+ {
+ return fs::file_status(fs::file_not_found, fs::no_perms);
+ }
+ else if (errval == ERROR_SHARING_VIOLATION)
+ {
+ return fs::file_status(fs::type_unknown);
+ }
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status",
+ p, error_code(errval, system_category())));
+ return fs::file_status(fs::status_error);
+}
+
+// differs from symlink_status() in that directory symlinks are reported as
+// _detail_directory_symlink, as required on Windows by remove() and its helpers.
+fs::file_type query_file_type(const path& p, error_code* ec)
+{
+ DWORD attr(::GetFileAttributesW(p.c_str()));
+ if (attr == 0xFFFFFFFF)
+ {
+ return process_status_failure(p, ec).type();
+ }
+
+ if (ec != 0) ec->clear();
+
+ if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+ {
+ if (is_reparse_point_a_symlink(p))
+ return (attr & FILE_ATTRIBUTE_DIRECTORY)
+ ? fs::_detail_directory_symlink
+ : fs::symlink_file;
+ return fs::reparse_file;
+ }
+
+ return (attr & FILE_ATTRIBUTE_DIRECTORY)
+ ? fs::directory_file
+ : fs::regular_file;
+}
+
+BOOL resize_file_api(const wchar_t* p, boost::uintmax_t size)
+{
+ handle_wrapper h(CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, 0));
+ LARGE_INTEGER sz;
+ sz.QuadPart = size;
+ return h.handle != INVALID_HANDLE_VALUE
+ && ::SetFilePointerEx(h.handle, sz, 0, FILE_BEGIN)
+ && ::SetEndOfFile(h.handle);
+}
+
+// Windows kernel32.dll functions that may or may not be present
+// must be accessed through pointers
+
+typedef BOOL (WINAPI *PtrCreateHardLinkW)(
+ /*__in*/ LPCWSTR lpFileName,
+ /*__in*/ LPCWSTR lpExistingFileName,
+ /*__reserved*/ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+PtrCreateHardLinkW create_hard_link_api = PtrCreateHardLinkW(
+ boost::winapi::get_proc_address(
+ boost::winapi::GetModuleHandleW(L"kernel32.dll"), "CreateHardLinkW"));
+
+typedef BOOLEAN (WINAPI *PtrCreateSymbolicLinkW)(
+ /*__in*/ LPCWSTR lpSymlinkFileName,
+ /*__in*/ LPCWSTR lpTargetFileName,
+ /*__in*/ DWORD dwFlags
+ );
+
+PtrCreateSymbolicLinkW create_symbolic_link_api = PtrCreateSymbolicLinkW(
+ boost::winapi::get_proc_address(
+ boost::winapi::GetModuleHandleW(L"kernel32.dll"), "CreateSymbolicLinkW"));
+
+#endif
+
+//#ifdef BOOST_WINDOWS_API
+//
+//
+// inline bool get_free_disk_space(const std::wstring& ph,
+// PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free)
+// { return ::GetDiskFreeSpaceExW(ph.c_str(), avail, total, free)!= 0; }
+//
+//#endif
+
+} // unnamed namespace
+} // namespace detail
+
+//--------------------------------------------------------------------------------------//
+// //
+// operations functions declared in operations.hpp //
+// in alphabetic order //
+// //
+//--------------------------------------------------------------------------------------//
+
+BOOST_FILESYSTEM_DECL
+path absolute(const path& p, const path& base)
+{
+// if ( p.empty() || p.is_absolute() )
+// return p;
+// // recursively calling absolute is sub-optimal, but is simple
+// path abs_base(base.is_absolute() ? base : absolute(base));
+//# ifdef BOOST_WINDOWS_API
+// if (p.has_root_directory())
+// return abs_base.root_name() / p;
+// // !p.has_root_directory
+// if (p.has_root_name())
+// return p.root_name()
+// / abs_base.root_directory() / abs_base.relative_path() / p.relative_path();
+// // !p.has_root_name()
+//# endif
+// return abs_base / p;
+
+ // recursively calling absolute is sub-optimal, but is sure and simple
+ path abs_base(base.is_absolute() ? base : absolute(base));
+
+ // store expensive to compute values that are needed multiple times
+ path p_root_name (p.root_name());
+ path base_root_name (abs_base.root_name());
+ path p_root_directory (p.root_directory());
+
+ if (p.empty())
+ return abs_base;
+
+ if (!p_root_name.empty()) // p.has_root_name()
+ {
+ if (p_root_directory.empty()) // !p.has_root_directory()
+ return p_root_name / abs_base.root_directory()
+ / abs_base.relative_path() / p.relative_path();
+ // p is absolute, so fall through to return p at end of block
+ }
+ else if (!p_root_directory.empty()) // p.has_root_directory()
+ {
+# ifdef BOOST_POSIX_API
+ // POSIX can have root name it it is a network path
+ if (base_root_name.empty()) // !abs_base.has_root_name()
+ return p;
+# endif
+ return base_root_name / p;
+ }
+ else
+ {
+ return abs_base / p;
+ }
+
+ return p; // p.is_absolute() is true
+}
+
+namespace detail {
+
+BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
+{
+# ifdef BOOST_POSIX_API
+ typedef struct stat struct_stat;
+ return sizeof(struct_stat().st_size) > 4;
+# else
+ return true;
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path canonical(const path& p, const path& base, system::error_code* ec)
+{
+ path source (p.is_absolute() ? p : absolute(p, base));
+ path root(source.root_path());
+ path result;
+
+ system::error_code local_ec;
+ file_status stat (status(source, local_ec));
+
+ if (stat.type() == fs::file_not_found)
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::canonical", source,
+ error_code(system::errc::no_such_file_or_directory, system::generic_category())));
+ ec->assign(system::errc::no_such_file_or_directory, system::generic_category());
+ return result;
+ }
+ else if (local_ec)
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::canonical", source, local_ec));
+ *ec = local_ec;
+ return result;
+ }
+
+ bool scan = true;
+ while (scan)
+ {
+ scan = false;
+ result.clear();
+ for (path::iterator itr = source.begin(); itr != source.end(); ++itr)
+ {
+ if (*itr == dot_path())
+ continue;
+ if (*itr == dot_dot_path())
+ {
+ if (result != root)
+ result.remove_filename();
+ continue;
+ }
+
+ result /= *itr;
+
+ bool is_sym (is_symlink(detail::symlink_status(result, ec)));
+ if (ec && *ec)
+ return path();
+
+ if (is_sym)
+ {
+ path link(detail::read_symlink(result, ec));
+ if (ec && *ec)
+ return path();
+ result.remove_filename();
+
+ if (link.is_absolute())
+ {
+ for (++itr; itr != source.end(); ++itr)
+ link /= *itr;
+ source = link;
+ }
+ else // link is relative
+ {
+ path new_source(result);
+ new_source /= link;
+ for (++itr; itr != source.end(); ++itr)
+ new_source /= *itr;
+ source = new_source;
+ }
+ scan = true; // symlink causes scan to be restarted
+ break;
+ }
+ }
+ }
+ if (ec != 0)
+ ec->clear();
+ BOOST_ASSERT_MSG(result.is_absolute(), "canonical() implementation error; please report");
+ return result;
+}
+
+BOOST_FILESYSTEM_DECL
+void copy(const path& from, const path& to, system::error_code* ec)
+{
+ file_status s(detail::symlink_status(from, ec));
+ if (ec != 0 && *ec) return;
+
+ if(is_symlink(s))
+ {
+ detail::copy_symlink(from, to, ec);
+ }
+ else if(is_directory(s))
+ {
+ detail::copy_directory(from, to, ec);
+ }
+ else if(is_regular_file(s))
+ {
+ detail::copy_file(from, to, detail::fail_if_exists, ec);
+ }
+ else
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::copy",
+ from, to, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category())));
+ ec->assign(BOOST_ERROR_NOT_SUPPORTED, system_category());
+ }
+}
+
+BOOST_FILESYSTEM_DECL
+void copy_directory(const path& from, const path& to, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ struct stat from_stat;
+# endif
+ error(!BOOST_COPY_DIRECTORY(from.c_str(), to.c_str()) ? BOOST_ERRNO : 0,
+ from, to, ec, "boost::filesystem::copy_directory");
+}
+
+BOOST_FILESYSTEM_DECL
+void copy_file(const path& from, const path& to, copy_option option, error_code* ec)
+{
+ error(!BOOST_COPY_FILE(from.c_str(), to.c_str(),
+ option == fail_if_exists) ? BOOST_ERRNO : 0,
+ from, to, ec, "boost::filesystem::copy_file");
+}
+
+BOOST_FILESYSTEM_DECL
+void copy_symlink(const path& existing_symlink, const path& new_symlink,
+ system::error_code* ec)
+{
+# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
+ error(BOOST_ERROR_NOT_SUPPORTED, new_symlink, existing_symlink, ec,
+ "boost::filesystem::copy_symlink");
+
+# else // modern Windows or BOOST_POSIX_API
+ path p(read_symlink(existing_symlink, ec));
+ if (ec != 0 && *ec) return;
+ create_symlink(p, new_symlink, ec);
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+bool create_directories(const path& p, system::error_code* ec)
+{
+ if (p.empty())
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::create_directories", p,
+ system::errc::make_error_code(system::errc::invalid_argument)));
+ else
+ ec->assign(system::errc::invalid_argument, system::generic_category());
+ return false;
+ }
+
+ if (p.filename_is_dot() || p.filename_is_dot_dot())
+ return create_directories(p.parent_path(), ec);
+
+ error_code local_ec;
+ file_status p_status = status(p, local_ec);
+
+ if (p_status.type() == directory_file)
+ {
+ if (ec != 0)
+ ec->clear();
+ return false;
+ }
+
+ path parent = p.parent_path();
+ BOOST_ASSERT_MSG(parent != p, "internal error: p == p.parent_path()");
+ if (!parent.empty())
+ {
+ // determine if the parent exists
+ file_status parent_status = status(parent, local_ec);
+
+ // if the parent does not exist, create the parent
+ if (parent_status.type() == file_not_found)
+ {
+ create_directories(parent, local_ec);
+ if (local_ec)
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::create_directories", parent, local_ec));
+ else
+ *ec = local_ec;
+ return false;
+ }
+ }
+ }
+
+ // create the directory
+ return create_directory(p, ec);
+}
+
+BOOST_FILESYSTEM_DECL
+bool create_directory(const path& p, error_code* ec)
+{
+ if (BOOST_CREATE_DIRECTORY(p.c_str()))
+ {
+ if (ec != 0)
+ ec->clear();
+ return true;
+ }
+
+ // attempt to create directory failed
+ int errval(BOOST_ERRNO); // save reason for failure
+ error_code dummy;
+
+ if (is_directory(p, dummy))
+ {
+ if (ec != 0)
+ ec->clear();
+ return false;
+ }
+
+ // attempt to create directory failed && it doesn't already exist
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::create_directory",
+ p, error_code(errval, system_category())));
+ else
+ ec->assign(errval, system_category());
+
+ return false;
+}
+
+BOOST_FILESYSTEM_DECL
+void create_directory_symlink(const path& to, const path& from,
+ system::error_code* ec)
+{
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008
+
+ error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+ "boost::filesystem::create_directory_symlink");
+# else
+
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+ // see if actually supported by Windows runtime dll
+ if (error(!create_symbolic_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+ "boost::filesystem::create_directory_symlink"))
+ return;
+# endif
+
+ error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(),
+ SYMBOLIC_LINK_FLAG_DIRECTORY) ? BOOST_ERRNO : 0,
+ to, from, ec, "boost::filesystem::create_directory_symlink");
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+void create_hard_link(const path& to, const path& from, error_code* ec)
+{
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0500 // SDK earlier than Win 2K
+
+ error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+ "boost::filesystem::create_hard_link");
+# else
+
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0500
+ // see if actually supported by Windows runtime dll
+ if (error(!create_hard_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+ "boost::filesystem::create_hard_link"))
+ return;
+# endif
+
+ error(!BOOST_CREATE_HARD_LINK(from.c_str(), to.c_str()) ? BOOST_ERRNO : 0, to, from, ec,
+ "boost::filesystem::create_hard_link");
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+void create_symlink(const path& to, const path& from, error_code* ec)
+{
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008
+ error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+ "boost::filesystem::create_directory_symlink");
+# else
+
+# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+ // see if actually supported by Windows runtime dll
+ if (error(!create_symbolic_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+ "boost::filesystem::create_symlink"))
+ return;
+# endif
+
+ error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0) ? BOOST_ERRNO : 0,
+ to, from, ec, "boost::filesystem::create_symlink");
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path current_path(error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ struct local
+ {
+ static bool getcwd_error(error_code* ec)
+ {
+ const int err = errno;
+ return error((err != ERANGE
+ // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set
+# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+ && err != 0
+# endif
+ ) ? err : 0, ec, "boost::filesystem::current_path");
+ }
+ };
+
+ path cur;
+ char small_buf[1024];
+ const char* p = ::getcwd(small_buf, sizeof(small_buf));
+ if (BOOST_LIKELY(!!p))
+ {
+ cur = p;
+ if (ec != 0) ec->clear();
+ }
+ else if (BOOST_LIKELY(!local::getcwd_error(ec)))
+ {
+ for (std::size_t path_max = sizeof(small_buf);; path_max *= 2u) // loop 'til buffer large enough
+ {
+ if (BOOST_UNLIKELY(path_max > absolute_path_max))
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::current_path",
+ error_code(ENAMETOOLONG, system_category())));
+ else
+ ec->assign(ENAMETOOLONG, system_category());
+ break;
+ }
+
+ boost::scoped_array<char> buf(new char[path_max]);
+ p = ::getcwd(buf.get(), path_max);
+ if (BOOST_LIKELY(!!p))
+ {
+ cur = buf.get();
+ if (ec != 0)
+ ec->clear();
+ break;
+ }
+ else if (BOOST_UNLIKELY(local::getcwd_error(ec)))
+ {
+ break;
+ }
+ }
+ }
+
+ return cur;
+
+# elif defined(UNDER_CE)
+ // Windows CE has no current directory, so everything's relative to the root of the directory tree
+ return L"\\";
+# else
+ DWORD sz;
+ if ((sz = ::GetCurrentDirectoryW(0, NULL)) == 0)sz = 1;
+ boost::scoped_array<path::value_type> buf(new path::value_type[sz]);
+ error(::GetCurrentDirectoryW(sz, buf.get()) == 0 ? BOOST_ERRNO : 0, ec,
+ "boost::filesystem::current_path");
+ return path(buf.get());
+# endif
+}
+
+
+BOOST_FILESYSTEM_DECL
+void current_path(const path& p, system::error_code* ec)
+{
+# ifdef UNDER_CE
+ error(BOOST_ERROR_NOT_SUPPORTED, p, ec,
+ "boost::filesystem::current_path");
+# else
+ error(!BOOST_SET_CURRENT_DIRECTORY(p.c_str()) ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::current_path");
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+bool equivalent(const path& p1, const path& p2, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ struct stat s2;
+ int e2(::stat(p2.c_str(), &s2));
+ struct stat s1;
+ int e1(::stat(p1.c_str(), &s1));
+
+ if (e1 != 0 || e2 != 0)
+ {
+ // if one is invalid and the other isn't then they aren't equivalent,
+ // but if both are invalid then it is an error
+ error (e1 != 0 && e2 != 0, p1, p2, ec, "boost::filesystem::equivalent");
+ return false;
+ }
+
+ // both stats now known to be valid
+ return s1.st_dev == s2.st_dev && s1.st_ino == s2.st_ino
+ // According to the POSIX stat specs, "The st_ino and st_dev fields
+ // taken together uniquely identify the file within the system."
+ // Just to be sure, size and mod time are also checked.
+ && s1.st_size == s2.st_size && s1.st_mtime == s2.st_mtime;
+
+# else // Windows
+
+ // Note well: Physical location on external media is part of the
+ // equivalence criteria. If there are no open handles, physical location
+ // can change due to defragmentation or other relocations. Thus handles
+ // must be held open until location information for both paths has
+ // been retrieved.
+
+ // p2 is done first, so any error reported is for p1
+ handle_wrapper h2(
+ create_file_handle(
+ p2.c_str(),
+ 0,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 0,
+ OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS,
+ 0));
+
+ handle_wrapper h1(
+ create_file_handle(
+ p1.c_str(),
+ 0,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 0,
+ OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS,
+ 0));
+
+ if (h1.handle == INVALID_HANDLE_VALUE
+ || h2.handle == INVALID_HANDLE_VALUE)
+ {
+ // if one is invalid and the other isn't, then they aren't equivalent,
+ // but if both are invalid then it is an error
+ error((h1.handle == INVALID_HANDLE_VALUE
+ && h2.handle == INVALID_HANDLE_VALUE) ? BOOST_ERROR_NOT_SUPPORTED : 0, p1, p2, ec,
+ "boost::filesystem::equivalent");
+ return false;
+ }
+
+ // at this point, both handles are known to be valid
+
+ BY_HANDLE_FILE_INFORMATION info1, info2;
+
+ if (error(!::GetFileInformationByHandle(h1.handle, &info1) ? BOOST_ERRNO : 0,
+ p1, p2, ec, "boost::filesystem::equivalent"))
+ return false;
+
+ if (error(!::GetFileInformationByHandle(h2.handle, &info2) ? BOOST_ERRNO : 0,
+ p1, p2, ec, "boost::filesystem::equivalent"))
+ return false;
+
+ // In theory, volume serial numbers are sufficient to distinguish between
+ // devices, but in practice VSN's are sometimes duplicated, so last write
+ // time and file size are also checked.
+ return
+ info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
+ && info1.nFileIndexHigh == info2.nFileIndexHigh
+ && info1.nFileIndexLow == info2.nFileIndexLow
+ && info1.nFileSizeHigh == info2.nFileSizeHigh
+ && info1.nFileSizeLow == info2.nFileSizeLow
+ && info1.ftLastWriteTime.dwLowDateTime
+ == info2.ftLastWriteTime.dwLowDateTime
+ && info1.ftLastWriteTime.dwHighDateTime
+ == info2.ftLastWriteTime.dwHighDateTime;
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+boost::uintmax_t file_size(const path& p, error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ if (error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::file_size"))
+ return static_cast<boost::uintmax_t>(-1);
+ if (error(!S_ISREG(path_stat.st_mode) ? EPERM : 0,
+ p, ec, "boost::filesystem::file_size"))
+ return static_cast<boost::uintmax_t>(-1);
+
+ return static_cast<boost::uintmax_t>(path_stat.st_size);
+
+# else // Windows
+
+ // assume uintmax_t is 64-bits on all Windows compilers
+
+ WIN32_FILE_ATTRIBUTE_DATA fad;
+
+ if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0
+ ? BOOST_ERRNO : 0, p, ec, "boost::filesystem::file_size"))
+ return static_cast<boost::uintmax_t>(-1);
+
+ if (error((fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!= 0
+ ? ERROR_NOT_SUPPORTED : 0, p, ec, "boost::filesystem::file_size"))
+ return static_cast<boost::uintmax_t>(-1);
+
+ return (static_cast<boost::uintmax_t>(fad.nFileSizeHigh)
+ << (sizeof(fad.nFileSizeLow)*8)) + fad.nFileSizeLow;
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+boost::uintmax_t hard_link_count(const path& p, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ return error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::hard_link_count")
+ ? 0
+ : static_cast<boost::uintmax_t>(path_stat.st_nlink);
+
+# else // Windows
+
+ // Link count info is only available through GetFileInformationByHandle
+ BY_HANDLE_FILE_INFORMATION info;
+ handle_wrapper h(
+ create_file_handle(p.c_str(), 0,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+ return
+ !error(h.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::hard_link_count")
+ && !error(::GetFileInformationByHandle(h.handle, &info)== 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::hard_link_count")
+ ? info.nNumberOfLinks
+ : 0;
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path initial_path(error_code* ec)
+{
+ static path init_path;
+ if (init_path.empty())
+ init_path = current_path(ec);
+ else if (ec != 0) ec->clear();
+ return init_path;
+}
+
+BOOST_FILESYSTEM_DECL
+bool is_empty(const path& p, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ if (error(::stat(p.c_str(), &path_stat)!= 0,
+ p, ec, "boost::filesystem::is_empty"))
+ return false;
+ return S_ISDIR(path_stat.st_mode)
+ ? is_empty_directory(p, ec)
+ : path_stat.st_size == 0;
+
+# else
+
+ WIN32_FILE_ATTRIBUTE_DATA fad;
+ if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0
+ ? BOOST_ERRNO : 0, p, ec, "boost::filesystem::is_empty"))
+ return false;
+
+ if (ec != 0) ec->clear();
+ return
+ (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ ? is_empty_directory(p, ec)
+ : (!fad.nFileSizeHigh && !fad.nFileSizeLow);
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+std::time_t last_write_time(const path& p, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ if (error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time"))
+ return std::time_t(-1);
+ return path_stat.st_mtime;
+
+# else
+
+ handle_wrapper hw(
+ create_file_handle(p.c_str(), 0,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+
+ if (error(hw.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time"))
+ return std::time_t(-1);
+
+ FILETIME lwt;
+
+ if (error(::GetFileTime(hw.handle, 0, 0, &lwt)== 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time"))
+ return std::time_t(-1);
+
+ return to_time_t(lwt);
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+void last_write_time(const path& p, const std::time_t new_time,
+ system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+# if _POSIX_C_SOURCE >= 200809L
+
+ struct timespec times[2] = {};
+
+ // Keep the last access time unchanged
+ times[0].tv_nsec = UTIME_OMIT;
+
+ times[1].tv_sec = new_time;
+
+ if (BOOST_UNLIKELY(::utimensat(AT_FDCWD, p.c_str(), times, 0) != 0))
+ {
+ error(BOOST_ERRNO, p, ec, "boost::filesystem::last_write_time");
+ return;
+ }
+
+# else // _POSIX_C_SOURCE >= 200809L
+
+ struct stat path_stat;
+ if (error(::stat(p.c_str(), &path_stat)!= 0,
+ p, ec, "boost::filesystem::last_write_time"))
+ return;
+ ::utimbuf buf;
+ buf.actime = path_stat.st_atime; // utime()updates access time too:-(
+ buf.modtime = new_time;
+ error(::utime(p.c_str(), &buf)!= 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time");
+
+# endif // _POSIX_C_SOURCE >= 200809L
+
+# else
+
+ handle_wrapper hw(
+ create_file_handle(p.c_str(), FILE_WRITE_ATTRIBUTES,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+
+ if (error(hw.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time"))
+ return;
+
+ FILETIME lwt;
+ to_FILETIME(new_time, lwt);
+
+ error(::SetFileTime(hw.handle, 0, 0, &lwt)== 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::last_write_time");
+
+# endif
+}
+
+# ifdef BOOST_POSIX_API
+const perms active_bits(all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit);
+inline mode_t mode_cast(perms prms) { return prms & active_bits; }
+# endif
+
+BOOST_FILESYSTEM_DECL
+void permissions(const path& p, perms prms, system::error_code* ec)
+{
+ BOOST_ASSERT_MSG(!((prms & add_perms) && (prms & remove_perms)),
+ "add_perms and remove_perms are mutually exclusive");
+
+ if ((prms & add_perms) && (prms & remove_perms)) // precondition failed
+ return;
+
+# ifdef BOOST_POSIX_API
+ error_code local_ec;
+ file_status current_status((prms & symlink_perms)
+ ? fs::symlink_status(p, local_ec)
+ : fs::status(p, local_ec));
+ if (local_ec)
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::permissions", p, local_ec));
+ else
+ *ec = local_ec;
+ return;
+ }
+
+ if (prms & add_perms)
+ prms |= current_status.permissions();
+ else if (prms & remove_perms)
+ prms = current_status.permissions() & ~prms;
+
+ // OS X <10.10, iOS <8.0 and some other platforms don't support fchmodat().
+ // Solaris (SunPro and gcc) only support fchmodat() on Solaris 11 and higher,
+ // and a runtime check is too much trouble.
+ // Linux does not support permissions on symbolic links and has no plans to
+ // support them in the future. The chmod() code is thus more practical,
+ // rather than always hitting ENOTSUP when sending in AT_SYMLINK_NO_FOLLOW.
+ // - See the 3rd paragraph of
+ // "Symbolic link ownership, permissions, and timestamps" at:
+ // "http://man7.org/linux/man-pages/man7/symlink.7.html"
+ // - See the fchmodat() Linux man page:
+ // "http://man7.org/linux/man-pages/man2/fchmodat.2.html"
+# if defined(AT_FDCWD) && defined(AT_SYMLINK_NOFOLLOW) \
+ && !(defined(__SUNPRO_CC) || defined(__sun) || defined(sun)) \
+ && !(defined(linux) || defined(__linux) || defined(__linux__)) \
+ && !(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) \
+ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000) \
+ && !(defined(__IPHONE_OS_VERSION_MIN_REQUIRED) \
+ && __IPHONE_OS_VERSION_MIN_REQUIRED < 80000) \
+ && !(defined(__QNX__) && (_NTO_VERSION <= 700))
+ if (::fchmodat(AT_FDCWD, p.c_str(), mode_cast(prms),
+ !(prms & symlink_perms) ? 0 : AT_SYMLINK_NOFOLLOW))
+# else // fallback if fchmodat() not supported
+ if (::chmod(p.c_str(), mode_cast(prms)))
+# endif
+ {
+ const int err = errno;
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::permissions", p,
+ error_code(err, system::generic_category())));
+ else
+ ec->assign(err, system::generic_category());
+ }
+
+# else // Windows
+
+ // if not going to alter FILE_ATTRIBUTE_READONLY, just return
+ if (!(!((prms & (add_perms | remove_perms)))
+ || (prms & (owner_write|group_write|others_write))))
+ return;
+
+ DWORD attr = ::GetFileAttributesW(p.c_str());
+
+ if (error(attr == 0 ? BOOST_ERRNO : 0, p, ec, "boost::filesystem::permissions"))
+ return;
+
+ if (prms & add_perms)
+ attr &= ~FILE_ATTRIBUTE_READONLY;
+ else if (prms & remove_perms)
+ attr |= FILE_ATTRIBUTE_READONLY;
+ else if (prms & (owner_write|group_write|others_write))
+ attr &= ~FILE_ATTRIBUTE_READONLY;
+ else
+ attr |= FILE_ATTRIBUTE_READONLY;
+
+ error(::SetFileAttributesW(p.c_str(), attr) == 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::permissions");
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path read_symlink(const path& p, system::error_code* ec)
+{
+ path symlink_path;
+
+# ifdef BOOST_POSIX_API
+ const char* const path_str = p.c_str();
+ char small_buf[1024];
+ ssize_t result = ::readlink(path_str, small_buf, sizeof(small_buf));
+ if (BOOST_UNLIKELY(result < 0))
+ {
+ fail:
+ const int err = errno;
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::read_symlink",
+ p, error_code(err, system_category())));
+ else
+ ec->assign(err, system_category());
+ }
+ else if (BOOST_LIKELY(static_cast< std::size_t >(result) < sizeof(small_buf)))
+ {
+ symlink_path.assign(small_buf, small_buf + result);
+ if (ec != 0)
+ ec->clear();
+ }
+ else
+ {
+ for (std::size_t path_max = sizeof(small_buf) * 2u;; path_max *= 2u) // loop 'til buffer large enough
+ {
+ if (BOOST_UNLIKELY(path_max > absolute_path_max))
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::read_symlink",
+ p, error_code(ENAMETOOLONG, system_category())));
+ else
+ ec->assign(ENAMETOOLONG, system_category());
+ break;
+ }
+
+ boost::scoped_array<char> buf(new char[path_max]);
+ result = ::readlink(path_str, buf.get(), path_max);
+ if (BOOST_UNLIKELY(result < 0))
+ {
+ goto fail;
+ }
+ else if (BOOST_LIKELY(static_cast< std::size_t >(result) < path_max))
+ {
+ symlink_path.assign(buf.get(), buf.get() + result);
+ if (ec != 0) ec->clear();
+ break;
+ }
+ }
+ }
+
+# elif _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008
+ error(BOOST_ERROR_NOT_SUPPORTED, p, ec,
+ "boost::filesystem::read_symlink");
+# else // Vista and Server 2008 SDK, or later
+
+ union info_t
+ {
+ char buf[REPARSE_DATA_BUFFER_HEADER_SIZE+MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+ REPARSE_DATA_BUFFER rdb;
+ } info;
+
+ handle_wrapper h(
+ create_file_handle(p.c_str(), GENERIC_READ, 0, 0, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0));
+
+ if (error(h.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::read_symlink"))
+ return symlink_path;
+
+ DWORD sz;
+
+ if (!error(::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT,
+ 0, 0, info.buf, sizeof(info), &sz, 0) == 0 ? BOOST_ERRNO : 0, p, ec,
+ "boost::filesystem::read_symlink" ))
+ symlink_path.assign(
+ static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer)
+ + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t),
+ static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer)
+ + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t)
+ + info.rdb.SymbolicLinkReparseBuffer.PrintNameLength/sizeof(wchar_t));
+# endif
+ return symlink_path;
+}
+
+BOOST_FILESYSTEM_DECL
+path relative(const path& p, const path& base, error_code* ec)
+{
+ error_code tmp_ec;
+ path wc_base(weakly_canonical(base, &tmp_ec));
+ if (error(tmp_ec.value(), base, ec, "boost::filesystem::relative"))
+ return path();
+ path wc_p(weakly_canonical(p, &tmp_ec));
+ if (error(tmp_ec.value(), base, ec, "boost::filesystem::relative"))
+ return path();
+ return wc_p.lexically_relative(wc_base);
+}
+
+BOOST_FILESYSTEM_DECL
+bool remove(const path& p, error_code* ec)
+{
+ error_code tmp_ec;
+ file_type type = query_file_type(p, &tmp_ec);
+ if (error(type == status_error ? tmp_ec.value() : 0, p, ec,
+ "boost::filesystem::remove"))
+ return false;
+
+ // Since POSIX remove() is specified to work with either files or directories, in a
+ // perfect world it could just be called. But some important real-world operating
+ // systems (Windows, Mac OS X, for example) don't implement the POSIX spec. So
+ // remove_file_or_directory() is always called to keep it simple.
+ return remove_file_or_directory(p, type, ec);
+}
+
+BOOST_FILESYSTEM_DECL
+boost::uintmax_t remove_all(const path& p, error_code* ec)
+{
+ error_code tmp_ec;
+ file_type type = query_file_type(p, &tmp_ec);
+ if (error(type == status_error ? tmp_ec.value() : 0, p, ec,
+ "boost::filesystem::remove_all"))
+ return 0;
+
+ return (type != status_error && type != file_not_found) // exists
+ ? remove_all_aux(p, type, ec)
+ : 0;
+}
+
+BOOST_FILESYSTEM_DECL
+void rename(const path& old_p, const path& new_p, error_code* ec)
+{
+ error(!BOOST_MOVE_FILE(old_p.c_str(), new_p.c_str()) ? BOOST_ERRNO : 0, old_p, new_p,
+ ec, "boost::filesystem::rename");
+}
+
+BOOST_FILESYSTEM_DECL
+void resize_file(const path& p, uintmax_t size, system::error_code* ec)
+{
+# if defined(BOOST_POSIX_API)
+ if (BOOST_UNLIKELY(size > static_cast< uintmax_t >((std::numeric_limits< off_t >::max)()))) {
+ error(system::errc::file_too_large, p, ec, "boost::filesystem::resize_file");
+ return;
+ }
+# endif
+ error(!BOOST_RESIZE_FILE(p.c_str(), size) ? BOOST_ERRNO : 0, p, ec,
+ "boost::filesystem::resize_file");
+}
+
+BOOST_FILESYSTEM_DECL
+space_info space(const path& p, error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ struct BOOST_STATVFS vfs;
+ space_info info;
+ if (!error(::BOOST_STATVFS(p.c_str(), &vfs) ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::space"))
+ {
+ info.capacity
+ = static_cast<boost::uintmax_t>(vfs.f_blocks)* BOOST_STATVFS_F_FRSIZE;
+ info.free
+ = static_cast<boost::uintmax_t>(vfs.f_bfree)* BOOST_STATVFS_F_FRSIZE;
+ info.available
+ = static_cast<boost::uintmax_t>(vfs.f_bavail)* BOOST_STATVFS_F_FRSIZE;
+ }
+
+# else
+
+ ULARGE_INTEGER avail, total, free;
+ space_info info;
+
+ if (!error(::GetDiskFreeSpaceExW(p.c_str(), &avail, &total, &free)== 0,
+ p, ec, "boost::filesystem::space"))
+ {
+ info.capacity
+ = (static_cast<boost::uintmax_t>(total.HighPart)<< 32)
+ + total.LowPart;
+ info.free
+ = (static_cast<boost::uintmax_t>(free.HighPart)<< 32)
+ + free.LowPart;
+ info.available
+ = (static_cast<boost::uintmax_t>(avail.HighPart)<< 32)
+ + avail.LowPart;
+ }
+
+# endif
+
+ else
+ {
+ info.capacity = info.free = info.available = 0;
+ }
+ return info;
+}
+
+BOOST_FILESYSTEM_DECL
+file_status status(const path& p, error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ if (::stat(p.c_str(), &path_stat)!= 0)
+ {
+ const int err = errno;
+ if (ec != 0) // always report errno, even though some
+ ec->assign(err, system_category()); // errno values are not status_errors
+
+ if (not_found_error(err))
+ {
+ return fs::file_status(fs::file_not_found, fs::no_perms);
+ }
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status",
+ p, error_code(err, system_category())));
+ return fs::file_status(fs::status_error);
+ }
+ if (ec != 0) ec->clear();;
+ if (S_ISDIR(path_stat.st_mode))
+ return fs::file_status(fs::directory_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISREG(path_stat.st_mode))
+ return fs::file_status(fs::regular_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISBLK(path_stat.st_mode))
+ return fs::file_status(fs::block_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISCHR(path_stat.st_mode))
+ return fs::file_status(fs::character_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISFIFO(path_stat.st_mode))
+ return fs::file_status(fs::fifo_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISSOCK(path_stat.st_mode))
+ return fs::file_status(fs::socket_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ return fs::file_status(fs::type_unknown);
+
+# else // Windows
+
+ DWORD attr(::GetFileAttributesW(p.c_str()));
+ if (attr == 0xFFFFFFFF)
+ {
+ return process_status_failure(p, ec);
+ }
+
+ perms permissions = make_permissions(p, attr);
+
+ // reparse point handling;
+ // since GetFileAttributesW does not resolve symlinks, try to open a file
+ // handle to discover if the file exists
+ if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+ {
+ handle_wrapper h(
+ create_file_handle(
+ p.c_str(),
+ 0, // dwDesiredAccess; attributes only
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 0, // lpSecurityAttributes
+ OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS,
+ 0)); // hTemplateFile
+ if (h.handle == INVALID_HANDLE_VALUE)
+ {
+ return process_status_failure(p, ec);
+ }
+
+ if (!is_reparse_point_a_symlink(p))
+ return file_status(reparse_file, permissions);
+ }
+
+ if (ec != 0) ec->clear();
+ return (attr & FILE_ATTRIBUTE_DIRECTORY)
+ ? file_status(directory_file, permissions)
+ : file_status(regular_file, permissions);
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+file_status symlink_status(const path& p, error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ struct stat path_stat;
+ if (::lstat(p.c_str(), &path_stat)!= 0)
+ {
+ const int err = errno;
+ if (ec != 0) // always report errno, even though some
+ ec->assign(err, system_category()); // errno values are not status_errors
+
+ if (not_found_error(err)) // these are not errors
+ {
+ return fs::file_status(fs::file_not_found, fs::no_perms);
+ }
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status",
+ p, error_code(err, system_category())));
+ return fs::file_status(fs::status_error);
+ }
+ if (ec != 0) ec->clear();
+ if (S_ISREG(path_stat.st_mode))
+ return fs::file_status(fs::regular_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISDIR(path_stat.st_mode))
+ return fs::file_status(fs::directory_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISLNK(path_stat.st_mode))
+ return fs::file_status(fs::symlink_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISBLK(path_stat.st_mode))
+ return fs::file_status(fs::block_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISCHR(path_stat.st_mode))
+ return fs::file_status(fs::character_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISFIFO(path_stat.st_mode))
+ return fs::file_status(fs::fifo_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ if (S_ISSOCK(path_stat.st_mode))
+ return fs::file_status(fs::socket_file,
+ static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+ return fs::file_status(fs::type_unknown);
+
+# else // Windows
+
+ DWORD attr(::GetFileAttributesW(p.c_str()));
+ if (attr == 0xFFFFFFFF)
+ {
+ return process_status_failure(p, ec);
+ }
+
+ if (ec != 0) ec->clear();
+
+ perms permissions = make_permissions(p, attr);
+
+ if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+ return is_reparse_point_a_symlink(p)
+ ? file_status(symlink_file, permissions)
+ : file_status(reparse_file, permissions);
+
+ return (attr & FILE_ATTRIBUTE_DIRECTORY)
+ ? file_status(directory_file, permissions)
+ : file_status(regular_file, permissions);
+
+# endif
+}
+
+ // contributed by Jeff Flinn
+BOOST_FILESYSTEM_DECL
+path temp_directory_path(system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ const char* val = 0;
+
+ (val = std::getenv("TMPDIR" )) ||
+ (val = std::getenv("TMP" )) ||
+ (val = std::getenv("TEMP" )) ||
+ (val = std::getenv("TEMPDIR"));
+
+# ifdef __ANDROID__
+ const char* default_tmp = "/data/local/tmp";
+# else
+ const char* default_tmp = "/tmp";
+# endif
+ path p((val != NULL) ? val : default_tmp);
+
+ if (p.empty() || (ec && !is_directory(p, *ec)) || (!ec && !is_directory(p)))
+ {
+ error(ENOTDIR, p, ec, "boost::filesystem::temp_directory_path");
+ return p;
+ }
+
+ return p;
+
+# else // Windows
+
+ const wchar_t* tmp_env = L"TMP";
+ const wchar_t* temp_env = L"TEMP";
+ const wchar_t* localappdata_env = L"LOCALAPPDATA";
+ const wchar_t* userprofile_env = L"USERPROFILE";
+ const wchar_t* env_list[] = { tmp_env, temp_env, localappdata_env, userprofile_env };
+
+ path p;
+ for (unsigned int i = 0; i < sizeof(env_list) / sizeof(*env_list); ++i)
+ {
+ std::wstring env = wgetenv(env_list[i]);
+ if (!env.empty())
+ {
+ p = env;
+ if (i >= 2)
+ p /= L"Temp";
+ error_code lcl_ec;
+ if (exists(p, lcl_ec) && !lcl_ec && is_directory(p, lcl_ec) && !lcl_ec)
+ break;
+ p.clear();
+ }
+ }
+
+ if (p.empty())
+ {
+ // use a separate buffer since in C++03 a string is not required to be contiguous
+ const UINT size = ::GetWindowsDirectoryW(NULL, 0);
+ if (BOOST_UNLIKELY(size == 0))
+ {
+ getwindir_error:
+ int errval = ::GetLastError();
+ error(errval, ec, "boost::filesystem::temp_directory_path");
+ return path();
+ }
+
+ boost::scoped_array<wchar_t> buf(new wchar_t[size]);
+ if (BOOST_UNLIKELY(::GetWindowsDirectoryW(buf.get(), size) == 0))
+ goto getwindir_error;
+
+ p = buf.get(); // do not depend on initial buf size, see ticket #10388
+ p /= L"Temp";
+ }
+
+ return p;
+
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path system_complete(const path& p, system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+ return (p.empty() || p.is_absolute())
+ ? p : current_path() / p;
+
+# else
+ if (p.empty())
+ {
+ if (ec != 0) ec->clear();
+ return p;
+ }
+ wchar_t buf[buf_size];
+ wchar_t* pfn;
+ std::size_t len = get_full_path_name(p, buf_size, buf, &pfn);
+
+ if (error(len == 0 ? BOOST_ERRNO : 0, p, ec, "boost::filesystem::system_complete"))
+ return path();
+
+ if (len < buf_size)// len does not include null termination character
+ return path(&buf[0]);
+
+ boost::scoped_array<wchar_t> big_buf(new wchar_t[len]);
+
+ return error(get_full_path_name(p, len , big_buf.get(), &pfn)== 0 ? BOOST_ERRNO : 0,
+ p, ec, "boost::filesystem::system_complete")
+ ? path()
+ : path(big_buf.get());
+# endif
+}
+
+BOOST_FILESYSTEM_DECL
+path weakly_canonical(const path& p, system::error_code* ec)
+{
+ path head(p);
+ path tail;
+ system::error_code tmp_ec;
+ path::iterator itr = p.end();
+
+ for (; !head.empty(); --itr)
+ {
+ file_status head_status = status(head, tmp_ec);
+ if (error(head_status.type() == fs::status_error,
+ head, ec, "boost::filesystem::weakly_canonical"))
+ return path();
+ if (head_status.type() != fs::file_not_found)
+ break;
+ head.remove_filename();
+ }
+
+ bool tail_has_dots = false;
+ for (; itr != p.end(); ++itr)
+ {
+ tail /= *itr;
+ // for a later optimization, track if any dot or dot-dot elements are present
+ if (itr->native().size() <= 2
+ && itr->native()[0] == dot
+ && (itr->native().size() == 1 || itr->native()[1] == dot))
+ tail_has_dots = true;
+ }
+
+ if (head.empty())
+ return p.lexically_normal();
+ head = canonical(head, tmp_ec);
+ if (error(tmp_ec.value(), head, ec, "boost::filesystem::weakly_canonical"))
+ return path();
+ return tail.empty()
+ ? head
+ : (tail_has_dots // optimization: only normalize if tail had dot or dot-dot element
+ ? (head/tail).lexically_normal()
+ : head/tail);
+}
+
+} // namespace detail
+} // namespace filesystem
+} // namespace boost
diff --git a/src/boost/libs/filesystem/src/path.cpp b/src/boost/libs/filesystem/src/path.cpp
new file mode 100644
index 000000000..590f02960
--- /dev/null
+++ b/src/boost/libs/filesystem/src/path.cpp
@@ -0,0 +1,958 @@
+// filesystem path.cpp ------------------------------------------------------------- //
+
+// Copyright Beman Dawes 2008
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+// Include Boost.Predef first so that windows.h is guaranteed to be not included
+#include <boost/predef/os/windows.h>
+#if BOOST_OS_WINDOWS
+#include <boost/winapi/config.hpp>
+#endif
+
+// Old standard library configurations, particularly MingGW, don't support wide strings.
+// Report this with an explicit error message.
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp> // for filesystem_error
+#include <boost/scoped_array.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/assert.hpp>
+#include <algorithm>
+#include <iterator>
+#include <utility>
+#include <cstddef>
+#include <cstring>
+#include <cassert>
+
+#ifdef BOOST_WINDOWS_API
+# include "windows_file_codecvt.hpp"
+# include <windows.h>
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+ || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
+# include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
+#endif
+
+#ifdef BOOST_FILESYSTEM_DEBUG
+# include <iostream>
+# include <iomanip>
+#endif
+
+namespace fs = boost::filesystem;
+
+using boost::filesystem::path;
+
+using std::string;
+using std::wstring;
+
+using boost::system::error_code;
+
+//--------------------------------------------------------------------------------------//
+// //
+// class path helpers //
+// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+ //------------------------------------------------------------------------------------//
+ // miscellaneous class path helpers //
+ //------------------------------------------------------------------------------------//
+
+ typedef path::value_type value_type;
+ typedef path::string_type string_type;
+ typedef string_type::size_type size_type;
+
+# ifdef BOOST_WINDOWS_API
+
+ const wchar_t* const separators = L"/\\";
+ const wchar_t* separator_string = L"/";
+ const wchar_t* preferred_separator_string = L"\\";
+ const wchar_t colon = L':';
+ const wchar_t questionmark = L'?';
+
+ inline bool is_letter(wchar_t c)
+ {
+ return (c >= L'a' && c <=L'z') || (c >= L'A' && c <=L'Z');
+ }
+
+# else
+
+ const char* const separators = "/";
+ const char* separator_string = "/";
+ const char* preferred_separator_string = "/";
+
+# endif
+
+ bool is_root_separator(const string_type& str, size_type pos);
+ // pos is position of the separator
+
+ size_type filename_pos(const string_type& str,
+ size_type end_pos); // end_pos is past-the-end position
+ // Returns: 0 if str itself is filename (or empty)
+
+ size_type root_directory_start(const string_type& path, size_type size);
+ // Returns: npos if no root_directory found
+
+ void first_element(
+ const string_type& src,
+ size_type& element_pos,
+ size_type& element_size,
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310) // VC++ 7.1
+ size_type size = string_type::npos
+# else
+ size_type size = -1
+# endif
+ );
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// //
+// class path implementation //
+// //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem
+{
+
+ BOOST_FILESYSTEM_DECL path& path::operator/=(const path& p)
+ {
+ if (p.empty())
+ return *this;
+ if (this == &p) // self-append
+ {
+ path rhs(p);
+ if (!detail::is_directory_separator(rhs.m_pathname[0]))
+ m_append_separator_if_needed();
+ m_pathname += rhs.m_pathname;
+ }
+ else
+ {
+ if (!detail::is_directory_separator(*p.m_pathname.begin()))
+ m_append_separator_if_needed();
+ m_pathname += p.m_pathname;
+ }
+ return *this;
+ }
+
+ BOOST_FILESYSTEM_DECL path& path::operator/=(const value_type* ptr)
+ {
+ if (!*ptr)
+ return *this;
+ if (ptr >= m_pathname.data()
+ && ptr < m_pathname.data() + m_pathname.size()) // overlapping source
+ {
+ path rhs(ptr);
+ if (!detail::is_directory_separator(rhs.m_pathname[0]))
+ m_append_separator_if_needed();
+ m_pathname += rhs.m_pathname;
+ }
+ else
+ {
+ if (!detail::is_directory_separator(*ptr))
+ m_append_separator_if_needed();
+ m_pathname += ptr;
+ }
+ return *this;
+ }
+
+# ifdef BOOST_WINDOWS_API
+
+ BOOST_FILESYSTEM_DECL path path::generic_path() const
+ {
+ path tmp(*this);
+ std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/');
+ return tmp;
+ }
+
+# endif // BOOST_WINDOWS_API
+
+ BOOST_FILESYSTEM_DECL int path::compare(const path& p) const BOOST_NOEXCEPT
+ {
+ return detail::lex_compare(begin(), end(), p.begin(), p.end());
+ }
+
+ // m_append_separator_if_needed ----------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL path::string_type::size_type path::m_append_separator_if_needed()
+ {
+ if (!m_pathname.empty() &&
+# ifdef BOOST_WINDOWS_API
+ *(m_pathname.end()-1) != colon &&
+# endif
+ !detail::is_directory_separator(*(m_pathname.end()-1)))
+ {
+ string_type::size_type tmp(m_pathname.size());
+ m_pathname += preferred_separator;
+ return tmp;
+ }
+ return 0;
+ }
+
+ // m_erase_redundant_separator -----------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL void path::m_erase_redundant_separator(string_type::size_type sep_pos)
+ {
+ if (sep_pos // a separator was added
+ && sep_pos < m_pathname.size() // and something was appended
+ && (m_pathname[sep_pos+1] == separator // and it was also separator
+# ifdef BOOST_WINDOWS_API
+ || m_pathname[sep_pos+1] == preferred_separator // or preferred_separator
+# endif
+)) { m_pathname.erase(sep_pos, 1); } // erase the added separator
+ }
+
+ // modifiers -----------------------------------------------------------------------//
+
+# ifdef BOOST_WINDOWS_API
+ BOOST_FILESYSTEM_DECL path& path::make_preferred()
+ {
+ std::replace(m_pathname.begin(), m_pathname.end(), L'/', L'\\');
+ return *this;
+ }
+# endif
+
+ BOOST_FILESYSTEM_DECL path& path::remove_filename()
+ {
+ m_pathname.erase(m_parent_path_end());
+ return *this;
+ }
+
+ BOOST_FILESYSTEM_DECL path& path::remove_trailing_separator()
+ {
+ if (!m_pathname.empty()
+ && detail::is_directory_separator(m_pathname[m_pathname.size() - 1]))
+ m_pathname.erase(m_pathname.size() - 1);
+ return *this;
+ }
+
+ BOOST_FILESYSTEM_DECL path& path::replace_extension(const path& new_extension)
+ {
+ // erase existing extension, including the dot, if any
+ m_pathname.erase(m_pathname.size()-extension().m_pathname.size());
+
+ if (!new_extension.empty())
+ {
+ // append new_extension, adding the dot if necessary
+ if (new_extension.m_pathname[0] != dot)
+ m_pathname.push_back(dot);
+ m_pathname.append(new_extension.m_pathname);
+ }
+
+ return *this;
+ }
+
+ // decomposition -------------------------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL path path::root_path() const
+ {
+ path temp(root_name());
+ if (!root_directory().empty()) temp.m_pathname += root_directory().c_str();
+ return temp;
+ }
+
+ BOOST_FILESYSTEM_DECL path path::root_name() const
+ {
+ iterator itr(begin());
+
+ return (itr.m_pos != m_pathname.size()
+ && (
+ (itr.m_element.m_pathname.size() > 1
+ && detail::is_directory_separator(itr.m_element.m_pathname[0])
+ && detail::is_directory_separator(itr.m_element.m_pathname[1]))
+# ifdef BOOST_WINDOWS_API
+ || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+# endif
+ ))
+ ? itr.m_element
+ : path();
+ }
+
+ BOOST_FILESYSTEM_DECL path path::root_directory() const
+ {
+ size_type pos(root_directory_start(m_pathname, m_pathname.size()));
+
+ return pos == string_type::npos
+ ? path()
+ : path(m_pathname.c_str() + pos, m_pathname.c_str() + pos + 1);
+ }
+
+ BOOST_FILESYSTEM_DECL path path::relative_path() const
+ {
+ iterator itr(begin());
+
+ for (; itr.m_pos != m_pathname.size()
+ && (detail::is_directory_separator(itr.m_element.m_pathname[0])
+# ifdef BOOST_WINDOWS_API
+ || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+# endif
+ ); ++itr) {}
+
+ return path(m_pathname.c_str() + itr.m_pos);
+ }
+
+ BOOST_FILESYSTEM_DECL string_type::size_type path::m_parent_path_end() const
+ {
+ size_type end_pos(filename_pos(m_pathname, m_pathname.size()));
+
+ bool filename_was_separator(m_pathname.size()
+ && detail::is_directory_separator(m_pathname[end_pos]));
+
+ // skip separators unless root directory
+ size_type root_dir_pos(root_directory_start(m_pathname, end_pos));
+ for (;
+ end_pos > 0
+ && (end_pos-1) != root_dir_pos
+ && detail::is_directory_separator(m_pathname[end_pos-1])
+ ;
+ --end_pos) {}
+
+ return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator)
+ ? string_type::npos
+ : end_pos;
+ }
+
+ BOOST_FILESYSTEM_DECL path path::parent_path() const
+ {
+ size_type end_pos(m_parent_path_end());
+ return end_pos == string_type::npos
+ ? path()
+ : path(m_pathname.c_str(), m_pathname.c_str() + end_pos);
+ }
+
+ BOOST_FILESYSTEM_DECL path path::filename() const
+ {
+ size_type pos(filename_pos(m_pathname, m_pathname.size()));
+ return (m_pathname.size()
+ && pos
+ && detail::is_directory_separator(m_pathname[pos])
+ && !is_root_separator(m_pathname, pos))
+ ? detail::dot_path()
+ : path(m_pathname.c_str() + pos);
+ }
+
+ BOOST_FILESYSTEM_DECL path path::stem() const
+ {
+ path name(filename());
+ if (name == detail::dot_path() || name == detail::dot_dot_path()) return name;
+ size_type pos(name.m_pathname.rfind(dot));
+ return pos == string_type::npos
+ ? name
+ : path(name.m_pathname.c_str(), name.m_pathname.c_str() + pos);
+ }
+
+ BOOST_FILESYSTEM_DECL path path::extension() const
+ {
+ path name(filename());
+ if (name == detail::dot_path() || name == detail::dot_dot_path()) return path();
+ size_type pos(name.m_pathname.rfind(dot));
+ return pos == string_type::npos
+ ? path()
+ : path(name.m_pathname.c_str() + pos);
+ }
+
+ // lexical operations --------------------------------------------------------------//
+
+ namespace detail
+ {
+ // C++14 provides a mismatch algorithm with four iterator arguments(), but earlier
+ // standard libraries didn't, so provide this needed functionality.
+ inline
+ std::pair<path::iterator, path::iterator> 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 path::lexically_relative(const path& base) const
+ {
+ path::iterator b = begin(), e = end(), base_b = base.begin(), base_e = base.end();
+ std::pair<path::iterator, path::iterator> mm = detail::mismatch(b, e, base_b, base_e);
+ if (mm.first == b && mm.second == base_b)
+ return path();
+ if (mm.first == e && mm.second == base_e)
+ return detail::dot_path();
+
+ std::ptrdiff_t n = 0;
+ for (; mm.second != base_e; ++mm.second)
+ {
+ path const& p = *mm.second;
+ if (p == detail::dot_dot_path())
+ --n;
+ else if (!p.empty() && p != detail::dot_path())
+ ++n;
+ }
+ if (n < 0)
+ return path();
+ if (n == 0 && (mm.first == e || mm.first->empty()))
+ return detail::dot_path();
+
+ path tmp;
+ for (; n > 0; --n)
+ tmp /= detail::dot_dot_path();
+ for (; mm.first != e; ++mm.first)
+ tmp /= *mm.first;
+ return tmp;
+ }
+
+ // normal --------------------------------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL path path::lexically_normal() const
+ {
+ if (m_pathname.empty())
+ return *this;
+
+ path temp;
+ iterator start(begin());
+ iterator last(end());
+ iterator stop(last--);
+ for (iterator itr(start); itr != stop; ++itr)
+ {
+ // ignore "." except at start and last
+ if (itr->native().size() == 1
+ && (itr->native())[0] == dot
+ && itr != start
+ && itr != last) continue;
+
+ // ignore a name and following ".."
+ if (!temp.empty()
+ && itr->native().size() == 2
+ && (itr->native())[0] == dot
+ && (itr->native())[1] == dot) // dot dot
+ {
+ string_type lf(temp.filename().native());
+ if (lf.size() > 0
+ && (lf.size() != 1
+ || (lf[0] != dot
+ && lf[0] != separator))
+ && (lf.size() != 2
+ || (lf[0] != dot
+ && lf[1] != dot
+# ifdef BOOST_WINDOWS_API
+ && lf[1] != colon
+# endif
+ )
+ )
+ )
+ {
+ temp.remove_filename();
+ //// if not root directory, must also remove "/" if any
+ //if (temp.native().size() > 0
+ // && temp.native()[temp.native().size()-1]
+ // == separator)
+ //{
+ // string_type::size_type rds(
+ // root_directory_start(temp.native(), temp.native().size()));
+ // if (rds == string_type::npos
+ // || rds != temp.native().size()-1)
+ // {
+ // temp.m_pathname.erase(temp.native().size()-1);
+ // }
+ //}
+
+ iterator next(itr);
+ if (temp.empty() && ++next != stop
+ && next == last && *last == detail::dot_path())
+ {
+ temp /= detail::dot_path();
+ }
+ continue;
+ }
+ }
+
+ temp /= *itr;
+ };
+
+ if (temp.empty())
+ temp /= detail::dot_path();
+ return temp;
+ }
+
+} // namespace filesystem
+} // namespace boost
+
+//--------------------------------------------------------------------------------------//
+// //
+// class path helpers implementation //
+// //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+ // is_root_separator ---------------------------------------------------------------//
+
+ bool is_root_separator(const string_type & str, size_type pos)
+ // pos is position of the separator
+ {
+ BOOST_ASSERT_MSG(!str.empty() && fs::detail::is_directory_separator(str[pos]),
+ "precondition violation");
+
+ // subsequent logic expects pos to be for leftmost slash of a set
+ while (pos > 0 && fs::detail::is_directory_separator(str[pos-1]))
+ --pos;
+
+ // "/" [...]
+ if (pos == 0)
+ return true;
+
+# ifdef BOOST_WINDOWS_API
+ // "c:/" [...]
+ if (pos == 2 && is_letter(str[0]) && str[1] == colon)
+ return true;
+# endif
+
+ // "//" name "/"
+ if (pos < 3 || !fs::detail::is_directory_separator(str[0])
+ || !fs::detail::is_directory_separator(str[1]))
+ return false;
+
+ return str.find_first_of(separators, 2) == pos;
+ }
+
+ // filename_pos --------------------------------------------------------------------//
+
+ size_type filename_pos(const string_type & str,
+ size_type end_pos) // end_pos is past-the-end position
+ // return 0 if str itself is filename (or empty)
+ {
+ // case: "//"
+ if (end_pos == 2
+ && fs::detail::is_directory_separator(str[0])
+ && fs::detail::is_directory_separator(str[1])) return 0;
+
+ // case: ends in "/"
+ if (end_pos && fs::detail::is_directory_separator(str[end_pos-1]))
+ return end_pos-1;
+
+ // set pos to start of last element
+ size_type pos(str.find_last_of(separators, end_pos-1));
+
+# ifdef BOOST_WINDOWS_API
+ if (pos == string_type::npos && end_pos > 1)
+ pos = str.find_last_of(colon, end_pos-2);
+# endif
+
+ return (pos == string_type::npos // path itself must be a filename (or empty)
+ || (pos == 1 && fs::detail::is_directory_separator(str[0]))) // or net
+ ? 0 // so filename is entire string
+ : pos + 1; // or starts after delimiter
+ }
+
+ // root_directory_start ------------------------------------------------------------//
+
+ size_type root_directory_start(const string_type & path, size_type size)
+ // return npos if no root_directory found
+ {
+
+# ifdef BOOST_WINDOWS_API
+ // case "c:/"
+ if (size > 2
+ && path[1] == colon
+ && fs::detail::is_directory_separator(path[2])) return 2;
+# endif
+
+ // case "//"
+ if (size == 2
+ && fs::detail::is_directory_separator(path[0])
+ && fs::detail::is_directory_separator(path[1])) return string_type::npos;
+
+# ifdef BOOST_WINDOWS_API
+ // case "\\?\"
+ if (size > 4
+ && fs::detail::is_directory_separator(path[0])
+ && fs::detail::is_directory_separator(path[1])
+ && path[2] == questionmark
+ && fs::detail::is_directory_separator(path[3]))
+ {
+ string_type::size_type pos(path.find_first_of(separators, 4));
+ return pos < size ? pos : string_type::npos;
+ }
+# endif
+
+ // case "//net {/}"
+ if (size > 3
+ && fs::detail::is_directory_separator(path[0])
+ && fs::detail::is_directory_separator(path[1])
+ && !fs::detail::is_directory_separator(path[2]))
+ {
+ string_type::size_type pos(path.find_first_of(separators, 2));
+ return pos < size ? pos : string_type::npos;
+ }
+
+ // case "/"
+ if (size > 0 && fs::detail::is_directory_separator(path[0])) return 0;
+
+ return string_type::npos;
+ }
+
+ // first_element --------------------------------------------------------------------//
+ // sets pos and len of first element, excluding extra separators
+ // if src.empty(), sets pos,len, to 0,0.
+
+ void first_element(
+ const string_type & src,
+ size_type & element_pos,
+ size_type & element_size,
+ size_type size
+)
+ {
+ if (size == string_type::npos) size = src.size();
+ element_pos = 0;
+ element_size = 0;
+ if (src.empty()) return;
+
+ string_type::size_type cur(0);
+
+ // deal with // [network]
+ if (size >= 2 && fs::detail::is_directory_separator(src[0])
+ && fs::detail::is_directory_separator(src[1])
+ && (size == 2
+ || !fs::detail::is_directory_separator(src[2])))
+ {
+ cur += 2;
+ element_size += 2;
+ }
+
+ // leading (not non-network) separator
+ else if (fs::detail::is_directory_separator(src[0]))
+ {
+ ++element_size;
+ // bypass extra leading separators
+ while (cur+1 < size
+ && fs::detail::is_directory_separator(src[cur+1]))
+ {
+ ++cur;
+ ++element_pos;
+ }
+ return;
+ }
+
+ // at this point, we have either a plain name, a network name,
+ // or (on Windows only) a device name
+
+ // find the end
+ while (cur < size
+# ifdef BOOST_WINDOWS_API
+ && src[cur] != colon
+# endif
+ && !fs::detail::is_directory_separator(src[cur]))
+ {
+ ++cur;
+ ++element_size;
+ }
+
+# ifdef BOOST_WINDOWS_API
+ if (cur == size) return;
+ // include device delimiter
+ if (src[cur] == colon)
+ { ++element_size; }
+# endif
+
+ return;
+ }
+
+} // unnamed namespace
+
+
+namespace boost
+{
+namespace filesystem
+{
+ namespace detail
+ {
+ BOOST_FILESYSTEM_DECL
+ int lex_compare(path::iterator first1, path::iterator last1,
+ path::iterator first2, path::iterator last2)
+ {
+ for (; first1 != last1 && first2 != last2;)
+ {
+ if (first1->native() < first2->native()) return -1;
+ if (first2->native() < first1->native()) return 1;
+ BOOST_ASSERT(first2->native() == first1->native());
+ ++first1;
+ ++first2;
+ }
+ if (first1 == last1 && first2 == last2)
+ return 0;
+ return first1 == last1 ? -1 : 1;
+ }
+
+ BOOST_FILESYSTEM_DECL
+ const path& dot_path()
+ {
+# ifdef BOOST_WINDOWS_API
+ static const fs::path dot_pth(L".");
+# else
+ static const fs::path dot_pth(".");
+# endif
+ return dot_pth;
+ }
+
+ BOOST_FILESYSTEM_DECL
+ const path& dot_dot_path()
+ {
+# ifdef BOOST_WINDOWS_API
+ static const fs::path dot_dot(L"..");
+# else
+ static const fs::path dot_dot("..");
+# endif
+ return dot_dot;
+ }
+ }
+
+//--------------------------------------------------------------------------------------//
+// //
+// class path::iterator implementation //
+// //
+//--------------------------------------------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL path::iterator path::begin() const
+ {
+ iterator itr;
+ itr.m_path_ptr = this;
+ size_type element_size;
+ first_element(m_pathname, itr.m_pos, element_size);
+ itr.m_element = m_pathname.substr(itr.m_pos, element_size);
+ if (itr.m_element.m_pathname == preferred_separator_string)
+ itr.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX
+ return itr;
+ }
+
+ BOOST_FILESYSTEM_DECL path::iterator path::end() const
+ {
+ iterator itr;
+ itr.m_path_ptr = this;
+ itr.m_pos = m_pathname.size();
+ return itr;
+ }
+
+ BOOST_FILESYSTEM_DECL void path::m_path_iterator_increment(path::iterator & it)
+ {
+ BOOST_ASSERT_MSG(it.m_pos < it.m_path_ptr->m_pathname.size(),
+ "path::basic_iterator increment past end()");
+
+ // increment to position past current element; if current element is implicit dot,
+ // this will cause it.m_pos to represent the end iterator
+ it.m_pos += it.m_element.m_pathname.size();
+
+ // if the end is reached, we are done
+ if (it.m_pos == it.m_path_ptr->m_pathname.size())
+ {
+ it.m_element.clear(); // aids debugging, may release unneeded memory
+ return;
+ }
+
+ // both POSIX and Windows treat paths that begin with exactly two separators specially
+ bool was_net(it.m_element.m_pathname.size() > 2
+ && detail::is_directory_separator(it.m_element.m_pathname[0])
+ && detail::is_directory_separator(it.m_element.m_pathname[1])
+ && !detail::is_directory_separator(it.m_element.m_pathname[2]));
+
+ // process separator (Windows drive spec is only case not a separator)
+ if (detail::is_directory_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+ {
+ // detect root directory
+ if (was_net
+# ifdef BOOST_WINDOWS_API
+ // case "c:/"
+ || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon
+# endif
+ )
+ {
+ it.m_element.m_pathname = separator; // generic format; see docs
+ return;
+ }
+
+ // skip separators until it.m_pos points to the start of the next element
+ while (it.m_pos != it.m_path_ptr->m_pathname.size()
+ && detail::is_directory_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+ { ++it.m_pos; }
+
+ // detect trailing separator, and treat it as ".", per POSIX spec
+ if (it.m_pos == it.m_path_ptr->m_pathname.size()
+ && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1))
+ {
+ --it.m_pos;
+ it.m_element = detail::dot_path();
+ return;
+ }
+ }
+
+ // get m_element
+ size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos));
+ if (end_pos == string_type::npos)
+ end_pos = it.m_path_ptr->m_pathname.size();
+ it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+ }
+
+ BOOST_FILESYSTEM_DECL void path::m_path_iterator_decrement(path::iterator & it)
+ {
+ BOOST_ASSERT_MSG(it.m_pos, "path::iterator decrement past begin()");
+
+ size_type end_pos(it.m_pos);
+
+ // if at end and there was a trailing non-root '/', return "."
+ if (it.m_pos == it.m_path_ptr->m_pathname.size()
+ && it.m_path_ptr->m_pathname.size() > 1
+ && detail::is_directory_separator(it.m_path_ptr->m_pathname[it.m_pos-1])
+ && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)
+ )
+ {
+ --it.m_pos;
+ it.m_element = detail::dot_path();
+ return;
+ }
+
+ size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos));
+
+ // skip separators unless root directory
+ for (
+ ;
+ end_pos > 0
+ && (end_pos-1) != root_dir_pos
+ && detail::is_directory_separator(it.m_path_ptr->m_pathname[end_pos-1])
+ ;
+ --end_pos) {}
+
+ it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos);
+ it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+ if (it.m_element.m_pathname == preferred_separator_string) // needed for Windows, harmless on POSIX
+ it.m_element.m_pathname = separator_string; // generic format; see docs
+ }
+
+} // namespace filesystem
+} // namespace boost
+
+namespace
+{
+
+ //------------------------------------------------------------------------------------//
+ // locale helpers //
+ //------------------------------------------------------------------------------------//
+
+ // Prior versions of these locale and codecvt implementations tried to take advantage
+ // of static initialization where possible, kept a local copy of the current codecvt
+ // facet (to avoid codecvt() having to call use_facet()), and was not multi-threading
+ // safe (again for efficiency).
+ //
+ // This was error prone, and required different implementation techniques depending
+ // on the compiler and also whether static or dynamic linking was used. Furthermore,
+ // users could not easily provide their multi-threading safe wrappers because the
+ // path interface requires the implementation itself to call codecvt() to obtain the
+ // default facet, and the initialization of the static within path_locale() could race.
+ //
+ // The code below is portable to all platforms, is much simpler, and hopefully will be
+ // much more robust. Timing tests (on Windows, using a Visual C++ release build)
+ // indicated the current code is roughly 9% slower than the previous code, and that
+ // seems a small price to pay for better code that is easier to use.
+
+ std::locale default_locale()
+ {
+# if defined(BOOST_WINDOWS_API)
+ std::locale global_loc = std::locale();
+ return std::locale(global_loc, new windows_file_codecvt);
+# elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+ || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
+ // "All BSD system functions expect their string parameters to be in UTF-8 encoding
+ // and nothing else." See
+ // http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html
+ //
+ // "The kernel will reject any filename that is not a valid UTF-8 string, and it will
+ // even be normalized (to Unicode NFD) before stored on disk, at least when using HFS.
+ // The right way to deal with it would be to always convert the filename to UTF-8
+ // before trying to open/create a file." See
+ // http://lists.apple.com/archives/unix-porting/2007/Sep/msg00023.html
+ //
+ // "How a file name looks at the API level depends on the API. Current Carbon APIs
+ // handle file names as an array of UTF-16 characters; POSIX ones handle them as an
+ // array of UTF-8, which is why UTF-8 works well in Terminal. How it's stored on disk
+ // depends on the disk format; HFS+ uses UTF-16, but that's not important in most
+ // cases." See
+ // http://lists.apple.com/archives/applescript-users/2002/Sep/msg00319.html
+ //
+ // Many thanks to Peter Dimov for digging out the above references!
+
+ std::locale global_loc = std::locale();
+ return std::locale(global_loc, new boost::filesystem::detail::utf8_codecvt_facet);
+# else // Other POSIX
+ // ISO C calls std::locale("") "the locale-specific native environment", and this
+ // locale is the default for many POSIX-based operating systems such as Linux.
+ return std::locale("");
+# endif
+ }
+
+ std::locale& path_locale()
+ // std::locale("") construction, needed on non-Apple POSIX systems, can throw
+ // (if environmental variables LC_MESSAGES or LANG are wrong, for example), so
+ // path_locale() provides lazy initialization via a local static to ensure that any
+ // exceptions occur after main() starts and so can be caught. Furthermore,
+ // path_locale() is only called if path::codecvt() or path::imbue() are themselves
+ // actually called, ensuring that an exception will only be thrown if std::locale("")
+ // is really needed.
+ {
+ // [locale] paragraph 6: Once a facet reference is obtained from a locale object by
+ // calling use_facet<>, that reference remains usable, and the results from member
+ // functions of it may be cached and re-used, as long as some locale object refers
+ // to that facet.
+ static std::locale loc(default_locale());
+#ifdef BOOST_FILESYSTEM_DEBUG
+ std::cout << "***** path_locale() called" << std::endl;
+#endif
+ return loc;
+ }
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// path::codecvt() and path::imbue() implementation //
+//--------------------------------------------------------------------------------------//
+
+namespace boost
+{
+namespace filesystem
+{
+ // See comments above
+
+ BOOST_FILESYSTEM_DECL const path::codecvt_type& path::codecvt()
+ {
+#ifdef BOOST_FILESYSTEM_DEBUG
+ std::cout << "***** path::codecvt() called" << std::endl;
+#endif
+ BOOST_ASSERT_MSG(&path_locale(), "boost::filesystem::path locale initialization error");
+
+ return std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale());
+ }
+
+ BOOST_FILESYSTEM_DECL std::locale path::imbue(const std::locale& loc)
+ {
+#ifdef BOOST_FILESYSTEM_DEBUG
+ std::cout << "***** path::imbue() called" << std::endl;
+#endif
+ std::locale temp(path_locale());
+ path_locale() = loc;
+ return temp;
+ }
+
+} // namespace filesystem
+} // namespace boost
diff --git a/src/boost/libs/filesystem/src/path_traits.cpp b/src/boost/libs/filesystem/src/path_traits.cpp
new file mode 100644
index 000000000..6bb609a8f
--- /dev/null
+++ b/src/boost/libs/filesystem/src/path_traits.cpp
@@ -0,0 +1,196 @@
+// filesystem path_traits.cpp --------------------------------------------------------//
+
+// Copyright Beman Dawes 2008, 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/scoped_array.hpp>
+#include <locale> // for codecvt_base::result
+#include <cstring> // for strlen
+#include <cwchar> // for wcslen
+
+namespace pt = boost::filesystem::path_traits;
+namespace fs = boost::filesystem;
+namespace bs = boost::system;
+
+//--------------------------------------------------------------------------------------//
+// configuration //
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE
+# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256
+#endif
+
+namespace {
+
+ const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE;
+
+
+//--------------------------------------------------------------------------------------//
+// //
+// The public convert() functions do buffer management, and then forward to the //
+// convert_aux() functions for the actual call to the codecvt facet. //
+// //
+//--------------------------------------------------------------------------------------//
+
+//--------------------------------------------------------------------------------------//
+// convert_aux const char* to wstring //
+//--------------------------------------------------------------------------------------//
+
+ void convert_aux(
+ const char* from,
+ const char* from_end,
+ wchar_t* to, wchar_t* to_end,
+ std::wstring & target,
+ const pt::codecvt_type & cvt)
+ {
+ //std::cout << std::hex
+ // << " from=" << std::size_t(from)
+ // << " from_end=" << std::size_t(from_end)
+ // << " to=" << std::size_t(to)
+ // << " to_end=" << std::size_t(to_end)
+ // << std::endl;
+
+ std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports
+ const char* from_next;
+ wchar_t* to_next;
+
+ std::codecvt_base::result res;
+
+ if ((res=cvt.in(state, from, from_end, from_next,
+ to, to_end, to_next)) != std::codecvt_base::ok)
+ {
+ //std::cout << " result is " << static_cast<int>(res) << std::endl;
+ BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(),
+ "boost::filesystem::path codecvt to wstring"));
+ }
+ target.append(to, to_next);
+ }
+
+//--------------------------------------------------------------------------------------//
+// convert_aux const wchar_t* to string //
+//--------------------------------------------------------------------------------------//
+
+ void convert_aux(
+ const wchar_t* from,
+ const wchar_t* from_end,
+ char* to, char* to_end,
+ std::string & target,
+ const pt::codecvt_type & cvt)
+ {
+ //std::cout << std::hex
+ // << " from=" << std::size_t(from)
+ // << " from_end=" << std::size_t(from_end)
+ // << " to=" << std::size_t(to)
+ // << " to_end=" << std::size_t(to_end)
+ // << std::endl;
+
+ std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports
+ const wchar_t* from_next;
+ char* to_next;
+
+ std::codecvt_base::result res;
+
+ if ((res=cvt.out(state, from, from_end, from_next,
+ to, to_end, to_next)) != std::codecvt_base::ok)
+ {
+ //std::cout << " result is " << static_cast<int>(res) << std::endl;
+ BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(),
+ "boost::filesystem::path codecvt to string"));
+ }
+ target.append(to, to_next);
+ }
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// path_traits //
+//--------------------------------------------------------------------------------------//
+
+namespace boost { namespace filesystem { namespace path_traits {
+
+//--------------------------------------------------------------------------------------//
+// convert const char* to wstring //
+//--------------------------------------------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL
+ void convert(const char* from,
+ const char* from_end, // 0 for null terminated MBCS
+ std::wstring & to,
+ const codecvt_type & cvt)
+ {
+ BOOST_ASSERT(from);
+
+ if (!from_end) // null terminated
+ {
+ from_end = from + std::strlen(from);
+ }
+
+ if (from == from_end) return;
+
+ std::size_t buf_size = (from_end - from) * 3; // perhaps too large, but that's OK
+
+ // dynamically allocate a buffer only if source is unusually large
+ if (buf_size > default_codecvt_buf_size)
+ {
+ boost::scoped_array< wchar_t > buf(new wchar_t [buf_size]);
+ convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt);
+ }
+ else
+ {
+ wchar_t buf[default_codecvt_buf_size];
+ convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt);
+ }
+ }
+
+//--------------------------------------------------------------------------------------//
+// convert const wchar_t* to string //
+//--------------------------------------------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL
+ void convert(const wchar_t* from,
+ const wchar_t* from_end, // 0 for null terminated MBCS
+ std::string & to,
+ const codecvt_type & cvt)
+ {
+ BOOST_ASSERT(from);
+
+ if (!from_end) // null terminated
+ {
+ from_end = from + std::wcslen(from);
+ }
+
+ if (from == from_end) return;
+
+ // The codecvt length functions may not be implemented, and I don't really
+ // understand them either. Thus this code is just a guess; if it turns
+ // out the buffer is too small then an error will be reported and the code
+ // will have to be fixed.
+ std::size_t buf_size = (from_end - from) * 4; // perhaps too large, but that's OK
+ buf_size += 4; // encodings like shift-JIS need some prefix space
+
+ // dynamically allocate a buffer only if source is unusually large
+ if (buf_size > default_codecvt_buf_size)
+ {
+ boost::scoped_array< char > buf(new char [buf_size]);
+ convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt);
+ }
+ else
+ {
+ char buf[default_codecvt_buf_size];
+ convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt);
+ }
+ }
+}}} // namespace boost::filesystem::path_traits
diff --git a/src/boost/libs/filesystem/src/portability.cpp b/src/boost/libs/filesystem/src/portability.cpp
new file mode 100644
index 000000000..fc7186d74
--- /dev/null
+++ b/src/boost/libs/filesystem/src/portability.cpp
@@ -0,0 +1,115 @@
+// portability.cpp -------------------------------------------------------------------//
+
+// Copyright 2002-2005 Beman Dawes
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace fs = boost::filesystem;
+
+#include <cstring> // SGI MIPSpro compilers need this
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+ namespace std { using ::strerror; }
+# endif
+
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+ const char invalid_chars[] =
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+ "<>:\"/\\|";
+ // note that the terminating '\0' is part of the string - thus the size below
+ // is sizeof(invalid_chars) rather than sizeof(invalid_chars)-1. I
+ const std::string windows_invalid_chars(invalid_chars, sizeof(invalid_chars));
+
+ const std::string valid_posix(
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-");
+
+} // unnamed namespace
+
+namespace boost
+{
+ namespace filesystem
+ {
+
+ // name_check functions ----------------------------------------------//
+
+# ifdef BOOST_WINDOWS
+ BOOST_FILESYSTEM_DECL bool native(const std::string & name)
+ {
+ return windows_name(name);
+ }
+# else
+ BOOST_FILESYSTEM_DECL bool native(const std::string & name)
+ {
+ return name.size() != 0
+ && name[0] != ' '
+ && name.find('/') == std::string::npos;
+ }
+# endif
+
+ BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name)
+ {
+ return name.size() != 0
+ && name.find_first_not_of(valid_posix) == std::string::npos;
+ }
+
+ BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name)
+ {
+ return name.size() != 0
+ && name[0] != ' '
+ && name.find_first_of(windows_invalid_chars) == std::string::npos
+ && *(name.end()-1) != ' '
+ && (*(name.end()-1) != '.'
+ || name.length() == 1 || name == "..");
+ }
+
+ BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name)
+ {
+ return
+ name.size() != 0
+ && (name == "."
+ || name == ".."
+ || (windows_name(name)
+ && portable_posix_name(name)
+ && name[0] != '.' && name[0] != '-'));
+ }
+
+ BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name)
+ {
+ return
+ name == "."
+ || name == ".."
+ || (portable_name(name)
+ && name.find('.') == std::string::npos);
+ }
+
+ BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name)
+ {
+ std::string::size_type pos;
+ return
+ portable_name(name)
+ && name != "."
+ && name != ".."
+ && ((pos = name.find('.')) == std::string::npos
+ || (name.find('.', pos+1) == std::string::npos
+ && (pos + 5) > name.length()))
+ ;
+ }
+
+ } // namespace filesystem
+} // namespace boost
diff --git a/src/boost/libs/filesystem/src/unique_path.cpp b/src/boost/libs/filesystem/src/unique_path.cpp
new file mode 100644
index 000000000..199f7e8b5
--- /dev/null
+++ b/src/boost/libs/filesystem/src/unique_path.cpp
@@ -0,0 +1,173 @@
+// filesystem unique_path.cpp --------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <cassert>
+
+# ifdef BOOST_POSIX_API
+# include <fcntl.h>
+# ifdef BOOST_HAS_UNISTD_H
+# include <unistd.h>
+# endif
+# else // BOOST_WINDOWS_API
+# include <windows.h>
+# include <wincrypt.h>
+# ifdef _MSC_VER
+# pragma comment(lib, "Advapi32.lib")
+# endif
+# endif
+
+namespace {
+
+void fail(int err, boost::system::error_code* ec)
+{
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW( boost::system::system_error(err,
+ boost::system::system_category(),
+ "boost::filesystem::unique_path"));
+
+ ec->assign(err, boost::system::system_category());
+ return;
+}
+
+#ifdef BOOST_WINDOWS_API
+
+int acquire_crypt_handle(HCRYPTPROV& handle)
+{
+ if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return 0;
+
+ int errval = ::GetLastError();
+ if (errval != NTE_BAD_KEYSET)
+ return errval;
+
+ if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return 0;
+
+ errval = ::GetLastError();
+ // Another thread could have attempted to create the keyset at the same time.
+ if (errval != NTE_EXISTS)
+ return errval;
+
+ if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return 0;
+
+ return ::GetLastError();
+}
+
+#endif
+
+void system_crypt_random(void* buf, std::size_t len, boost::system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+ int file = open("/dev/urandom", O_RDONLY);
+ if (file == -1)
+ {
+ file = open("/dev/random", O_RDONLY);
+ if (file == -1)
+ {
+ fail(errno, ec);
+ return;
+ }
+ }
+
+ size_t bytes_read = 0;
+ while (bytes_read < len)
+ {
+ ssize_t n = read(file, buf, len - bytes_read);
+ if (n == -1)
+ {
+ close(file);
+ fail(errno, ec);
+ return;
+ }
+ bytes_read += n;
+ buf = static_cast<char*>(buf) + n;
+ }
+
+ close(file);
+
+# else // BOOST_WINDOWS_API
+
+ HCRYPTPROV handle;
+ int errval = acquire_crypt_handle(handle);
+
+ if (!errval)
+ {
+ BOOL gen_ok = ::CryptGenRandom(handle, static_cast<DWORD>(len), static_cast<unsigned char*>(buf));
+ if (!gen_ok)
+ errval = ::GetLastError();
+ ::CryptReleaseContext(handle, 0);
+ }
+
+ if (!errval) return;
+
+ fail(errval, ec);
+# endif
+}
+
+} // unnamed namespace
+
+namespace boost { namespace filesystem { namespace detail {
+
+BOOST_FILESYSTEM_DECL
+path unique_path(const path& model, system::error_code* ec)
+{
+ // This function used wstring for fear of misidentifying
+ // a part of a multibyte character as a percent sign.
+ // However, double byte encodings only have 80-FF as lead
+ // bytes and 40-7F as trailing bytes, whereas % is 25.
+ // So, use string on POSIX and avoid conversions.
+
+ path::string_type s( model.native() );
+
+#ifdef BOOST_WINDOWS_API
+ const wchar_t hex[] = L"0123456789abcdef";
+ const wchar_t percent = L'%';
+#else
+ const char hex[] = "0123456789abcdef";
+ const char percent = '%';
+#endif
+
+ char ran[] = "123456789abcdef"; // init to avoid clang static analyzer message
+ // see ticket #8954
+ assert(sizeof(ran) == 16);
+ const int max_nibbles = 2 * sizeof(ran); // 4-bits per nibble
+
+ int nibbles_used = max_nibbles;
+ for(path::string_type::size_type i=0; i < s.size(); ++i)
+ {
+ if (s[i] == percent) // digit request
+ {
+ if (nibbles_used == max_nibbles)
+ {
+ system_crypt_random(ran, sizeof(ran), ec);
+ if (ec != 0 && *ec)
+ return "";
+ nibbles_used = 0;
+ }
+ int c = ran[nibbles_used/2];
+ c >>= 4 * (nibbles_used++ & 1); // if odd, shift right 1 nibble
+ s[i] = hex[c & 0xf]; // convert to hex digit and replace
+ }
+ }
+
+ if (ec != 0) ec->clear();
+
+ return s;
+}
+
+}}}
diff --git a/src/boost/libs/filesystem/src/utf8_codecvt_facet.cpp b/src/boost/libs/filesystem/src/utf8_codecvt_facet.cpp
new file mode 100644
index 000000000..e46778c0b
--- /dev/null
+++ b/src/boost/libs/filesystem/src/utf8_codecvt_facet.cpp
@@ -0,0 +1,26 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// For HP-UX, request that WCHAR_MAX and WCHAR_MIN be defined as macros,
+// not casts. See ticket 5048
+#define _INCLUDE_STDCSOURCE_199901
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+ namespace boost { namespace filesystem { namespace detail {
+
+#define BOOST_UTF8_END_NAMESPACE }}}
+#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL
+
+#include <boost/detail/utf8_codecvt_facet.ipp>
+
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
diff --git a/src/boost/libs/filesystem/src/windows_file_codecvt.cpp b/src/boost/libs/filesystem/src/windows_file_codecvt.cpp
new file mode 100644
index 000000000..0262d2cf6
--- /dev/null
+++ b/src/boost/libs/filesystem/src/windows_file_codecvt.cpp
@@ -0,0 +1,77 @@
+// filesystem windows_file_codecvt.cpp -----------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+// Include Boost.Predef first so that windows.h is guaranteed to be not included
+#include <boost/predef/os/windows.h>
+#if BOOST_OS_WINDOWS
+#include <boost/winapi/config.hpp>
+#endif
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <cwchar> // for mbstate_t
+
+#ifdef BOOST_WINDOWS_API
+
+#include "windows_file_codecvt.hpp"
+
+// Versions of MinGW prior to GCC 4.6 requires this
+#ifndef WINVER
+# define WINVER 0x0500
+#endif
+
+#include <windows.h>
+
+ std::codecvt_base::result windows_file_codecvt::do_in(
+ std::mbstate_t &,
+ const char* from, const char* from_end, const char*& from_next,
+ wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const
+ {
+ UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
+
+ int count;
+ if ((count = ::MultiByteToWideChar(codepage, MB_PRECOMPOSED, from,
+ static_cast<int>(from_end - from), to, static_cast<int>(to_end - to))) == 0)
+ {
+ return error; // conversion failed
+ }
+
+ from_next = from_end;
+ to_next = to + count;
+ *to_next = L'\0';
+ return ok;
+ }
+
+ std::codecvt_base::result windows_file_codecvt::do_out(
+ std::mbstate_t &,
+ const wchar_t* from, const wchar_t* from_end, const wchar_t* & from_next,
+ char* to, char* to_end, char* & to_next) const
+ {
+ UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
+
+ int count;
+ if ((count = ::WideCharToMultiByte(codepage, WC_NO_BEST_FIT_CHARS, from,
+ static_cast<int>(from_end - from), to, static_cast<int>(to_end - to), 0, 0)) == 0)
+ {
+ return error; // conversion failed
+ }
+
+ from_next = from_end;
+ to_next = to + count;
+ *to_next = '\0';
+ return ok;
+ }
+
+ # endif // BOOST_WINDOWS_API
+
diff --git a/src/boost/libs/filesystem/src/windows_file_codecvt.hpp b/src/boost/libs/filesystem/src/windows_file_codecvt.hpp
new file mode 100644
index 000000000..97cbf161a
--- /dev/null
+++ b/src/boost/libs/filesystem/src/windows_file_codecvt.hpp
@@ -0,0 +1,56 @@
+// filesystem windows_file_codecvt.hpp -----------------------------------------------//
+
+// Copyright Beman Dawes 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
+#define BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
+
+#include <boost/filesystem/config.hpp>
+#include <locale>
+
+ //------------------------------------------------------------------------------------//
+ // //
+ // class windows_file_codecvt //
+ // //
+ // Warning: partial implementation; even do_in and do_out only partially meet the //
+ // standard library specifications as the "to" buffer must hold the entire result. //
+ // //
+ //------------------------------------------------------------------------------------//
+
+ class BOOST_FILESYSTEM_DECL windows_file_codecvt
+ : public std::codecvt< wchar_t, char, std::mbstate_t >
+ {
+ public:
+ explicit windows_file_codecvt(std::size_t refs = 0)
+ : std::codecvt<wchar_t, char, std::mbstate_t>(refs) {}
+ protected:
+
+ virtual bool do_always_noconv() const throw() { return false; }
+
+ // seems safest to assume variable number of characters since we don't
+ // actually know what codepage is active
+ virtual int do_encoding() const throw() { return 0; }
+
+ virtual std::codecvt_base::result do_in(std::mbstate_t& state,
+ const char* from, const char* from_end, const char*& from_next,
+ wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const;
+
+ virtual std::codecvt_base::result do_out(std::mbstate_t & state,
+ const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
+ char* to, char* to_end, char*& to_next) const;
+
+ virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+ char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; }
+
+ virtual int do_length(std::mbstate_t&,
+ const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; }
+
+ virtual int do_max_length() const throw () { return 0; }
+ };
+
+#endif // BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
diff --git a/src/boost/libs/filesystem/src/windows_tools.hpp b/src/boost/libs/filesystem/src/windows_tools.hpp
new file mode 100644
index 000000000..ce116c51f
--- /dev/null
+++ b/src/boost/libs/filesystem/src/windows_tools.hpp
@@ -0,0 +1,54 @@
+// windows_tools.hpp -----------------------------------------------------------------//
+
+// Copyright 2002-2009, 2014 Beman Dawes
+// Copyright 2001 Dietmar Kuehl
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_SRC_WINDOWS_TOOLS_HPP_
+#define BOOST_FILESYSTEM_SRC_WINDOWS_TOOLS_HPP_
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/file_status.hpp>
+
+#include <windows.h>
+
+namespace boost {
+namespace filesystem {
+namespace detail {
+
+inline bool equal_extension(wchar_t const* p, wchar_t const (&x1)[5], wchar_t const (&x2)[5])
+{
+ return
+ (p[0] == x1[0] || p[0] == x2[0]) &&
+ (p[1] == x1[1] || p[1] == x2[1]) &&
+ (p[2] == x1[2] || p[2] == x2[2]) &&
+ (p[3] == x1[3] || p[3] == x2[3]) &&
+ p[4] == 0;
+}
+
+inline boost::filesystem::perms make_permissions(const boost::filesystem::path& p, DWORD attr)
+{
+ boost::filesystem::perms prms = boost::filesystem::owner_read | boost::filesystem::group_read | boost::filesystem::others_read;
+ if ((attr & FILE_ATTRIBUTE_READONLY) == 0u)
+ prms |= boost::filesystem::owner_write | boost::filesystem::group_write | boost::filesystem::others_write;
+ boost::filesystem::path ext = p.extension();
+ wchar_t const* q = ext.c_str();
+ if (equal_extension(q, L".exe", L".EXE")
+ || equal_extension(q, L".com", L".COM")
+ || equal_extension(q, L".bat", L".BAT")
+ || equal_extension(q, L".cmd", L".CMD"))
+ prms |= boost::filesystem::owner_exe | boost::filesystem::group_exe | boost::filesystem::others_exe;
+ return prms;
+}
+
+} // namespace detail
+} // namespace filesystem
+} // namespace boost
+
+#endif // BOOST_FILESYSTEM_SRC_WINDOWS_TOOLS_HPP_
diff --git a/src/boost/libs/filesystem/test/Jamfile.v2 b/src/boost/libs/filesystem/test/Jamfile.v2
new file mode 100644
index 000000000..5f9ae31d2
--- /dev/null
+++ b/src/boost/libs/filesystem/test/Jamfile.v2
@@ -0,0 +1,54 @@
+# Boost Filesystem Library test Jamfile
+
+# (C) Copyright Beman Dawes 2002-2006
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+import testing ;
+import os ;
+
+project
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
+ ;
+
+# Some tests are run both statically and as shared libraries since Filesystem
+# has a history of bugs that appear only in one type of build or the other.
+
+path-constant HERE : . ;
+
+local VIS ;
+
+if [ os.environ UBSAN ]
+{
+ VIS = <visibility>global
+ -<library>/boost/filesystem//boost_filesystem
+ <library>/boost/filesystem//boost_filesystem/<visibility>global ;
+}
+
+run config_info.cpp : : : <link>shared <test-info>always_show_run_output ;
+run config_info.cpp : : : <link>static <test-info>always_show_run_output : config_info_static ;
+run convenience_test.cpp ;
+compile macro_default_test.cpp ;
+run odr1_test.cpp odr2_test.cpp ;
+run deprecated_test.cpp ;
+run fstream_test.cpp : : : $(VIS) ;
+run large_file_support_test.cpp ;
+run locale_info.cpp : : : <test-info>always_show_run_output ;
+run operations_test.cpp : : : <link>shared <test-info>always_show_run_output ;
+run operations_test.cpp : : : <link>static : operations_test_static ;
+run operations_unit_test.cpp : $(HERE) : : <link>shared <test-info>always_show_run_output ;
+run path_test.cpp : : : <link>shared ;
+run path_test.cpp : : : <link>static : path_test_static ;
+run path_unit_test.cpp : : : <link>shared $(VIS) ;
+run path_unit_test.cpp : : : <link>static $(VIS) : path_unit_test_static ;
+run relative_test.cpp ;
+run ../example/simple_ls.cpp ;
+run ../example/file_status.cpp ;
+run foreach_test.cpp ;
+
+# `quick` target (for CI)
+run quick.cpp ;
+
+# Tests for specific issues
+run issues/70-71-copy.cpp ;
diff --git a/src/boost/libs/filesystem/test/boost_test.bat b/src/boost/libs/filesystem/test/boost_test.bat
new file mode 100644
index 000000000..38880be01
--- /dev/null
+++ b/src/boost/libs/filesystem/test/boost_test.bat
@@ -0,0 +1,30 @@
+@echo off
+
+if not $%1==$--help goto nohelp
+echo Invoke: boost_test [-ts toolset] [b2-options]
+echo Default -ts is gcc-c++03,gcc-c++11,gcc-c++14,msvc-12.0,msvc-14.0,msvc-14.1
+echo Example: boost_test -ts msvc-12.0 -a "define=BOOST_SOME_MACRO" config_info
+goto done
+:nohelp
+
+if $%1==$-ts goto toolset
+
+echo Begin test processing...
+b2 -j3 --v2 --dump-tests --toolset=gcc-c++03,gcc-c++11,gcc-c++14,msvc-12.0,msvc-14.0,msvc-14.1 %* >b2.log 2>&1
+goto jam_log
+
+:toolset
+echo Begin test processing...
+b2 -j3 --v2 --dump-tests --toolset=%2 %3 %4 %5 %6 %7 %8 %9 >b2.log 2>&1
+
+:jam_log
+echo Begin log processing...
+process_jam_log --v2 <b2.log
+start b2.log
+grep -i warning b2.log | sort | uniq
+
+echo Begin compiler status processing...
+compiler_status --v2 . test_status.html test_links.html
+start test_status.html
+
+:done
diff --git a/src/boost/libs/filesystem/test/config_info.cpp b/src/boost/libs/filesystem/test/config_info.cpp
new file mode 100644
index 000000000..4216627c4
--- /dev/null
+++ b/src/boost/libs/filesystem/test/config_info.cpp
@@ -0,0 +1,52 @@
+// boost/libs/filesystem/test/config_info.cpp ----------------------------------------//
+
+// Copyright Beman Dawes 2017
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/detail/macro_value.hpp>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+
+int main()
+{
+ cout << "Verify macro reporting works correctly\n";
+ cout << " NOSUCHMACRO: " << BOOST_MACRO_VALUE(NOSUCHMACRO) << endl;
+# define SUCHAMACRO
+ cout << " SUCHAMACRO: " << BOOST_MACRO_VALUE(SUCHAMACRO) << endl;
+ cout << " BOOST_VERSION: " << BOOST_MACRO_VALUE(BOOST_VERSION) << endl;
+
+ cout << "Report macro values that may be useful in debugging various test programs\n";
+ cout << " BOOST_VERSION: " << BOOST_MACRO_VALUE(BOOST_VERSION) << endl;
+ cout << " BOOST_FILESYSTEM_VERSION: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_VERSION) << endl;
+ cout << " BOOST_FILESYSTEM_DEPRECATED: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_DEPRECATED) << endl;
+ cout << " BOOST_FILESYSTEM_SOURCE: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_SOURCE) << endl;
+ cout << " BOOST_FILESYSTEM_DYN_LINK: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_DYN_LINK) << endl;
+ cout << " BOOST_FILESYSTEM_STATIC_LINK: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_STATIC_LINK) << endl;
+ cout << " BOOST_ALL_NO_LIB: " << BOOST_MACRO_VALUE(BOOST_ALL_NO_LIB) << endl;
+ cout << " BOOST_FILESYSTEM_NO_LIB: " << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_NO_LIB) << endl;
+ cout << " BOOST_LIB_NAME: " << BOOST_MACRO_VALUE(BOOST_LIB_NAME) << endl;
+ cout << " BOOST_POSIX_API: " << BOOST_MACRO_VALUE(BOOST_POSIX_API) << endl;
+ cout << " BOOST_WINDOWS_API: " << BOOST_MACRO_VALUE(BOOST_WINDOWS_API) << endl;
+ cout << " _MSC_VER: " << BOOST_MACRO_VALUE(_MSC_VER) << endl;
+ cout << " __MINGW32__: " << BOOST_MACRO_VALUE(__MINGW32__) << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+ //cout << " : " << BOOST_MACRO_VALUE() << endl;
+
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/convenience_test.cpp b/src/boost/libs/filesystem/test/convenience_test.cpp
new file mode 100644
index 000000000..ba71370cf
--- /dev/null
+++ b/src/boost/libs/filesystem/test/convenience_test.cpp
@@ -0,0 +1,179 @@
+// libs/filesystem/test/convenience_test.cpp -----------------------------------------//
+
+// Copyright Beman Dawes, 2002
+// Copyright Vladimir Prus, 2002
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/directory.hpp>
+#include <boost/filesystem/exception.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <boost/bind/bind.hpp>
+#include <fstream>
+#include <iostream>
+
+namespace fs = boost::filesystem;
+using fs::path;
+namespace sys = boost::system;
+
+namespace
+{
+ template< typename F >
+ bool throws_fs_error(F func)
+ {
+ try { func(); }
+
+ catch (const fs::filesystem_error &)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ void create_recursive_iterator(const fs::path & ph)
+ {
+ fs::recursive_directory_iterator it(ph);
+ }
+}
+
+// ------------------------------------------------------------------------------------//
+
+int cpp_main(int, char*[])
+{
+
+// create_directories() tests --------------------------------------------------------//
+
+ BOOST_TEST(!fs::create_directories("/")); // should be harmless
+
+ path unique_dir = fs::unique_path(); // unique name in case tests running in parallel
+ path unique_yy = unique_dir / "yy";
+ path unique_yya = unique_dir / "yya";
+ path unique_yy_zz = unique_dir / "yy" / "zz";
+
+ fs::remove_all(unique_dir); // make sure slate is blank
+ BOOST_TEST(!fs::exists(unique_dir)); // reality check
+
+ BOOST_TEST(fs::create_directories(unique_dir));
+ BOOST_TEST(fs::exists(unique_dir));
+ BOOST_TEST(fs::is_directory(unique_dir));
+
+ BOOST_TEST(fs::create_directories(unique_yy_zz));
+ BOOST_TEST(fs::exists(unique_dir));
+ BOOST_TEST(fs::exists(unique_yy));
+ BOOST_TEST(fs::exists(unique_yy_zz));
+ BOOST_TEST(fs::is_directory(unique_dir));
+ BOOST_TEST(fs::is_directory(unique_yy));
+ BOOST_TEST(fs::is_directory(unique_yy_zz));
+
+ path is_a_file(unique_dir / "uu");
+ {
+ std::ofstream f(is_a_file.string().c_str());
+ BOOST_TEST(!!f);
+ }
+ BOOST_TEST(throws_fs_error(
+ boost::bind(fs::create_directories, is_a_file)));
+ BOOST_TEST(throws_fs_error(
+ boost::bind(fs::create_directories, is_a_file / "aa")));
+
+// recursive_directory_iterator tests ----------------------------------------//
+
+ sys::error_code ec;
+ fs::recursive_directory_iterator it("/no-such-path", ec);
+ BOOST_TEST(ec);
+
+ BOOST_TEST(throws_fs_error(
+ boost::bind(create_recursive_iterator, "/no-such-path")));
+
+ fs::remove(unique_dir / "uu");
+
+#ifdef BOOST_WINDOWS_API
+ // These tests depends on ordering of directory entries, and that's guaranteed
+ // on Windows but not necessarily on other operating systems
+ {
+ std::ofstream f(unique_yya.string().c_str());
+ BOOST_TEST(!!f);
+ }
+
+ for (it = fs::recursive_directory_iterator(unique_dir);
+ it != fs::recursive_directory_iterator(); ++it)
+ { std::cout << it->path() << '\n'; }
+
+ it = fs::recursive_directory_iterator(unique_dir);
+ BOOST_TEST(it->path() == unique_yy);
+ BOOST_TEST(it.depth() == 0);
+ ++it;
+ BOOST_TEST(it->path() == unique_yy_zz);
+ BOOST_TEST(it.depth() == 1);
+ it.pop();
+ BOOST_TEST(it->path() == unique_yya);
+ BOOST_TEST(it.depth() == 0);
+ it++;
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ it = fs::recursive_directory_iterator(unique_dir);
+ BOOST_TEST(it->path() == unique_yy);
+ it.disable_recursion_pending();
+ ++it;
+ BOOST_TEST(it->path() == unique_yya);
+ ++it;
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ fs::remove(unique_yya);
+#endif
+
+ it = fs::recursive_directory_iterator(unique_yy_zz);
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ it = fs::recursive_directory_iterator(unique_dir);
+ BOOST_TEST(it->path() == unique_yy);
+ BOOST_TEST(it.depth() == 0);
+ ++it;
+ BOOST_TEST(it->path() == unique_yy_zz);
+ BOOST_TEST(it.depth() == 1);
+ it++;
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ it = fs::recursive_directory_iterator(unique_dir);
+ BOOST_TEST(it->path() == unique_yy);
+ it.disable_recursion_pending();
+ ++it;
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ it = fs::recursive_directory_iterator(unique_dir);
+ BOOST_TEST(it->path() == unique_yy);
+ ++it;
+ it.pop();
+ BOOST_TEST(it == fs::recursive_directory_iterator());
+
+ ec.clear();
+ BOOST_TEST(!ec);
+ // check that two argument failed constructor creates the end iterator
+ BOOST_TEST(fs::recursive_directory_iterator("nosuchdir", ec)
+ == fs::recursive_directory_iterator());
+ BOOST_TEST(ec);
+
+ fs::remove_all(unique_dir); // clean up behind ourselves
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/deprecated_test.cpp b/src/boost/libs/filesystem/test/deprecated_test.cpp
new file mode 100644
index 000000000..4c223e7ac
--- /dev/null
+++ b/src/boost/libs/filesystem/test/deprecated_test.cpp
@@ -0,0 +1,251 @@
+// deprecated_test program --------------------------------------------------//
+
+// Copyright Beman Dawes 2002
+// Copyright Vladimir Prus 2002
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+// This test verifies that various deprecated names still work. This is
+// important to preserve existing code that uses the old names.
+
+#define BOOST_FILESYSTEM_DEPRECATED
+
+#include <boost/filesystem.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = boost::filesystem;
+using boost::filesystem::path;
+
+#define PATH_CHECK(a, b) check(a, b, __LINE__)
+
+namespace
+{
+ std::string platform(BOOST_PLATFORM);
+
+ void check(const fs::path & source,
+ const std::string & expected, int line)
+ {
+ if (source.generic_string()== expected) return;
+
+ ++::boost::detail::test_errors();
+
+ std::cout << '(' << line << ") source.string(): \"" << source.string()
+ << "\" != expected: \"" << expected
+ << "\"" << std::endl;
+ }
+
+ void normalize_test()
+ {
+ PATH_CHECK(path("").normalize(), "");
+ PATH_CHECK(path("/").normalize(), "/");
+ PATH_CHECK(path("//").normalize(), "//");
+ PATH_CHECK(path("///").normalize(), "/");
+ PATH_CHECK(path("f").normalize(), "f");
+ PATH_CHECK(path("foo").normalize(), "foo");
+ PATH_CHECK(path("foo/").normalize(), "foo/.");
+ PATH_CHECK(path("f/").normalize(), "f/.");
+ PATH_CHECK(path("/foo").normalize(), "/foo");
+ PATH_CHECK(path("foo/bar").normalize(), "foo/bar");
+ PATH_CHECK(path("..").normalize(), "..");
+ PATH_CHECK(path("../..").normalize(), "../..");
+ PATH_CHECK(path("/..").normalize(), "/..");
+ PATH_CHECK(path("/../..").normalize(), "/../..");
+ PATH_CHECK(path("../foo").normalize(), "../foo");
+ PATH_CHECK(path("foo/..").normalize(), ".");
+ PATH_CHECK(path("foo/../").normalize(), "./.");
+ PATH_CHECK((path("foo") / "..").normalize() , ".");
+ PATH_CHECK(path("foo/...").normalize(), "foo/...");
+ PATH_CHECK(path("foo/.../").normalize(), "foo/.../.");
+ PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar");
+ PATH_CHECK(path("../f").normalize(), "../f");
+ PATH_CHECK(path("/../f").normalize(), "/../f");
+ PATH_CHECK(path("f/..").normalize(), ".");
+ PATH_CHECK((path("f") / "..").normalize() , ".");
+ PATH_CHECK(path("foo/../..").normalize(), "..");
+ PATH_CHECK(path("foo/../../").normalize(), "../.");
+ PATH_CHECK(path("foo/../../..").normalize(), "../..");
+ PATH_CHECK(path("foo/../../../").normalize(), "../../.");
+ PATH_CHECK(path("foo/../bar").normalize(), "bar");
+ PATH_CHECK(path("foo/../bar/").normalize(), "bar/.");
+ PATH_CHECK(path("foo/bar/..").normalize(), "foo");
+ PATH_CHECK(path("foo/bar/../").normalize(), "foo/.");
+ PATH_CHECK(path("foo/bar/../..").normalize(), ".");
+ PATH_CHECK(path("foo/bar/../../").normalize(), "./.");
+ PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah");
+ PATH_CHECK(path("f/../b").normalize(), "b");
+ PATH_CHECK(path("f/b/..").normalize(), "f");
+ PATH_CHECK(path("f/b/../").normalize(), "f/.");
+ PATH_CHECK(path("f/b/../a").normalize(), "f/a");
+ PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo");
+ PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch");
+ PATH_CHECK(path("//net").normalize(), "//net");
+ PATH_CHECK(path("//net/").normalize(), "//net/");
+ PATH_CHECK(path("//..net").normalize(), "//..net");
+ PATH_CHECK(path("//net/..").normalize(), "//net/..");
+ PATH_CHECK(path("//net/foo").normalize(), "//net/foo");
+ PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/.");
+ PATH_CHECK(path("//net/foo/..").normalize(), "//net/");
+ PATH_CHECK(path("//net/foo/../").normalize(), "//net/.");
+
+ PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar");
+ PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/.");
+ PATH_CHECK(path("/net/foo/..").normalize(), "/net");
+ PATH_CHECK(path("/net/foo/../").normalize(), "/net/.");
+
+ PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar");
+ PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/.");
+ PATH_CHECK(path("//net//foo//..").normalize(), "//net/");
+ PATH_CHECK(path("//net//foo//..//").normalize(), "//net/.");
+
+ PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar");
+ PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/.");
+ PATH_CHECK(path("///net///foo///..").normalize(), "/net");
+ PATH_CHECK(path("///net///foo///..///").normalize(), "/net/.");
+
+ if (platform == "Windows")
+ {
+ PATH_CHECK(path("c:..").normalize(), "c:..");
+ PATH_CHECK(path("c:foo/..").normalize(), "c:");
+
+ PATH_CHECK(path("c:foo/../").normalize(), "c:.");
+
+ PATH_CHECK(path("c:/foo/..").normalize(), "c:/");
+ PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
+ PATH_CHECK(path("c:/..").normalize(), "c:/..");
+ PATH_CHECK(path("c:/../").normalize(), "c:/../.");
+ PATH_CHECK(path("c:/../..").normalize(), "c:/../..");
+ PATH_CHECK(path("c:/../../").normalize(), "c:/../../.");
+ PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo");
+ PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/.");
+ PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo");
+ PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/.");
+ PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
+ }
+ else // POSIX
+ {
+ PATH_CHECK(path("c:..").normalize(), "c:..");
+ PATH_CHECK(path("c:foo/..").normalize(), ".");
+ PATH_CHECK(path("c:foo/../").normalize(), "./.");
+ PATH_CHECK(path("c:/foo/..").normalize(), "c:");
+ PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
+ PATH_CHECK(path("c:/..").normalize(), ".");
+ PATH_CHECK(path("c:/../").normalize(), "./.");
+ PATH_CHECK(path("c:/../..").normalize(), "..");
+ PATH_CHECK(path("c:/../../").normalize(), "../.");
+ PATH_CHECK(path("c:/../foo").normalize(), "foo");
+ PATH_CHECK(path("c:/../foo/").normalize(), "foo/.");
+ PATH_CHECK(path("c:/../../foo").normalize(), "../foo");
+ PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/.");
+ PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
+ }
+ }
+
+ // misc_test ------------------------------------------------------------------------//
+
+ void misc_test()
+ {
+ fs::path p;
+
+ fs::initial_path<fs::path>();
+ fs::initial_path<fs::wpath>();
+
+ p.file_string();
+ p.directory_string();
+ }
+
+ // path_rename_test -----------------------------------------------------------------//
+
+ void path_rename_test()
+ {
+ fs::path p("foo/bar/blah");
+
+ BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar");
+ BOOST_TEST_EQ(p.leaf(), "blah");
+ BOOST_TEST_EQ(p.branch_path(), "foo/bar");
+ BOOST_TEST(p.has_leaf());
+ BOOST_TEST(p.has_branch_path());
+ BOOST_TEST(!p.is_complete());
+
+ if (platform == "Windows")
+ {
+ BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar");
+ p = "foo\\bar\\blah";
+ BOOST_TEST_EQ(p.branch_path(), "foo\\bar");
+ }
+ }
+
+} // unnamed namespace
+
+
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int /*argc*/, char* /*argv*/[])
+{
+ // The choice of platform is make at runtime rather than compile-time
+ // so that compile errors for all platforms will be detected even though
+ // only the current platform is runtime tested.
+ platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
+ ? "Windows"
+ : "POSIX";
+ std::cout << "Platform is " << platform << '\n';
+
+ BOOST_TEST(fs::initial_path() == fs::current_path());
+
+ //path::default_name_check(fs::no_check);
+
+ fs::directory_entry de("foo/bar");
+
+ de.replace_leaf("", fs::file_status(), fs::file_status());
+
+ //de.leaf();
+ //de.string();
+
+ fs::path ng(" no-way, Jose");
+ BOOST_TEST(!fs::is_regular(ng)); // verify deprecated name still works
+ BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
+
+ misc_test();
+ path_rename_test();
+ normalize_test();
+ BOOST_TEST(fs::path("foo/bar").generic() == fs::path("foo/bar"));
+
+// extension() tests ---------------------------------------------------------//
+
+ BOOST_TEST(fs::extension("a/b") == "");
+ BOOST_TEST(fs::extension("a/b.txt") == ".txt");
+ BOOST_TEST(fs::extension("a/b.") == ".");
+ BOOST_TEST(fs::extension("a.b.c") == ".c");
+ BOOST_TEST(fs::extension("a.b.c.") == ".");
+ BOOST_TEST(fs::extension("") == "");
+ BOOST_TEST(fs::extension("a/") == "");
+
+// basename() tests ----------------------------------------------------------//
+
+ BOOST_TEST(fs::basename("b") == "b");
+ BOOST_TEST(fs::basename("a/b.txt") == "b");
+ BOOST_TEST(fs::basename("a/b.") == "b");
+ BOOST_TEST(fs::basename("a.b.c") == "a.b");
+ BOOST_TEST(fs::basename("a.b.c.") == "a.b.c");
+ BOOST_TEST(fs::basename("") == "");
+
+// change_extension tests ---------------------------------------------------//
+
+ BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex");
+ BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex");
+ BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt");
+ BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex");
+ // see the rationale in html docs for explanation why this works
+ BOOST_TEST(fs::change_extension("", ".png").string() == ".png");
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/design_use_cases.cpp b/src/boost/libs/filesystem/test/design_use_cases.cpp
new file mode 100644
index 000000000..49b0c28c0
--- /dev/null
+++ b/src/boost/libs/filesystem/test/design_use_cases.cpp
@@ -0,0 +1,81 @@
+#include <string>
+#include <iostream>
+
+// Minimal class path
+
+class path
+{
+public:
+ path( const char * )
+ {
+ std::cout << "path( const char * )\n";
+ }
+ path( const std::string & )
+ {
+ std::cout << "path( std::string & )\n";
+ }
+
+// for maximum efficiency, either signature must work
+# ifdef BY_VALUE
+ operator const std::string() const
+# else
+ operator const std::string&() const
+# endif
+ {
+ std::cout << "operator string\n";
+ return m_path;
+ }
+
+#ifdef NAMED_CONVERSION
+ std::string string() const
+ {
+ std::cout << "std::string string() const\n";
+ return m_path;
+ }
+#endif
+
+private:
+ std::string m_path;
+};
+
+bool operator==( const path &, const path & )
+{
+ std::cout << "operator==( const path &, const path & )\n";
+ return true;
+}
+
+// These are the critical use cases. If any of these don't compile, usability
+// is unacceptably degraded.
+
+void f( const path & )
+{
+ std::cout << "f( const path & )\n";
+}
+
+int main()
+{
+ f( "foo" );
+ f( std::string( "foo" ) );
+ f( path( "foo" ) );
+
+ std::cout << '\n';
+
+ std::string s1( path( "foo" ) );
+ std::string s2 = path( "foo" );
+ s2 = path( "foo" );
+
+#ifdef NAMED_CONVERSION
+ s2 = path( "foo" ).string();
+#endif
+
+ std::cout << '\n';
+
+ // these must call bool path( const path &, const path & );
+ path( "foo" ) == path( "foo" );
+ path( "foo" ) == "foo";
+ path( "foo" ) == std::string( "foo" );
+ "foo" == path( "foo" );
+ std::string( "foo" ) == path( "foo" );
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/equivalent.cpp b/src/boost/libs/filesystem/test/equivalent.cpp
new file mode 100644
index 000000000..ead4210c1
--- /dev/null
+++ b/src/boost/libs/filesystem/test/equivalent.cpp
@@ -0,0 +1,39 @@
+// equivalent program -------------------------------------------------------//
+
+// Copyright (c) 2004 Beman Dawes
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#include <boost/filesystem/operations.hpp>
+#include <iostream>
+#include <exception>
+
+int main( int argc, char * argv[] )
+{
+ boost::filesystem::path::default_name_check( boost::filesystem::native );
+ if ( argc != 3 )
+ {
+ std::cout << "Usage: equivalent path1 path2\n";
+ return 2;
+ }
+
+ bool eq;
+ try
+ {
+ eq = boost::filesystem::equivalent( argv[1], argv[2] );
+ }
+ catch ( const std::exception & ex )
+ {
+ std::cout << ex.what() << "\n";
+ return 3;
+ }
+
+ std::cout << (eq ? "Paths are equivalent\n" : "Paths are not equivalent\n");
+ return !eq;
+}
diff --git a/src/boost/libs/filesystem/test/foreach_test.cpp b/src/boost/libs/filesystem/test/foreach_test.cpp
new file mode 100644
index 000000000..c6280f769
--- /dev/null
+++ b/src/boost/libs/filesystem/test/foreach_test.cpp
@@ -0,0 +1,62 @@
+
+// Copyright 2018 Peter Dimov.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <boost/foreach.hpp>
+#include <boost/config.hpp>
+
+namespace fs = boost::filesystem;
+
+int main()
+{
+ {
+ fs::directory_iterator const it;
+
+ BOOST_FOREACH( fs::path const& p, it )
+ {
+ p.string();
+ }
+ }
+
+#if !defined(BOOST_NO_CXX11_RANGE_BASED_FOR)
+
+ {
+ fs::directory_iterator const it;
+
+ for( fs::path const& p: it )
+ {
+ p.string();
+ }
+ }
+
+#endif
+
+ {
+ fs::recursive_directory_iterator it;
+
+ BOOST_FOREACH( fs::path const& p, it )
+ {
+ p.string();
+ }
+ }
+
+#if !defined(BOOST_NO_CXX11_RANGE_BASED_FOR)
+
+ {
+ fs::recursive_directory_iterator const it;
+
+ for( fs::path const& p: it )
+ {
+ p.string();
+ }
+ }
+
+#endif
+}
diff --git a/src/boost/libs/filesystem/test/fstream_test.cpp b/src/boost/libs/filesystem/test/fstream_test.cpp
new file mode 100644
index 000000000..afe2d80b3
--- /dev/null
+++ b/src/boost/libs/filesystem/test/fstream_test.cpp
@@ -0,0 +1,169 @@
+// fstream_test.cpp ------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2002
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/fstream.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/operations.hpp>
+#include <string>
+#include <iostream>
+#include <cstdio> // for std::remove
+
+#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
+
+namespace fs = boost::filesystem;
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+ namespace std { using ::remove; }
+#endif
+
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace
+{
+ bool cleanup = true;
+
+ void test(const fs::path & p)
+ {
+ fs::remove(p);
+ {
+ std::cout << " in test 1\n";
+ fs::filebuf fb1;
+ fb1.open(p, std::ios_base::out);
+ BOOST_TEST(fb1.is_open());
+ }
+ {
+ std::cout << " in test 2\n";
+ fs::filebuf fb2;
+ fb2.open(p, std::ios_base::in);
+ BOOST_TEST(fb2.is_open());
+ }
+ {
+ std::cout << " in test 3\n";
+ fs::ifstream tfs(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 4\n";
+ fs::ifstream tfs(p / p.filename()); // should fail
+ BOOST_TEST(!tfs.is_open());
+ }
+ {
+ std::cout << " in test 5\n";
+ fs::ifstream tfs(p, std::ios_base::in);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 6\n";
+ fs::ifstream tfs;
+ tfs.open(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 7\n";
+ fs::ifstream tfs;
+ tfs.open(p, std::ios_base::in);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 8\n";
+ fs::ofstream tfs(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 9\n";
+ fs::ofstream tfs(p, std::ios_base::out);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 10\n";
+ fs::ofstream tfs;
+ tfs.open(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 11\n";
+ fs::ofstream tfs;
+ tfs.open(p, std::ios_base::out);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 12\n";
+ fs::fstream tfs(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 13\n";
+ fs::fstream tfs(p, std::ios_base::in|std::ios_base::out);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 14\n";
+ fs::fstream tfs;
+ tfs.open(p);
+ BOOST_TEST(tfs.is_open());
+ }
+ {
+ std::cout << " in test 15\n";
+ fs::fstream tfs;
+ tfs.open(p, std::ios_base::in|std::ios_base::out);
+ BOOST_TEST(tfs.is_open());
+ }
+
+ if (cleanup)
+ fs::remove(p);
+
+ } // test
+} // unnamed namespace
+
+int cpp_main(int argc, char*[])
+{
+ if (argc > 1) cleanup = false;
+
+ std::cout << "BOOST_FILESYSTEM_C_STR defined as \""
+ << BOOST_STRINGIZE(BOOST_FILESYSTEM_C_STR) << "\"\n";
+
+ // test narrow characters
+ std::cout << "narrow character tests:\n";
+ test("narrow_fstream_test");
+
+
+ // So that tests are run with known encoding, use Boost UTF-8 codecvt
+ std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet);
+ fs::path::imbue(loc);
+
+ // test with some wide characters
+ // \u2780 is circled 1 against white background == e2 9e 80 in UTF-8
+ // \u2781 is circled 2 against white background == e2 9e 81 in UTF-8
+ // \u263A is a white smiling face
+ std::cout << "\nwide character tests:\n";
+ std::wstring ws(L"wide_fstream_test_");
+ ws += 0x2780;
+ ws += 0x263A;
+ test(ws);
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/issues/10038.cpp b/src/boost/libs/filesystem/test/issues/10038.cpp
new file mode 100644
index 000000000..341e7a940
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/10038.cpp
@@ -0,0 +1,8 @@
+#include <boost/filesystem.hpp>
+
+int main(void)
+{
+ boost::filesystem::copy_file("a", "b");
+ return 0;
+}
+
diff --git a/src/boost/libs/filesystem/test/issues/10205.cpp b/src/boost/libs/filesystem/test/issues/10205.cpp
new file mode 100644
index 000000000..4cf5e728d
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/10205.cpp
@@ -0,0 +1,17 @@
+// Linux test; before running: export LANG=foo
+
+#include <locale>
+#include <iostream>
+#include <string>
+#include <boost/filesystem/path.hpp>
+
+int main()
+{
+ std::string pathname = "/some/filesystem/path/%%%%";
+
+ boost::filesystem::path path(pathname);
+
+ std::wcout << path.wstring() << std::endl;
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/issues/10485.cpp b/src/boost/libs/filesystem/test/issues/10485.cpp
new file mode 100644
index 000000000..81ba2136d
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/10485.cpp
@@ -0,0 +1,14 @@
+// Copyright iamvfx@gmail.com 2014
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#include <stdio.h>
+#include <boost/filesystem.hpp>
+
+int main()
+{
+ boost::filesystem::path dir("/");
+ for (char c : dir.filename().string())
+ printf("%c\n", c);
+}
diff --git a/src/boost/libs/filesystem/test/issues/10641.cpp b/src/boost/libs/filesystem/test/issues/10641.cpp
new file mode 100644
index 000000000..ff90784ed
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/10641.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+#include <boost/filesystem/path.hpp>
+using namespace std;
+namespace fs = boost::filesystem;
+int main(int argc, char** argv)
+{
+
+ try
+ {
+ fs::path my_path("test/test.txt");
+ cout << "current path is " << my_path << endl;
+ cout << "parent path is " << my_path.parent_path() << endl;
+ }
+ catch(std::exception& e) {
+ cerr << endl << "Error during execution: " << e.what() << endl << endl;
+ return EXIT_FAILURE;
+ }
+ return EXIT_SUCCESS;
+}
+
diff --git a/src/boost/libs/filesystem/test/issues/11166-remove-race.cpp b/src/boost/libs/filesystem/test/issues/11166-remove-race.cpp
new file mode 100644
index 000000000..e5ba61a5e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/11166-remove-race.cpp
@@ -0,0 +1,38 @@
+#include <boost/filesystem.hpp>
+#include <boost/thread.hpp>
+#include <fstream>
+
+boost::condition_variable cond;
+boost::mutex mut;
+
+#define FNAME ("remove-test")
+void remover()
+{
+ while(1)
+ {
+ boost::filesystem::remove(FNAME);
+ }
+}
+
+void creater()
+{
+ for(int i=0; i<100000; i++) std::fstream(FNAME, std::fstream::out);
+}
+
+int main()
+{
+ boost::filesystem::remove(FNAME);
+ boost::filesystem::remove(FNAME);
+
+ std::cout <<
+ "If you got this far, it's OK to remove a file that doesn't exist\n"
+ "Now trying with one creator thread and two remover threads.\n"
+ "This is likely to crash after just a few seconds at most." <<
+ std::endl;
+
+ boost::thread c(creater), r1(remover), r2(remover);
+
+ c.join();
+ r1.interrupt(); r1.join();
+ r2.interrupt(); r2.join();
+}
diff --git a/src/boost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp b/src/boost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp
new file mode 100644
index 000000000..ac44d2d6f
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp
@@ -0,0 +1,25 @@
+#include <boost/filesystem.hpp>
+#include <boost/range.hpp>
+#include <boost/range/algorithm.hpp>
+#include <boost/range/adaptors.hpp>
+#include <vector>
+#include <iostream>
+
+namespace fs = boost::filesystem;
+using namespace boost::adaptors;
+
+int main() {
+ fs::recursive_directory_iterator beg("."), end;
+
+ auto fileFilter = [](fs::path const & path)
+ {
+ return is_regular_file(path);
+ };
+
+ std::vector<fs::path> paths;
+ copy(boost::make_iterator_range(beg, end) | filtered(fileFilter),
+ std::back_inserter(paths));
+
+ for(auto& p : paths)
+ std::cout << p << "\n";
+} \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/issues/3332/test.cpp b/src/boost/libs/filesystem/test/issues/3332/test.cpp
new file mode 100644
index 000000000..9456a7a83
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/3332/test.cpp
@@ -0,0 +1,37 @@
+#include <boost/filesystem.hpp>
+#include <cvt/cp950>
+#include <iostream>
+#include <string>
+#include <locale>
+
+namespace fs = boost::filesystem;
+
+int main(void) {
+
+ std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new stdext::cvt::codecvt_cp950<wchar_t>);
+ fs::path::imbue(loc);
+
+ std::cout <<
+ "HEADS UP! PIPE OUTPUT TO FILE AND INSPECT WITH HEX OR CP950 EDITOR.\n"
+ "WINDOWS COMMAND PROMPT FONTS DON'T SUPPORT CHINESE,\n"
+ "EVEN WITH CODEPAGE SET AND EVEN AS OF WIN 10 TECH PREVIEW." << std::endl;
+
+ fs::recursive_directory_iterator end;
+ fs::recursive_directory_iterator iter
+ ("C:/boost/test-files/utf-8");
+
+ while (iter != end)
+ {
+ if (fs::is_directory(*iter))
+ {
+ std::cout << "[directory] " << iter->path().generic_string() << std::endl;
+ }
+ else if (fs::is_regular(*iter))
+ {
+ std::cout << " [file] " << iter->path().generic_string() << std::endl;
+ }
+ ++iter;
+ }
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/issues/4329.-basename.cpp b/src/boost/libs/filesystem/test/issues/4329.-basename.cpp
new file mode 100644
index 000000000..a07648b32
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/4329.-basename.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+#include <boost/filesystem.hpp>
+using boost::filesystem::path;
+
+int main()
+{
+ std::cout << path("a").stem() << std::endl;
+ std::cout << path("a/").stem() << std::endl;
+ std::cout << path("a/b").stem() << std::endl;
+ std::cout << path("a/b/").stem() << std::endl;
+ std::cout << path("a/b/c").stem() << std::endl;
+ std::cout << path("a/b/c/").stem() << std::endl;
+ std::cout << path("a/b/c/d").stem() << std::endl;
+ std::cout << path("a/b/c/d/").stem() << std::endl;
+ std::cout << path("a/b/c/d/e").stem() << std::endl;
+ std::cout << path("a/b/c/d/e/").stem() << std::endl;
+ return 0;
+}
+
+
diff --git a/src/boost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp b/src/boost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp
diff --git a/src/boost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp b/src/boost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp
new file mode 100644
index 000000000..b0a62ede7
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp
@@ -0,0 +1,36 @@
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <string>
+
+using namespace boost::filesystem;
+
+// The original bug report was that this broke:
+// path p(L"C:\\TEMP\\");
+// path r(p / "narrow");
+// That code now works, but ...
+
+// Nils Gladitz has provided this example ...
+
+class Test
+{
+public:
+ ~Test()
+ {
+ path p(L"C:\\TEMP\\");
+ path r(p / "narrow");
+ }
+};
+
+// path p("narrow");
+
+// fails if static linked and Test object is global variable, but does not fail if
+// path p("narrow") line above is not commented out, and also does not fail if the
+// Test test2 line below is commented out.
+
+Test test1;
+Test test2;
+
+int cpp_main(int, char* [])
+{
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/issues/70-71-copy.cpp b/src/boost/libs/filesystem/test/issues/70-71-copy.cpp
new file mode 100644
index 000000000..ed67f170f
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/70-71-copy.cpp
@@ -0,0 +1,20 @@
+
+// Copyright 2018 Peter Dimov.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+namespace fs = boost::filesystem;
+
+int main()
+{
+ BOOST_TEST_THROWS( fs::copy( "/tmp/non-existent-a", "/tmp/non-existent-b" ), std::exception );
+ return boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/issues/8930.cpp b/src/boost/libs/filesystem/test/issues/8930.cpp
new file mode 100644
index 000000000..280e5ed63
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/8930.cpp
@@ -0,0 +1,7 @@
+// Before running this test: export LANG=foo
+
+#include <boost/filesystem.hpp>
+int main() {
+ boost::filesystem::path("/abc").root_directory();
+}
+
diff --git a/src/boost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp b/src/boost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp
new file mode 100644
index 000000000..e30617e0b
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp
@@ -0,0 +1,10 @@
+#include "boost/filesystem.hpp"
+
+static const boost::filesystem::path::codecvt_type &dummy =
+ boost::filesystem::path::codecvt();
+
+int main()
+{
+ return 0;
+}
+
diff --git a/src/boost/libs/filesystem/test/issues/9219.cpp b/src/boost/libs/filesystem/test/issues/9219.cpp
new file mode 100644
index 000000000..787c0773c
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/9219.cpp
@@ -0,0 +1,40 @@
+// Boost 9219.cpp --------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2014
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+// //
+// In researching filesystem issues it is convenient to have a program that can be //
+// quickly modified to test reported problems. That's the purpose of this file and //
+// its associated Visual Studio and Boost.Build infrastructure. //
+// //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+
+#include <iostream>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout;
+using std::endl;
+namespace fs = boost::filesystem;
+
+//------------------------------------ cpp_main --------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ cout << "Hello, 9219" << endl;
+ cout << "This is a test for non-Windows systems" << endl;
+
+ BOOST_TEST(fs::exists(const_cast<char*>(".")));
+
+ return ::boost::report_errors();
+} // cpp_main
diff --git a/src/boost/libs/filesystem/test/issues/Jamfile.v2 b/src/boost/libs/filesystem/test/issues/Jamfile.v2
new file mode 100644
index 000000000..47fce4075
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/Jamfile.v2
@@ -0,0 +1,38 @@
+# Boost Filesystem test/issues Jamfile
+
+# Copyright Beman Dawes 2014
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+ : requirements
+ <library>/boost/filesystem//boost_filesystem
+ <link>static
+ ;
+
+ test-suite "filesystem-issues" :
+# [ run 9054_static_const_codecvt_segfault_pre_main.cpp
+# : : : <link>shared : 9054_shared ]
+# [ run 9054_static_const_codecvt_segfault_pre_main.cpp
+# : : : <link>static : 9054_static ]
+# [ run hello_filesystem.cpp
+# : : : <link>shared : hello_shared ]
+# [ run hello_filesystem.cpp
+# : : : <link>static : hello_static ]
+# [ run 9219.cpp
+# : : : <link>shared : 9219_shared ]
+# [ run 9219.cpp
+# : : : <link>static : 9219_static ]
+# [ run 10485.cpp
+# : : : <link>shared <test-info>always_show_run_output ]
+# [ run copy_file-compilation-error-2015-05-04.cpp ]
+ [ run 6638-convert_aux-fails-init-global.cpp
+ : : : <link>shared : 6638_shared ]
+ [ run 6638-convert_aux-fails-init-global.cpp
+ : : : <link>static : 6638_static ]
+
+ ;
+
diff --git a/src/boost/libs/filesystem/test/issues/boost-no-inspect b/src/boost/libs/filesystem/test/issues/boost-no-inspect
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/boost-no-inspect
diff --git a/src/boost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp b/src/boost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp
new file mode 100644
index 000000000..c9034d6f9
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp
@@ -0,0 +1,14 @@
+// Rob Conde <rob.conde@ai-solutions.com> reports this fails
+// to compile for Boost 1.58 with g++ 4.4.7 but is OK with FC++ 2013
+
+#include "boost/filesystem/operations.hpp"
+
+void myFunc()
+{
+ using namespace boost::filesystem;
+
+ copy_option opt(copy_option::overwrite_if_exists);
+
+ copy_file(path("p1"),path("p2"),copy_option::overwrite_if_exists);
+// copy_file(path("p1"),path("p2"),opt);
+} \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp b/src/boost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
new file mode 100644
index 000000000..e69f9ba21
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
@@ -0,0 +1,38 @@
+// Test program to demonstrate that Linux does not support AT_SYMLINK_NOFOLLOW
+
+// Copyright Duncan Exon Smith 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Test this by running:
+//
+// rm -rf data && mkdir data && g++ -otest-fchmodat fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp && (cd data && ../test-fchmodat)
+//
+// If no assertions go off, then it looks like fchmodat is supported,
+// but AT_SYMLINK_NOFOLLOW is not supported.
+
+#include <fstream>
+#include <cassert>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <cerrno>
+
+#ifdef NDEBUG
+# error This program depends on assert() so makes no sense if NDEBUG is defined
+#endif
+
+int main(int argc, char *argv[])
+{
+ { std::ofstream file("out"); file << "contents"; }
+
+ assert(!::symlink("out", "sym"));
+
+ assert(!::fchmodat(AT_FDCWD, "out", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+ assert(!::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+
+ assert(::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, AT_SYMLINK_NOFOLLOW) == -1);
+ assert(errno == ENOTSUP);
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/issues/hello_filesystem.cpp b/src/boost/libs/filesystem/test/issues/hello_filesystem.cpp
new file mode 100644
index 000000000..727cbb23e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/hello_filesystem.cpp
@@ -0,0 +1,39 @@
+// Boost hello_filesystem.cpp --------------------------------------------------------//
+
+// Copyright Beman Dawes 2014
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+// //
+// In researching filesystem issues it is convenient to have a program that can be //
+// quickly modified to test reported problems. That's the purpose of this file and //
+// its associated Visual Studio and Boost.Build infrastructure. //
+// //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+
+#include <iostream>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout;
+using std::endl;
+namespace fs = boost::filesystem;
+
+//------------------------------------ cpp_main --------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ cout << "Hello, filesystem world" << endl;
+
+ BOOST_TEST(fs::exists("."));
+
+ return ::boost::report_errors();
+} // cpp_main
diff --git a/src/boost/libs/filesystem/test/issues/readme.txt b/src/boost/libs/filesystem/test/issues/readme.txt
new file mode 100644
index 000000000..cf8198e5c
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/readme.txt
@@ -0,0 +1,9 @@
+This directory contains tests related to specific issues.
+
+The names are intended to indicate both the function or condition being tested
+and the issue number.
+
+-----
+Copyright Beman Dawes 2012
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
diff --git a/src/boost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp b/src/boost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp
new file mode 100644
index 000000000..8d75c7c09
--- /dev/null
+++ b/src/boost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp
@@ -0,0 +1,132 @@
+// Boost Filesystem recurse_dir_iter_test.cpp ----------------------------------------//
+
+// Copyright Beman Dawes 2014.
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/cerrno.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = boost::filesystem;
+using boost::system::error_code;
+using boost::system::system_category;
+using boost::system::system_error;
+
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+#endif
+namespace
+{
+ typedef int errno_t;
+ std::string platform(BOOST_PLATFORM);
+ bool report_throws = false;
+ bool cleanup = true;
+ bool skip_long_windows_tests = false;
+ unsigned short language_id; // 0 except for Windows
+
+} // unnamed namespace
+
+//------------------------------------------------------------------------------------//
+// //
+// main //
+// //
+//------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ // document state of critical macros
+#ifdef BOOST_POSIX_API
+ cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+
+ for (; argc > 1; --argc, ++argv)
+ {
+ //if (*argv[1]=='-' && *(argv[1]+1)=='t')
+ // report_throws = true;
+ //else if (*argv[1]=='-' && *(argv[1]+1)=='x')
+ // cleanup = false;
+ //else if (*argv[1]=='-' && *(argv[1]+1)=='w')
+ // skip_long_windows_tests = true;
+ }
+
+ // The choice of platform to test is made at runtime rather than compile-time
+ // so that compile errors for all platforms will be detected even though
+ // only the current platform is runtime tested.
+# if defined(BOOST_POSIX_API)
+ platform = "POSIX";
+# elif defined(BOOST_WINDOWS_API)
+ platform = "Windows";
+# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+ language_id = ::GetUserDefaultUILanguage();
+# else
+ language_id = 0x0409; // Assume US English
+# endif
+# else
+# error neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp
+# endif
+ cout << "API is " << platform << endl;
+ cout << "initial_path() is " << fs::initial_path() << endl;
+ fs::path ip = fs::initial_path();
+
+ for (fs::path::const_iterator it = ip.begin(); it != ip.end(); ++it)
+ {
+ if (it != ip.begin())
+ cout << ", ";
+ cout << *it;
+ }
+ cout << endl;
+
+ // From the root, walk the directory tree looking for a permissions error
+
+ fs::recursive_directory_iterator it("/");
+ fs::recursive_directory_iterator end_it;
+
+ // The increment function has an invarient that it always makes progress,
+ // so even if an error occurs this loop will eventually terminate.
+
+ while (it != end_it)
+ {
+ error_code ec;
+ fs::path init_path = it->path();
+ it.increment(ec);
+ if (ec)
+ {
+ cout << "initial path: " << init_path << endl;
+ cout << "error_code: " << ec.value() << " with msg: " << ec.message() << endl;
+ if (it != end_it)
+ cout << "post-increment path: " << it->path() << endl;
+ }
+ }
+
+ cout << "returning from main()" << endl;
+ return ::boost::report_errors();
+} // main
diff --git a/src/boost/libs/filesystem/test/large_file_support_test.cpp b/src/boost/libs/filesystem/test/large_file_support_test.cpp
new file mode 100644
index 000000000..553e09d8c
--- /dev/null
+++ b/src/boost/libs/filesystem/test/large_file_support_test.cpp
@@ -0,0 +1,42 @@
+// Boost large_file_support_test.cpp ---------------------------------------//
+
+// Copyright Beman Dawes 2004.
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+// See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+#define BOOST_SYSTEM_NO_DEPRECATED
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+namespace fs = boost::filesystem;
+
+#include <iostream>
+
+int main()
+{
+ if ( fs::detail::possible_large_file_size_support() )
+ {
+ std::cout << "It appears that file sizes greater that 2 gigabytes are possible\n"
+ "for this configuration on this platform since the operating system\n"
+ "does use a large enough integer type to report large file sizes.\n\n"
+ "Whether or not such support is actually present depends on the OS\n";
+ return 0;
+ }
+ std::cout << "The operating system is using an integer type to report file sizes\n"
+ "that can not represent file sizes greater that 2 gigabytes (31-bits).\n"
+ "Thus the Filesystem Library will not correctly deal with such large\n"
+ "files. If you think that this operatiing system should be able to\n"
+ "support large files, please report the problem to the Boost developers\n"
+ "mailing list.\n";
+ return 1;
+}
diff --git a/src/boost/libs/filesystem/test/locale_info.cpp b/src/boost/libs/filesystem/test/locale_info.cpp
new file mode 100644
index 000000000..db57bb158
--- /dev/null
+++ b/src/boost/libs/filesystem/test/locale_info.cpp
@@ -0,0 +1,88 @@
+// locale_info.cpp ---------------------------------------------------------//
+
+// Copyright Beman Dawes 2011
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+#include <locale>
+#include <iostream>
+#include <exception>
+#include <cstdlib>
+using namespace std;
+
+#ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable: 4996) // ... Function call with parameters that may be unsafe
+#endif
+
+namespace
+{
+ void facet_info(const locale& loc, const char* msg)
+ {
+ cout << "has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >("
+ << msg << ") is "
+ << (has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc)
+ ? "true\n"
+ : "false\n");
+ }
+
+ void default_info()
+ {
+ try
+ {
+ locale loc;
+ cout << "\nlocale default construction OK" << endl;
+ facet_info(loc, "locale()");
+ }
+ catch (const exception& ex)
+ {
+ cout << "\nlocale default construction threw: " << ex.what() << endl;
+ }
+ }
+
+ void null_string_info()
+ {
+ try
+ {
+ locale loc("");
+ cout << "\nlocale(\"\") construction OK" << endl;
+ facet_info(loc, "locale(\"\")");
+ }
+ catch (const exception& ex)
+ {
+ cout << "\nlocale(\"\") construction threw: " << ex.what() << endl;
+ }
+ }
+
+ void classic_info()
+ {
+ try
+ {
+ locale loc(locale::classic());
+ cout << "\nlocale(locale::classic()) copy construction OK" << endl;
+ facet_info(loc, "locale::classic()");
+ }
+ catch (const exception& ex)
+ {
+ cout << "\nlocale(locale::clasic()) copy construction threw: " << ex.what() << endl;
+ }
+ }
+}
+
+int main()
+{
+ const char* lang = getenv("LANG");
+ cout << "\nLANG environmental variable is "
+ << (lang ? lang : "not present") << endl;
+
+ default_info();
+ null_string_info();
+ classic_info();
+
+ return 0;
+}
+
+#ifdef _MSC_VER
+# pragma warning(pop)
+#endif
diff --git a/src/boost/libs/filesystem/test/long_path_test.cpp b/src/boost/libs/filesystem/test/long_path_test.cpp
new file mode 100644
index 000000000..0433326d1
--- /dev/null
+++ b/src/boost/libs/filesystem/test/long_path_test.cpp
@@ -0,0 +1,59 @@
+// long_path_test.cpp ----------------------------------------------------------------//
+
+// Copyright Beman Dawes 2011
+
+// Distributed under the Boost Software License, Version 1.0.
+// http://www.boost.org/LICENSE_1_0.txt
+
+// See http://www.boost.org/libs/btree for documentation.
+
+// See http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+#include <iostream>
+#include <string>
+
+using namespace boost::filesystem;
+
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace
+{
+} // unnamed namespace
+
+int cpp_main(int, char*[])
+{
+
+ std::string prefix("d:\\temp\\");
+ std::cout << "prefix is " << prefix << '\n';
+
+ const std::size_t safe_size
+ = 260 - prefix.size() - 100; // Windows MAX_PATH is 260
+
+ std::string safe_x_string(safe_size, 'x');
+ std::string safe_y_string(safe_size, 'y');
+ std::string path_escape("\\\\?\\");
+
+ path x_p(prefix + safe_x_string);
+ path y_p(path_escape + prefix + safe_x_string + "\\" + safe_y_string);
+
+ std::cout << "x_p.native().size() is " << x_p.native().size() << '\n';
+ std::cout << "y_p.native().size() is " << y_p.native().size() << '\n';
+
+ create_directory(x_p);
+ BOOST_TEST(exists(x_p));
+ create_directory(y_p);
+ BOOST_TEST(exists(y_p));
+
+ //std::cout << "directory x.../y... ready for testing, where ... is " << safe_size
+ // << " repeats of x and y, respectively\n";
+
+ BOOST_TEST(exists(x_p));
+
+ //remove_all(x_p);
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/macro_default_test.cpp b/src/boost/libs/filesystem/test/macro_default_test.cpp
new file mode 100644
index 000000000..4f8de1960
--- /dev/null
+++ b/src/boost/libs/filesystem/test/macro_default_test.cpp
@@ -0,0 +1,36 @@
+// macro_default_test program --------------------------------------------------------//
+
+// Copyright Beman Dawes 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#undef BOOST_ALL_DYN_LINK
+#undef BOOST_ALL_STATIC_LINK
+#undef BOOST_FILESYSTEM_DYN_LINK
+#undef BOOST_FILESYSTEM_STATIC_LINK
+#undef BOOST_SYSTEM_DYN_LINK
+#undef BOOST_SYSTEM_STATIC_LINK
+
+#ifndef BOOST_ALL_NO_LIB
+# define BOOST_ALL_NO_LIB
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/system/config.hpp>
+
+#ifndef BOOST_FILESYSTEM_STATIC_LINK
+# error BOOST_FILESYSTEM_STATIC_LINK not set by default
+#endif
+
+
+#ifndef BOOST_SYSTEM_STATIC_LINK
+# error BOOST_SYSTEM_STATIC_LINK not set by default
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/msvc/boost-no-inspect b/src/boost/libs/filesystem/test/msvc/boost-no-inspect
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/boost-no-inspect
diff --git a/src/boost/libs/filesystem/test/msvc/common.props b/src/boost/libs/filesystem/test/msvc/common.props
new file mode 100644
index 000000000..f256ad17d
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/common.props
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>C:\boost\develop\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/config_info/config_info.vcxproj b/src/boost/libs/filesystem/test/msvc/config_info/config_info.vcxproj
new file mode 100644
index 000000000..103642159
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/config_info/config_info.vcxproj
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FE7F2E63-D211-442D-B351-6F54E2BE0B00}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>config_info</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\config_info.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/convenience_test/convenience_test.vcxproj b/src/boost/libs/filesystem/test/msvc/convenience_test/convenience_test.vcxproj
new file mode 100644
index 000000000..55ff38ead
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/convenience_test/convenience_test.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}</ProjectGuid>
+ <RootNamespace>convenience_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\convenience_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/deprecated_test/deprecated_test.vcxproj b/src/boost/libs/filesystem/test/msvc/deprecated_test/deprecated_test.vcxproj
new file mode 100644
index 000000000..80fa474ac
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/deprecated_test/deprecated_test.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}</ProjectGuid>
+ <RootNamespace>deprecated_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\deprecated_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/exec_monitor_dll/exec_monitor_dll.vcxproj b/src/boost/libs/filesystem/test/msvc/exec_monitor_dll/exec_monitor_dll.vcxproj
new file mode 100644
index 000000000..2b73824ea
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/exec_monitor_dll/exec_monitor_dll.vcxproj
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{0EA788CA-FA52-4290-A4D0-F616390B203B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>exec_monitor_dll</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;EXEC_MONITOR_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXEC_MONITOR_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\test\src\cpp_main.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\debug.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\execution_monitor.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/exec_monitor_lib/exec_monitor_lib.vcxproj b/src/boost/libs/filesystem/test/msvc/exec_monitor_lib/exec_monitor_lib.vcxproj
new file mode 100644
index 000000000..782094bc2
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/exec_monitor_lib/exec_monitor_lib.vcxproj
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\test\src\cpp_main.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\debug.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\execution_monitor.cpp" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{272DFC15-6292-49DF-B457-6784A183EAC3}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>exec_monitor_lib</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/file_status/file_status.vcxproj b/src/boost/libs/filesystem/test/msvc/file_status/file_status.vcxproj
new file mode 100644
index 000000000..65e62b05e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/file_status/file_status.vcxproj
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>file_status</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\file_status.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/filesystem.sln b/src/boost/libs/filesystem/test/msvc/filesystem.sln
new file mode 100644
index 000000000..666f36f40
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/filesystem.sln
@@ -0,0 +1,344 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_unit_test", "operations_unit_test\operations_unit_test.vcxproj", "{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcxproj", "{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcxproj", "{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcxproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcxproj", "{FFD738F7-96F0-445C-81EA-551665EF53D1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcxproj", "{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcxproj", "{A9939CD7-BE1C-4334-947C-4C320D49B3CA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcxproj", "{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcxproj", "{6376B8E4-7FD4-466B-978E-E8DA6E938689}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcxproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcxproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcxproj", "{256EA89A-E073-4CE8-B675-BE2FBC6B2691}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windows_attributes", "windows_attributes\windows_attributes.vcxproj", "{FC5C770F-3017-4021-8DAF-C5DCA3FDF005}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut5", "tut5\tut5.vcxproj", "{5C9B3380-3C6E-45CC-986A-16D245E27E58}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6a", "tut6a\tut6a.vcxproj", "{C781F9C4-31D4-4509-B031-84DB598B207D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6b", "tut6b\tut6b.vcxproj", "{4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut6c", "tut6c\tut6c.vcxproj", "{17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stems", "stems\stems.vcxproj", "{23C735E1-0195-467F-BE9F-314829402FCF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "long_path_test", "long_path_test\long_path_test.vcxproj", "{1A6A7DAF-8705-4B2B-83B5-93F84A63496C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file_status", "file_status\file_status.vcxproj", "{43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "locale_info", "locale_info\locale_info.vcxproj", "{3667C35E-78D5-43D4-AAC2-349145E4341D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_lib", "system_lib\system_lib.vcxproj", "{3640605D-6F82-493D-879F-8F30762DA554}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_lib", "filesystem_lib\filesystem_lib.vcxproj", "{2C1770A4-4AC3-4102-9D36-E652DBB686D8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3640605D-6F82-493D-879F-8F30762DA554} = {3640605D-6F82-493D-879F-8F30762DA554}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test_static", "path_test_static\path_test_static.vcxproj", "{3B3010C5-D6D7-4320-A992-4EA61F256279}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "macro_default_test", "macro_default_test\macro_default_test.vcxproj", "{36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3640605D-6F82-493D-879F-8F30762DA554} = {3640605D-6F82-493D-879F-8F30762DA554}
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8} = {2C1770A4-4AC3-4102-9D36-E652DBB686D8}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_timings", "path_timings\path_timings.vcxproj", "{3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recurse_dir_iter_test", "recurse_dir_iter_test\recurse_dir_iter_test.vcxproj", "{C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
+ {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "odr_test", "odr_test\odr_test.vcxproj", "{1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello_filesystem", "hello_filesystem\hello_filesystem.vcxproj", "{3D74D9C5-31B1-4D5B-B49C-8725E26CF768}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "issue_test_shared", "issue_test\issue_test.vcxproj", "{3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "headers", "headers\headers.vcxproj", "{5FFA4555-E967-4632-A3E6-ED8826E9FDED}"
+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}") = "issues_test_static", "issues_test_static\issues_test_static.vcxproj", "{BBD2ECDC-C622-409E-A6CF-2010140D8B55}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "relative_test", "relative_test\relative_test.vcxproj", "{44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "config_info", "config_info\config_info.vcxproj", "{FE7F2E63-D211-442D-B351-6F54E2BE0B00}"
+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|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|x64.ActiveCfg = Debug|Win32
+ {3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}.Release|Win32.ActiveCfg = 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 = Release|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
+ {BBD2ECDC-C622-409E-A6CF-2010140D8B55}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BBD2ECDC-C622-409E-A6CF-2010140D8B55}.Debug|x64.ActiveCfg = Debug|x64
+ {BBD2ECDC-C622-409E-A6CF-2010140D8B55}.Release|Win32.ActiveCfg = Release|Win32
+ {BBD2ECDC-C622-409E-A6CF-2010140D8B55}.Release|x64.ActiveCfg = Release|x64
+ {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|Win32
+ {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
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Debug|Win32.Build.0 = Debug|Win32
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Debug|x64.ActiveCfg = Debug|x64
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Debug|x64.Build.0 = Debug|x64
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Release|Win32.ActiveCfg = Release|Win32
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Release|Win32.Build.0 = Release|Win32
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Release|x64.ActiveCfg = Release|x64
+ {FE7F2E63-D211-442D-B351-6F54E2BE0B00}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/boost/libs/filesystem/test/msvc/filesystem_dll/filesystem_dll.vcxproj b/src/boost/libs/filesystem/test/msvc/filesystem_dll/filesystem_dll.vcxproj
new file mode 100644
index 000000000..4ef1b012a
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/filesystem_dll/filesystem_dll.vcxproj
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FFD738F7-96F0-445C-81EA-551665EF53D1}</ProjectGuid>
+ <RootNamespace>filesystem_dll</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>BOOST_FILEYSTEM_INCLUDE_IOSTREAM;WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\codecvt_error_category.cpp" />
+ <ClCompile Include="..\..\..\src\operations.cpp" />
+ <ClCompile Include="..\..\..\src\path.cpp" />
+ <ClCompile Include="..\..\..\src\path_traits.cpp" />
+ <ClCompile Include="..\..\..\src\portability.cpp" />
+ <ClCompile Include="..\..\..\src\unique_path.cpp" />
+ <ClCompile Include="..\..\..\src\utf8_codecvt_facet.cpp" />
+ <ClCompile Include="..\..\..\src\windows_file_codecvt.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/filesystem_lib/filesystem_lib.vcxproj b/src/boost/libs/filesystem/test/msvc/filesystem_lib/filesystem_lib.vcxproj
new file mode 100644
index 000000000..cf4c51ef9
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/filesystem_lib/filesystem_lib.vcxproj
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\codecvt_error_category.cpp" />
+ <ClCompile Include="..\..\..\src\operations.cpp" />
+ <ClCompile Include="..\..\..\src\path.cpp" />
+ <ClCompile Include="..\..\..\src\path_traits.cpp" />
+ <ClCompile Include="..\..\..\src\portability.cpp" />
+ <ClCompile Include="..\..\..\src\unique_path.cpp" />
+ <ClCompile Include="..\..\..\src\utf8_codecvt_facet.cpp" />
+ <ClCompile Include="..\..\..\src\windows_file_codecvt.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2C1770A4-4AC3-4102-9D36-E652DBB686D8}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>filesystem_lib</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/fstream_test/fstream_test.vcxproj b/src/boost/libs/filesystem/test/msvc/fstream_test/fstream_test.vcxproj
new file mode 100644
index 000000000..b5ee0924b
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/fstream_test/fstream_test.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{A9939CD7-BE1C-4334-947C-4C320D49B3CA}</ProjectGuid>
+ <RootNamespace>fstream_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe" -no-cleanup</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe" -no-cleanup</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\fstream_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/headers/headers.vcxproj b/src/boost/libs/filesystem/test/msvc/headers/headers.vcxproj
new file mode 100644
index 000000000..6d36cf151
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/headers/headers.vcxproj
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5FFA4555-E967-4632-A3E6-ED8826E9FDED}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>headers</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\include\boost\filesystem.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\config.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\convenience.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\detail\macro_value.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\detail\utf8_codecvt_facet.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\exception.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\fstream.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\operations.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\path.hpp" />
+ <ClInclude Include="..\..\..\include\boost\filesystem\path_traits.hpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/hello_filesystem/hello_filesystem.vcxproj b/src/boost/libs/filesystem/test/msvc/hello_filesystem/hello_filesystem.vcxproj
new file mode 100644
index 000000000..0891efb69
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/hello_filesystem/hello_filesystem.vcxproj
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3D74D9C5-31B1-4D5B-B49C-8725E26CF768}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>hello_filesystem</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\issues\hello_filesystem.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/issue_test/issue_test.vcxproj b/src/boost/libs/filesystem/test/msvc/issue_test/issue_test.vcxproj
new file mode 100644
index 000000000..a519f8690
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/issue_test/issue_test.vcxproj
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3B1AF12C-25AB-44F7-A80B-8BBA0D3D08CE}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>issue_test</RootNamespace>
+ <ProjectName>issue_test_shared</ProjectName>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\issues\11061-imposible-to-traverse-path-reverse-iterator.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/issues_test_static/issues_test_static.vcxproj b/src/boost/libs/filesystem/test/msvc/issues_test_static/issues_test_static.vcxproj
new file mode 100644
index 000000000..8e20d06e7
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/issues_test_static/issues_test_static.vcxproj
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{BBD2ECDC-C622-409E-A6CF-2010140D8B55}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>issues_test_static</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>C:\boost\develop\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories />
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_lib\filesystem_lib.vcxproj">
+ <Project>{2c1770a4-4ac3-4102-9d36-e652dbb686d8}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\issues\11166-remove-race.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/locale_info/locale_info.vcxproj b/src/boost/libs/filesystem/test/msvc/locale_info/locale_info.vcxproj
new file mode 100644
index 000000000..84d25805a
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/locale_info/locale_info.vcxproj
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3667C35E-78D5-43D4-AAC2-349145E4341D}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>locale_info</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\locale_info.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/long_path_test/long_path_test.vcxproj b/src/boost/libs/filesystem/test/msvc/long_path_test/long_path_test.vcxproj
new file mode 100644
index 000000000..954e0bb35
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/long_path_test/long_path_test.vcxproj
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{1A6A7DAF-8705-4B2B-83B5-93F84A63496C}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>long_path_test</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\long_path_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/macro_default_test/macro_default_test.vcxproj b/src/boost/libs/filesystem/test/msvc/macro_default_test/macro_default_test.vcxproj
new file mode 100644
index 000000000..4d5ce7551
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/macro_default_test/macro_default_test.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>macro_default_test</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\macro_default_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_lib\filesystem_lib.vcxproj">
+ <Project>{2c1770a4-4ac3-4102-9d36-e652dbb686d8}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/odr_test/odr_test.vcxproj b/src/boost/libs/filesystem/test/msvc/odr_test/odr_test.vcxproj
new file mode 100644
index 000000000..4efa70802
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/odr_test/odr_test.vcxproj
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{1F1C209D-105B-4C8A-8DFC-ABCC4D9A0014}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>odr_test</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\odr1_test.cpp" />
+ <ClCompile Include="..\..\odr2_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/operations_test/operations_test.vcxproj b/src/boost/libs/filesystem/test/msvc/operations_test/operations_test.vcxproj
new file mode 100644
index 000000000..b1dcd031e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/operations_test/operations_test.vcxproj
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}</ProjectGuid>
+ <RootNamespace>operations_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_FILEYSTEM_INCLUDE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\operations_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/operations_unit_test/operations_unit_test.vcxproj b/src/boost/libs/filesystem/test/msvc/operations_unit_test/operations_unit_test.vcxproj
new file mode 100644
index 000000000..8d01c9f9e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/operations_unit_test/operations_unit_test.vcxproj
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}</ProjectGuid>
+ <RootNamespace>operations_unit_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\operations_unit_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/path_test/path_test.vcxproj b/src/boost/libs/filesystem/test/msvc/path_test/path_test.vcxproj
new file mode 100644
index 000000000..5747c5145
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/path_test/path_test.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}</ProjectGuid>
+ <RootNamespace>path_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_FILESYSTEM_PATH_CTOR_COUNT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/path_test_static/path_test_static.vcxproj b/src/boost/libs/filesystem/test/msvc/path_test_static/path_test_static.vcxproj
new file mode 100644
index 000000000..38b5523e0
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/path_test_static/path_test_static.vcxproj
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3B3010C5-D6D7-4320-A992-4EA61F256279}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>path_test_static</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_lib\filesystem_lib.vcxproj">
+ <Project>{2c1770a4-4ac3-4102-9d36-e652dbb686d8}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/path_timings/path_timings.vcxproj b/src/boost/libs/filesystem/test/msvc/path_timings/path_timings.vcxproj
new file mode 100644
index 000000000..d30d680a5
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/path_timings/path_timings.vcxproj
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3AB1E2A1-9616-4E91-83F4-1D7A33A586DE}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>path_timings</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <ExecutablePath>C:\boost\trunk-git-svn\lib;$(ExecutablePath)</ExecutablePath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <ExecutablePath>C:\boost\trunk-git-svn\lib;$(ExecutablePath)</ExecutablePath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_SYSTEM_NO_DEPRECATED;BOOST_SYSTEM_NO_LIB;BOOST_FILESYSTEM_NO_LIB;BOOST_ALL_DYN_LINK;_UNICODE;UNICODE</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>C:\boost\modular\develop\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_SYSTEM_NO_DEPRECATED;BOOST_SYSTEM_NO_LIB;BOOST_FILESYSTEM_NO_LIB;BOOST_ALL_DYN_LINK;_UNICODE;UNICODE;WIN32;NDEBUG;_CONSOLE</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories>C:\boost\modular\develop\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_times.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/path_unit_test/path_unit_test.vcxproj b/src/boost/libs/filesystem/test/msvc/path_unit_test/path_unit_test.vcxproj
new file mode 100644
index 000000000..70a00c881
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/path_unit_test/path_unit_test.vcxproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3C77F610-2E31-4087-9DF2-7CD45198A02D}</ProjectGuid>
+ <RootNamespace>path_unit_test</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_unit_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/recurse_dir_iter_test/recurse_dir_iter_test.vcxproj b/src/boost/libs/filesystem/test/msvc/recurse_dir_iter_test/recurse_dir_iter_test.vcxproj
new file mode 100644
index 000000000..aff7380f2
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/recurse_dir_iter_test/recurse_dir_iter_test.vcxproj
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C6594EC2-1BDA-41A1-B2C0-7FB8AE713CF8}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>recurse_dir_iter_test</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\issues\recurse_dir_iter_5403.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/relative_test/relative_test.vcxproj b/src/boost/libs/filesystem/test/msvc/relative_test/relative_test.vcxproj
new file mode 100644
index 000000000..5d731a6e0
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/relative_test/relative_test.vcxproj
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{44FE7C6C-F483-44BE-B8E1-6D76F33F24D8}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>relative_test</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\relative_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/stems/stems.vcxproj b/src/boost/libs/filesystem/test/msvc/stems/stems.vcxproj
new file mode 100644
index 000000000..236e00af9
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/stems/stems.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{23C735E1-0195-467F-BE9F-314829402FCF}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>stems</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\stems.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/system_dll/system_dll.vcxproj b/src/boost/libs/filesystem/test/msvc/system_dll/system_dll.vcxproj
new file mode 100644
index 000000000..329905d13
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/system_dll/system_dll.vcxproj
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\system\src\error_code.cpp" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F94CCADD-A90B-480C-A304-C19D015D36B1}</ProjectGuid>
+ <RootNamespace>system_dll</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/system_lib/system_lib.vcxproj b/src/boost/libs/filesystem/test/msvc/system_lib/system_lib.vcxproj
new file mode 100644
index 000000000..6be3a6155
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/system_lib/system_lib.vcxproj
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3640605D-6F82-493D-879F-8F30762DA554}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>system_lib</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\system\src\error_code.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut1/tut1.vcxproj b/src/boost/libs/filesystem/test/msvc/tut1/tut1.vcxproj
new file mode 100644
index 000000000..05eb72854
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut1/tut1.vcxproj
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{6376B8E4-7FD4-466B-978E-E8DA6E938689}</ProjectGuid>
+ <RootNamespace>tut1</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut1.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut2/tut2.vcxproj b/src/boost/libs/filesystem/test/msvc/tut2/tut2.vcxproj
new file mode 100644
index 000000000..c410e06fc
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut2/tut2.vcxproj
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{CD69B175-389E-4F8F-85DC-03C56A47CD1D}</ProjectGuid>
+ <RootNamespace>tut2</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut2.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut3/tut3.vcxproj b/src/boost/libs/filesystem/test/msvc/tut3/tut3.vcxproj
new file mode 100644
index 000000000..075cb535a
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut3/tut3.vcxproj
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{4FF64FA7-6806-401D-865C-79DD064D4A9E}</ProjectGuid>
+ <RootNamespace>tut3</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut3.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut4/tut4.vcxproj b/src/boost/libs/filesystem/test/msvc/tut4/tut4.vcxproj
new file mode 100644
index 000000000..db0843145
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut4/tut4.vcxproj
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{256EA89A-E073-4CE8-B675-BE2FBC6B2691}</ProjectGuid>
+ <RootNamespace>tut4</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe" .</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut4.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut5/tut5.vcxproj b/src/boost/libs/filesystem/test/msvc/tut5/tut5.vcxproj
new file mode 100644
index 000000000..9a9c91abd
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut5/tut5.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5C9B3380-3C6E-45CC-986A-16D245E27E58}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut5</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut5.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut6a/tut6a.vcxproj b/src/boost/libs/filesystem/test/msvc/tut6a/tut6a.vcxproj
new file mode 100644
index 000000000..f83354cce
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut6a/tut6a.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C781F9C4-31D4-4509-B031-84DB598B207D}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut6a</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut6a.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut6b/tut6b.vcxproj b/src/boost/libs/filesystem/test/msvc/tut6b/tut6b.vcxproj
new file mode 100644
index 000000000..a8787506f
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut6b/tut6b.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut6b</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut6b.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/tut6c/tut6c.vcxproj b/src/boost/libs/filesystem/test/msvc/tut6c/tut6c.vcxproj
new file mode 100644
index 000000000..266bbf6e2
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/tut6c/tut6c.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>tut6c</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\example\tut6c.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/msvc/windows_attributes/windows_attributes.vcxproj b/src/boost/libs/filesystem/test/msvc/windows_attributes/windows_attributes.vcxproj
new file mode 100644
index 000000000..f7d3fde72
--- /dev/null
+++ b/src/boost/libs/filesystem/test/msvc/windows_attributes/windows_attributes.vcxproj
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FC5C770F-3017-4021-8DAF-C5DCA3FDF005}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>windows_attributes</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\windows_attributes.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
+ <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_dll\system_dll.vcxproj">
+ <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/src/boost/libs/filesystem/test/odr1_test.cpp b/src/boost/libs/filesystem/test/odr1_test.cpp
new file mode 100644
index 000000000..4d73e1813
--- /dev/null
+++ b/src/boost/libs/filesystem/test/odr1_test.cpp
@@ -0,0 +1,24 @@
+// Boost Filesystem odr1_test.cpp ----------------------------------------------------//
+
+// Copyright Beman Dawes 2014.
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+
+namespace boost
+{
+ namespace filesystem
+ {
+ void tu2();
+ }
+}
+
+int main()
+{
+ boost::filesystem::tu2();
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/odr2_test.cpp b/src/boost/libs/filesystem/test/odr2_test.cpp
new file mode 100644
index 000000000..948666b20
--- /dev/null
+++ b/src/boost/libs/filesystem/test/odr2_test.cpp
@@ -0,0 +1,18 @@
+// Boost Filesystem odr2_test.cpp ----------------------------------------------------//
+
+// Copyright Beman Dawes 2014.
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+
+namespace boost
+{
+ namespace filesystem
+ {
+ void tu2() {}
+ }
+}
diff --git a/src/boost/libs/filesystem/test/operations_test.cpp b/src/boost/libs/filesystem/test/operations_test.cpp
new file mode 100644
index 000000000..0158fc2cf
--- /dev/null
+++ b/src/boost/libs/filesystem/test/operations_test.cpp
@@ -0,0 +1,2323 @@
+// Boost operations_test.cpp ---------------------------------------------------------//
+
+// Copyright Beman Dawes 2002, 2009.
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/directory.hpp>
+#include <boost/filesystem/exception.hpp>
+#include <boost/filesystem/file_status.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/cerrno.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = boost::filesystem;
+using boost::system::error_code;
+using boost::system::system_category;
+using boost::system::system_error;
+
+#include <fstream>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <cstring> // for strncmp, etc.
+#include <ctime>
+#include <cstdlib> // for system(), getenv(), etc.
+
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+
+inline std::wstring convert(const char* c)
+{
+ std::string s(c);
+
+ return std::wstring(s.begin(), s.end());
+}
+
+// Note: these three setenv* functions are not general solutions for the missing
+// setenv* problem on VC++. See Microsoft's _putenv for that need, and ticker #7018
+// for discussion and rationale for returning void for this test program, which needs
+// to work for both the MSVC Runtime and the Windows Runtime (which does not support
+// _putenv).
+
+inline void setenv_(const char* name, const fs::path::value_type* val, int)
+{
+ SetEnvironmentVariableW(convert(name).c_str(), val);
+}
+
+inline void setenv_(const char* name, const char* val, int)
+{
+ SetEnvironmentVariableW(convert(name).c_str(), convert(val).c_str());
+}
+
+inline void unsetenv_(const char* name)
+{
+ SetEnvironmentVariableW(convert(name).c_str(), 0);
+}
+
+#else
+
+#include <stdlib.h> // allow unqualifed calls to env funcs on SunOS
+
+inline void setenv_(const char* name, const char* val, int ovw)
+{
+ setenv(name, val, ovw);
+}
+
+inline void unsetenv_(const char* name)
+{
+ unsetenv(name);
+}
+
+#endif
+
+// on Windows, except for standard libaries known to have wchar_t overloads for
+// file stream I/O, use path::string() to get a narrow character c_str()
+#if defined(BOOST_WINDOWS_API) \
+ && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405) // not Dinkumware || no wide overloads
+# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available
+#else // use the native c_str, which will be narrow on POSIX, wide on Windows
+# define BOOST_FILESYSTEM_C_STR c_str()
+#endif
+
+#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__)
+
+namespace
+{
+ typedef int errno_t;
+ std::string platform(BOOST_PLATFORM);
+ bool report_throws = false;
+ bool cleanup = true;
+ bool skip_long_windows_tests = false;
+
+ fs::directory_iterator end_itr;
+ fs::path dir;
+ fs::path d1;
+ fs::path d2;
+ fs::path f0;
+ fs::path f1;
+ fs::path d1f1;
+
+ bool create_symlink_ok(true);
+
+ fs::path ng(" no-way, Jose");
+
+ unsigned short language_id; // 0 except for Windows
+
+ const fs::path temp_dir(fs::unique_path("op-test-%%%%-%%%%"));
+
+ void create_file(const fs::path & ph, const std::string & contents = std::string())
+ {
+ std::ofstream f(ph.BOOST_FILESYSTEM_C_STR);
+ if (!f)
+ throw fs::filesystem_error("operations_test create_file",
+ ph, error_code(errno, system_category()));
+ if (!contents.empty()) f << contents;
+ }
+
+ void verify_file(const fs::path & ph, const std::string & expected)
+ {
+ std::ifstream f(ph.BOOST_FILESYSTEM_C_STR);
+ if (!f)
+ throw fs::filesystem_error("operations_test verify_file",
+ ph, error_code(errno, system_category()));
+ std::string contents;
+ f >> contents;
+ if (contents != expected)
+ throw fs::filesystem_error("operations_test verify_file contents \""
+ + contents + "\" != \"" + expected + "\"", ph, error_code());
+ }
+
+ template< typename F >
+ bool throws_fs_error(F func, errno_t en, int line)
+ {
+ try { func(); }
+
+ catch (const fs::filesystem_error & ex)
+ {
+ if (report_throws)
+ {
+ // use the what() convenience function to display exceptions
+ cout << "\n" << ex.what() << "\n";
+ }
+ if (en == 0
+ || en == ex.code().default_error_condition().value()) return true;
+ cout
+ << "\nWarning: line " << line
+ << " exception reports default_error_condition().value() "
+ << ex.code().default_error_condition().value()
+ << ", should be " << en
+ << "\n value() is " << ex.code().value()
+ << endl;
+ return true;
+ }
+ return false;
+ }
+
+ struct poison_category_impl: public boost::system::error_category
+ {
+ char const * name() const BOOST_NOEXCEPT { return "poison"; }
+ std::string message( int ) const { return "poison_category::message"; }
+ };
+
+ boost::system::error_category& poison_category()
+ {
+ static poison_category_impl instance;
+ return instance;
+ }
+
+ // compile-only two argument "do-the-right-thing" tests
+ // verifies that all overload combinations compile without error
+ void do_the_right_thing_tests(bool call_ = false)
+ {
+ if (call_)
+ {
+ fs::path p;
+ std::string s;
+ const char* a = 0;
+ fs::copy_file(p, p);
+ fs::copy_file(s, p);
+ fs::copy_file(a, p);
+ fs::copy_file(p, s);
+ fs::copy_file(p, a);
+ fs::copy_file(s, s);
+ fs::copy_file(a, s);
+ fs::copy_file(s, a);
+ fs::copy_file(a, a);
+ }
+ }
+
+ void bad_file_size()
+ {
+ fs::file_size(" No way, Jose");
+ }
+
+ void bad_directory_size()
+ {
+ fs::file_size(fs::current_path());
+ }
+
+ fs::path bad_create_directory_path;
+ void bad_create_directory()
+ {
+ fs::create_directory(bad_create_directory_path);
+ }
+
+ void bad_equivalent()
+ {
+ fs::equivalent("no-such-path", "another-not-present-path");
+ }
+
+ fs::path bad_remove_dir;
+ void bad_remove()
+ {
+ fs::remove(bad_remove_dir);
+ }
+
+ class renamer
+ {
+ public:
+ renamer(const fs::path & p1, const fs::path & p2)
+ : from(p1), to(p2) {}
+ void operator()()
+ {
+ fs::rename(from, to);
+ }
+ private:
+ fs::path from;
+ fs::path to;
+ };
+
+ //------------------------------ debugging aids --------------------------------------//
+
+ //std::ostream& operator<<(std::ostream& os, const fs::file_status& s)
+ //{
+ // if (s.type() == fs::status_error) { os << "status_error"; }
+ // else if (s.type() == fs::file_not_found) { os << "file_not_found"; }
+ // else if (s.type() == fs::regular_file) { os << "regular_file"; }
+ // else if (s.type() == fs::directory_file) { os << "directory_file"; }
+ // else if (s.type() == fs::symlink_file) { os << "symlink_file"; }
+ // else if (s.type() == fs::block_file) { os << "block_file"; }
+ // else if (s.type() == fs::character_file) { os << "character_file"; }
+ // else if (s.type() == fs::fifo_file) { os << "fifo_file"; }
+ // else if (s.type() == fs::socket_file) { os << "socket_file"; }
+ // else if (s.type() == fs::reparse_file) { os << "reparse_file"; }
+ // else if (s.type() == fs::type_unknown) { os << "type_unknown"; }
+ // else { os << "_detail_directory_symlink"; }
+ // return os;
+ //}
+
+ //void dump_tree(const fs::path & root)
+ //{
+ // cout << "dumping tree rooted at " << root << endl;
+ // for (fs::recursive_directory_iterator it (root, fs::directory_options::follow_directory_symlink);
+ // it != fs::recursive_directory_iterator();
+ // ++it)
+ // {
+ // for (int i = 0; i <= it.level(); ++i)
+ // cout << " ";
+
+ // cout << it->path();
+ // if (fs::is_symlink(it->path()))
+ // {
+ // cout << " [symlink]" << endl;
+ // }
+ // else
+ // cout << endl;
+ // }
+ //}
+
+ // exception_tests() ---------------------------------------------------------------//
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 80000
+#pragma GCC diagnostic push
+// catching polymorphic type "X" by value - that's the intention of the test
+#pragma GCC diagnostic ignored "-Wcatch-value"
+#endif
+
+ void exception_tests()
+ {
+ cout << "exception_tests..." << endl;
+ bool exception_thrown;
+
+ // catch runtime_error by value
+
+ cout << " catch runtime_error by value" << endl;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory("no-such-dir/foo/bar");
+ }
+ catch (std::runtime_error x)
+ {
+ exception_thrown = true;
+ if (report_throws) cout << x.what() << endl;
+ if (platform == "Windows" && language_id == 0x0409) // English (United States)
+ // the stdcxx standard library apparently appends additional info
+ // to what(), so check only the initial portion:
+ BOOST_TEST(std::strncmp(x.what(),
+ "boost::filesystem::create_directory",
+ sizeof("boost::filesystem::create_directory")-1) == 0);
+ }
+ BOOST_TEST(exception_thrown);
+
+ // catch system_error by value
+
+ cout << " catch system_error by value" << endl;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory("no-such-dir/foo/bar");
+ }
+ catch (system_error x)
+ {
+ exception_thrown = true;
+ if (report_throws) cout << x.what() << endl;
+ if (platform == "Windows" && language_id == 0x0409) // English (United States)
+ BOOST_TEST(std::strcmp(x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified") == 0);
+ }
+ BOOST_TEST(exception_thrown);
+
+ // catch filesystem_error by value
+
+ cout << " catch filesystem_error by value" << endl;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory("no-such-dir/foo/bar");
+ }
+ catch (fs::filesystem_error x)
+ {
+ exception_thrown = true;
+ if (report_throws) cout << x.what() << endl;
+ if (platform == "Windows" && language_id == 0x0409) // English (United States)
+ {
+ bool ok (std::strcmp(x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0);
+ BOOST_TEST(ok);
+ if (!ok)
+ {
+ cout << "what returns \"" << x.what() << "\"" << endl;
+ }
+ }
+ }
+ BOOST_TEST(exception_thrown);
+
+ // catch filesystem_error by const reference
+
+ cout << " catch filesystem_error by const reference" << endl;
+ exception_thrown = false;
+ try
+ {
+ fs::create_directory("no-such-dir/foo/bar");
+ }
+ catch (const fs::filesystem_error& x)
+ {
+ exception_thrown = true;
+ if (report_throws) cout << x.what() << endl;
+ if (platform == "Windows" && language_id == 0x0409) // English (United States)
+ {
+ bool ok (std::strcmp(x.what(),
+ "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0);
+ BOOST_TEST(ok);
+ if (!ok)
+ {
+ cout << "what returns \"" << x.what() << "\"" << endl;
+ }
+ }
+ }
+ BOOST_TEST(exception_thrown);
+
+ // the bound functions should throw, so CHECK_EXCEPTION() should return true
+
+ BOOST_TEST(CHECK_EXCEPTION(bad_file_size, ENOENT));
+
+ if (platform == "Windows")
+ BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, ENOENT));
+ else
+ BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, 0));
+
+ // test path::exception members
+ try
+ {
+ fs::file_size(ng); // will throw
+ }
+ catch (fs::filesystem_error& ex)
+ {
+ BOOST_TEST(ex.path1().string() == " no-way, Jose");
+ }
+
+ cout << " exception_tests complete" << endl;
+ }
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 80000
+#pragma GCC diagnostic pop
+#endif
+
+ // create a directory tree that can be used by subsequent tests ---------------------//
+ //
+ // dir
+ // d1
+ // d1f1 // an empty file
+ // f0 // an empty file
+ // f1 // a file containing "file-f1"
+
+ void create_tree()
+ {
+ cout << "creating test directories and files in " << dir << endl;
+
+ // create directory d1
+ BOOST_TEST(!fs::create_directory(dir));
+ BOOST_TEST(!fs::is_symlink(dir));
+ BOOST_TEST(!fs::is_symlink("nosuchfileordirectory"));
+ d1 = dir / "d1";
+ BOOST_TEST(fs::create_directory(d1));
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(fs::is_directory(d1));
+ BOOST_TEST(fs::is_empty(d1));
+
+ // create an empty file named "d1f1"
+ d1f1 = d1 / "d1f1";
+ create_file(d1f1, "");
+ BOOST_TEST(fs::exists(d1f1));
+ BOOST_TEST(!fs::is_directory(d1f1));
+ BOOST_TEST(fs::is_regular_file(d1f1));
+ BOOST_TEST(fs::is_empty(d1f1));
+ BOOST_TEST(fs::file_size(d1f1) == 0);
+ BOOST_TEST(fs::hard_link_count(d1f1) == 1);
+
+ // create an empty file named "f0"
+ f0 = dir / "f0";
+ create_file(f0, "");
+ BOOST_TEST(fs::exists(f0));
+ BOOST_TEST(!fs::is_directory(f0));
+ BOOST_TEST(fs::is_regular_file(f0));
+ BOOST_TEST(fs::is_empty(f0));
+ BOOST_TEST(fs::file_size(f0) == 0);
+ BOOST_TEST(fs::hard_link_count(f0) == 1);
+
+ // create a file named "f1"
+ f1 = dir / "f1";
+ create_file(f1, "file-f1");
+ BOOST_TEST(fs::exists(f1));
+ BOOST_TEST(!fs::is_directory(f1));
+ BOOST_TEST(fs::is_regular_file(f1));
+ BOOST_TEST(fs::file_size(f1) == 7);
+ verify_file(f1, "file-f1");
+ }
+
+ // directory_iterator_tests --------------------------------------------------------//
+
+ void directory_iterator_tests()
+ {
+ cout << "directory_iterator_tests..." << endl;
+
+ bool dir_itr_exception(false);
+ try { fs::directory_iterator it(""); }
+ catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+ BOOST_TEST(dir_itr_exception);
+
+ error_code ec;
+
+ BOOST_TEST(!ec);
+ fs::directory_iterator it("", ec);
+ BOOST_TEST(ec);
+
+ dir_itr_exception = false;
+ try { fs::directory_iterator itx("nosuchdirectory"); }
+ catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+ BOOST_TEST(dir_itr_exception);
+
+ ec.clear();
+ fs::directory_iterator it2x("nosuchdirectory", ec);
+ BOOST_TEST(ec);
+
+ dir_itr_exception = false;
+ try
+ {
+ error_code ecx;
+ fs::directory_iterator itx("nosuchdirectory", ecx);
+ BOOST_TEST(ecx);
+ BOOST_TEST(ecx == boost::system::errc::no_such_file_or_directory);
+ }
+ catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+ BOOST_TEST(!dir_itr_exception);
+
+ // create a second directory named d2
+ d2 = dir / "d2";
+ fs::create_directory(d2);
+ BOOST_TEST(fs::exists(d2));
+ BOOST_TEST(fs::is_directory(d2));
+
+ // test the basic operation of directory_iterators, and test that
+ // stepping one iterator doesn't affect a different iterator.
+ {
+ typedef std::vector<fs::directory_entry> vec_type;
+ vec_type vec;
+
+ fs::directory_iterator it1(dir);
+ BOOST_TEST(it1 != fs::directory_iterator());
+ BOOST_TEST(fs::exists(it1->status()));
+ vec.push_back(*it1);
+ BOOST_TEST(*it1 == vec[0]);
+
+ fs::directory_iterator it2(dir);
+ BOOST_TEST(it2 != fs::directory_iterator());
+ BOOST_TEST(*it1 == *it2);
+
+ ++it1;
+ BOOST_TEST(it1 != fs::directory_iterator());
+ BOOST_TEST(fs::exists(it1->status()));
+ BOOST_TEST(it1 != it2);
+ BOOST_TEST(*it1 != vec[0]);
+ BOOST_TEST(*it2 == vec[0]);
+ vec.push_back(*it1);
+
+ ++it1;
+ BOOST_TEST(it1 != fs::directory_iterator());
+ BOOST_TEST(fs::exists(it1->status()));
+ BOOST_TEST(it1 != it2);
+ BOOST_TEST(*it2 == vec[0]);
+ vec.push_back(*it1);
+
+ ++it1;
+ BOOST_TEST(it1 != fs::directory_iterator());
+ BOOST_TEST(fs::exists(it1->status()));
+ BOOST_TEST(it1 != it2);
+ BOOST_TEST(*it2 == vec[0]);
+ vec.push_back(*it1);
+
+ ++it1;
+ BOOST_TEST(it1 == fs::directory_iterator());
+
+ BOOST_TEST(*it2 == vec[0]);
+ ec.clear();
+ it2.increment(ec);
+ BOOST_TEST(!ec);
+ BOOST_TEST(it2 != fs::directory_iterator());
+ BOOST_TEST(it1 == fs::directory_iterator());
+ BOOST_TEST(*it2 == vec[1]);
+ ++it2;
+ BOOST_TEST(*it2 == vec[2]);
+ BOOST_TEST(it1 == fs::directory_iterator());
+ ++it2;
+ BOOST_TEST(*it2 == vec[3]);
+ ++it2;
+ BOOST_TEST(it1 == fs::directory_iterator());
+ BOOST_TEST(it2 == fs::directory_iterator());
+
+ // sort vec and check that the right directory entries were found
+ std::sort(vec.begin(), vec.end());
+
+ BOOST_TEST_EQ(vec[0].path().filename().string(), std::string("d1"));
+ BOOST_TEST_EQ(vec[1].path().filename().string(), std::string("d2"));
+ BOOST_TEST_EQ(vec[2].path().filename().string(), std::string("f0"));
+ BOOST_TEST_EQ(vec[3].path().filename().string(), std::string("f1"));
+ }
+
+ { // *i++ must meet the standard's InputIterator requirements
+ fs::directory_iterator dir_itr(dir);
+ BOOST_TEST(dir_itr != fs::directory_iterator());
+ fs::path p = dir_itr->path();
+ BOOST_TEST((*dir_itr++).path() == p);
+ BOOST_TEST(dir_itr != fs::directory_iterator());
+ BOOST_TEST(dir_itr->path() != p);
+
+ // test case reported in comment to SourceForge bug tracker [937606]
+ // augmented to test single pass semantics of a copied iterator [#12578]
+ fs::directory_iterator itx(dir);
+ fs::directory_iterator itx2(itx);
+ BOOST_TEST(itx == itx2);
+ const fs::path p1 = (*itx++).path();
+ BOOST_TEST(itx == itx2);
+ BOOST_TEST(itx != fs::directory_iterator());
+ const fs::path p2 = (*itx++).path();
+ BOOST_TEST(itx == itx2);
+ BOOST_TEST(p1 != p2);
+ ++itx;
+ BOOST_TEST(itx == itx2);
+ ++itx;
+ BOOST_TEST(itx == itx2);
+ BOOST_TEST(itx == fs::directory_iterator());
+ BOOST_TEST(itx2 == fs::directory_iterator());
+ }
+
+ // Windows has a tricky special case when just the root-name is given,
+ // causing the rest of the path to default to the current directory.
+ // Reported as S/F bug [ 1259176 ]
+ if (platform == "Windows")
+ {
+ fs::path root_name_path(fs::current_path().root_name());
+ fs::directory_iterator itx(root_name_path);
+ BOOST_TEST(itx != fs::directory_iterator());
+// BOOST_TEST(fs::exists((*itx).path()));
+ BOOST_TEST(fs::exists(itx->path()));
+ BOOST_TEST(itx->path().parent_path() == root_name_path);
+ bool found(false);
+ do
+ {
+ if (itx->path().filename() == temp_dir.filename())
+ found = true;
+ } while (++itx != fs::directory_iterator());
+ BOOST_TEST(found);
+ }
+
+ // there was an inital bug in directory_iterator that caused premature
+ // close of an OS handle. This block will detect regression.
+ {
+ fs::directory_iterator di;
+ {
+ di = fs::directory_iterator(dir);
+ }
+ BOOST_TEST(++di != fs::directory_iterator());
+ }
+
+ cout << " directory_iterator_tests complete" << endl;
+ }
+
+ // recursive_directory_iterator_tests ----------------------------------------------//
+
+ int walk_tree(bool recursive)
+ {
+ //cout << " walk_tree" << endl;
+ error_code ec;
+ int d1f1_count = 0;
+ for (fs::recursive_directory_iterator it (dir,
+ recursive ? (fs::directory_options::follow_directory_symlink | fs::directory_options::skip_dangling_symlinks) : fs::directory_options::none);
+ it != fs::recursive_directory_iterator();
+ it.increment(ec))
+ {
+ //cout << " " << it->path() << " : " << ec << endl;
+ if (it->path().filename() == "d1f1")
+ ++d1f1_count;
+ }
+ //cout << " last error : " << ec << endl;
+ return d1f1_count;
+ }
+
+ void recursive_directory_iterator_tests()
+ {
+ cout << "recursive_directory_iterator_tests..." << endl;
+ BOOST_TEST_EQ(walk_tree(false), 1);
+ if (create_symlink_ok)
+ BOOST_TEST(walk_tree(true) > 1);
+
+ // test iterator increment with error_code argument
+ cout << " with error_code argument" << endl;
+ boost::system::error_code ec;
+ int d1f1_count = 0;
+ fs::recursive_directory_iterator it(dir, fs::directory_options::none);
+ fs::recursive_directory_iterator it2(it); // test single pass shallow copy semantics
+ for (;
+ it != fs::recursive_directory_iterator();
+ it.increment(ec))
+ {
+ if (it->path().filename() == "d1f1")
+ ++d1f1_count;
+ BOOST_TEST(it == it2); // verify single pass shallow copy semantics
+ }
+ BOOST_TEST(!ec);
+ BOOST_TEST_EQ(d1f1_count, 1);
+ BOOST_TEST(it == it2); // verify single pass shallow copy semantics
+
+ cout << " recursive_directory_iterator_tests complete" << endl;
+ }
+
+ // iterator_status_tests -----------------------------------------------------------//
+
+ void iterator_status_tests()
+ {
+ cout << "iterator_status_tests..." << endl;
+
+ error_code ec;
+ // harmless if these fail:
+ fs::create_symlink(dir/"f0", dir/"f0_symlink", ec);
+ fs::create_symlink(dir/"no such file", dir/"dangling_symlink", ec);
+ fs::create_directory_symlink(dir/"d1", dir/"d1_symlink", ec);
+ fs::create_directory_symlink(dir/"no such directory",
+ dir/"dangling_directory_symlink", ec);
+
+ for (fs::directory_iterator it(dir);
+ it != fs::directory_iterator(); ++it)
+ {
+ BOOST_TEST(fs::status(it->path()).type() == it->status().type());
+ BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type());
+ if (it->path().filename() == "d1")
+ {
+ BOOST_TEST(fs::is_directory(it->status()));
+ BOOST_TEST(fs::is_directory(it->symlink_status()));
+ }
+ else if (it->path().filename() == "d2")
+ {
+ BOOST_TEST(fs::is_directory(it->status()));
+ BOOST_TEST(fs::is_directory(it->symlink_status()));
+ }
+ else if (it->path().filename() == "f0")
+ {
+ BOOST_TEST(fs::is_regular_file(it->status()));
+ BOOST_TEST(fs::is_regular_file(it->symlink_status()));
+ }
+ else if (it->path().filename() == "f1")
+ {
+ BOOST_TEST(fs::is_regular_file(it->status()));
+ BOOST_TEST(fs::is_regular_file(it->symlink_status()));
+ }
+ else if (it->path().filename() == "f0_symlink")
+ {
+ BOOST_TEST(fs::is_regular_file(it->status()));
+ BOOST_TEST(fs::is_symlink(it->symlink_status()));
+ }
+ else if (it->path().filename() == "dangling_symlink")
+ {
+ BOOST_TEST(it->status().type() == fs::file_not_found);
+ BOOST_TEST(fs::is_symlink(it->symlink_status()));
+ }
+ else if (it->path().filename() == "d1_symlink")
+ {
+ BOOST_TEST(fs::is_directory(it->status()));
+ BOOST_TEST(fs::is_symlink(it->symlink_status()));
+ }
+ else if (it->path().filename() == "dangling_directory_symlink")
+ {
+ BOOST_TEST(it->status().type() == fs::file_not_found);
+ BOOST_TEST(fs::is_symlink(it->symlink_status()));
+ }
+ //else
+ // cout << " Note: unexpected directory entry " << it->path().filename() << endl;
+ }
+ }
+
+ // recursive_iterator_status_tests -------------------------------------------------//
+
+ void recursive_iterator_status_tests()
+ {
+ cout << "recursive_iterator_status_tests..." << endl;
+ for (fs::recursive_directory_iterator it (dir);
+ it != fs::recursive_directory_iterator();
+ ++it)
+ {
+ BOOST_TEST(fs::status(it->path()).type() == it->status().type());
+ BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type());
+ }
+ }
+
+ // create_hard_link_tests ----------------------------------------------------------//
+
+ void create_hard_link_tests()
+ {
+ cout << "create_hard_link_tests..." << endl;
+
+ fs::path from_ph(dir / "f3");
+ fs::path f1x(dir / "f1");
+
+ BOOST_TEST(!fs::exists(from_ph));
+ BOOST_TEST(fs::exists(f1x));
+ bool create_hard_link_ok(true);
+ try { fs::create_hard_link(f1x, from_ph); }
+ catch (const fs::filesystem_error & ex)
+ {
+ create_hard_link_ok = false;
+ cout
+ << " *** For information only ***\n"
+ " create_hard_link() attempt failed\n"
+ " filesystem_error.what() reports: " << ex.what() << "\n"
+ " create_hard_link() may not be supported on this file system\n";
+ }
+
+ if (create_hard_link_ok)
+ {
+ cout
+ << " *** For information only ***\n"
+ " create_hard_link() succeeded\n";
+ BOOST_TEST(fs::exists(from_ph));
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(fs::equivalent(from_ph, f1x));
+ BOOST_TEST(fs::hard_link_count(from_ph) == 2);
+ BOOST_TEST(fs::hard_link_count(f1x) == 2);
+ }
+
+ // Although tests may be running on a FAT or other file system that does
+ // not support hard links, that is unusual enough that it is considered
+ // a test failure.
+ BOOST_TEST(create_hard_link_ok);
+
+ error_code ec;
+ fs::create_hard_link(fs::path("doesnotexist"),
+ fs::path("shouldnotwork"), ec);
+ BOOST_TEST(ec);
+ }
+
+ // create_symlink_tests ------------------------------------------------------------//
+
+ void create_symlink_tests()
+ {
+ cout << "create_symlink_tests..." << endl;
+
+ fs::path from_ph(dir / "f4");
+ fs::path f1x(dir / "f1");
+ BOOST_TEST(!fs::exists(from_ph));
+ BOOST_TEST(fs::exists(f1x));
+ try { fs::create_symlink(f1x, from_ph); }
+ catch (const fs::filesystem_error & ex)
+ {
+ create_symlink_ok = false;
+ cout
+ << " *** For information only ***\n"
+ " create_symlink() attempt failed\n"
+ " filesystem_error.what() reports: " << ex.what() << "\n"
+ " create_symlink() may not be supported on this operating system or file system\n";
+ }
+
+ if (create_symlink_ok)
+ {
+ cout
+ << " *** For information only ***\n"
+ " create_symlink() succeeded\n";
+ BOOST_TEST(fs::exists(from_ph));
+ BOOST_TEST(fs::is_symlink(from_ph));
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(fs::equivalent(from_ph, f1x));
+ BOOST_TEST(fs::read_symlink(from_ph) == f1x);
+
+ fs::file_status stat = fs::symlink_status(from_ph);
+ BOOST_TEST(fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(!fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(fs::is_symlink(stat));
+
+ stat = fs::status(from_ph);
+ BOOST_TEST(fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(!fs::is_symlink(stat));
+
+ // since create_symlink worked, copy_symlink should also work
+ fs::path symlink2_ph(dir / "symlink2");
+ fs::copy_symlink(from_ph, symlink2_ph);
+ stat = fs::symlink_status(symlink2_ph);
+ BOOST_TEST(fs::is_symlink(stat));
+ BOOST_TEST(fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(!fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ }
+
+ error_code ec = error_code();
+ fs::create_symlink("doesnotexist", "", ec);
+ BOOST_TEST(ec);
+ }
+
+ // permissions_tests ---------------------------------------------------------------//
+
+ void permissions_tests()
+ {
+ cout << "permissions_tests..." << endl;
+
+ fs::path p(dir / "permissions.txt");
+ create_file(p);
+
+ if (platform == "POSIX")
+ {
+ cout << " fs::status(p).permissions() " << std::oct << fs::status(p).permissions()
+ << std::dec << endl;
+ BOOST_TEST((fs::status(p).permissions() & 0600) == 0600); // 0644, 0664 sometimes returned
+
+ fs::permissions(p, fs::owner_all);
+ BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+
+ fs::permissions(p, fs::add_perms | fs::group_all);
+ BOOST_TEST(fs::status(p).permissions() == (fs::owner_all | fs::group_all));
+
+ fs::permissions(p, fs::remove_perms | fs::group_all);
+ BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+
+ // some POSIX platforms cache permissions during directory iteration, some don't
+ // so test that iteration finds the correct permissions
+ for (fs::directory_iterator itr(dir); itr != fs::directory_iterator(); ++itr)
+ if (itr->path().filename() == fs::path("permissions.txt"))
+ BOOST_TEST(itr->status().permissions() == fs::owner_all);
+
+ if (create_symlink_ok) // only if symlinks supported
+ {
+ BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+ fs::path p2(dir / "permissions-symlink.txt");
+ fs::create_symlink(p, p2);
+ cout << std::oct;
+ cout << " status(p).permissions() " << fs::status(p).permissions() << endl;
+ cout << " status(p2).permissions() " << fs::status(p).permissions() << endl;
+ fs::permissions(p2, fs::add_perms | fs::others_read);
+ cout << " status(p).permissions(): " << fs::status(p).permissions() << endl;
+ cout << " status(p2).permissions(): " << fs::status(p2).permissions() << endl;
+ cout << std::dec;
+ }
+
+ }
+ else // Windows
+ {
+ BOOST_TEST(fs::status(p).permissions() == 0666);
+ fs::permissions(p, fs::remove_perms | fs::group_write);
+ BOOST_TEST(fs::status(p).permissions() == 0444);
+ fs::permissions(p, fs::add_perms | fs::group_write);
+ BOOST_TEST(fs::status(p).permissions() == 0666);
+ }
+ }
+
+ // rename_tests --------------------------------------------------------------------//
+
+ void rename_tests()
+ {
+ cout << "rename_tests..." << endl;
+
+ fs::path f1x(dir / "f1");
+ BOOST_TEST(fs::exists(f1x));
+
+ // error: rename a non-existent old file
+ BOOST_TEST(!fs::exists(d1 / "f99"));
+ BOOST_TEST(!fs::exists(d1 / "f98"));
+ renamer n1a(d1 / "f99", d1 / "f98");
+ BOOST_TEST(CHECK_EXCEPTION(n1a, ENOENT));
+ renamer n1b(fs::path(""), d1 / "f98");
+ BOOST_TEST(CHECK_EXCEPTION(n1b, ENOENT));
+
+ // error: rename an existing file to ""
+ renamer n2(f1x, "");
+ BOOST_TEST(CHECK_EXCEPTION(n2, ENOENT));
+
+ // rename an existing file to an existent file
+ create_file(dir / "ff1", "ff1");
+ create_file(dir / "ff2", "ff2");
+ fs::rename(dir / "ff2", dir / "ff1");
+ BOOST_TEST(fs::exists(dir / "ff1"));
+ verify_file(dir / "ff1", "ff2");
+ BOOST_TEST(!fs::exists(dir / "ff2"));
+
+ // rename an existing file to itself
+ BOOST_TEST(fs::exists(dir / "f1"));
+ fs::rename(dir / "f1", dir / "f1");
+ BOOST_TEST(fs::exists(dir / "f1"));
+
+ // error: rename an existing directory to an existing non-empty directory
+ BOOST_TEST(fs::exists(dir / "f1"));
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST,
+ // so we don't verify error type on the following test.
+ renamer n3b(dir, d1);
+ BOOST_TEST(CHECK_EXCEPTION(n3b, 0));
+
+ // error: move existing file to a nonexistent parent directory
+ BOOST_TEST(!fs::is_directory(dir / "f1"));
+ BOOST_TEST(!fs::exists(dir / "d3/f3"));
+ renamer n4a(dir / "f1", dir / "d3/f3");
+ BOOST_TEST(CHECK_EXCEPTION(n4a, ENOENT));
+
+ // rename existing file in same directory
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ BOOST_TEST(!fs::exists(d1 / "f50"));
+ fs::rename(d1 / "f2", d1 / "f50");
+ BOOST_TEST(!fs::exists(d1 / "f2"));
+ BOOST_TEST(fs::exists(d1 / "f50"));
+ fs::rename(d1 / "f50", d1 / "f2");
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ BOOST_TEST(!fs::exists(d1 / "f50"));
+
+ // move and rename an existing file to a different directory
+ fs::rename(d1 / "f2", d2 / "f3");
+ BOOST_TEST(!fs::exists(d1 / "f2"));
+ BOOST_TEST(!fs::exists(d2 / "f2"));
+ BOOST_TEST(fs::exists(d2 / "f3"));
+ BOOST_TEST(!fs::is_directory(d2 / "f3"));
+ verify_file(d2 / "f3", "file-f1");
+ fs::rename(d2 / "f3", d1 / "f2");
+ BOOST_TEST(fs::exists(d1 / "f2"));
+
+ // error: move existing directory to nonexistent parent directory
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(!fs::exists(dir / "d3/d5"));
+ BOOST_TEST(!fs::exists(dir / "d3"));
+ renamer n5a(d1, dir / "d3/d5");
+ BOOST_TEST(CHECK_EXCEPTION(n5a, ENOENT));
+
+ // rename existing directory
+ fs::path d3(dir / "d3");
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ BOOST_TEST(!fs::exists(d3));
+ fs::rename(d1, d3);
+ BOOST_TEST(!fs::exists(d1));
+ BOOST_TEST(fs::exists(d3));
+ BOOST_TEST(fs::is_directory(d3));
+ BOOST_TEST(!fs::exists(d1 / "f2"));
+ BOOST_TEST(fs::exists(d3 / "f2"));
+ fs::rename(d3, d1);
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ BOOST_TEST(!fs::exists(d3));
+
+ // rename and move d1 to d2 / "d20"
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(!fs::exists(d2 / "d20"));
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ fs::rename(d1, d2 / "d20");
+ BOOST_TEST(!fs::exists(d1));
+ BOOST_TEST(fs::exists(d2 / "d20"));
+ BOOST_TEST(fs::exists(d2 / "d20" / "f2"));
+ fs::rename(d2 / "d20", d1);
+ BOOST_TEST(fs::exists(d1));
+ BOOST_TEST(!fs::exists(d2 / "d20"));
+ BOOST_TEST(fs::exists(d1 / "f2"));
+ }
+
+ // predicate_and_status_tests ------------------------------------------------------//
+
+ void predicate_and_status_tests()
+ {
+ cout << "predicate_and_status_tests..." << endl;
+
+ BOOST_TEST(!fs::exists(ng));
+ BOOST_TEST(!fs::is_directory(ng));
+ BOOST_TEST(!fs::is_regular_file(ng));
+ BOOST_TEST(!fs::is_symlink(ng));
+ fs::file_status stat(fs::status(ng));
+ BOOST_TEST(fs::type_present(stat));
+ BOOST_TEST(fs::permissions_present(stat));
+ BOOST_TEST(fs::status_known(stat));
+ BOOST_TEST(!fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(!fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(!fs::is_symlink(stat));
+ stat = fs::status("");
+ BOOST_TEST(fs::type_present(stat));
+ BOOST_TEST(fs::permissions_present(stat));
+ BOOST_TEST(fs::status_known(stat));
+ BOOST_TEST(!fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(!fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(!fs::is_symlink(stat));
+ }
+
+ // create_directory_tests ----------------------------------------------------------//
+
+ void create_directory_tests()
+ {
+ cout << "create_directory_tests..." << endl;
+
+ error_code ec;
+ BOOST_TEST(!fs::create_directory("", ec));
+ BOOST_TEST(ec);
+
+#ifdef BOOST_WINDOWS_API
+ ec.clear();
+ BOOST_TEST(!fs::create_directory(" ", ec)); // OK on Linux
+ BOOST_TEST(ec);
+#endif
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directory("/", ec));
+ BOOST_TEST(!ec);
+ BOOST_TEST(fs::is_directory("/")); // this is a post-condition
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directory(".", ec));
+ BOOST_TEST(!ec);
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directory("..", ec));
+ BOOST_TEST(!ec);
+
+ // create a directory, then check it for consistency
+ // take extra care to report problems, since if this fails
+ // many subsequent tests will fail
+ try
+ {
+ fs::create_directory(dir);
+ }
+
+ catch (const fs::filesystem_error & x)
+ {
+ cout << x.what() << "\n\n"
+ "***** Creating directory " << dir << " failed. *****\n"
+ "***** This is a serious error that will prevent further tests *****\n"
+ "***** from returning useful results. Further testing is aborted. *****\n\n";
+ std::exit(1);
+ }
+
+ catch (...)
+ {
+ cout << "\n\n"
+ "***** Creating directory " << dir << " failed. *****\n"
+ "***** This is a serious error that will prevent further tests *****\n"
+ "***** from returning useful results. Further testing is aborted. *****\n\n";
+ std::exit(1);
+ }
+
+ BOOST_TEST(fs::exists(dir));
+ BOOST_TEST(fs::is_empty(dir));
+ BOOST_TEST(fs::is_directory(dir));
+ BOOST_TEST(!fs::is_regular_file(dir));
+ BOOST_TEST(!fs::is_other(dir));
+ BOOST_TEST(!fs::is_symlink(dir));
+ fs::file_status stat = fs::status(dir);
+ BOOST_TEST(fs::exists(stat));
+ BOOST_TEST(fs::is_directory(stat));
+ BOOST_TEST(!fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(!fs::is_symlink(stat));
+
+ cout << " create_directory_tests complete" << endl;
+ }
+
+ // current_directory_tests ---------------------------------------------------------//
+
+ void current_directory_tests()
+ {
+ cout << "current_directory_tests..." << endl;
+
+ // set the current directory, then check it for consistency
+ fs::path original_dir = fs::current_path();
+ BOOST_TEST(dir != original_dir);
+ fs::current_path(dir);
+ BOOST_TEST(fs::current_path() == dir);
+ BOOST_TEST(fs::current_path() != original_dir);
+ fs::current_path(original_dir);
+ BOOST_TEST(fs::current_path() == original_dir);
+ BOOST_TEST(fs::current_path() != dir);
+
+ // make sure the overloads work
+ fs::current_path(dir.c_str());
+ BOOST_TEST(fs::current_path() == dir);
+ BOOST_TEST(fs::current_path() != original_dir);
+ fs::current_path(original_dir.string());
+ BOOST_TEST(fs::current_path() == original_dir);
+ BOOST_TEST(fs::current_path() != dir);
+ }
+
+ // create_directories_tests --------------------------------------------------------//
+
+ void create_directories_tests()
+ {
+ cout << "create_directories_tests..." << endl;
+
+ error_code ec;
+ BOOST_TEST(!fs::create_directories("", ec));
+ BOOST_TEST(ec);
+
+#ifdef BOOST_WINDOWS_API
+ // Windows only test, since " " is OK on Linux as a directory name
+ ec.clear();
+ BOOST_TEST(!fs::create_directories(" ", ec));
+ BOOST_TEST(ec);
+#endif
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directories("/", ec));
+ BOOST_TEST(!ec);
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directories(".", ec));
+ BOOST_TEST(ec);
+
+ ec.clear();
+ BOOST_TEST(!fs::create_directories("..", ec));
+ BOOST_TEST(ec);
+
+#ifdef BOOST_POSIX_API
+ ec.clear();
+ BOOST_TEST(!fs::create_directories("/foo", ec)); // may be OK on Windows
+ // but unlikely to be OK on POSIX
+ BOOST_TEST(ec);
+#endif
+
+ fs::path p = dir / "level1/." / "level2/./.." / "level3/";
+ // trailing "/.", "/./..", and "/" in the above elements test ticket #7258 and
+ // related issues
+
+ cout << " p is " << p << endl;
+ BOOST_TEST(!fs::exists(p));
+ BOOST_TEST(fs::create_directories(p));
+ BOOST_TEST(fs::exists(p));
+ BOOST_TEST(fs::is_directory(p));
+
+ if (fs::exists("/permissions_test"))
+ {
+ BOOST_TEST(!fs::create_directories("/permissions_test", ec));
+ BOOST_TEST(!fs::create_directories("/permissions_test/another_directory", ec));
+ BOOST_TEST(ec);
+ }
+ }
+
+ // resize_file_tests ---------------------------------------------------------------//
+
+ void resize_file_tests()
+ {
+ cout << "resize_file_tests..." << endl;
+
+ fs::path p(dir / "resize_file_test.txt");
+
+ fs::remove(p);
+ create_file(p, "1234567890");
+
+ BOOST_TEST(fs::exists(p));
+ BOOST_TEST_EQ(fs::file_size(p), 10U);
+ fs::resize_file(p, 5);
+ BOOST_TEST(fs::exists(p));
+ BOOST_TEST_EQ(fs::file_size(p), 5U);
+ fs::resize_file(p, 15);
+ BOOST_TEST(fs::exists(p));
+ BOOST_TEST_EQ(fs::file_size(p), 15U);
+
+ error_code ec;
+ fs::resize_file("no such file", 15, ec);
+ BOOST_TEST(ec);
+ }
+
+ // status_of_nonexistent_tests -----------------------------------------------------//
+
+ void status_of_nonexistent_tests()
+ {
+ cout << "status_of_nonexistent_tests..." << endl;
+ fs::path p ("nosuch");
+ BOOST_TEST(!fs::exists(p));
+ BOOST_TEST(!fs::is_regular_file(p));
+ BOOST_TEST(!fs::is_directory(p));
+ BOOST_TEST(!fs::is_symlink(p));
+ BOOST_TEST(!fs::is_other(p));
+
+ fs::file_status s = fs::status(p);
+ BOOST_TEST(!fs::exists(s));
+ BOOST_TEST_EQ(s.type(), fs::file_not_found);
+ BOOST_TEST(fs::type_present(s));
+ BOOST_TEST(!fs::is_regular_file(s));
+ BOOST_TEST(!fs::is_directory(s));
+ BOOST_TEST(!fs::is_symlink(s));
+ BOOST_TEST(!fs::is_other(s));
+
+ // ticket #12574 was just user confusion, but are the tests are worth keeping
+ error_code ec;
+ BOOST_TEST(!fs::is_directory(dir / "no-such-directory", ec));
+ BOOST_TEST(ec);
+ //cout << "error_code value: " << ec.value() << endl;
+ ec.clear();
+ BOOST_TEST(!fs::is_directory(dir / "no-such-directory" / "bar", ec));
+ BOOST_TEST(ec);
+ //cout << "error_code value: " << ec.value() << endl;
+ }
+
+ // status_error_reporting_tests ----------------------------------------------------//
+
+ void status_error_reporting_tests()
+ {
+ cout << "status_error_reporting_tests..." << endl;
+
+ error_code ec;
+
+ // test status, ec, for existing file
+ ec.assign(-1,poison_category());
+ BOOST_TEST(ec.value() == -1);
+ BOOST_TEST(&ec.category() == &poison_category());
+ fs::file_status s = fs::status(".",ec);
+ BOOST_TEST(ec.value() == 0);
+ BOOST_TEST(ec.category() == system_category());
+ BOOST_TEST(fs::exists(s));
+ BOOST_TEST(fs::is_directory(s));
+
+ // test status, ec, for non-existing file
+ fs::path p ("nosuch");
+ ec.assign(-1,poison_category());
+ s = fs::status(p,ec);
+ BOOST_TEST(ec.value() != 0);
+ BOOST_TEST(ec.category() == system_category());
+
+ BOOST_TEST(!fs::exists(s));
+ BOOST_TEST_EQ(s.type(), fs::file_not_found);
+ BOOST_TEST(fs::type_present(s));
+ BOOST_TEST(!fs::is_regular_file(s));
+ BOOST_TEST(!fs::is_directory(s));
+ BOOST_TEST(!fs::is_symlink(s));
+ BOOST_TEST(!fs::is_other(s));
+
+ // test queries, ec, for existing file
+ ec.assign(-1,poison_category());
+ BOOST_TEST(fs::exists(".", ec));
+ BOOST_TEST(ec.value() == 0);
+ BOOST_TEST(ec.category() == system_category());
+ ec.assign(-1,poison_category());
+ BOOST_TEST(!fs::is_regular_file(".", ec));
+ BOOST_TEST(ec.value() == 0);
+ BOOST_TEST(ec.category() == system_category());
+ ec.assign(-1,poison_category());
+ BOOST_TEST(fs::is_directory(".", ec));
+ BOOST_TEST(ec.value() == 0);
+ BOOST_TEST(ec.category() == system_category());
+
+ // test queries, ec, for non-existing file
+ ec.assign(-1,poison_category());
+ BOOST_TEST(!fs::exists(p, ec));
+ BOOST_TEST(ec.value() != 0);
+ BOOST_TEST(ec.category() == system_category());
+ ec.assign(-1,poison_category());
+ BOOST_TEST(!fs::is_regular_file(p, ec));
+ BOOST_TEST(ec.value() != 0);
+ BOOST_TEST(ec.category() == system_category());
+ ec.assign(-1,poison_category());
+ BOOST_TEST(!fs::is_directory(p, ec));
+ BOOST_TEST(ec.value() != 0);
+ BOOST_TEST(ec.category() == system_category());
+ }
+
+ // remove_tests --------------------------------------------------------------------//
+
+ void remove_tests(const fs::path& dirx)
+ {
+ cout << "remove_tests..." << endl;
+
+ // remove() file
+ fs::path f1x = dirx / "shortlife";
+ BOOST_TEST(!fs::exists(f1x));
+ create_file(f1x, "");
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(!fs::is_directory(f1x));
+ BOOST_TEST(fs::remove(f1x));
+ BOOST_TEST(!fs::exists(f1x));
+ BOOST_TEST(!fs::remove("no-such-file"));
+ BOOST_TEST(!fs::remove("no-such-directory/no-such-file"));
+
+ // remove() directory
+ fs::path d1x = dirx / "shortlife_dir";
+ BOOST_TEST(!fs::exists(d1x));
+ fs::create_directory(d1x);
+ BOOST_TEST(fs::exists(d1x));
+ BOOST_TEST(fs::is_directory(d1x));
+ BOOST_TEST(fs::is_empty(d1x));
+ bad_remove_dir = dirx;
+ BOOST_TEST(CHECK_EXCEPTION(bad_remove, ENOTEMPTY));
+ BOOST_TEST(fs::remove(d1x));
+ BOOST_TEST(!fs::exists(d1x));
+ }
+
+ // remove_symlink_tests ------------------------------------------------------------//
+
+ void remove_symlink_tests()
+ {
+ cout << "remove_symlink_tests..." << endl;
+
+ // remove() dangling symbolic link
+ fs::path link("dangling_link");
+ fs::remove(link); // remove any residue from past tests
+ BOOST_TEST(!fs::is_symlink(link));
+ BOOST_TEST(!fs::exists(link));
+ fs::create_symlink("nowhere", link);
+ BOOST_TEST(!fs::exists(link));
+ BOOST_TEST(fs::is_symlink(link));
+ BOOST_TEST(fs::remove(link));
+ BOOST_TEST(!fs::is_symlink(link));
+
+ // remove() self-refering symbolic link
+ link = "link_to_self";
+ fs::remove(link); // remove any residue from past tests
+ BOOST_TEST(!fs::is_symlink(link));
+ BOOST_TEST(!fs::exists(link));
+ fs::create_symlink(link, link);
+ BOOST_TEST(fs::remove(link));
+ BOOST_TEST(!fs::exists(link));
+ BOOST_TEST(!fs::is_symlink(link));
+
+ // remove() cyclic symbolic link
+ link = "link_to_a";
+ fs::path link2("link_to_b");
+ fs::remove(link); // remove any residue from past tests
+ fs::remove(link2); // remove any residue from past tests
+ BOOST_TEST(!fs::is_symlink(link));
+ BOOST_TEST(!fs::exists(link));
+ fs::create_symlink(link, link2);
+ fs::create_symlink(link2, link);
+ BOOST_TEST(fs::remove(link));
+ BOOST_TEST(fs::remove(link2));
+ BOOST_TEST(!fs::exists(link));
+ BOOST_TEST(!fs::exists(link2));
+ BOOST_TEST(!fs::is_symlink(link));
+
+ // remove() symbolic link to file
+ fs::path f1x = "link_target";
+ fs::remove(f1x); // remove any residue from past tests
+ BOOST_TEST(!fs::exists(f1x));
+ create_file(f1x, "");
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(!fs::is_directory(f1x));
+ BOOST_TEST(fs::is_regular_file(f1x));
+ link = "non_dangling_link";
+ fs::create_symlink(f1x, link);
+ BOOST_TEST(fs::exists(link));
+ BOOST_TEST(!fs::is_directory(link));
+ BOOST_TEST(fs::is_regular_file(link));
+ BOOST_TEST(fs::is_symlink(link));
+ BOOST_TEST(fs::remove(link));
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(!fs::exists(link));
+ BOOST_TEST(!fs::is_symlink(link));
+ BOOST_TEST(fs::remove(f1x));
+ BOOST_TEST(!fs::exists(f1x));
+ }
+
+ // absolute_tests -----------------------------------------------------------------//
+
+ void absolute_tests()
+ {
+ cout << "absolute_tests..." << endl;
+
+ BOOST_TEST_EQ(fs::absolute(""), fs::current_path() );
+ BOOST_TEST_EQ(fs::absolute("", ""), fs::current_path() );
+ BOOST_TEST_EQ(fs::absolute(fs::current_path() / "foo/bar"), fs::current_path() / "foo/bar");
+ BOOST_TEST_EQ(fs::absolute("foo"), fs::current_path() / "foo");
+ BOOST_TEST_EQ(fs::absolute("foo", fs::current_path()), fs::current_path() / "foo");
+ BOOST_TEST_EQ(fs::absolute("bar", "foo"), fs::current_path() / "foo" / "bar");
+ BOOST_TEST_EQ(fs::absolute("/foo"), fs::current_path().root_path().string() + "foo");
+
+# ifdef BOOST_WINDOWS_API
+ BOOST_TEST_EQ(fs::absolute("a:foo", "b:/bar"), "a:/bar/foo");
+# endif
+
+ // these tests were moved from elsewhere, so may duplicate some of the above tests
+
+ // p.empty()
+ BOOST_TEST_EQ(fs::absolute(fs::path(), "//foo/bar"), "//foo/bar");
+ if (platform == "Windows")
+ {
+ BOOST_TEST_EQ(fs::absolute(fs::path(), "a:/bar"), "a:/bar");
+ }
+
+ // p.has_root_name()
+ // p.has_root_directory()
+ BOOST_TEST_EQ(fs::absolute(fs::path("//foo/bar"), "//uvw/xyz"), "//foo/bar");
+ if (platform == "Windows")
+ {
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:/bar"), "b:/xyz"), "a:/bar");
+ }
+ // !p.has_root_directory()
+ BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/"), "//net/");
+ BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc"), "//net/abc");
+ BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc/def"), "//net/abc/def");
+ if (platform == "Windows")
+ {
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:"), "b:/"), "a:/");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc"), "a:/abc");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc/def"), "a:/abc/def");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/"), "a:/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc"), "a:/abc/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc/def"), "a:/abc/def/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/"), "a:/foo/bar");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc"), "a:/abc/foo/bar");
+ BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc/def"), "a:/abc/def/foo/bar");
+ }
+ // !p.has_root_name()
+ // p.has_root_directory()
+ BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/"), "//xyz/");
+ BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/abc"), "//xyz/");
+ BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/"), "//xyz/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/abc"), "//xyz/foo");
+ // !p.has_root_directory()
+ BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "//xyz/abc"), "//xyz/abc/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "//xyz/abc"), "//xyz/abc/foo/bar");
+ BOOST_TEST_EQ(fs::absolute(fs::path("."), "//xyz/abc"), "//xyz/abc/.");
+ BOOST_TEST_EQ(fs::absolute(fs::path(".."), "//xyz/abc"), "//xyz/abc/..");
+ BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "//xyz/abc"), "//xyz/abc/./foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "//xyz/abc"), "//xyz/abc/../foo");
+ if (platform == "POSIX")
+ {
+ BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "/abc"), "/abc/foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "/abc"), "/abc/foo/bar");
+ BOOST_TEST_EQ(fs::absolute(fs::path("."), "/abc"), "/abc/.");
+ BOOST_TEST_EQ(fs::absolute(fs::path(".."), "/abc"), "/abc/..");
+ BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "/abc"), "/abc/./foo");
+ BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "/abc"), "/abc/../foo");
+ }
+
+ }
+
+ // canonical_basic_tests -----------------------------------------------------------//
+
+ void canonical_basic_tests()
+ {
+ cout << "canonical_basic_tests..." << endl;
+
+ // error handling
+ error_code ec;
+ ec.clear();
+ fs::canonical("no-such-file", ec);
+ BOOST_TEST(ec);
+ ec.clear();
+ fs::canonical("no-such-file", "x", ec);
+ BOOST_TEST(ec);
+ bool ok(false);
+ try { fs::canonical("no-such-file"); }
+ catch (const fs::filesystem_error&) { ok = true; }
+ BOOST_TEST(ok);
+
+ // non-symlink tests; also see canonical_symlink_tests()
+ BOOST_TEST_EQ(fs::canonical(""), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical("", fs::current_path()), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical("", ""), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical(fs::current_path()), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical(fs::current_path(), ""), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical(fs::current_path(), "no-such-file"), fs::current_path());
+
+ BOOST_TEST_EQ(fs::canonical("."), fs::current_path());
+ BOOST_TEST_EQ(fs::canonical(".."), fs::current_path().parent_path());
+ BOOST_TEST_EQ(fs::canonical("/"), fs::current_path().root_path());
+
+ fs::path relative_dir(dir.filename());
+ BOOST_TEST_EQ(fs::canonical(dir), dir);
+ BOOST_TEST_EQ(fs::canonical(relative_dir), dir);
+ BOOST_TEST_EQ(fs::canonical(dir / "f0"), dir / "f0");
+ BOOST_TEST_EQ(fs::canonical(relative_dir / "f0"), dir / "f0");
+ BOOST_TEST_EQ(fs::canonical(relative_dir / "./f0"), dir / "f0");
+ BOOST_TEST_EQ(fs::canonical(relative_dir / "d1/../f0"), dir / "f0");
+
+ // treat parent of root as itself on both POSIX and Windows
+ fs::path init(fs::initial_path());
+ fs::path root(init.root_path());
+ fs::path::const_iterator it(init.begin());
+ fs::path first; // relative first non-root directory
+# ifdef BOOST_WINDOWS_API
+ if (!init.empty())
+ ++it;
+# endif
+ if (++it != init.end())
+ first = *it;
+ fs::path expected(root/first);
+
+ cout << " init: " << init << endl;
+ cout << " root: " << root << endl;
+ cout << " first: " << first << endl;
+ cout << " expected: " << expected << endl;
+
+ // ticket 10187 tests
+ BOOST_TEST_EQ(fs::canonical(root / "../.." / first), expected);
+ BOOST_TEST_EQ(fs::canonical(fs::path("../..") / first, root), expected);
+ BOOST_TEST_EQ(fs::canonical(fs::path("/../..") / first, fs::current_path().root_name()), expected);
+
+ // ticket 9683 test
+ BOOST_TEST_EQ(fs::canonical(root / first / "../../../../.."), root);
+ }
+
+ // canonical_symlink_tests -----------------------------------------------------------//
+
+ void canonical_symlink_tests()
+ {
+ cout << "canonical_symlink_tests..." << endl;
+
+ fs::path relative_dir(dir.filename());
+ BOOST_TEST_EQ(fs::canonical(dir / "sym-d1/f2"), d1 / "f2");
+ BOOST_TEST_EQ(fs::canonical(relative_dir / "sym-d1/f2"), d1 / "f2");
+ }
+
+ // copy_file_tests ------------------------------------------------------------------//
+
+ void copy_file_tests(const fs::path& f1x, const fs::path& d1x)
+ {
+ cout << "copy_file_tests..." << endl;
+
+ BOOST_TEST(fs::exists(f1x));
+ fs::remove(d1x / "f2"); // remove possible residue from prior testing
+ BOOST_TEST(fs::exists(d1x));
+ BOOST_TEST(!fs::exists(d1x / "f2"));
+ cout << " copy " << f1x << " to " << d1x / "f2" << endl;
+ fs::copy_file(f1x, d1x / "f2");
+ cout << " copy complete" << endl;
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(fs::exists(d1x / "f2"));
+ BOOST_TEST(!fs::is_directory(d1x / "f2"));
+ verify_file(d1x / "f2", "file-f1");
+
+ bool copy_ex_ok = false;
+ try { fs::copy_file(f1x, d1x / "f2"); }
+ catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+ BOOST_TEST(copy_ex_ok);
+
+ copy_ex_ok = false;
+ try { fs::copy_file(f1x, d1x / "f2", fs::copy_option::fail_if_exists); }
+ catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+ BOOST_TEST(copy_ex_ok);
+
+ create_file(d1x / "f2", "1234567890");
+ BOOST_TEST_EQ(fs::file_size(d1x / "f2"), 10U);
+ copy_ex_ok = true;
+ try { fs::copy_file(f1x, d1x / "f2", fs::copy_option::overwrite_if_exists); }
+ catch (const fs::filesystem_error &) { copy_ex_ok = false; }
+ BOOST_TEST(copy_ex_ok);
+ BOOST_TEST_EQ(fs::file_size(d1x / "f2"), 7U);
+ verify_file(d1x / "f2", "file-f1");
+ }
+
+ // symlink_status_tests -------------------------------------------------------------//
+
+ void symlink_status_tests()
+ {
+ cout << "symlink_status_tests..." << endl;
+
+ boost::system::error_code ec;
+
+ fs::path dangling_sym(dir / "dangling-sym");
+ fs::path dangling_directory_sym(dir / "dangling-directory-sym");
+ fs::path sym_d1(dir / "sym-d1");
+ fs::path symsym_d1(dir / "symsym-d1");
+ fs::path sym_f1(dir / "sym-f1");
+ fs::path symsym_f1(dir / "symsym-f1");
+ fs::create_symlink("does not exist", dangling_sym);
+ fs::create_directory_symlink("does not exist", dangling_directory_sym);
+ fs::create_directory_symlink(d1, sym_d1);
+ fs::create_directory_symlink(sym_d1, symsym_d1);
+ fs::create_symlink(f1, sym_f1);
+ fs::create_symlink(sym_f1, symsym_f1);
+
+ // verify all cases detected as symlinks
+ BOOST_TEST_EQ(fs::symlink_status(dangling_sym, ec).type(), fs::symlink_file);
+ BOOST_TEST_EQ(fs::symlink_status(dangling_directory_sym, ec).type(), fs::symlink_file);
+ BOOST_TEST_EQ(fs::symlink_status(sym_d1, ec).type(), fs::symlink_file);
+ BOOST_TEST_EQ(fs::symlink_status(symsym_d1, ec).type(), fs::symlink_file);
+ BOOST_TEST_EQ(fs::symlink_status(sym_f1, ec).type(), fs::symlink_file);
+ BOOST_TEST_EQ(fs::symlink_status(symsym_f1, ec).type(), fs::symlink_file);
+
+ // verify all cases resolve to the (possibly recursive) symlink target
+ BOOST_TEST_EQ(fs::status(dangling_sym, ec).type(), fs::file_not_found);
+ BOOST_TEST_EQ(fs::status(dangling_directory_sym, ec).type(), fs::file_not_found);
+
+ BOOST_TEST_EQ(fs::status(sym_d1, ec).type(), fs::directory_file);
+ BOOST_TEST_EQ(fs::status(sym_d1 / "d1f1", ec).type(), fs::regular_file);
+ BOOST_TEST_EQ(fs::status(symsym_d1, ec).type(), fs::directory_file);
+ BOOST_TEST_EQ(fs::status(symsym_d1 / "d1f1", ec).type(), fs::regular_file);
+ BOOST_TEST_EQ(fs::status(sym_f1, ec).type(), fs::regular_file);
+ BOOST_TEST_EQ(fs::status(symsym_f1, ec).type(), fs::regular_file);
+
+#ifdef BOOST_WINDOWS_API
+
+ // On Windows, telling if a filesystem entry is a symlink (or junction which is
+ // treated as a symlink), rather than some other kind of reparse point, requires some
+ // baroque code. See ticket #4663, filesystem objects falsely identified as symlinks.
+ // This test checks two directory entries created by Windows itself to verify
+ // is_symlink() works correctly. Try "dir /A %HOMEPATH%\.." from the command line to
+ // verify this test is valid on your version of Windows. It only works on Vista and
+ // later.
+
+ fs::path users(getenv("HOMEDRIVE"));
+ BOOST_TEST(!users.empty());
+ users /= "\\Users";
+ BOOST_TEST(fs::exists(users));
+ BOOST_TEST(fs::exists(users/"All Users"));
+ BOOST_TEST(fs::exists(users/"Default User"));
+ BOOST_TEST(fs::is_symlink(users/"All Users")); // dir /A reports <SYMLINKD>
+ BOOST_TEST(fs::is_symlink(users/"Default User")); // dir /A reports <JUNCTION>
+
+#endif
+ }
+
+ // copy_symlink_tests ---------------------------------------------------------------//
+
+ void copy_symlink_tests(const fs::path& f1x, const fs::path& d1x)
+ {
+ cout << "copy_symlink_tests..." << endl;
+
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(fs::exists(d1x));
+ fs::path sym1(d1x / "symlink1");
+ fs::remove(sym1); // remove possible residue from prior testing
+ fs::create_symlink(f1x, sym1);
+ BOOST_TEST(fs::exists(sym1));
+ BOOST_TEST(fs::is_symlink(sym1));
+ fs::path sym2(d1x / "symlink2");
+ fs::copy_symlink(sym1, sym2);
+ BOOST_TEST(fs::exists(sym2));
+ BOOST_TEST(fs::is_symlink(sym2));
+ //fs::path sym3(d1x / "symlink3");
+ //fs::copy(sym1, sym3);
+ //BOOST_TEST(fs::exists(sym3));
+ //BOOST_TEST(fs::is_symlink(sym3));
+
+ bool copy_ex_ok = false;
+ try { fs::copy_symlink("no-such-file", "new-symlink1"); }
+ catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+ BOOST_TEST(copy_ex_ok);
+
+ copy_ex_ok = false;
+ try { fs::copy_symlink(f1x, "new-symlink2"); } // should fail; f1x not symlink
+ catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+ BOOST_TEST(copy_ex_ok);
+ }
+
+ // write_time_tests ----------------------------------------------------------------//
+
+ void write_time_tests(const fs::path& dirx)
+ {
+ cout << "write_time_tests..." << endl;
+
+ fs::path f1x = dirx / "foobar2";
+ create_file(f1x, "foobar2");
+ BOOST_TEST(fs::exists(f1x));
+ BOOST_TEST(!fs::is_directory(f1x));
+ BOOST_TEST(fs::is_regular_file(f1x));
+ BOOST_TEST(fs::file_size(f1x) == 7);
+ verify_file(f1x, "foobar2");
+
+ // Some file system report last write time as local (FAT), while
+ // others (NTFS) report it as UTC. The C standard does not specify
+ // if time_t is local or UTC.
+
+ std::time_t ft = fs::last_write_time(f1x);
+ cout << "\n UTC last_write_time() for a file just created is "
+ << std::asctime(std::gmtime(&ft)) << endl;
+
+ std::tm * tmp = std::localtime(&ft);
+ cout << "\n Year is " << tmp->tm_year << endl;
+ --tmp->tm_year;
+ cout << " Change year to " << tmp->tm_year << endl;
+ fs::last_write_time(f1x, std::mktime(tmp));
+ std::time_t ft2 = fs::last_write_time(f1x);
+ cout << " last_write_time() for the file is now "
+ << std::asctime(std::gmtime(&ft2)) << endl;
+ BOOST_TEST(ft != fs::last_write_time(f1x));
+
+ cout << "\n Reset to current time" << endl;
+ fs::last_write_time(f1x, ft);
+ double time_diff = std::difftime(ft, fs::last_write_time(f1x));
+ cout
+ << " original last_write_time() - current last_write_time() is "
+ << time_diff << " seconds" << endl;
+ BOOST_TEST(time_diff >= -60.0 && time_diff <= 60.0);
+ }
+
+ // platform_specific_tests ---------------------------------------------------------//
+
+ void platform_specific_tests()
+ {
+ // Windows only tests
+ if (platform == "Windows")
+ {
+ cout << "Windows specific tests..." << endl;
+ if (!skip_long_windows_tests)
+ {
+ cout << " (may take several seconds)"<< endl;
+
+ BOOST_TEST(!fs::exists(fs::path("//share-not")));
+ BOOST_TEST(!fs::exists(fs::path("//share-not/")));
+ BOOST_TEST(!fs::exists(fs::path("//share-not/foo")));
+ }
+ cout << endl;
+
+ BOOST_TEST(!fs::exists("tools/jam/src/:sys:stat.h")); // !exists() if ERROR_INVALID_NAME
+ BOOST_TEST(!fs::exists(":sys:stat.h")); // !exists() if ERROR_INVALID_PARAMETER
+ BOOST_TEST(dir.string().size() > 1
+ && dir.string()[1] == ':'); // verify path includes drive
+
+ BOOST_TEST(fs::system_complete("").empty());
+ BOOST_TEST(fs::system_complete("/") == fs::initial_path().root_path());
+ BOOST_TEST(fs::system_complete("foo")
+ == fs::initial_path() / "foo");
+
+ fs::path p1(fs::system_complete("/foo"));
+ BOOST_TEST_EQ(p1.string().size(), 6U); // this failed during v3 development due to bug
+ std::string s1(p1.string() );
+ std::string s2(fs::initial_path().root_path().string()+"foo");
+ BOOST_TEST_EQ(s1, s2);
+
+ BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name()))
+ == fs::initial_path());
+ BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name().string()
+ + "foo")).string() == fs::initial_path() / "foo");
+ BOOST_TEST(fs::system_complete(fs::path("c:/")).generic_string()
+ == "c:/");
+ BOOST_TEST(fs::system_complete(fs::path("c:/foo")).generic_string()
+ == "c:/foo");
+ BOOST_TEST(fs::system_complete(fs::path("//share")).generic_string()
+ == "//share");
+
+ // Issue 9016 asked that NTFS directory junctions be recognized as directories.
+ // That is equivalent to recognizing them as symlinks, and then the normal symlink
+ // mechanism takes care of recognizing them as directories.
+ //
+ // Directory junctions are very similar to symlinks, but have some performance
+ // and other advantages over symlinks. They can be created from the command line
+ // with "mklink /j junction-name target-path".
+
+ if (create_symlink_ok) // only if symlinks supported
+ {
+ cout << " directory junction tests..." << endl;
+ BOOST_TEST(fs::exists(dir));
+ BOOST_TEST(fs::exists(dir / "d1/d1f1"));
+ fs::path junc(dir / "junc");
+ if (fs::exists(junc))
+ fs::remove(junc);
+ fs::path new_junc(dir / "new-junc");
+ if (fs::exists(new_junc))
+ fs::remove(new_junc);
+
+ //cout << " dir is " << dir << endl;
+ //cout << " junc is " << junc << endl;
+ //cout << " new_junc is " << new_junc << endl;
+ //cout << " current_path() is " << fs::current_path() << endl;
+
+ fs::path cur_path(fs::current_path());
+ fs::current_path(dir);
+ //cout << " current_path() is " << fs::current_path() << endl;
+ BOOST_TEST(std::system("mklink /j junc d1") == 0);
+ //std::system("dir");
+ fs::current_path(cur_path);
+ //cout << " current_path() is " << fs::current_path() << endl;
+
+ BOOST_TEST(fs::exists(junc));
+ BOOST_TEST(fs::is_symlink(junc));
+ BOOST_TEST(fs::is_directory(junc));
+ BOOST_TEST(!fs::is_regular_file(junc));
+ BOOST_TEST(fs::exists(junc / "d1f1"));
+ BOOST_TEST(fs::is_regular_file(junc / "d1f1"));
+
+ int count = 0;
+ for (fs::directory_iterator itr(junc);
+ itr != fs::directory_iterator(); ++itr)
+ {
+ //cout << itr->path() << endl;
+ ++count;
+ }
+ cout << " iteration count is " << count << endl;
+ BOOST_TEST(count > 0);
+
+ fs::rename(junc, new_junc);
+ BOOST_TEST(!fs::exists(junc));
+ BOOST_TEST(fs::exists(new_junc));
+ BOOST_TEST(fs::is_symlink(new_junc));
+ BOOST_TEST(fs::is_directory(new_junc));
+ BOOST_TEST(!fs::is_regular_file(new_junc));
+ BOOST_TEST(fs::exists(new_junc / "d1f1"));
+ BOOST_TEST(fs::is_regular_file(new_junc / "d1f1"));
+
+ fs::remove(new_junc);
+ BOOST_TEST(!fs::exists(new_junc / "d1f1"));
+ BOOST_TEST(!fs::exists(new_junc));
+ BOOST_TEST(fs::exists(dir));
+ BOOST_TEST(fs::exists(dir / "d1/d1f1"));
+ }
+
+ } // Windows
+
+ else if (platform == "POSIX")
+ {
+ cout << "POSIX specific tests..." << endl;
+ BOOST_TEST(fs::system_complete("").empty());
+ BOOST_TEST(fs::initial_path().root_path().string() == "/");
+ BOOST_TEST(fs::system_complete("/").string() == "/");
+ BOOST_TEST(fs::system_complete("foo").string()
+ == fs::initial_path().string()+"/foo");
+ BOOST_TEST(fs::system_complete("/foo").string()
+ == fs::initial_path().root_path().string()+"foo");
+ } // POSIX
+ }
+
+ // initial_tests -------------------------------------------------------------------//
+
+ void initial_tests()
+ {
+ cout << "initial_tests..." << endl;
+
+ cout << " current_path().string() is\n \""
+ << fs::initial_path().string()
+ << "\"\n\n";
+ BOOST_TEST(fs::initial_path() == fs::current_path());
+ BOOST_TEST(fs::initial_path().is_absolute());
+ BOOST_TEST(fs::current_path().is_absolute());
+ BOOST_TEST(fs::initial_path().string()
+ == fs::current_path().string());
+ }
+
+ // space_tests ---------------------------------------------------------------------//
+
+ void space_tests()
+ {
+ cout << "space_tests..." << endl;
+
+ // make some reasonable assuptions for testing purposes
+ fs::space_info spi(fs::space(dir));
+ BOOST_TEST(spi.capacity > 1000000);
+ BOOST_TEST(spi.free > 1000);
+ BOOST_TEST(spi.capacity > spi.free);
+ BOOST_TEST(spi.free >= spi.available);
+
+ // it is convenient to display space, but older VC++ versions choke
+# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
+ cout << " capacity = " << spi.capacity << '\n';
+ cout << " free = " << spi.free << '\n';
+ cout << " available = " << spi.available << '\n';
+# endif
+ }
+
+ // equivalent_tests ----------------------------------------------------------------//
+
+ void equivalent_tests(const fs::path& f1x)
+ {
+ cout << "equivalent_tests..." << endl;
+
+ BOOST_TEST(CHECK_EXCEPTION(bad_equivalent, ENOENT));
+ BOOST_TEST(fs::equivalent(f1x, dir / "f1"));
+ BOOST_TEST(fs::equivalent(dir, d1 / ".."));
+ BOOST_TEST(!fs::equivalent(f1x, dir));
+ BOOST_TEST(!fs::equivalent(dir, f1x));
+ BOOST_TEST(!fs::equivalent(d1, d2));
+ BOOST_TEST(!fs::equivalent(dir, ng));
+ BOOST_TEST(!fs::equivalent(ng, dir));
+ BOOST_TEST(!fs::equivalent(f1x, ng));
+ BOOST_TEST(!fs::equivalent(ng, f1x));
+ }
+
+ // temp_directory_path_tests -------------------------------------------------------//
+ // contributed by Jeff Flinn
+
+ struct guarded_env_var
+ {
+ struct previous_value
+ {
+ std::string m_name;
+ std::string m_string;
+ bool m_empty;
+
+ previous_value(const char* name)
+ : m_name(name)
+ , m_empty (true)
+ {
+ if(const char* value = getenv(name))
+ {
+ m_string.assign(value);
+ m_empty = false;
+ }
+ else
+ {
+ m_empty = true;
+ }
+ }
+ ~previous_value()
+ {
+ m_empty? unsetenv_(m_name.c_str())
+ : setenv_(m_name.c_str(), m_string.c_str(), 1);
+ }
+ };
+
+ previous_value m_previous_value;
+
+ guarded_env_var(const char* name, const char* value)
+ : m_previous_value(name)
+ {
+// std::cout << name << " old value is \"" << getenv(name) << "\"" << std::endl;
+ value ? setenv_(name, value, 1) : unsetenv_(name);
+// std::cout << name << " new value is \"" << getenv(name) << "\"" << std::endl;
+ }
+ };
+
+ void temp_directory_path_tests()
+ {
+ {
+ cout << "temp_directory_path_tests..." << endl;
+ cout << " temp_directory_path() is " << fs::temp_directory_path() << endl;
+
+#if defined(BOOST_WINDOWS_API)
+
+//**************************************************************************************//
+// Bug in GCC 4.9 getenv() when !defined(__GXX_EXPERIMENTAL_CXX0X__) makes these
+// tests meaningless, so skip them
+//**************************************************************************************//
+
+#if defined(__CYGWIN__) && !defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ == 4
+ cout << "Bug in GCC 4.9 getenv() when !defined(__GXX_EXPERIMENTAL_CXX0X__) makes these"
+ "tests meaningless, so skip them" << endl;
+ return;
+#endif
+ // Test ticket #5300, temp_directory_path failure on Windows with path length > 130.
+ // (This test failed prior to the fix being applied.)
+ {
+ const wchar_t long_name[] =
+ L"12345678901234567890123456789012345678901234567890"
+ L"12345678901234567890123456789012345678901234567890"
+ L"12345678901234567890123456789012345678901234567890#" // total 151 chars
+ ;
+ fs::path p (temp_dir);
+ p /= long_name;
+ fs::create_directory(p);
+
+ guarded_env_var tmp_guard("TMP", p.string().c_str());
+ error_code ec;
+ fs::path tmp_path = fs::temp_directory_path(ec);
+ BOOST_TEST(!ec);
+ BOOST_TEST_EQ(p, tmp_path);
+ fs::remove(p);
+ }
+
+ // Test ticket #10388, null character at end of filesystem::temp_directory_path path
+ {
+ guarded_env_var tmp_guard("TMP", fs::initial_path().string().c_str());
+
+ error_code ec;
+ fs::path tmp_path = fs::temp_directory_path(ec);
+ BOOST_TEST_EQ(tmp_path, fs::initial_path());
+ }
+
+#endif
+ BOOST_TEST(!fs::temp_directory_path().empty());
+ BOOST_TEST(exists(fs::temp_directory_path()));
+ fs::path ph = fs::temp_directory_path() / fs::unique_path("temp_directory_path_test_%%%%_%%%%.txt");
+ {
+ if(exists(ph)) remove(ph);
+ std::ofstream f(ph.BOOST_FILESYSTEM_C_STR);
+ f << "passed";
+ }
+ BOOST_TEST(exists(ph));
+ {
+ std::ifstream f(ph.BOOST_FILESYSTEM_C_STR);
+ std::string s;
+ f >> s;
+ BOOST_TEST(s == "passed");
+ }
+ remove(ph);
+ BOOST_TEST(!exists(ph));
+ }
+
+ fs::path test_temp_dir = temp_dir;
+
+#if defined(BOOST_POSIX_API)
+ {
+ struct guarded_tmp_vars
+ {
+ guarded_env_var m_tmpdir ;
+ guarded_env_var m_tmp ;
+ guarded_env_var m_temp ;
+ guarded_env_var m_tempdir;
+
+ guarded_tmp_vars
+ ( const fs::path::value_type* tmpdir
+ , const fs::path::value_type* tmp
+ , const fs::path::value_type* temp
+ , const fs::path::value_type* tempdir
+ )
+ : m_tmpdir ("TMPDIR" , tmpdir )
+ , m_tmp ("TMP" , tmp )
+ , m_temp ("TEMP" , temp )
+ , m_tempdir("TEMPDIR", tempdir)
+ {}
+ };
+
+ {
+ guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0, 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+ {
+ guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0, 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+ {
+ guarded_tmp_vars vars(0, 0, test_temp_dir.c_str(), 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+ {
+ guarded_tmp_vars vars(0, 0, 0, test_temp_dir.c_str());
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+ }
+#endif
+
+#if defined(BOOST_WINDOWS_API)
+
+ struct guarded_tmp_vars
+ {
+ guarded_env_var m_tmp ;
+ guarded_env_var m_temp ;
+ guarded_env_var m_localappdata;
+ guarded_env_var m_userprofile;
+
+ guarded_tmp_vars
+ ( const char* tmp
+ , const char* temp
+ , const char* localappdata
+ , const char* userprofile
+ )
+ : m_tmp ("TMP" , tmp )
+ , m_temp ("TEMP" , temp )
+ , m_localappdata ("LOCALAPPDATA" , localappdata)
+ , m_userprofile ("USERPROFILE" , userprofile )
+ {}
+ };
+
+ // test the GetWindowsDirectoryW()/Temp fallback
+ {
+ guarded_tmp_vars vars(0, 0, 0, 0);
+ error_code ec;
+ fs::path ph = fs::temp_directory_path(ec);
+ BOOST_TEST(!ec);
+ cout << "Fallback test, temp_directory_path() returned " << ph << endl;
+ }
+
+ {
+ guarded_tmp_vars vars(test_temp_dir.string().c_str(), 0, 0, 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+ {
+ guarded_tmp_vars vars(0, test_temp_dir.string().c_str(), 0, 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir, ph));
+ }
+
+ fs::create_directory(test_temp_dir / L"Temp");
+ {
+ guarded_tmp_vars vars(0, 0, test_temp_dir.string().c_str(), 0);
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir/L"Temp", ph));
+ cout << "temp_directory_path() returned " << ph << endl;
+ }
+ {
+ guarded_tmp_vars vars(0, 0, 0, test_temp_dir.string().c_str());
+ fs::path ph = fs::temp_directory_path();
+ BOOST_TEST(equivalent(test_temp_dir/L"Temp", ph));
+ cout << "temp_directory_path() returned " << ph << endl;
+ }
+#endif
+ }
+
+ // weakly_canonical_tests ----------------------------------------------------------//
+
+ void weakly_canonical_tests()
+ {
+ cout << "weakly_canonical_tests..." << endl;
+ cout << " dir is " << dir << endl;
+
+ BOOST_TEST_EQ(fs::weakly_canonical("no-such/foo/bar"), "no-such/foo/bar");
+ BOOST_TEST_EQ(fs::weakly_canonical("no-such/foo/../bar"), "no-such/bar");
+ BOOST_TEST_EQ(fs::weakly_canonical(dir), dir);
+ BOOST_TEST_EQ(fs::weakly_canonical(dir/"no-such/foo/bar"), dir/"no-such/foo/bar");
+ BOOST_TEST_EQ(fs::weakly_canonical(dir/"no-such/foo/../bar"), dir/"no-such/bar");
+ BOOST_TEST_EQ(fs::weakly_canonical(dir/"../no-such/foo/../bar"),
+ dir.parent_path()/"no-such/bar");
+ BOOST_TEST_EQ(fs::weakly_canonical("c:/no-such/foo/bar"), "c:/no-such/foo/bar");
+
+ fs::create_directory_symlink(dir / "d1", dir / "sld1");
+ BOOST_TEST_EQ(fs::weakly_canonical(dir / "sld1/foo/bar"), dir / "d1/foo/bar");
+
+ BOOST_TEST_EQ(relative(dir / "sld1/foo/bar/baz", dir / "d1/foo"), "bar/baz");
+ }
+
+ // _tests --------------------------------------------------------------------------//
+
+ //void _tests()
+ //{
+ // cout << "_tests..." << endl;
+ //}
+
+} // unnamed namespace
+
+ //------------------------------------------------------------------------------------//
+ // //
+ // main //
+ // //
+ //------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+ cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+
+ for (; argc > 1; --argc, ++argv)
+ {
+ if (*argv[1]=='-' && *(argv[1]+1)=='t')
+ report_throws = true;
+ else if (*argv[1]=='-' && *(argv[1]+1)=='x')
+ cleanup = false;
+ else if (*argv[1]=='-' && *(argv[1]+1)=='w')
+ skip_long_windows_tests = true;
+ }
+
+ // The choice of platform to test is made at runtime rather than compile-time
+ // so that compile errors for all platforms will be detected even though
+ // only the current platform is runtime tested.
+# if defined(BOOST_POSIX_API)
+ platform = "POSIX";
+# elif defined(BOOST_WINDOWS_API)
+ platform = "Windows";
+ language_id = ::GetUserDefaultUILanguage();
+# else
+# error neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp
+# endif
+ cout << "API is " << platform << endl;
+ cout << "initial_path() is " << fs::initial_path() << endl;
+ fs::path ip = fs::initial_path();
+ do_the_right_thing_tests(); // compile-only tests, but call anyhow to suppress warnings
+
+ for (fs::path::const_iterator it = ip.begin(); it != ip.end(); ++it)
+ {
+ if (it != ip.begin())
+ cout << ", ";
+ cout << *it;
+ }
+ cout << endl;
+
+ dir = fs::initial_path() / temp_dir;
+
+ if (fs::exists(dir))
+ {
+ cout << "remove residue from prior failed tests..." << endl;
+ fs::remove_all(dir);
+ }
+ BOOST_TEST(!fs::exists(dir));
+
+ // several functions give unreasonable results if uintmax_t isn't 64-bits
+ cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n';
+ BOOST_TEST(sizeof(boost::uintmax_t) >= 8);
+
+ initial_tests();
+ predicate_and_status_tests();
+ exception_tests();
+ create_directory_tests();
+ current_directory_tests();
+ space_tests();
+
+ // create a directory tree that can be used by subsequent tests
+ //
+ // dir
+ // d1
+ // d1f1 // an empty file
+ // f0 // an empty file
+ // f1 // a file containing "file f1"
+ //
+ create_tree();
+
+ status_of_nonexistent_tests();
+ status_error_reporting_tests();
+ directory_iterator_tests();
+ create_directories_tests(); // must run AFTER directory_iterator_tests
+
+ bad_create_directory_path = f1;
+ BOOST_TEST(CHECK_EXCEPTION(bad_create_directory, EEXIST));
+ fs::file_status stat = fs::status(f1);
+ BOOST_TEST(fs::status_known(stat));
+ BOOST_TEST(fs::exists(stat));
+ BOOST_TEST(!fs::is_directory(stat));
+ BOOST_TEST(fs::is_regular_file(stat));
+ BOOST_TEST(!fs::is_other(stat));
+ BOOST_TEST(!fs::is_symlink(stat));
+
+ equivalent_tests(f1);
+ create_hard_link_tests();
+ create_symlink_tests();
+ resize_file_tests();
+ absolute_tests();
+ canonical_basic_tests();
+ permissions_tests();
+ copy_file_tests(f1, d1);
+ if (create_symlink_ok) // only if symlinks supported
+ {
+ symlink_status_tests();
+ copy_symlink_tests(f1, d1);
+ canonical_symlink_tests();
+ weakly_canonical_tests();
+ }
+ iterator_status_tests(); // lots of cases by now, so a good time to test
+// dump_tree(dir);
+ recursive_directory_iterator_tests();
+ recursive_iterator_status_tests(); // lots of cases by now, so a good time to test
+ rename_tests();
+ remove_tests(dir);
+ if (create_symlink_ok) // only if symlinks supported
+ remove_symlink_tests();
+ write_time_tests(dir);
+ temp_directory_path_tests();
+
+ platform_specific_tests(); // do these last since they take a lot of time on Windows,
+ // and that's a pain during manual testing
+
+ cout << "testing complete" << endl;
+
+ // post-test cleanup
+ if (cleanup)
+ {
+ cout << "post-test removal of " << dir << endl;
+ BOOST_TEST(fs::remove_all(dir) != 0);
+ // above was added just to simplify testing, but it ended up detecting
+ // a bug (failure to close an internal search handle).
+ cout << "post-test removal complete" << endl;
+// BOOST_TEST(!fs::exists(dir)); // nice test, but doesn't play well with TortoiseGit cache
+ }
+
+ cout << "returning from main()" << endl;
+ return ::boost::report_errors();
+} // main
diff --git a/src/boost/libs/filesystem/test/operations_unit_test.cpp b/src/boost/libs/filesystem/test/operations_unit_test.cpp
new file mode 100644
index 000000000..a537e1887
--- /dev/null
+++ b/src/boost/libs/filesystem/test/operations_unit_test.cpp
@@ -0,0 +1,402 @@
+// operations_unit_test.cpp ----------------------------------------------------------//
+
+// Copyright Beman Dawes 2008, 2009, 2015
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+// ------------------------------------------------------------------------------------//
+
+// This program is misnamed - it is really a smoke test rather than a unit test
+
+// ------------------------------------------------------------------------------------//
+
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem.hpp> // make sure filesystem.hpp works
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/system/error_code.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <iostream>
+
+using namespace boost::filesystem;
+using namespace boost::system;
+using std::cout;
+using std::endl;
+using std::string;
+
+#define CHECK(x) check(x, __FILE__, __LINE__)
+
+namespace
+{
+ bool cleanup = true;
+
+ void check(bool ok, const char* file, int line)
+ {
+ if (ok) return;
+
+ ++::boost::detail::test_errors();
+
+ cout << file << '(' << line << "): test failed\n";
+ }
+
+ // file_status_test ----------------------------------------------------------------//
+
+ void file_status_test()
+ {
+ cout << "file_status test..." << endl;
+
+ file_status s = status(".");
+ int v = s.permissions();
+ cout << " status(\".\") permissions are "
+ << std::oct << (v & 0777) << std::dec << endl;
+ CHECK((v & 0400) == 0400);
+
+ s = symlink_status(".");
+ v = s.permissions();
+ cout << " symlink_status(\".\") permissions are "
+ << std::oct << (v & 0777) << std::dec << endl;
+ CHECK((v & 0400) == 0400);
+ }
+
+ // query_test ----------------------------------------------------------------------//
+
+ void query_test()
+ {
+ cout << "query test..." << endl;
+
+ error_code ec;
+
+ CHECK(file_size("no-such-file", ec) == static_cast<boost::uintmax_t>(-1));
+ CHECK(ec == errc::no_such_file_or_directory);
+
+ CHECK(status("no-such-file") == file_status(file_not_found, no_perms));
+
+ CHECK(exists("/"));
+ CHECK(is_directory("/"));
+ CHECK(!exists("no-such-file"));
+
+ exists("/", ec);
+ if (ec)
+ {
+ cout << "exists(\"/\", ec) resulted in non-zero ec.value()" << endl;
+ cout << "ec value: " << ec.value() << ", message: "<< ec.message() << endl;
+ }
+ CHECK(!ec);
+
+ CHECK(exists("/"));
+ CHECK(is_directory("/"));
+ CHECK(!is_regular_file("/"));
+ CHECK(!boost::filesystem::is_empty("/"));
+ CHECK(!is_other("/"));
+ }
+
+ // directory_iterator_test -----------------------------------------------//
+
+ void directory_iterator_test()
+ {
+ cout << "directory_iterator_test..." << endl;
+
+ directory_iterator end;
+
+ directory_iterator it(".");
+
+ CHECK(!it->path().empty());
+
+ if (is_regular_file(it->status()))
+ {
+ CHECK(is_regular_file(it->symlink_status()));
+ CHECK(!is_directory(it->status()));
+ CHECK(!is_symlink(it->status()));
+ CHECK(!is_directory(it->symlink_status()));
+ CHECK(!is_symlink(it->symlink_status()));
+ }
+ else
+ {
+ CHECK(is_directory(it->status()));
+ CHECK(is_directory(it->symlink_status()));
+ CHECK(!is_regular_file(it->status()));
+ CHECK(!is_regular_file(it->symlink_status()));
+ CHECK(!is_symlink(it->status()));
+ CHECK(!is_symlink(it->symlink_status()));
+ }
+
+ for (; it != end; ++it)
+ {
+ //cout << " " << it->path() << "\n";
+ }
+
+ CHECK(directory_iterator(".") != directory_iterator());
+ CHECK(directory_iterator() == end);
+
+#ifndef BOOST_NO_CXX11_RANGE_BASED_FOR
+ for (directory_entry& x : directory_iterator("."))
+ {
+ CHECK(!x.path().empty());
+ //cout << " " << x.path() << "\n";
+ }
+ const directory_iterator dir_itr(".");
+ for (directory_entry& x : dir_itr)
+ {
+ CHECK(!x.path().empty());
+ //cout << " " << x.path() << "\n";
+ }
+#endif
+
+ for (directory_iterator itr("."); itr != directory_iterator(); ++itr)
+ {
+ CHECK(!itr->path().empty());
+ //cout << " " << itr->path() << "\n";
+ }
+
+ cout << "directory_iterator_test complete" << endl;
+ }
+
+ // recursive_directory_iterator_test -----------------------------------------------//
+
+ void recursive_directory_iterator_test()
+ {
+ cout << "recursive_directory_iterator_test..." << endl;
+
+ recursive_directory_iterator end;
+
+ recursive_directory_iterator it(".");
+
+ CHECK(!it->path().empty());
+
+ if (is_regular_file(it->status()))
+ {
+ CHECK(is_regular_file(it->symlink_status()));
+ CHECK(!is_directory(it->status()));
+ CHECK(!is_symlink(it->status()));
+ CHECK(!is_directory(it->symlink_status()));
+ CHECK(!is_symlink(it->symlink_status()));
+ }
+ else
+ {
+ CHECK(is_directory(it->status()));
+ CHECK(is_directory(it->symlink_status()));
+ CHECK(!is_regular_file(it->status()));
+ CHECK(!is_regular_file(it->symlink_status()));
+ CHECK(!is_symlink(it->status()));
+ CHECK(!is_symlink(it->symlink_status()));
+ }
+
+ for (; it != end; ++it)
+ {
+ //cout << " " << it->path() << "\n";
+ }
+
+ CHECK(recursive_directory_iterator(".") != recursive_directory_iterator());
+ CHECK(recursive_directory_iterator() == end);
+
+#ifndef BOOST_NO_CXX11_RANGE_BASED_FOR
+ for (directory_entry& x : recursive_directory_iterator("."))
+ {
+ CHECK(!x.path().empty());
+ //cout << " " << x.path() << "\n";
+ }
+ const recursive_directory_iterator dir_itr(".");
+ for (directory_entry& x : dir_itr)
+ {
+ CHECK(!x.path().empty());
+ //cout << " " << x.path() << "\n";
+ }
+#endif
+
+ for (recursive_directory_iterator itr(".");
+ itr != recursive_directory_iterator(); ++itr)
+ {
+ CHECK(!itr->path().empty());
+ //cout << " " << itr->path() << "\n";
+ }
+
+ cout << "recursive_directory_iterator_test complete" << endl;
+ }
+
+ // operations_test -------------------------------------------------------//
+
+ void operations_test()
+ {
+ cout << "operations test..." << endl;
+
+ error_code ec;
+
+ CHECK(!create_directory("/", ec));
+
+ CHECK(!boost::filesystem::remove("no-such-file-or-directory"));
+ CHECK(!remove_all("no-such-file-or-directory"));
+
+ space_info info = space("/");
+
+ CHECK(info.available <= info.capacity);
+
+ CHECK(equivalent("/", "/"));
+ CHECK(!equivalent("/", "."));
+
+ std::time_t ft = last_write_time(".");
+ ft = -1;
+ last_write_time(".", ft, ec);
+ }
+
+ // directory_entry_test ------------------------------------------------------------//
+
+ void directory_entry_test()
+ {
+ cout << "directory_entry test..." << endl;
+
+ directory_entry de("foo.bar",
+ file_status(regular_file, owner_all), file_status(directory_file, group_all));
+
+ CHECK(de.path() == "foo.bar");
+ CHECK(de.status() == file_status(regular_file, owner_all));
+ CHECK(de.symlink_status() == file_status(directory_file, group_all));
+ CHECK(de < directory_entry("goo.bar"));
+ CHECK(de == directory_entry("foo.bar"));
+ CHECK(de != directory_entry("goo.bar"));
+ de.replace_filename("bar.foo");
+ CHECK(de.path() == "bar.foo");
+ }
+
+ // directory_entry_overload_test ---------------------------------------------------//
+
+ void directory_entry_overload_test()
+ {
+ cout << "directory_entry overload test..." << endl;
+
+ directory_iterator it(".");
+ path p(*it);
+ }
+
+ // error_handling_test -------------------------------------------------------------//
+
+ void error_handling_test()
+ {
+ cout << "error handling test..." << endl;
+
+ bool threw(false);
+ try
+ {
+ file_size("no-such-file");
+ }
+ catch (const boost::filesystem::filesystem_error & ex)
+ {
+ threw = true;
+ cout << "\nas expected, attempt to get size of non-existent file threw a filesystem_error\n"
+ "what() returns " << ex.what() << "\n";
+ }
+ catch (...)
+ {
+ cout << "\nunexpected exception type caught" << endl;
+ }
+
+ CHECK(threw);
+
+ error_code ec;
+ CHECK(!create_directory("/", ec));
+ }
+
+ // string_file_tests ---------------------------------------------------------------//
+
+ void string_file_tests(const path& temp_dir)
+ {
+ cout << "string_file_tests..." << endl;
+ std::string contents("0123456789");
+ path p(temp_dir / "string_file");
+ save_string_file(p, contents);
+ save_string_file(p, contents);
+ BOOST_TEST_EQ(file_size(p), 10u);
+ std::string round_trip;
+ load_string_file(p, round_trip);
+ BOOST_TEST_EQ(contents, round_trip);
+ }
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// //
+// main //
+// //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+ cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+ cout << "BOOST_FILESYSTEM_DECL" << BOOST_STRINGIZE(=BOOST_FILESYSTEM_DECL) << "\n";
+ cout << "BOOST_SYMBOL_VISIBLE" << BOOST_STRINGIZE(=BOOST_SYMBOL_VISIBLE) << "\n";
+
+ cout << "current_path() is " << current_path().string() << endl;
+
+ if (argc >= 2)
+ {
+ cout << "argv[1] is '" << argv[1] << "', changing current_path() to it" << endl;
+
+ error_code ec;
+ current_path( argv[1], ec );
+
+ if (ec)
+ {
+ cout << "current_path('" << argv[1] << "') failed: " << ec << ": " << ec.message() << endl;
+ }
+
+ cout << "current_path() is " << current_path().string() << endl;
+ }
+
+ const path temp_dir(current_path() / ".." / unique_path("op-unit_test-%%%%-%%%%-%%%%"));
+ cout << "temp_dir is " << temp_dir.string() << endl;
+
+ create_directory(temp_dir);
+
+ file_status_test();
+ query_test();
+ directory_iterator_test();
+ recursive_directory_iterator_test();
+ operations_test();
+ directory_entry_test();
+ directory_entry_overload_test();
+ error_handling_test();
+ string_file_tests(temp_dir);
+
+ cout << unique_path() << endl;
+ cout << unique_path("foo-%%%%%-%%%%%-bar") << endl;
+ cout << unique_path("foo-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%-bar") << endl;
+ cout << unique_path("foo-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-bar") << endl;
+
+ cout << "testing complete" << endl;
+
+ // post-test cleanup
+ if (cleanup)
+ {
+ cout << "post-test removal of " << temp_dir << endl;
+ BOOST_TEST(remove_all(temp_dir) != 0);
+ // above was added just to simplify testing, but it ended up detecting
+ // a bug (failure to close an internal search handle).
+ cout << "post-test removal complete" << endl;
+// BOOST_TEST(!fs::exists(dir)); // nice test, but doesn't play well with TortoiseGit cache
+ }
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/path_test.cpp b/src/boost/libs/filesystem/test/path_test.cpp
new file mode 100644
index 000000000..f96d0cfee
--- /dev/null
+++ b/src/boost/libs/filesystem/test/path_test.cpp
@@ -0,0 +1,2046 @@
+// path_test program -----------------------------------------------------------------//
+
+// Copyright Beman Dawes 2002, 2008
+// Copyright Vladimir Prus 2002
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+// basic_path's stem(), extension(), and replace_extension() tests are based
+// on basename(), extension(), and change_extension() tests from the original
+// convenience_test.cpp by Vladimir Prus.
+
+//--------------------------------------------------------------------------------------//
+// //
+// Caution //
+// //
+// The class path relational operators (==, !=, <, etc.) on Windows treat slash and //
+// backslash as equal. Thus any tests on Windows where the difference between slash //
+// and backslash is significant should compare strings rather than paths. //
+// //
+// BOOST_TEST(path == path) // '\\' and '/' are equal //
+// BOOST_TEST(path == convertable to string) // '\\' and '/' are equal //
+// PATH_TEST_EQ(path, path) // '\\' and '/' are equal //
+// //
+// BOOST_TEST(path.string() == path.string()) // '\\' and '/' are not equal //
+// BOOST_TEST(path.string() == //
+// convertable to string) // '\\' and '/' are not equal //
+// PATH_TEST_EQ(path.string(), //
+// convertable to string) // '\\' and '/' are not equal //
+// //
+// The last of these is often what is needed, so the PATH_TEST_EQ macro is provided. //
+// It converts its first argument to a path, and then performs a .string() on it, //
+// eliminating much boilerplate .string() or even path(...).string() code. //
+// //
+// PATH_TEST_EQ(path, convertable to string) // '\\' and '/' are not equal //
+// //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/exception.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/utility.hpp>
+#include <boost/next_prior.hpp>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <cstring>
+#include <cassert>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = boost::filesystem;
+using boost::filesystem::path;
+using boost::next;
+using boost::prior;
+
+#ifdef BOOST_WINDOWS_API
+# define BOOST_DIR_SEP "\\"
+#else
+# define BOOST_DIR_SEP "/"
+#endif
+
+#define PATH_TEST_EQ(a, b) check(a, b, __FILE__, __LINE__)
+
+namespace
+{
+ std::string platform(BOOST_PLATFORM);
+
+ void check(const fs::path & source,
+ const std::string & expected, const char* file, int line)
+ {
+ if (source.string() == expected)
+ return;
+
+ std::cout << file
+ << '(' << line << "): source: \"" << source.string()
+ << "\" != expected: \"" << expected
+ << "\"" << std::endl;
+
+ ++::boost::detail::test_errors();
+ }
+
+ path p1("fe/fi/fo/fum");
+ path p2(p1);
+ path p3;
+ path p4("foobar");
+ path p5;
+
+ // exception_tests -----------------------------------------------------------------//
+
+ void exception_tests()
+ {
+ std::cout << "exception_tests..." << std::endl;
+ const std::string str_1("string-1");
+ boost::system::error_code ec(12345, boost::system::system_category());
+ try { throw fs::filesystem_error(str_1, ec); }
+ catch (const fs::filesystem_error & ex)
+ {
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_TEST(std::strcmp(ex.what(),
+ // "string-1: Unknown error") == 0);
+ BOOST_TEST(ex.code() == ec);
+ }
+
+ try { throw fs::filesystem_error(str_1, "p1", "p2", ec); }
+ catch (const fs::filesystem_error & ex)
+ {
+ //std::cout << ex.what() << "*" << std::endl;
+ //BOOST_TEST(std::strcmp(ex.what(),
+ // "string-1: Unknown error: \"p1\", \"p2\"") == 0);
+ BOOST_TEST(ex.code() == ec);
+ BOOST_TEST(ex.path1() == "p1");
+ BOOST_TEST(ex.path2() == "p2");
+ }
+ }
+
+ // overload_tests ------------------------------------------------------------------//
+
+ // These verify various overloads don't cause compiler errors
+ // They pre-date operations_unit_test.cpp
+
+ void overload_tests()
+ {
+ std::cout << "overload_tests..." << std::endl;
+
+ fs::exists(p1);
+ fs::exists("foo");
+ fs::exists(std::string("foo"));
+
+ fs::exists(p1 / path("foo"));
+ fs::exists(p1 / "foo");
+ fs::exists(p1 / std::string("foo"));
+
+ fs::exists("foo" / p1);
+ fs::exists(std::string("foo") / p1);
+
+ p4 /= path("foo");
+ p4 /= "foo";
+ p4 /= std::string("foo");
+ }
+
+ // iterator_tests ------------------------------------------------------------------//
+
+ void iterator_tests()
+ {
+ std::cout << "iterator_tests..." << std::endl;
+
+ path itr_ck = "";
+ path::const_iterator itr = itr_ck.begin();
+ BOOST_TEST(itr == itr_ck.end());
+
+ itr_ck = "/";
+ itr = itr_ck.begin();
+ BOOST_TEST(itr->string() == "/");
+ BOOST_TEST(++itr == itr_ck.end());
+ BOOST_TEST((--itr)->string() == "/");
+
+ itr_ck = "foo";
+ BOOST_TEST(*itr_ck.begin() == std::string("foo"));
+ BOOST_TEST(boost::next(itr_ck.begin()) == itr_ck.end());
+ BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo"));
+ BOOST_TEST(boost::prior(itr_ck.end()) == itr_ck.begin());
+
+ itr_ck = path("/foo");
+ BOOST_TEST((itr_ck.begin())->string() == "/");
+ BOOST_TEST(*boost::next(itr_ck.begin()) == std::string("foo"));
+ BOOST_TEST(boost::next(boost::next(itr_ck.begin())) == itr_ck.end());
+ BOOST_TEST(boost::next(itr_ck.begin()) == boost::prior(itr_ck.end()));
+ BOOST_TEST(*boost::prior(itr_ck.end()) == std::string("foo"));
+ BOOST_TEST(*boost::prior(boost::prior(itr_ck.end())) == std::string("/"));
+ BOOST_TEST(boost::prior(boost::prior(itr_ck.end())) == itr_ck.begin());
+
+ itr_ck = "/foo/bar";
+ itr = itr_ck.begin();
+ BOOST_TEST(itr->string() == "/");
+ BOOST_TEST(*++itr == std::string("foo"));
+ BOOST_TEST(*++itr == std::string("bar"));
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "bar");
+ PATH_TEST_EQ(*--itr, "foo");
+ PATH_TEST_EQ(*--itr, "/");
+
+ itr_ck = "../f"; // previously failed due to short name bug
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "..");
+ PATH_TEST_EQ(*++itr, "f");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "f");
+ PATH_TEST_EQ(*--itr, "..");
+
+ // POSIX says treat "/foo/bar/" as "/foo/bar/."
+ itr_ck = "/foo/bar/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "/");
+ PATH_TEST_EQ(*++itr, "foo");
+ BOOST_TEST(itr != itr_ck.end());
+ PATH_TEST_EQ(*++itr, "bar");
+ BOOST_TEST(itr != itr_ck.end());
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "bar");
+ PATH_TEST_EQ(*--itr, "foo");
+ PATH_TEST_EQ(*--itr, "/");
+
+ // POSIX says treat "/f/b/" as "/f/b/."
+ itr_ck = "/f/b/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "/");
+ PATH_TEST_EQ(*++itr, "f");
+ PATH_TEST_EQ(*++itr, "b");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "b");
+ PATH_TEST_EQ(*--itr, "f");
+ PATH_TEST_EQ(*--itr, "/");
+
+ // POSIX says treat "a/b/" as "a/b/."
+ // Although similar to the prior test case, this failed the ". isn't end" test due to
+ // a bug while the prior case did not fail.
+ itr_ck = "a/b/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(*itr, "a");
+ PATH_TEST_EQ(*++itr, "b");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "b");
+ PATH_TEST_EQ(*--itr, "a");
+
+ itr_ck = "//net";
+ itr = itr_ck.begin();
+ // two leading slashes are permitted by POSIX (as implementation defined),
+ // while for Windows it is always well defined (as a network name)
+ PATH_TEST_EQ(itr->string(), "//net");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "//net");
+
+ itr_ck = "//net/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "//net");
+ PATH_TEST_EQ(*++itr, "/");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "/");
+ PATH_TEST_EQ(*--itr, "//net");
+
+ itr_ck = "//foo///bar///";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "//foo");
+ PATH_TEST_EQ(*++itr, "/");
+ PATH_TEST_EQ(*++itr, "bar");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "bar");
+ PATH_TEST_EQ(*--itr, "/");
+ PATH_TEST_EQ(*--itr, "//foo");
+
+ itr_ck = "///foo///bar///";
+ itr = itr_ck.begin();
+ // three or more leading slashes are to be treated as a single slash
+ PATH_TEST_EQ(itr->string(), "/");
+ PATH_TEST_EQ(*++itr, "foo");
+ PATH_TEST_EQ(*++itr, "bar");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "bar");
+ PATH_TEST_EQ(*--itr, "foo");
+ PATH_TEST_EQ(*--itr, "/");
+
+ if (platform == "Windows")
+ {
+ itr_ck = "c:/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "c:");
+ PATH_TEST_EQ(*++itr, std::string("/"));
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "/");
+ PATH_TEST_EQ(*--itr, "c:");
+
+ itr_ck = "c:\\";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "c:");
+ PATH_TEST_EQ(*++itr, "/"); // test that iteration returns generic format
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, "/"); // test that iteration returns generic format
+ PATH_TEST_EQ(*--itr, "c:");
+
+ itr_ck = "c:/foo";
+ itr = itr_ck.begin();
+ BOOST_TEST(*itr == std::string("c:"));
+ BOOST_TEST(*++itr == std::string("/"));
+ BOOST_TEST(*++itr == std::string("foo"));
+ BOOST_TEST(++itr == itr_ck.end());
+ BOOST_TEST(*--itr == std::string("foo"));
+ BOOST_TEST((--itr)->string() == "/");
+ BOOST_TEST(*--itr == std::string("c:"));
+
+ itr_ck = "c:\\foo";
+ itr = itr_ck.begin();
+ BOOST_TEST(*itr == std::string("c:"));
+ BOOST_TEST(*++itr == std::string("\\"));
+ BOOST_TEST(*++itr == std::string("foo"));
+ BOOST_TEST(++itr == itr_ck.end());
+ BOOST_TEST(*--itr == std::string("foo"));
+ BOOST_TEST(*--itr == std::string("\\"));
+ BOOST_TEST(*--itr == std::string("c:"));
+
+ itr_ck = "\\\\\\foo\\\\\\bar\\\\\\";
+ itr = itr_ck.begin();
+ // three or more leading slashes are to be treated as a single slash
+ PATH_TEST_EQ(itr->string(), "/");
+ PATH_TEST_EQ(*++itr, "foo");
+ PATH_TEST_EQ(*++itr, "bar");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "bar");
+ PATH_TEST_EQ(*--itr, "foo");
+ PATH_TEST_EQ(*--itr, "/");
+
+ itr_ck = "c:foo";
+ itr = itr_ck.begin();
+ BOOST_TEST(*itr == std::string("c:"));
+ BOOST_TEST(*++itr == std::string("foo"));
+ BOOST_TEST(++itr == itr_ck.end());
+ BOOST_TEST(*--itr == std::string("foo"));
+ BOOST_TEST(*--itr == std::string("c:"));
+
+ itr_ck = "c:foo/";
+ itr = itr_ck.begin();
+ BOOST_TEST(*itr == std::string("c:"));
+ BOOST_TEST(*++itr == std::string("foo"));
+ BOOST_TEST(*++itr == std::string("."));
+ BOOST_TEST(++itr == itr_ck.end());
+ BOOST_TEST(*--itr == std::string("."));
+ BOOST_TEST(*--itr == std::string("foo"));
+ BOOST_TEST(*--itr == std::string("c:"));
+
+ itr_ck = path("c:");
+ BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+ BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+ BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("c:"));
+
+ itr_ck = path("c:/");
+ BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+ BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+ BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+ BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("/"));
+ BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));
+
+ itr_ck = path("c:foo");
+ BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+ BOOST_TEST(*next(itr_ck.begin()) == std::string("foo"));
+ BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+ BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+ BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));
+
+ itr_ck = path("c:/foo");
+ BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+ BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+ BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
+ BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
+ BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+ BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
+ BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("c:"));
+
+ itr_ck = path("//net");
+ BOOST_TEST(*itr_ck.begin() == std::string("//net"));
+ BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+ BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("//net"));
+
+ itr_ck = path("//net/");
+ PATH_TEST_EQ(itr_ck.begin()->string(), "//net");
+ PATH_TEST_EQ(next(itr_ck.begin())->string(), "/");
+ BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+ BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+ PATH_TEST_EQ(prior(itr_ck.end())->string(), "/");
+ PATH_TEST_EQ(prior(prior(itr_ck.end()))->string(), "//net");
+
+ itr_ck = path("//net/foo");
+ BOOST_TEST(*itr_ck.begin() == std::string("//net"));
+ BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+ BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
+ BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
+ BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+ BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
+ BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("//net"));
+
+ itr_ck = path("prn:");
+ BOOST_TEST(*itr_ck.begin() == std::string("prn:"));
+ BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+ BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+ BOOST_TEST(*prior(itr_ck.end()) == std::string("prn:"));
+ }
+ else
+ {
+ itr_ck = "///";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(itr->string(), "/");
+ BOOST_TEST(++itr == itr_ck.end());
+ }
+ }
+
+ // non_member_tests ----------------------------------------------------------------//
+
+ void non_member_tests()
+ {
+ std::cout << "non_member_tests..." << std::endl;
+
+ // test non-member functions, particularly operator overloads
+
+ path e, e2;
+ std::string es, es2;
+ char ecs[] = "";
+ char ecs2[] = "";
+
+ char acs[] = "a";
+ std::string as(acs);
+ path a(as);
+
+ char acs2[] = "a";
+ std::string as2(acs2);
+ path a2(as2);
+
+ char bcs[] = "b";
+ std::string bs(bcs);
+ path b(bs);
+
+ // swap
+ a.swap(b);
+ BOOST_TEST(a.string() == "b");
+ BOOST_TEST(b.string() == "a");
+ fs::swap(a, b);
+ BOOST_TEST(a.string() == "a");
+ BOOST_TEST(b.string() == "b");
+
+ // probe operator /
+ PATH_TEST_EQ(path("") / ".", ".");
+ PATH_TEST_EQ(path("") / "..", "..");
+ if (platform == "Windows")
+ {
+ BOOST_TEST(path("foo\\bar") == "foo/bar");
+ BOOST_TEST((b / a).native() == path("b\\a").native());
+ BOOST_TEST((bs / a).native() == path("b\\a").native());
+ BOOST_TEST((bcs / a).native() == path("b\\a").native());
+ BOOST_TEST((b / as).native() == path("b\\a").native());
+ BOOST_TEST((b / acs).native() == path("b\\a").native());
+ PATH_TEST_EQ(path("a") / "b", "a\\b");
+ PATH_TEST_EQ(path("..") / "", "..");
+ PATH_TEST_EQ(path("foo") / path("bar"), "foo\\bar"); // path arg
+ PATH_TEST_EQ(path("foo") / "bar", "foo\\bar"); // const char* arg
+ PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo\\bar"); // const std::string & arg
+ PATH_TEST_EQ("foo" / path("bar"), "foo\\bar");
+ PATH_TEST_EQ(path("..") / ".." , "..\\..");
+ PATH_TEST_EQ(path("/") / ".." , "/..");
+ PATH_TEST_EQ(path("/..") / ".." , "/..\\..");
+ PATH_TEST_EQ(path("..") / "foo" , "..\\foo");
+ PATH_TEST_EQ(path("foo") / ".." , "foo\\..");
+ PATH_TEST_EQ(path("..") / "f" , "..\\f");
+ PATH_TEST_EQ(path("/..") / "f" , "/..\\f");
+ PATH_TEST_EQ(path("f") / ".." , "f\\..");
+ PATH_TEST_EQ(path("foo") / ".." / ".." , "foo\\..\\..");
+ PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo\\..\\..\\..");
+ PATH_TEST_EQ(path("f") / ".." / "b" , "f\\..\\b");
+ PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo\\..\\bar");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo\\bar\\..");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo\\bar\\..\\..");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo\\bar\\..\\blah");
+ PATH_TEST_EQ(path("f") / "b" / ".." , "f\\b\\..");
+ PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f\\b\\..\\a");
+ PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo\\bar\\blah\\..\\..");
+ PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo\\bar\\blah\\..\\..\\bletch");
+
+ PATH_TEST_EQ(path(".") / "foo", ".\\foo");
+ PATH_TEST_EQ(path(".") / "..", ".\\..");
+ PATH_TEST_EQ(path("foo") / ".", "foo\\.");
+ PATH_TEST_EQ(path("..") / ".", "..\\.");
+ PATH_TEST_EQ(path(".") / ".", ".\\.");
+ PATH_TEST_EQ(path(".") / "." / ".", ".\\.\\.");
+ PATH_TEST_EQ(path(".") / "foo" / ".", ".\\foo\\.");
+ PATH_TEST_EQ(path("foo") / "." / "bar", "foo\\.\\bar");
+ PATH_TEST_EQ(path("foo") / "." / ".", "foo\\.\\.");
+ PATH_TEST_EQ(path("foo") / "." / "..", "foo\\.\\..");
+ PATH_TEST_EQ(path(".") / "." / "..", ".\\.\\..");
+ PATH_TEST_EQ(path(".") / ".." / ".", ".\\..\\.");
+ PATH_TEST_EQ(path("..") / "." / ".", "..\\.\\.");
+ }
+ else // POSIX
+ {
+ PATH_TEST_EQ(b / a, "b/a");
+ PATH_TEST_EQ(bs / a, "b/a");
+ PATH_TEST_EQ(bcs / a, "b/a");
+ PATH_TEST_EQ(b / as, "b/a");
+ PATH_TEST_EQ(b / acs, "b/a");
+ PATH_TEST_EQ(path("a") / "b", "a/b");
+ PATH_TEST_EQ(path("..") / "", "..");
+ PATH_TEST_EQ(path("") / "..", "..");
+ PATH_TEST_EQ(path("foo") / path("bar"), "foo/bar"); // path arg
+ PATH_TEST_EQ(path("foo") / "bar", "foo/bar"); // const char* arg
+ PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo/bar"); // const std::string & arg
+ PATH_TEST_EQ("foo" / path("bar"), "foo/bar");
+ PATH_TEST_EQ(path("..") / ".." , "../..");
+ PATH_TEST_EQ(path("/") / ".." , "/..");
+ PATH_TEST_EQ(path("/..") / ".." , "/../..");
+ PATH_TEST_EQ(path("..") / "foo" , "../foo");
+ PATH_TEST_EQ(path("foo") / ".." , "foo/..");
+ PATH_TEST_EQ(path("..") / "f" , "../f");
+ PATH_TEST_EQ(path("/..") / "f" , "/../f");
+ PATH_TEST_EQ(path("f") / ".." , "f/..");
+ PATH_TEST_EQ(path("foo") / ".." / ".." , "foo/../..");
+ PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo/../../..");
+ PATH_TEST_EQ(path("f") / ".." / "b" , "f/../b");
+ PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo/../bar");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo/bar/..");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo/bar/../..");
+ PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo/bar/../blah");
+ PATH_TEST_EQ(path("f") / "b" / ".." , "f/b/..");
+ PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f/b/../a");
+ PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../..");
+ PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch");
+
+ PATH_TEST_EQ(path(".") / "foo", "./foo");
+ PATH_TEST_EQ(path(".") / "..", "./..");
+ PATH_TEST_EQ(path("foo") / ".", "foo/.");
+ PATH_TEST_EQ(path("..") / ".", "../.");
+ PATH_TEST_EQ(path(".") / ".", "./.");
+ PATH_TEST_EQ(path(".") / "." / ".", "././.");
+ PATH_TEST_EQ(path(".") / "foo" / ".", "./foo/.");
+ PATH_TEST_EQ(path("foo") / "." / "bar", "foo/./bar");
+ PATH_TEST_EQ(path("foo") / "." / ".", "foo/./.");
+ PATH_TEST_EQ(path("foo") / "." / "..", "foo/./..");
+ PATH_TEST_EQ(path(".") / "." / "..", "././..");
+ PATH_TEST_EQ(path(".") / ".." / ".", "./../.");
+ PATH_TEST_EQ(path("..") / "." / ".", ".././.");
+ }
+
+ // probe operator <
+ BOOST_TEST(!(e < e2));
+ BOOST_TEST(!(es < e2));
+ BOOST_TEST(!(ecs < e2));
+ BOOST_TEST(!(e < es2));
+ BOOST_TEST(!(e < ecs2));
+
+ BOOST_TEST(e < a);
+ BOOST_TEST(es < a);
+ BOOST_TEST(ecs < a);
+ BOOST_TEST(e < as);
+ BOOST_TEST(e < acs);
+
+ BOOST_TEST(a < b);
+ BOOST_TEST(as < b);
+ BOOST_TEST(acs < b);
+ BOOST_TEST(a < bs);
+ BOOST_TEST(a < bcs);
+
+ BOOST_TEST(!(a < a2));
+ BOOST_TEST(!(as < a2));
+ BOOST_TEST(!(acs < a2));
+ BOOST_TEST(!(a < as2));
+ BOOST_TEST(!(a < acs2));
+
+ // make sure basic_path overloads don't conflict with std::string overloads
+
+ BOOST_TEST(!(as < as));
+ BOOST_TEST(!(as < acs));
+ BOOST_TEST(!(acs < as));
+
+ // character set reality check before lexicographical tests
+ BOOST_TEST(std::string("a.b") < std::string("a/b"));
+ // verify compare is actually lexicographical
+ BOOST_TEST(path("a/b") < path("a.b"));
+ BOOST_TEST(path("a/b") == path("a///b"));
+ BOOST_TEST(path("a/b/") == path("a/b/."));
+ BOOST_TEST(path("a/b") != path("a/b/"));
+
+ // make sure the derivative operators also work
+
+ BOOST_TEST(b > a);
+ BOOST_TEST(b > as);
+ BOOST_TEST(b > acs);
+ BOOST_TEST(bs > a);
+ BOOST_TEST(bcs > a);
+
+ BOOST_TEST(!(a2 > a));
+ BOOST_TEST(!(a2 > as));
+ BOOST_TEST(!(a2 > acs));
+ BOOST_TEST(!(as2 > a));
+ BOOST_TEST(!(acs2 > a));
+
+ BOOST_TEST(a <= b);
+ BOOST_TEST(as <= b);
+ BOOST_TEST(acs <= b);
+ BOOST_TEST(a <= bs);
+ BOOST_TEST(a <= bcs);
+
+ BOOST_TEST(a <= a2);
+ BOOST_TEST(as <= a2);
+ BOOST_TEST(acs <= a2);
+ BOOST_TEST(a <= as2);
+ BOOST_TEST(a <= acs2);
+
+ BOOST_TEST(b >= a);
+ BOOST_TEST(bs >= a);
+ BOOST_TEST(bcs >= a);
+ BOOST_TEST(b >= as);
+ BOOST_TEST(b >= acs);
+
+ BOOST_TEST(a2 >= a);
+ BOOST_TEST(as2 >= a);
+ BOOST_TEST(acs2 >= a);
+ BOOST_TEST(a2 >= as);
+ BOOST_TEST(a2 >= acs);
+
+ // operator == and != are implemented separately, so test separately
+
+ path p101("fe/fi/fo/fum");
+ path p102(p101);
+ path p103("fe/fi/fo/fumm");
+ BOOST_TEST(p101.string() != p103.string());
+
+ // check each overload
+ BOOST_TEST(p101 != p103);
+ BOOST_TEST(p101 != p103.string());
+ BOOST_TEST(p101 != p103.string().c_str());
+ BOOST_TEST(p101.string() != p103);
+ BOOST_TEST(p101.string().c_str() != p103);
+
+ p103 = p102;
+ BOOST_TEST(p101.string() == p103.string());
+
+ // check each overload
+ BOOST_TEST(p101 == p103);
+ BOOST_TEST(p101 == p103.string());
+ BOOST_TEST(p101 == p103.string().c_str());
+ BOOST_TEST(p101.string() == p103);
+ BOOST_TEST(p101.string().c_str() == p103);
+
+ if (platform == "Windows")
+ {
+ std::cout << " Windows relational tests..." << std::endl;
+ path p10 ("c:\\file");
+ path p11 ("c:/file");
+ // check each overload
+ BOOST_TEST(p10.generic_string() == p11.generic_string());
+ BOOST_TEST(p10 == p11);
+ BOOST_TEST(p10 == p11.string());
+ BOOST_TEST(p10 == p11.string().c_str());
+ BOOST_TEST(p10.string() == p11);
+ BOOST_TEST(p10.string().c_str() == p11);
+ BOOST_TEST(p10 == L"c:\\file");
+ BOOST_TEST(p10 == L"c:/file");
+ BOOST_TEST(p11 == L"c:\\file");
+ BOOST_TEST(p11 == L"c:/file");
+ BOOST_TEST(L"c:\\file" == p10);
+ BOOST_TEST(L"c:/file" == p10);
+ BOOST_TEST(L"c:\\file" == p11);
+ BOOST_TEST(L"c:/file" == p11);
+
+ BOOST_TEST(!(p10.generic_string() != p11.generic_string()));
+ BOOST_TEST(!(p10 != p11));
+ BOOST_TEST(!(p10 != p11.string()));
+ BOOST_TEST(!(p10 != p11.string().c_str()));
+ BOOST_TEST(!(p10.string() != p11));
+ BOOST_TEST(!(p10.string().c_str() != p11));
+ BOOST_TEST(!(p10 != L"c:\\file"));
+ BOOST_TEST(!(p10 != L"c:/file"));
+ BOOST_TEST(!(p11 != L"c:\\file"));
+ BOOST_TEST(!(p11 != L"c:/file"));
+ BOOST_TEST(!(L"c:\\file" != p10));
+ BOOST_TEST(!(L"c:/file" != p10));
+ BOOST_TEST(!(L"c:\\file" != p11));
+ BOOST_TEST(!(L"c:/file" != p11));
+
+ BOOST_TEST(!(p10.string() < p11.string()));
+ BOOST_TEST(!(p10 < p11));
+ BOOST_TEST(!(p10 < p11.string()));
+ BOOST_TEST(!(p10 < p11.string().c_str()));
+ BOOST_TEST(!(p10.string() < p11));
+ BOOST_TEST(!(p10.string().c_str() < p11));
+ BOOST_TEST(!(p10 < L"c:\\file"));
+ BOOST_TEST(!(p10 < L"c:/file"));
+ BOOST_TEST(!(p11 < L"c:\\file"));
+ BOOST_TEST(!(p11 < L"c:/file"));
+ BOOST_TEST(!(L"c:\\file" < p10));
+ BOOST_TEST(!(L"c:/file" < p10));
+ BOOST_TEST(!(L"c:\\file" < p11));
+ BOOST_TEST(!(L"c:/file" < p11));
+
+ BOOST_TEST(!(p10.generic_string() > p11.generic_string()));
+ BOOST_TEST(!(p10 > p11));
+ BOOST_TEST(!(p10 > p11.string()));
+ BOOST_TEST(!(p10 > p11.string().c_str()));
+ BOOST_TEST(!(p10.string() > p11));
+ BOOST_TEST(!(p10.string().c_str() > p11));
+ BOOST_TEST(!(p10 > L"c:\\file"));
+ BOOST_TEST(!(p10 > L"c:/file"));
+ BOOST_TEST(!(p11 > L"c:\\file"));
+ BOOST_TEST(!(p11 > L"c:/file"));
+ BOOST_TEST(!(L"c:\\file" > p10));
+ BOOST_TEST(!(L"c:/file" > p10));
+ BOOST_TEST(!(L"c:\\file" > p11));
+ BOOST_TEST(!(L"c:/file" > p11));
+ }
+
+ // relative
+
+ BOOST_TEST(fs::relative("/abc/def", "/abc") == path("def"));
+ BOOST_TEST(fs::relative("abc/def", "abc") == path("def"));
+ BOOST_TEST(fs::relative("/abc/xyz/def", "/abc") == path("xyz/def"));
+ BOOST_TEST(fs::relative("abc/xyz/def", "abc") == path("xyz/def"));
+
+ if (platform == "Windows")
+ {
+ std::cout << " Windows relatie tests..." << std::endl;
+ BOOST_TEST(fs::relative("\\abc\\xyz\\def", "/abc") == path("xyz/def"));
+ std::cout << " fs::relative(\"/abc/xyz/def\", \"/abc\") is "
+ << fs::relative("/abc/xyz/def", "/abc") << std::endl;
+ BOOST_TEST(fs::relative("abc\\xyz\\def", "abc") == path("xyz/def"));
+ }
+ }
+
+ // query_and_decomposition_tests ---------------------------------------------------//
+ //
+ // remove_filename() is also tested here, because its specification depends on
+ // a decomposition function.
+
+ void query_and_decomposition_tests()
+ {
+ std::cout << "query_and_decomposition_tests..." << std::endl;
+
+ // these are the examples given in reference docs, so check they work
+ BOOST_TEST(path("/foo/bar.txt").parent_path() == "/foo");
+ BOOST_TEST(path("/foo/bar").parent_path() == "/foo");
+ BOOST_TEST(path("/foo/bar/").parent_path() == "/foo/bar");
+ BOOST_TEST(path("/").parent_path() == "");
+ BOOST_TEST(path(".").parent_path() == "");
+ BOOST_TEST(path("..").parent_path() == "");
+ BOOST_TEST(path("/foo/bar.txt").filename() == "bar.txt");
+ BOOST_TEST(path("/foo/bar").filename() == "bar");
+ BOOST_TEST(path("/foo/bar/").filename() == ".");
+ BOOST_TEST(path("/").filename() == "/");
+ BOOST_TEST(path(".").filename() == ".");
+ BOOST_TEST(path("..").filename() == "..");
+
+ // stem() tests not otherwise covered
+ BOOST_TEST(path(".").stem() == ".");
+ BOOST_TEST(path("..").stem() == "..");
+ BOOST_TEST(path(".a").stem() == "");
+ BOOST_TEST(path("b").stem() == "b");
+ BOOST_TEST(path("a/b.txt").stem() == "b");
+ BOOST_TEST(path("a/b.").stem() == "b");
+ BOOST_TEST(path("a.b.c").stem() == "a.b");
+ BOOST_TEST(path("a.b.c.").stem() == "a.b.c");
+
+ // extension() tests not otherwise covered
+ BOOST_TEST(path(".").extension() == "");
+ BOOST_TEST(path("..").extension() == "");
+ BOOST_TEST(path(".a").extension() == ".a");
+ BOOST_TEST(path("a/b").extension() == "");
+ BOOST_TEST(path("a.b/c").extension() == "");
+ BOOST_TEST(path("a/b.txt").extension() == ".txt");
+ BOOST_TEST(path("a/b.").extension() == ".");
+ BOOST_TEST(path("a.b.c").extension() == ".c");
+ BOOST_TEST(path("a.b.c.").extension() == ".");
+ BOOST_TEST(path("a/").extension() == "");
+
+ // main q & d test sequence
+ path p;
+ path q;
+
+ p = q = "";
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "");
+ BOOST_TEST(p.stem() == "");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(!p.has_filename());
+ BOOST_TEST(!p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "/";
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "/");
+ BOOST_TEST(p.stem() == "/");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "/");
+ BOOST_TEST(p.root_path().string() == "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "//";
+ PATH_TEST_EQ(p.relative_path().string(), "");
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "//");
+ PATH_TEST_EQ(p.stem(), "//");
+ PATH_TEST_EQ(p.extension(), "");
+ PATH_TEST_EQ(p.root_name(), "//");
+ PATH_TEST_EQ(p.root_directory(), "");
+ PATH_TEST_EQ(p.root_path().string(), "//");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "///";
+ PATH_TEST_EQ(p.relative_path().string(), "");
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "/");
+ PATH_TEST_EQ(p.stem(), "/");
+ PATH_TEST_EQ(p.extension(), "");
+ PATH_TEST_EQ(p.root_name(), "");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = ".";
+ BOOST_TEST(p.relative_path().string() == ".");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == ".");
+ BOOST_TEST(p.stem() == ".");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "..";
+ BOOST_TEST(p.relative_path().string() == "..");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "..");
+ BOOST_TEST(p.stem() == "..");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "foo";
+ BOOST_TEST(p.relative_path().string() == "foo");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "foo");
+ BOOST_TEST(p.stem() == "foo");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "/foo";
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.stem(), "foo");
+ PATH_TEST_EQ(p.extension(), "");
+ PATH_TEST_EQ(p.root_name(), "");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "/foo/";
+ PATH_TEST_EQ(p.relative_path().string(), "foo/");
+ PATH_TEST_EQ(p.parent_path().string(), "/foo");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), ".");
+ PATH_TEST_EQ(p.stem(), ".");
+ PATH_TEST_EQ(p.extension(), "");
+ PATH_TEST_EQ(p.root_name(), "");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "///foo";
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "foo/bar";
+ BOOST_TEST(p.relative_path().string() == "foo/bar");
+ BOOST_TEST(p.parent_path().string() == "foo");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "bar");
+ BOOST_TEST(p.stem() == "bar");
+ BOOST_TEST(p.extension() == "");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_stem());
+ BOOST_TEST(!p.has_extension());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "../foo";
+ BOOST_TEST(p.relative_path().string() == "../foo");
+ BOOST_TEST(p.parent_path().string() == "..");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "foo");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "..///foo";
+ PATH_TEST_EQ(p.relative_path().string(), "..///foo");
+ PATH_TEST_EQ(p.parent_path().string(), "..");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "");
+ PATH_TEST_EQ(p.root_directory(), "");
+ PATH_TEST_EQ(p.root_path().string(), "");
+ BOOST_TEST(!p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = "/foo/bar";
+ BOOST_TEST(p.relative_path().string() == "foo/bar");
+ BOOST_TEST(p.parent_path().string() == "/foo");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "bar");
+ BOOST_TEST(p.root_name() == "");
+ BOOST_TEST(p.root_directory() == "/");
+ BOOST_TEST(p.root_path().string() == "/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(!p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ if (platform == "POSIX")
+ BOOST_TEST(p.is_absolute());
+ else
+ BOOST_TEST(!p.is_absolute());
+
+ // Both POSIX and Windows allow two leading slashs
+ // (POSIX meaning is implementation defined)
+ PATH_TEST_EQ(path("//resource"), "//resource");
+ PATH_TEST_EQ(path("//resource/"), "//resource/");
+ PATH_TEST_EQ(path("//resource/foo"), "//resource/foo");
+
+ p = q = path("//net");
+ PATH_TEST_EQ(p.string(), "//net");
+ PATH_TEST_EQ(p.relative_path().string(), "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(p.filename(), "//net");
+ PATH_TEST_EQ(p.root_name(), "//net");
+ PATH_TEST_EQ(p.root_directory(), "");
+ PATH_TEST_EQ(p.root_path().string(), "//net");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = path("//net/");
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "//net");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "/");
+ BOOST_TEST(p.root_name() == "//net");
+ BOOST_TEST(p.root_directory() == "/");
+ BOOST_TEST(p.root_path().string() == "//net/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("//net/foo");
+ BOOST_TEST(p.relative_path().string() == "foo");
+ BOOST_TEST(p.parent_path().string() == "//net/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "foo");
+ BOOST_TEST(p.root_name() == "//net");
+ BOOST_TEST(p.root_directory() == "/");
+ BOOST_TEST(p.root_path().string() == "//net/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("//net///foo");
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "//net/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "//net");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "//net/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ // ticket 2739, infinite recursion leading to stack overflow, was caused
+ // by failure to handle this case correctly on Windows.
+ p = path(":");
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(p.filename(), ":");
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(p.has_filename());
+
+ // test some similar cases that both POSIX and Windows should handle identically
+ p = path("c:");
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(p.filename(), "c:");
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(p.has_filename());
+ p = path("cc:");
+ PATH_TEST_EQ(p.parent_path().string(), "");
+ PATH_TEST_EQ(p.filename(), "cc:");
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(p.has_filename());
+
+ // Windows specific tests
+ if (platform == "Windows")
+ {
+
+ //p = q = L"\\\\?\\";
+ //BOOST_TEST(p.relative_path().string() == "");
+ //BOOST_TEST(p.parent_path().string() == "");
+ //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ //BOOST_TEST(p.filename() == "");
+ //BOOST_TEST(p.stem() == "");
+ //BOOST_TEST(p.extension() == "");
+ //BOOST_TEST(p.root_name() == "");
+ //BOOST_TEST(p.root_directory() == "");
+ //BOOST_TEST(p.root_path().string() == "");
+ //BOOST_TEST(!p.has_root_path());
+ //BOOST_TEST(!p.has_root_name());
+ //BOOST_TEST(!p.has_root_directory());
+ //BOOST_TEST(!p.has_relative_path());
+ //BOOST_TEST(!p.has_filename());
+ //BOOST_TEST(!p.has_stem());
+ //BOOST_TEST(!p.has_extension());
+ //BOOST_TEST(!p.has_parent_path());
+ //BOOST_TEST(!p.is_absolute());
+
+ p = q = path("c:");
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "c:");
+ BOOST_TEST(p.root_name() == "c:");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "c:");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ //p = q = path(L"\\\\?\\c:");
+ //BOOST_TEST(p.relative_path().string() == "");
+ //BOOST_TEST(p.parent_path().string() == "");
+ //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ //BOOST_TEST(p.filename() == "c:");
+ //BOOST_TEST(p.root_name() == "c:");
+ //BOOST_TEST(p.root_directory() == "");
+ //BOOST_TEST(p.root_path().string() == "c:");
+ //BOOST_TEST(p.has_root_path());
+ //BOOST_TEST(p.has_root_name());
+ //BOOST_TEST(!p.has_root_directory());
+ //BOOST_TEST(!p.has_relative_path());
+ //BOOST_TEST(p.has_filename());
+ //BOOST_TEST(!p.has_parent_path());
+ //BOOST_TEST(!p.is_absolute());
+
+ p = q = path("c:foo");
+ BOOST_TEST(p.relative_path().string() == "foo");
+ BOOST_TEST(p.parent_path().string() == "c:");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "foo");
+ BOOST_TEST(p.root_name() == "c:");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "c:");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ //p = q = path(L"\\\\?\\c:foo");
+ //BOOST_TEST(p.relative_path().string() == "foo");
+ //BOOST_TEST(p.parent_path().string() == "c:");
+ //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ //BOOST_TEST(p.filename() == "foo");
+ //BOOST_TEST(p.root_name() == "c:");
+ //BOOST_TEST(p.root_directory() == "");
+ //BOOST_TEST(p.root_path().string() == "c:");
+ //BOOST_TEST(p.has_root_path());
+ //BOOST_TEST(p.has_root_name());
+ //BOOST_TEST(!p.has_root_directory());
+ //BOOST_TEST(p.has_relative_path());
+ //BOOST_TEST(p.has_filename());
+ //BOOST_TEST(p.has_parent_path());
+ //BOOST_TEST(!p.is_absolute());
+
+ p = q = path("c:/");
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "c:");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "/");
+ BOOST_TEST(p.root_name() == "c:");
+ BOOST_TEST(p.root_directory() == "/");
+ BOOST_TEST(p.root_path().string() == "c:/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("c:..");
+ BOOST_TEST(p.relative_path().string() == "..");
+ BOOST_TEST(p.parent_path().string() == "c:");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "..");
+ BOOST_TEST(p.root_name() == "c:");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "c:");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = path("c:/foo");
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "c:/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "c:");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "c:/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("c://foo");
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "c:/");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "c:");
+ PATH_TEST_EQ(p.root_directory(), "/");
+ PATH_TEST_EQ(p.root_path().string(), "c:/");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("c:\\foo\\bar");
+ PATH_TEST_EQ(p.relative_path().string(), "foo\\bar");
+ PATH_TEST_EQ(p.parent_path().string(), "c:\\foo");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "bar");
+ PATH_TEST_EQ(p.root_name(), "c:");
+ PATH_TEST_EQ(p.root_directory(), "\\");
+ PATH_TEST_EQ(p.root_path().string(), "c:\\");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+
+ p = q = path("prn:");
+ BOOST_TEST(p.relative_path().string() == "");
+ BOOST_TEST(p.parent_path().string() == "");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ BOOST_TEST(p.filename() == "prn:");
+ BOOST_TEST(p.root_name() == "prn:");
+ BOOST_TEST(p.root_directory() == "");
+ BOOST_TEST(p.root_path().string() == "prn:");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(!p.has_root_directory());
+ BOOST_TEST(!p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(!p.has_parent_path());
+ BOOST_TEST(!p.is_absolute());
+
+ p = q = path("\\\\net\\\\\\foo");
+ PATH_TEST_EQ(p.relative_path().string(), "foo");
+ PATH_TEST_EQ(p.parent_path().string(), "\\\\net\\");
+ PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+ PATH_TEST_EQ(p.filename(), "foo");
+ PATH_TEST_EQ(p.root_name(), "\\\\net");
+ PATH_TEST_EQ(p.root_directory(), "\\");
+ PATH_TEST_EQ(p.root_path().string(), "\\\\net\\");
+ BOOST_TEST(p.has_root_path());
+ BOOST_TEST(p.has_root_name());
+ BOOST_TEST(p.has_root_directory());
+ BOOST_TEST(p.has_relative_path());
+ BOOST_TEST(p.has_filename());
+ BOOST_TEST(p.has_parent_path());
+ BOOST_TEST(p.is_absolute());
+ } // Windows
+
+ else
+ { // POSIX
+ PATH_TEST_EQ(path("/foo/bar/"), "/foo/bar/");
+ PATH_TEST_EQ(path("//foo//bar//"), "//foo//bar//");
+ PATH_TEST_EQ(path("///foo///bar///"), "///foo///bar///");
+
+ p = path("/usr/local/bin:/usr/bin:/bin");
+ BOOST_TEST(p.string() == "/usr/local/bin:/usr/bin:/bin");
+ } // POSIX
+ }
+
+ // composition_tests ----------------------------------------------------------------//
+
+ void composition_tests()
+ {
+ std::cout << "composition_tests..." << std::endl;
+
+ }
+
+ // construction_tests ---------------------------------------------------------------//
+
+ void construction_tests()
+ {
+ std::cout << "construction_tests..." << std::endl;
+
+ PATH_TEST_EQ("", "");
+
+ PATH_TEST_EQ("foo", "foo");
+ PATH_TEST_EQ("f", "f");
+
+ PATH_TEST_EQ("foo/", "foo/");
+ PATH_TEST_EQ("f/", "f/");
+ PATH_TEST_EQ("foo/..", "foo/..");
+ PATH_TEST_EQ("foo/../", "foo/../");
+ PATH_TEST_EQ("foo/bar/../..", "foo/bar/../..");
+ PATH_TEST_EQ("foo/bar/../../", "foo/bar/../../");
+ PATH_TEST_EQ("/", "/");
+ PATH_TEST_EQ("/f", "/f");
+
+ PATH_TEST_EQ("/foo", "/foo");
+ PATH_TEST_EQ("/foo/bar/", "/foo/bar/");
+ PATH_TEST_EQ("//foo//bar//", "//foo//bar//");
+ PATH_TEST_EQ("///foo///bar///", "///foo///bar///");
+ PATH_TEST_EQ("\\/foo\\/bar\\/", "\\/foo\\/bar\\/");
+ PATH_TEST_EQ("\\//foo\\//bar\\//", "\\//foo\\//bar\\//");
+
+ if (platform == "Windows")
+ {
+ PATH_TEST_EQ(path("c:") / "foo", "c:foo");
+ PATH_TEST_EQ(path("c:") / "/foo", "c:/foo");
+
+ PATH_TEST_EQ("\\foo\\bar\\", "\\foo\\bar\\");
+ PATH_TEST_EQ("\\\\foo\\\\bar\\\\", "\\\\foo\\\\bar\\\\");
+ PATH_TEST_EQ("\\\\\\foo\\\\\\bar\\\\\\", "\\\\\\foo\\\\\\bar\\\\\\");
+
+ PATH_TEST_EQ("\\", "\\");
+ PATH_TEST_EQ("\\f", "\\f");
+ PATH_TEST_EQ("\\foo", "\\foo");
+ PATH_TEST_EQ("foo\\bar", "foo\\bar");
+ PATH_TEST_EQ("foo bar", "foo bar");
+ PATH_TEST_EQ("c:", "c:");
+ PATH_TEST_EQ("c:/", "c:/");
+ PATH_TEST_EQ("c:.", "c:.");
+ PATH_TEST_EQ("c:./foo", "c:./foo");
+ PATH_TEST_EQ("c:.\\foo", "c:.\\foo");
+ PATH_TEST_EQ("c:..", "c:..");
+ PATH_TEST_EQ("c:/.", "c:/.");
+ PATH_TEST_EQ("c:/..", "c:/..");
+ PATH_TEST_EQ("c:/../", "c:/../");
+ PATH_TEST_EQ("c:\\..\\", "c:\\..\\");
+ PATH_TEST_EQ("c:/../..", "c:/../..");
+ PATH_TEST_EQ("c:/../foo", "c:/../foo");
+ PATH_TEST_EQ("c:\\..\\foo", "c:\\..\\foo");
+ PATH_TEST_EQ("c:../foo", "c:../foo");
+ PATH_TEST_EQ("c:..\\foo", "c:..\\foo");
+ PATH_TEST_EQ("c:/../../foo", "c:/../../foo");
+ PATH_TEST_EQ("c:\\..\\..\\foo", "c:\\..\\..\\foo");
+ PATH_TEST_EQ("c:foo/..", "c:foo/..");
+ PATH_TEST_EQ("c:/foo/..", "c:/foo/..");
+ PATH_TEST_EQ("c:/..foo", "c:/..foo");
+ PATH_TEST_EQ("c:foo", "c:foo");
+ PATH_TEST_EQ("c:/foo", "c:/foo");
+ PATH_TEST_EQ("\\\\netname", "\\\\netname");
+ PATH_TEST_EQ("\\\\netname\\", "\\\\netname\\");
+ PATH_TEST_EQ("\\\\netname\\foo", "\\\\netname\\foo");
+ PATH_TEST_EQ("c:/foo", "c:/foo");
+ PATH_TEST_EQ("prn:", "prn:");
+ }
+ else
+ {
+ }
+
+ PATH_TEST_EQ("foo/bar", "foo/bar");
+ PATH_TEST_EQ("a/b", "a/b"); // probe for length effects
+ PATH_TEST_EQ("..", "..");
+ PATH_TEST_EQ("../..", "../..");
+ PATH_TEST_EQ("/..", "/..");
+ PATH_TEST_EQ("/../..", "/../..");
+ PATH_TEST_EQ("../foo", "../foo");
+ PATH_TEST_EQ("foo/..", "foo/..");
+ PATH_TEST_EQ("foo/..bar", "foo/..bar");
+ PATH_TEST_EQ("../f", "../f");
+ PATH_TEST_EQ("/../f", "/../f");
+ PATH_TEST_EQ("f/..", "f/..");
+ PATH_TEST_EQ("foo/../..", "foo/../..");
+ PATH_TEST_EQ("foo/../../..", "foo/../../..");
+ PATH_TEST_EQ("foo/../bar", "foo/../bar");
+ PATH_TEST_EQ("foo/bar/..", "foo/bar/..");
+ PATH_TEST_EQ("foo/bar/../..", "foo/bar/../..");
+ PATH_TEST_EQ("foo/bar/../blah", "foo/bar/../blah");
+ PATH_TEST_EQ("f/../b", "f/../b");
+ PATH_TEST_EQ("f/b/..", "f/b/..");
+ PATH_TEST_EQ("f/b/../a", "f/b/../a");
+ PATH_TEST_EQ("foo/bar/blah/../..", "foo/bar/blah/../..");
+ PATH_TEST_EQ("foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch");
+ PATH_TEST_EQ("...", "...");
+ PATH_TEST_EQ("....", "....");
+ PATH_TEST_EQ("foo/...", "foo/...");
+ PATH_TEST_EQ("abc.", "abc.");
+ PATH_TEST_EQ("abc..", "abc..");
+ PATH_TEST_EQ("foo/abc.", "foo/abc.");
+ PATH_TEST_EQ("foo/abc..", "foo/abc..");
+
+ PATH_TEST_EQ(".abc", ".abc");
+ PATH_TEST_EQ("a.c", "a.c");
+ PATH_TEST_EQ("..abc", "..abc");
+ PATH_TEST_EQ("a..c", "a..c");
+ PATH_TEST_EQ("foo/.abc", "foo/.abc");
+ PATH_TEST_EQ("foo/a.c", "foo/a.c");
+ PATH_TEST_EQ("foo/..abc", "foo/..abc");
+ PATH_TEST_EQ("foo/a..c", "foo/a..c");
+
+ PATH_TEST_EQ(".", ".");
+ PATH_TEST_EQ("./foo", "./foo");
+ PATH_TEST_EQ("./..", "./..");
+ PATH_TEST_EQ("./../foo", "./../foo");
+ PATH_TEST_EQ("foo/.", "foo/.");
+ PATH_TEST_EQ("../.", "../.");
+ PATH_TEST_EQ("./.", "./.");
+ PATH_TEST_EQ("././.", "././.");
+ PATH_TEST_EQ("./foo/.", "./foo/.");
+ PATH_TEST_EQ("foo/./bar", "foo/./bar");
+ PATH_TEST_EQ("foo/./.", "foo/./.");
+ PATH_TEST_EQ("foo/./..", "foo/./..");
+ PATH_TEST_EQ("foo/./../bar", "foo/./../bar");
+ PATH_TEST_EQ("foo/../.", "foo/../.");
+ PATH_TEST_EQ("././..", "././..");
+ PATH_TEST_EQ("./../.", "./../.");
+ PATH_TEST_EQ(".././.", ".././.");
+ }
+
+ // append_tests --------------------------------------------------------------------//
+
+ void append_test_aux(const path & p, const std::string & s, const std::string & expect)
+ {
+ PATH_TEST_EQ((p / path(s)).string(), expect);
+ PATH_TEST_EQ((p / s.c_str()).string(), expect);
+ PATH_TEST_EQ((p / s).string(), expect);
+ path x(p);
+ x.append(s.begin(), s.end());
+ PATH_TEST_EQ(x.string(), expect);
+ }
+
+ void append_tests()
+ {
+ std::cout << "append_tests..." << std::endl;
+
+ // There are many control paths to be exercised, since empty paths and arguments,
+ // paths with trailing separators, arguments with leading separators, with or without
+ // other characters being present, are all separate cases that need to be tested.
+ // Furthermore, some of the code to be tested is specific to argument categories,
+ // so that results in further permutations to be tested.
+
+ //// code to generate test cases
+ ////
+ //// expected results must be checked by hand
+ //// "foo\bar" expected result must be edited by hand and moved for Windows/POSIX
+ ////
+ //const char* x[] = { "", "/", "foo", "foo/" };
+ //const char* y[] = { "", "/", "bar", "/bar" };
+
+ //for (int i = 0; i < sizeof(x)/sizeof(char*); ++i)
+ // for (int j = 0; j < sizeof(y)/sizeof(char*); ++j)
+ // {
+ // std::cout << "\n PATH_TEST_EQ(path(\"" << x[i] << "\") / \"" << y[j] << "\", \""
+ // << path(x[i]) / y[j] << "\");\n";
+ // std::cout << " append_test_aux(\"" << x[i] << "\", \"" << y[j] << "\", \""
+ // << path(x[i]) / y[j] << "\");\n";
+ // }
+
+ PATH_TEST_EQ(path("") / "", "");
+ append_test_aux("", "", "");
+
+ PATH_TEST_EQ(path("") / "/", "/");
+ append_test_aux("", "/", "/");
+
+ PATH_TEST_EQ(path("") / "bar", "bar");
+ append_test_aux("", "bar", "bar");
+
+ PATH_TEST_EQ(path("") / "/bar", "/bar");
+ append_test_aux("", "/bar", "/bar");
+
+ PATH_TEST_EQ(path("/") / "", "/");
+ append_test_aux("/", "", "/");
+
+ PATH_TEST_EQ(path("/") / "/", "//");
+ append_test_aux("/", "/", "//");
+
+ PATH_TEST_EQ(path("/") / "bar", "/bar");
+ append_test_aux("/", "bar", "/bar");
+
+ PATH_TEST_EQ(path("/") / "/bar", "//bar");
+ append_test_aux("/", "/bar", "//bar");
+
+ PATH_TEST_EQ(path("foo") / "", "foo");
+ append_test_aux("foo", "", "foo");
+
+ PATH_TEST_EQ(path("foo") / "/", "foo/");
+ append_test_aux("foo", "/", "foo/");
+
+ PATH_TEST_EQ(path("foo") / "/bar", "foo/bar");
+ append_test_aux("foo", "/bar", "foo/bar");
+
+ PATH_TEST_EQ(path("foo/") / "", "foo/");
+ append_test_aux("foo/", "", "foo/");
+
+ PATH_TEST_EQ(path("foo/") / "/", "foo//");
+ append_test_aux("foo/", "/", "foo//");
+
+ PATH_TEST_EQ(path("foo/") / "bar", "foo/bar");
+ append_test_aux("foo/", "bar", "foo/bar");
+
+
+ if (platform == "Windows")
+ {
+ PATH_TEST_EQ(path("foo") / "bar", "foo\\bar");
+ append_test_aux("foo", "bar", "foo\\bar");
+
+ PATH_TEST_EQ(path("foo\\") / "\\bar", "foo\\\\bar");
+ append_test_aux("foo\\", "\\bar", "foo\\\\bar");
+
+ // hand created test case specific to Windows
+ PATH_TEST_EQ(path("c:") / "bar", "c:bar");
+ append_test_aux("c:", "bar", "c:bar");
+ }
+ else
+ {
+ PATH_TEST_EQ(path("foo") / "bar", "foo/bar");
+ append_test_aux("foo", "bar", "foo/bar");
+ }
+
+ // ticket #6819
+ union
+ {
+ char a[1];
+ char b[3];
+ } u;
+
+ u.b[0] = 'a';
+ u.b[1] = 'b';
+ u.b[2] = '\0';
+
+ path p6819;
+ p6819 /= u.a;
+ BOOST_TEST_EQ(p6819, path("ab"));
+ }
+
+// self_assign_and_append_tests ------------------------------------------------------//
+
+ void self_assign_and_append_tests()
+ {
+ std::cout << "self_assign_and_append_tests..." << std::endl;
+
+ path p;
+
+ p = "snafubar";
+ PATH_TEST_EQ(p = p, "snafubar");
+
+ p = "snafubar";
+ p = p.c_str();
+ PATH_TEST_EQ(p, "snafubar");
+
+ p = "snafubar";
+ p.assign(p.c_str(), path::codecvt());
+ PATH_TEST_EQ(p, "snafubar");
+
+ p = "snafubar";
+ PATH_TEST_EQ(p = p.c_str()+5, "bar");
+
+ p = "snafubar";
+ PATH_TEST_EQ(p.assign(p.c_str() + 5, p.c_str() + 7), "ba");
+
+ p = "snafubar";
+ p /= p;
+ PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar");
+
+ p = "snafubar";
+ p /= p.c_str();
+ PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar");
+
+ p = "snafubar";
+ p.append(p.c_str(), path::codecvt());
+ PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar");
+
+ p = "snafubar";
+ PATH_TEST_EQ(p.append(p.c_str() + 5, p.c_str() + 7), "snafubar" BOOST_DIR_SEP "ba");
+ }
+
+
+ // name_function_tests -------------------------------------------------------------//
+
+ void name_function_tests()
+ {
+ std::cout << "name_function_tests..." << std::endl;
+
+ BOOST_TEST(fs::portable_posix_name(std::string("x")));
+ BOOST_TEST(fs::windows_name(std::string("x")));
+ BOOST_TEST(fs::portable_name(std::string("x")));
+ BOOST_TEST(fs::portable_directory_name(std::string("x")));
+ BOOST_TEST(fs::portable_file_name(std::string("x")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string(".")));
+ BOOST_TEST(fs::windows_name(std::string(".")));
+ BOOST_TEST(fs::portable_name(std::string(".")));
+ BOOST_TEST(fs::portable_directory_name(std::string(".")));
+ BOOST_TEST(!fs::portable_file_name(std::string(".")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string("..")));
+ BOOST_TEST(fs::windows_name(std::string("..")));
+ BOOST_TEST(fs::portable_name(std::string("..")));
+ BOOST_TEST(fs::portable_directory_name(std::string("..")));
+ BOOST_TEST(!fs::portable_file_name(std::string("..")));
+
+ BOOST_TEST(!fs::native(std::string("")));
+ BOOST_TEST(!fs::portable_posix_name(std::string("")));
+ BOOST_TEST(!fs::windows_name(std::string("")));
+ BOOST_TEST(!fs::portable_name(std::string("")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("")));
+ BOOST_TEST(!fs::portable_file_name(std::string("")));
+
+ BOOST_TEST(!fs::native(std::string(" ")));
+ BOOST_TEST(!fs::portable_posix_name(std::string(" ")));
+ BOOST_TEST(!fs::windows_name(std::string(" ")));
+ BOOST_TEST(!fs::portable_name(std::string(" ")));
+ BOOST_TEST(!fs::portable_directory_name(std::string(" ")));
+ BOOST_TEST(!fs::portable_file_name(std::string(" ")));
+
+ BOOST_TEST(!fs::portable_posix_name(std::string(":")));
+ BOOST_TEST(!fs::windows_name(std::string(":")));
+ BOOST_TEST(!fs::portable_name(std::string(":")));
+ BOOST_TEST(!fs::portable_directory_name(std::string(":")));
+ BOOST_TEST(!fs::portable_file_name(std::string(":")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string("-")));
+ BOOST_TEST(fs::windows_name(std::string("-")));
+ BOOST_TEST(!fs::portable_name(std::string("-")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("-")));
+ BOOST_TEST(!fs::portable_file_name(std::string("-")));
+
+ BOOST_TEST(!fs::portable_posix_name(std::string("foo bar")));
+ BOOST_TEST(fs::windows_name(std::string("foo bar")));
+ BOOST_TEST(!fs::windows_name(std::string(" bar")));
+ BOOST_TEST(!fs::windows_name(std::string("foo ")));
+ BOOST_TEST(!fs::portable_name(std::string("foo bar")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("foo bar")));
+ BOOST_TEST(!fs::portable_file_name(std::string("foo bar")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string("foo.bar")));
+ BOOST_TEST(fs::windows_name(std::string("foo.bar")));
+ BOOST_TEST(fs::portable_name(std::string("foo.bar")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("foo.bar")));
+ BOOST_TEST(fs::portable_file_name(std::string("foo.bar")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string("foo.barf")));
+ BOOST_TEST(fs::windows_name(std::string("foo.barf")));
+ BOOST_TEST(fs::portable_name(std::string("foo.barf")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("foo.barf")));
+ BOOST_TEST(!fs::portable_file_name(std::string("foo.barf")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string(".foo")));
+ BOOST_TEST(fs::windows_name(std::string(".foo")));
+ BOOST_TEST(!fs::portable_name(std::string(".foo")));
+ BOOST_TEST(!fs::portable_directory_name(std::string(".foo")));
+ BOOST_TEST(!fs::portable_file_name(std::string(".foo")));
+
+ BOOST_TEST(fs::portable_posix_name(std::string("foo.")));
+ BOOST_TEST(!fs::windows_name(std::string("foo.")));
+ BOOST_TEST(!fs::portable_name(std::string("foo.")));
+ BOOST_TEST(!fs::portable_directory_name(std::string("foo.")));
+ BOOST_TEST(!fs::portable_file_name(std::string("foo.")));
+ }
+
+ // replace_extension_tests ---------------------------------------------------------//
+
+ void replace_extension_tests()
+ {
+ std::cout << "replace_extension_tests..." << std::endl;
+
+ BOOST_TEST(path().replace_extension().empty());
+ BOOST_TEST(path().replace_extension("a") == ".a");
+ BOOST_TEST(path().replace_extension("a.") == ".a.");
+ BOOST_TEST(path().replace_extension(".a") == ".a");
+ BOOST_TEST(path().replace_extension("a.txt") == ".a.txt");
+ // see the rationale in html docs for explanation why this works:
+ BOOST_TEST(path().replace_extension(".txt") == ".txt");
+
+ BOOST_TEST(path("a.txt").replace_extension() == "a");
+ BOOST_TEST(path("a.txt").replace_extension("") == "a");
+ BOOST_TEST(path("a.txt").replace_extension(".") == "a.");
+ BOOST_TEST(path("a.txt").replace_extension(".tex") == "a.tex");
+ BOOST_TEST(path("a.txt").replace_extension("tex") == "a.tex");
+ BOOST_TEST(path("a.").replace_extension(".tex") == "a.tex");
+ BOOST_TEST(path("a.").replace_extension("tex") == "a.tex");
+ BOOST_TEST(path("a").replace_extension(".txt") == "a.txt");
+ BOOST_TEST(path("a").replace_extension("txt") == "a.txt");
+ BOOST_TEST(path("a.b.txt").replace_extension(".tex") == "a.b.tex");
+ BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b.tex");
+ BOOST_TEST(path("a/b").replace_extension(".c") == "a/b.c");
+ PATH_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702
+ BOOST_TEST(path("foo.txt").replace_extension("exe") == "foo.exe"); // ticket 5118
+ BOOST_TEST(path("foo.txt").replace_extension(".tar.bz2")
+ == "foo.tar.bz2"); // ticket 5118
+ }
+
+ // make_preferred_tests ------------------------------------------------------------//
+
+ void make_preferred_tests()
+ {
+ std::cout << "make_preferred_tests..." << std::endl;
+
+ if (platform == "Windows")
+ {
+ BOOST_TEST(path("//abc\\def/ghi").make_preferred().native()
+ == path("\\\\abc\\def\\ghi").native());
+ }
+ else
+ {
+ BOOST_TEST(path("//abc\\def/ghi").make_preferred().native()
+ == path("//abc\\def/ghi").native());
+ }
+ }
+
+ // lexically_normal_tests ----------------------------------------------------------//
+
+ void lexically_normal_tests()
+ {
+ std::cout << "lexically_normal_tests..." << std::endl;
+
+ // Note: lexically_lexically_normal() uses /= to build up some results, so these results will
+ // have the platform's preferred separator. Since that is immaterial to the correct
+ // functioning of lexically_lexically_normal(), the test results are converted to generic form,
+ // and the expected results are also given in generic form. Otherwise many of the
+ // tests would incorrectly be reported as failing on Windows.
+
+ PATH_TEST_EQ(path("").lexically_normal().generic_path(), "");
+ PATH_TEST_EQ(path("/").lexically_normal().generic_path(), "/");
+ PATH_TEST_EQ(path("//").lexically_normal().generic_path(), "//");
+ PATH_TEST_EQ(path("///").lexically_normal().generic_path(), "/");
+ PATH_TEST_EQ(path("f").lexically_normal().generic_path(), "f");
+ PATH_TEST_EQ(path("foo").lexically_normal().generic_path(), "foo");
+ PATH_TEST_EQ(path("foo/").lexically_normal().generic_path(), "foo/.");
+ PATH_TEST_EQ(path("f/").lexically_normal().generic_path(), "f/.");
+ PATH_TEST_EQ(path("/foo").lexically_normal().generic_path(), "/foo");
+ PATH_TEST_EQ(path("foo/bar").lexically_normal().generic_path(), "foo/bar");
+ PATH_TEST_EQ(path("..").lexically_normal().generic_path(), "..");
+ PATH_TEST_EQ(path("../..").lexically_normal().generic_path(), "../..");
+ PATH_TEST_EQ(path("/..").lexically_normal().generic_path(), "/..");
+ PATH_TEST_EQ(path("/../..").lexically_normal().generic_path(), "/../..");
+ PATH_TEST_EQ(path("../foo").lexically_normal().generic_path(), "../foo");
+ PATH_TEST_EQ(path("foo/..").lexically_normal().generic_path(), ".");
+ PATH_TEST_EQ(path("foo/../").lexically_normal().generic_path(), "./.");
+ PATH_TEST_EQ((path("foo") / "..").lexically_normal().generic_path() , ".");
+ PATH_TEST_EQ(path("foo/...").lexically_normal().generic_path(), "foo/...");
+ PATH_TEST_EQ(path("foo/.../").lexically_normal().generic_path(), "foo/.../.");
+ PATH_TEST_EQ(path("foo/..bar").lexically_normal().generic_path(), "foo/..bar");
+ PATH_TEST_EQ(path("../f").lexically_normal().generic_path(), "../f");
+ PATH_TEST_EQ(path("/../f").lexically_normal().generic_path(), "/../f");
+ PATH_TEST_EQ(path("f/..").lexically_normal().generic_path(), ".");
+ PATH_TEST_EQ((path("f") / "..").lexically_normal().generic_path() , ".");
+ PATH_TEST_EQ(path("foo/../..").lexically_normal().generic_path(), "..");
+ PATH_TEST_EQ(path("foo/../../").lexically_normal().generic_path(), "../.");
+ PATH_TEST_EQ(path("foo/../../..").lexically_normal().generic_path(), "../..");
+ PATH_TEST_EQ(path("foo/../../../").lexically_normal().generic_path(), "../../.");
+ PATH_TEST_EQ(path("foo/../bar").lexically_normal().generic_path(), "bar");
+ PATH_TEST_EQ(path("foo/../bar/").lexically_normal().generic_path(), "bar/.");
+ PATH_TEST_EQ(path("foo/bar/..").lexically_normal().generic_path(), "foo");
+ PATH_TEST_EQ(path("foo/./bar/..").lexically_normal().generic_path(), "foo");
+ std::cout << path("foo/./bar/..").lexically_normal() << std::endl; // outputs "foo"
+ PATH_TEST_EQ(path("foo/bar/../").lexically_normal().generic_path(), "foo/.");
+ PATH_TEST_EQ(path("foo/./bar/../").lexically_normal().generic_path(), "foo/.");
+ std::cout << path("foo/./bar/../").lexically_normal() << std::endl; // POSIX: "foo/.", Windows: "foo\."
+ PATH_TEST_EQ(path("foo/bar/../..").lexically_normal().generic_path(), ".");
+ PATH_TEST_EQ(path("foo/bar/../../").lexically_normal().generic_path(), "./.");
+ PATH_TEST_EQ(path("foo/bar/../blah").lexically_normal().generic_path(), "foo/blah");
+ PATH_TEST_EQ(path("f/../b").lexically_normal().generic_path(), "b");
+ PATH_TEST_EQ(path("f/b/..").lexically_normal().generic_path(), "f");
+ PATH_TEST_EQ(path("f/b/../").lexically_normal().generic_path(), "f/.");
+ PATH_TEST_EQ(path("f/b/../a").lexically_normal().generic_path(), "f/a");
+ PATH_TEST_EQ(path("foo/bar/blah/../..").lexically_normal().generic_path(), "foo");
+ PATH_TEST_EQ(path("foo/bar/blah/../../bletch").lexically_normal().generic_path(), "foo/bletch");
+ PATH_TEST_EQ(path("//net").lexically_normal().generic_path(), "//net");
+ PATH_TEST_EQ(path("//net/").lexically_normal().generic_path(), "//net/");
+ PATH_TEST_EQ(path("//..net").lexically_normal().generic_path(), "//..net");
+ PATH_TEST_EQ(path("//net/..").lexically_normal().generic_path(), "//net/..");
+ PATH_TEST_EQ(path("//net/foo").lexically_normal().generic_path(), "//net/foo");
+ PATH_TEST_EQ(path("//net/foo/").lexically_normal().generic_path(), "//net/foo/.");
+ PATH_TEST_EQ(path("//net/foo/..").lexically_normal().generic_path(), "//net/");
+ PATH_TEST_EQ(path("//net/foo/../").lexically_normal().generic_path(), "//net/.");
+
+ PATH_TEST_EQ(path("/net/foo/bar").lexically_normal().generic_path(), "/net/foo/bar");
+ PATH_TEST_EQ(path("/net/foo/bar/").lexically_normal().generic_path(), "/net/foo/bar/.");
+ PATH_TEST_EQ(path("/net/foo/..").lexically_normal().generic_path(), "/net");
+ PATH_TEST_EQ(path("/net/foo/../").lexically_normal().generic_path(), "/net/.");
+
+ PATH_TEST_EQ(path("//net//foo//bar").lexically_normal().generic_path(), "//net/foo/bar");
+ PATH_TEST_EQ(path("//net//foo//bar//").lexically_normal().generic_path(), "//net/foo/bar/.");
+ PATH_TEST_EQ(path("//net//foo//..").lexically_normal().generic_path(), "//net/");
+ PATH_TEST_EQ(path("//net//foo//..//").lexically_normal().generic_path(), "//net/.");
+
+ PATH_TEST_EQ(path("///net///foo///bar").lexically_normal().generic_path(), "/net/foo/bar");
+ PATH_TEST_EQ(path("///net///foo///bar///").lexically_normal().generic_path(), "/net/foo/bar/.");
+ PATH_TEST_EQ(path("///net///foo///..").lexically_normal().generic_path(), "/net");
+ PATH_TEST_EQ(path("///net///foo///..///").lexically_normal().generic_path(), "/net/.");
+
+ if (platform == "Windows")
+ {
+ PATH_TEST_EQ(path("c:..").lexically_normal().generic_path(), "c:..");
+ PATH_TEST_EQ(path("c:foo/..").lexically_normal().generic_path(), "c:");
+
+ PATH_TEST_EQ(path("c:foo/../").lexically_normal().generic_path(), "c:.");
+
+ PATH_TEST_EQ(path("c:/foo/..").lexically_normal().generic_path(), "c:/");
+ PATH_TEST_EQ(path("c:/foo/../").lexically_normal().generic_path(), "c:/.");
+ PATH_TEST_EQ(path("c:/..").lexically_normal().generic_path(), "c:/..");
+ PATH_TEST_EQ(path("c:/../").lexically_normal().generic_path(), "c:/../.");
+ PATH_TEST_EQ(path("c:/../..").lexically_normal().generic_path(), "c:/../..");
+ PATH_TEST_EQ(path("c:/../../").lexically_normal().generic_path(), "c:/../../.");
+ PATH_TEST_EQ(path("c:/../foo").lexically_normal().generic_path(), "c:/../foo");
+ PATH_TEST_EQ(path("c:/../foo/").lexically_normal().generic_path(), "c:/../foo/.");
+ PATH_TEST_EQ(path("c:/../../foo").lexically_normal().generic_path(), "c:/../../foo");
+ PATH_TEST_EQ(path("c:/../../foo/").lexically_normal().generic_path(), "c:/../../foo/.");
+ PATH_TEST_EQ(path("c:/..foo").lexically_normal().generic_path(), "c:/..foo");
+ }
+ else // POSIX
+ {
+ PATH_TEST_EQ(path("c:..").lexically_normal(), "c:..");
+ PATH_TEST_EQ(path("c:foo/..").lexically_normal(), ".");
+ PATH_TEST_EQ(path("c:foo/../").lexically_normal(), "./.");
+ PATH_TEST_EQ(path("c:/foo/..").lexically_normal(), "c:");
+ PATH_TEST_EQ(path("c:/foo/../").lexically_normal(), "c:/.");
+ PATH_TEST_EQ(path("c:/..").lexically_normal(), ".");
+ PATH_TEST_EQ(path("c:/../").lexically_normal(), "./.");
+ PATH_TEST_EQ(path("c:/../..").lexically_normal(), "..");
+ PATH_TEST_EQ(path("c:/../../").lexically_normal(), "../.");
+ PATH_TEST_EQ(path("c:/../foo").lexically_normal(), "foo");
+ PATH_TEST_EQ(path("c:/../foo/").lexically_normal(), "foo/.");
+ PATH_TEST_EQ(path("c:/../../foo").lexically_normal(), "../foo");
+ PATH_TEST_EQ(path("c:/../../foo/").lexically_normal(), "../foo/.");
+ PATH_TEST_EQ(path("c:/..foo").lexically_normal(), "c:/..foo");
+ }
+ }
+
+ inline void odr_use(const path::value_type& c)
+ {
+ static const path::value_type dummy = '\0';
+ BOOST_TEST(&c != &dummy);
+ }
+
+} // unnamed namespace
+
+static boost::filesystem::path ticket_6737 = "FilePath"; // #6737 reported this crashed
+ // on VC++ debug mode build
+const boost::filesystem::path ticket_6690("test"); // #6690 another V++ static init crash
+
+//--------------------------------------------------------------------------------------//
+// //
+// main //
+// //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int, char*[])
+{
+ // The choice of platform is make at runtime rather than compile-time
+ // so that compile errors for all platforms will be detected even though
+ // only the current platform is runtime tested.
+ platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
+ ? "Windows"
+ : "POSIX";
+ std::cout << "Platform is " << platform << '\n';
+
+ BOOST_TEST(p1.string() != p3.string());
+ p3 = p2;
+ BOOST_TEST(p1.string() == p3.string());
+
+ path p04("foobar");
+ BOOST_TEST(p04.string() == "foobar");
+ p04 = p04; // self-assignment
+ BOOST_TEST(p04.string() == "foobar");
+
+ construction_tests();
+ append_tests();
+ self_assign_and_append_tests();
+ overload_tests();
+ query_and_decomposition_tests();
+ composition_tests();
+ iterator_tests();
+ non_member_tests();
+ exception_tests();
+ name_function_tests();
+ replace_extension_tests();
+ make_preferred_tests();
+ lexically_normal_tests();
+
+ // verify deprecated names still available
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+
+ p1.branch_path();
+ p1.leaf();
+ path p_remove_leaf;
+ p_remove_leaf.remove_leaf();
+
+# endif
+
+ std::string s1("//:somestring"); // this used to be treated specially
+
+ // check the path member templates
+ p5.assign(s1.begin(), s1.end());
+
+ PATH_TEST_EQ(p5.string(), "//:somestring");
+ p5 = s1;
+ PATH_TEST_EQ(p5.string(), "//:somestring");
+
+ // this code, courtesy of David Whetstone, detects a now fixed bug that
+ // derefereced the end iterator (assuming debug build with checked itors)
+ std::vector<char> v1;
+ p5.assign(v1.begin(), v1.end());
+ std::string s2(v1.begin(), v1.end());
+ PATH_TEST_EQ(p5.string(), s2);
+ p5.assign(s1.begin(), s1.begin() + 1);
+ PATH_TEST_EQ(p5.string(), "/");
+
+ BOOST_TEST(p1 != p4);
+ BOOST_TEST(p1.string() == p2.string());
+ BOOST_TEST(p1.string() == p3.string());
+ BOOST_TEST(path("foo").filename() == "foo");
+ BOOST_TEST(path("foo").parent_path().string() == "");
+ BOOST_TEST(p1.filename() == "fum");
+ BOOST_TEST(p1.parent_path().string() == "fe/fi/fo");
+ BOOST_TEST(path("").empty() == true);
+ BOOST_TEST(path("foo").empty() == false);
+
+ // inserter and extractor tests
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier
+ std::cout << "\nInserter and extractor test...";
+ std::stringstream ss;
+ ss << fs::path("foo/bar") << std::endl;
+ fs::path round_trip;
+ ss >> round_trip;
+ BOOST_TEST(round_trip.string() == "foo/bar");
+ std::cout << round_trip.string() << "..." << round_trip << " complete\n";
+# endif
+
+ // Check that path constants have definitions
+ // https://svn.boost.org/trac10/ticket/12759
+ odr_use(path::separator);
+ odr_use(path::preferred_separator);
+ odr_use(path::dot);
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/path_times.cpp b/src/boost/libs/filesystem/test/path_times.cpp
new file mode 100644
index 000000000..1da54b29e
--- /dev/null
+++ b/src/boost/libs/filesystem/test/path_times.cpp
@@ -0,0 +1,103 @@
+// Boost Filesystem path_times.cpp ---------------------------------------------------//
+
+// Copyright Beman Dawes 2013
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/timer/timer.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = boost::filesystem;
+using namespace boost::timer;
+
+#include <fstream>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+namespace
+{
+ boost::int64_t max_cycles;
+
+ template <class STD_STRING>
+ nanosecond_type time_ctor(const STD_STRING& s)
+ {
+ boost::timer::auto_cpu_timer tmr;
+ boost::int64_t count = 0;
+ do
+ {
+ fs::path p(s);
+ ++count;
+ } while (count < max_cycles);
+
+ boost::timer::cpu_times elapsed = tmr.elapsed();
+ return elapsed.user + elapsed.system;
+ }
+
+ nanosecond_type time_loop()
+ {
+ boost::timer::auto_cpu_timer tmr;
+ boost::int64_t count = 0;
+ do
+ {
+ ++count;
+ } while (count < max_cycles);
+
+ boost::timer::cpu_times elapsed = tmr.elapsed();
+ return elapsed.user + elapsed.system;
+ }
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// main //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ if (argc != 2)
+ {
+ cout << "Usage: path_times <cycles-in-millions>\n";
+ return 1;
+ }
+
+ max_cycles = std::atoi(argv[1]) * 1000000LL;
+ cout << "testing " << std::atoi(argv[1]) << " million cycles" << endl;
+
+ cout << "time_loop" << endl;
+ nanosecond_type x = time_loop();
+
+ cout << "time_ctor with string" << endl;
+ nanosecond_type s = time_ctor(std::string("/foo/bar/baz"));
+
+ cout << "time_ctor with wstring" << endl;
+ nanosecond_type w = time_ctor(std::wstring(L"/foo/bar/baz"));
+
+ if (s > w)
+ cout << "narrow/wide CPU-time ratio = " << long double(s)/w << endl;
+ else
+ cout << "wide/narrow CPU-time ratio = " << long double(w)/s << endl;
+
+ cout << "returning from main()" << endl;
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/test/path_unit_test.cpp b/src/boost/libs/filesystem/test/path_unit_test.cpp
new file mode 100644
index 000000000..7ec707363
--- /dev/null
+++ b/src/boost/libs/filesystem/test/path_unit_test.cpp
@@ -0,0 +1,1253 @@
+// filesystem path_unit_test.cpp --------------------------------------------------- //
+
+// Copyright Beman Dawes 2008, 2009
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+// ---------------------------------------------------------------------------------- //
+//
+// The purpose of this test is to ensure that each function in the public
+// interface can be called with arguments of the appropriate types. It does
+// not attempt to verify that the full range of values for each argument
+// are processed correctly.
+//
+// For full functionality tests, including probes with many different argument
+// values, see path_test.cpp and other test programs.
+//
+// ---------------------------------------------------------------------------------- //
+
+#include <boost/config/warning_disable.hpp>
+
+// See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/path.hpp>
+
+#include <boost/filesystem/detail/utf8_codecvt_facet.hpp> // for imbue tests
+#include "test_codecvt.hpp" // for codecvt arg tests
+#include <boost/detail/lightweight_test_report.hpp>
+#include <boost/smart_ptr.hpp> // used constructor tests
+#include <boost/functional/hash.hpp>
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <string>
+#include <cstring>
+#include <cwchar>
+#include <locale>
+#include <list>
+
+namespace fs = boost::filesystem;
+namespace bs = boost::system;
+using boost::filesystem::path;
+using std::cout;
+using std::endl;
+using std::string;
+using std::wstring;
+
+#define CHECK(x) check(x, __FILE__, __LINE__)
+#define PATH_IS(a, b) check_path(a, b, __FILE__, __LINE__)
+#define NATIVE_IS(p, s, ws) check_native(p, s, ws, __FILE__, __LINE__)
+#define IS(a,b) check_equal(a, b, __FILE__, __LINE__)
+
+#if defined(_MSC_VER)
+# pragma warning(push) // Save warning settings.
+# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning.
+#endif
+
+namespace
+{
+
+ boost::system::error_code ec;
+ const boost::system::error_code ok;
+ const boost::system::error_code ng(-1, boost::system::system_category());
+
+ std::string platform(BOOST_PLATFORM);
+
+ void check_path(const path& source,
+ const wstring& expected, const char* file, int line)
+ {
+ if (source == expected) return;
+
+ ++::boost::detail::test_errors();
+
+ std::cout << file;
+ std::wcout << L'(' << line << L"): source.wstring(): \""
+ << source.wstring()
+ << L"\" != expected: \"" << expected
+ << L"\"\n" ;
+ }
+
+# ifdef BOOST_WINDOWS_API
+ void check_native(const path& p,
+ const string&, const wstring& expected, const char* file, int line)
+# else
+ void check_native(const path& p,
+ const string& expected, const wstring&, const char* file, int line)
+# endif
+ {
+ if (p.native() == expected) return;
+
+ ++::boost::detail::test_errors();
+
+ std::cout << file << '(' << line << "): native() is not equal expected\n"
+ " native---: " << std::hex;
+ path::string_type nat(p.native());
+ for (path::string_type::const_iterator it = nat.begin(); it != nat.end(); ++it)
+ std::cout << long(*it) << ' ';
+ std::cout << "\n expected-: ";
+ for (path::string_type::const_iterator it = expected.begin(); it != expected.end(); ++it)
+ std::cout << long(*it) << ' ';
+ std::cout << std::dec << std::endl;
+ }
+
+ template< class T1, class T2 >
+ void check_equal(const T1& value,
+ const T2& expected, const char* file, int line)
+ {
+ if (value == expected) return;
+
+ ++::boost::detail::test_errors();
+
+ std::cout << file;
+
+ std::wcout << L'(' << line << L"): value: \"" << value
+ << L"\" != expected: \"" << expected
+ << L"\"\n" ;
+ }
+
+ void check(bool ok_, const char* file, int line)
+ {
+ if (ok_) return;
+
+ ++::boost::detail::test_errors();
+
+ std::cout << file << '(' << line << "): test failed\n";
+ }
+
+ string s("string");
+ wstring ws(L"wstring");
+ std::list<char> l; // see main() for initialization to s, t, r, i, n, g
+ std::list<wchar_t> wl; // see main() for initialization to w, s, t, r, i, n, g
+ std::vector<char> v; // see main() for initialization to f, u, z
+ std::vector<wchar_t> wv; // see main() for initialization to w, f, u, z
+
+ class Base {};
+ class Derived : public Base {};
+ void fun(const boost::shared_ptr< Base >&) {}
+
+ // test_constructors ---------------------------------------------------------------//
+
+ void test_constructors()
+ {
+ std::cout << "testing constructors..." << std::endl;
+
+ path x0; // default constructor
+ PATH_IS(x0, L"");
+ BOOST_TEST_EQ(x0.native().size(), 0U);
+
+ path x1(l.begin(), l.end()); // iterator range char
+ PATH_IS(x1, L"string");
+ BOOST_TEST_EQ(x1.native().size(), 6U);
+
+ path x2(x1); // copy constructor
+ PATH_IS(x2, L"string");
+ BOOST_TEST_EQ(x2.native().size(), 6U);
+
+ path x3(wl.begin(), wl.end()); // iterator range wchar_t
+ PATH_IS(x3, L"wstring");
+ BOOST_TEST_EQ(x3.native().size(), 7U);
+
+ // contiguous containers
+ path x4(string("std::string")); // std::string
+ PATH_IS(x4, L"std::string");
+ BOOST_TEST_EQ(x4.native().size(), 11U);
+
+ path x5(wstring(L"std::wstring")); // std::wstring
+ PATH_IS(x5, L"std::wstring");
+ BOOST_TEST_EQ(x5.native().size(), 12U);
+
+ path x4v(v); // std::vector<char>
+ PATH_IS(x4v, L"fuz");
+ BOOST_TEST_EQ(x4v.native().size(), 3U);
+
+ path x5v(wv); // std::vector<wchar_t>
+ PATH_IS(x5v, L"wfuz");
+ BOOST_TEST_EQ(x5v.native().size(), 4U);
+
+ path x6("array char"); // array char
+ PATH_IS(x6, L"array char");
+ BOOST_TEST_EQ(x6.native().size(), 10U);
+
+ path x7(L"array wchar_t"); // array wchar_t
+ PATH_IS(x7, L"array wchar_t");
+ BOOST_TEST_EQ(x7.native().size(), 13U);
+
+ char char_array[100];
+ std::strcpy(char_array, "big array char");
+ path x6o(char_array); // array char, only partially full
+ PATH_IS(x6o, L"big array char");
+ BOOST_TEST_EQ(x6o.native().size(), 14U);
+
+ wchar_t wchar_array[100];
+ std::wcscpy(wchar_array, L"big array wchar_t");
+ path x7o(wchar_array); // array char, only partially full
+ PATH_IS(x7o, L"big array wchar_t");
+ BOOST_TEST_EQ(x7o.native().size(), 17U);
+
+ path x8(s.c_str()); // const char* null terminated
+ PATH_IS(x8, L"string");
+ BOOST_TEST_EQ(x8.native().size(), 6U);
+
+ path x9(ws.c_str()); // const wchar_t* null terminated
+ PATH_IS(x9, L"wstring");
+ BOOST_TEST_EQ(x9.native().size(), 7U);
+
+ path x8nc(const_cast<char*>(s.c_str())); // char* null terminated
+ PATH_IS(x8nc, L"string");
+ BOOST_TEST_EQ(x8nc.native().size(), 6U);
+
+ path x9nc(const_cast<wchar_t*>(ws.c_str())); // wchar_t* null terminated
+ PATH_IS(x9nc, L"wstring");
+ BOOST_TEST_EQ(x9nc.native().size(), 7U);
+
+ // non-contiguous containers
+ path x10(l); // std::list<char>
+ PATH_IS(x10, L"string");
+ BOOST_TEST_EQ(x10.native().size(), 6U);
+
+ path xll(wl); // std::list<wchar_t>
+ PATH_IS(xll, L"wstring");
+ BOOST_TEST_EQ(xll.native().size(), 7U);
+
+ // easy-to-make coding errors
+ // path e1(x0, path::codecvt()); // fails to compile, and that is OK
+
+ boost::shared_ptr< Derived > pDerived( new Derived() );
+ fun( pDerived ); // tests constructor member template enable_if working correctly;
+ // will fail to compile if enable_if not taking path off the table
+ }
+
+ path x;
+ path y;
+
+ // test_assignments ----------------------------------------------------------------//
+
+ void test_assignments()
+ {
+ std::cout << "testing assignments..." << std::endl;
+
+ x = path("yet another path"); // another path
+ PATH_IS(x, L"yet another path");
+ BOOST_TEST_EQ(x.native().size(), 16U);
+
+ x = x; // self-assignment
+ PATH_IS(x, L"yet another path");
+ BOOST_TEST_EQ(x.native().size(), 16U);
+
+ x.assign(l.begin(), l.end()); // iterator range char
+ PATH_IS(x, L"string");
+
+ x.assign(wl.begin(), wl.end()); // iterator range wchar_t
+ PATH_IS(x, L"wstring");
+
+ x = string("std::string"); // container char
+ PATH_IS(x, L"std::string");
+
+ x = wstring(L"std::wstring"); // container wchar_t
+ PATH_IS(x, L"std::wstring");
+
+ x = "array char"; // array char
+ PATH_IS(x, L"array char");
+
+ x = L"array wchar"; // array wchar_t
+ PATH_IS(x, L"array wchar");
+
+ x = s.c_str(); // const char* null terminated
+ PATH_IS(x, L"string");
+
+ x = ws.c_str(); // const wchar_t* null terminated
+ PATH_IS(x, L"wstring");
+ }
+
+ // test_move_construction_and_assignment -------------------------------------------//
+
+ void test_move_construction_and_assignment()
+ {
+ std::cout << "testing move_construction_and_assignment..." << std::endl;
+
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ path from("long enough to avoid small object optimization");
+ path to(std::move(from));
+ BOOST_TEST(to == "long enough to avoid small object optimization");
+ if (!from.empty())
+ cout << "Note: move construction did not result in empty source path" << endl;
+
+ path from2("long enough to avoid small object optimization");
+ path to2;
+ to2 = std::move(from2);
+ BOOST_TEST(to2 == "long enough to avoid small object optimization");
+ if (!from2.empty())
+ cout << "Note: move assignment did not result in empty rhs path" << endl;
+# else
+ std::cout <<
+ "Test skipped because compiler does not support move semantics" << std::endl;
+# endif
+
+ }
+
+ // test_appends --------------------------------------------------------------------//
+
+ void test_appends()
+ {
+ std::cout << "testing appends..." << std::endl;
+
+# ifdef BOOST_WINDOWS_API
+# define BOOST_FS_FOO L"/foo\\"
+# else // POSIX paths
+# define BOOST_FS_FOO L"/foo/"
+# endif
+
+ x = "/foo";
+ x /= path(""); // empty path
+ PATH_IS(x, L"/foo");
+
+ x = "/foo";
+ x /= path("/"); // slash path
+ PATH_IS(x, L"/foo/");
+
+ x = "/foo";
+ x /= path("/boo"); // slash path
+ PATH_IS(x, L"/foo/boo");
+
+ x = "/foo";
+ x /= x; // self-append
+ PATH_IS(x, L"/foo/foo");
+
+ x = "/foo";
+ x /= path("yet another path"); // another path
+ PATH_IS(x, BOOST_FS_FOO L"yet another path");
+
+ x = "/foo";
+ x.append(l.begin(), l.end()); // iterator range char
+ PATH_IS(x, BOOST_FS_FOO L"string");
+
+ x = "/foo";
+ x.append(wl.begin(), wl.end()); // iterator range wchar_t
+ PATH_IS(x, BOOST_FS_FOO L"wstring");
+
+ x = "/foo";
+ x /= string("std::string"); // container char
+ PATH_IS(x, BOOST_FS_FOO L"std::string");
+
+ x = "/foo";
+ x /= wstring(L"std::wstring"); // container wchar_t
+ PATH_IS(x, BOOST_FS_FOO L"std::wstring");
+
+ x = "/foo";
+ x /= "array char"; // array char
+ PATH_IS(x, BOOST_FS_FOO L"array char");
+
+ x = "/foo";
+ x /= L"array wchar"; // array wchar_t
+ PATH_IS(x, BOOST_FS_FOO L"array wchar");
+
+ x = "/foo";
+ x /= s.c_str(); // const char* null terminated
+ PATH_IS(x, BOOST_FS_FOO L"string");
+
+ x = "/foo";
+ x /= ws.c_str(); // const wchar_t* null terminated
+ PATH_IS(x, BOOST_FS_FOO L"wstring");
+ }
+
+ // test_concats --------------------------------------------------------------------//
+
+ void test_concats()
+ {
+ std::cout << "testing concats..." << std::endl;
+
+ x = "/foo";
+ x += path(""); // empty path
+ PATH_IS(x, L"/foo");
+
+ x = "/foo";
+ x += path("/"); // slash path
+ PATH_IS(x, L"/foo/");
+
+ x = "/foo";
+ x += path("boo"); // slash path
+ PATH_IS(x, L"/fooboo");
+
+ x = "foo";
+ x += x; // self-append
+ PATH_IS(x, L"foofoo");
+
+ x = "foo-";
+ x += path("yet another path"); // another path
+ PATH_IS(x, L"foo-yet another path");
+
+ x = "foo-";
+ x.concat(l.begin(), l.end()); // iterator range char
+ PATH_IS(x, L"foo-string");
+
+ x = "foo-";
+ x.concat(wl.begin(), wl.end()); // iterator range wchar_t
+ PATH_IS(x, L"foo-wstring");
+
+ x = "foo-";
+ x += string("std::string"); // container char
+ PATH_IS(x, L"foo-std::string");
+
+ x = "foo-";
+ x += wstring(L"std::wstring"); // container wchar_t
+ PATH_IS(x, L"foo-std::wstring");
+
+ x = "foo-";
+ x += "array char"; // array char
+ PATH_IS(x, L"foo-array char");
+
+ x = "foo-";
+ x += L"array wchar"; // array wchar_t
+ PATH_IS(x, L"foo-array wchar");
+
+ x = "foo-";
+ x += s.c_str(); // const char* null terminated
+ PATH_IS(x, L"foo-string");
+
+ x = "foo-";
+ x += ws.c_str(); // const wchar_t* null terminated
+ PATH_IS(x, L"foo-wstring");
+
+ x = "foo-";
+ x += 'x'; // char
+ PATH_IS(x, L"foo-x");
+
+ x = "foo-";
+ x += L'x'; // wchar
+ PATH_IS(x, L"foo-x");
+ }
+
+ // test_observers ------------------------------------------------------------------//
+
+ void test_observers()
+ {
+ std::cout << "testing observers..." << std::endl;
+
+ path p0("abc");
+
+ CHECK(p0.native().size() == 3);
+ CHECK(p0.size() == 3);
+ CHECK(p0.string() == "abc");
+ CHECK(p0.string().size() == 3);
+ CHECK(p0.wstring() == L"abc");
+ CHECK(p0.wstring().size() == 3);
+
+ p0 = "";
+ CHECK(p0.native().size() == 0);
+ CHECK(p0.size() == 0);
+
+# ifdef BOOST_WINDOWS_API
+
+ path p("abc\\def/ghi");
+
+ CHECK(std::wstring(p.c_str()) == L"abc\\def/ghi");
+
+ CHECK(p.string() == "abc\\def/ghi");
+ CHECK(p.wstring() == L"abc\\def/ghi");
+
+ CHECK(p.generic_path().string() == "abc/def/ghi");
+ CHECK(p.generic_string() == "abc/def/ghi");
+ CHECK(p.generic_wstring() == L"abc/def/ghi");
+
+ CHECK(p.generic_string<string>() == "abc/def/ghi");
+ CHECK(p.generic_string<wstring>() == L"abc/def/ghi");
+ CHECK(p.generic_string<path::string_type>() == L"abc/def/ghi");
+
+# else // BOOST_POSIX_API
+
+ path p("abc\\def/ghi");
+
+ CHECK(string(p.c_str()) == "abc\\def/ghi");
+
+ CHECK(p.string() == "abc\\def/ghi");
+ CHECK(p.wstring() == L"abc\\def/ghi");
+
+ CHECK(p.generic_path().string() == "abc\\def/ghi");
+ CHECK(p.generic_string() == "abc\\def/ghi");
+ CHECK(p.generic_wstring() == L"abc\\def/ghi");
+
+ CHECK(p.generic_string<string>() == "abc\\def/ghi");
+ CHECK(p.generic_string<wstring>() == L"abc\\def/ghi");
+ CHECK(p.generic_string<path::string_type>() == "abc\\def/ghi");
+
+# endif
+ }
+
+ // test_relationals ----------------------------------------------------------------//
+
+ void test_relationals()
+ {
+ std::cout << "testing relationals..." << std::endl;
+
+ boost::hash<path> hash;
+
+# ifdef BOOST_WINDOWS_API
+ // this is a critical use case to meet user expectations
+ CHECK(path("c:\\abc") == path("c:/abc"));
+ CHECK(hash(path("c:\\abc")) == hash(path("c:/abc")));
+# endif
+
+ const path p("bar");
+ const path p2("baz");
+
+ CHECK(!(p < p));
+ CHECK(p < p2);
+ CHECK(!(p2 < p));
+ CHECK(p < "baz");
+ CHECK(p < string("baz"));
+ CHECK(p < L"baz");
+ CHECK(p < wstring(L"baz"));
+ CHECK(!("baz" < p));
+ CHECK(!(string("baz") < p));
+ CHECK(!(L"baz" < p));
+ CHECK(!(wstring(L"baz") < p));
+
+ CHECK(p == p);
+ CHECK(!(p == p2));
+ CHECK(!(p2 == p));
+ CHECK(p2 == "baz");
+ CHECK(p2 == string("baz"));
+ CHECK(p2 == L"baz");
+ CHECK(p2 == wstring(L"baz"));
+ CHECK("baz" == p2);
+ CHECK(string("baz") == p2);
+ CHECK(L"baz" == p2);
+ CHECK(wstring(L"baz") == p2);
+
+ CHECK(hash(p) == hash(p));
+ CHECK(hash(p) != hash(p2)); // Not strictly required, but desirable
+
+ CHECK(!(p != p));
+ CHECK(p != p2);
+ CHECK(p2 != p);
+
+ CHECK(p <= p);
+ CHECK(p <= p2);
+ CHECK(!(p2 <= p));
+
+ CHECK(!(p > p));
+ CHECK(!(p > p2));
+ CHECK(p2 > p);
+
+ CHECK(p >= p);
+ CHECK(!(p >= p2));
+ CHECK(p2 >= p);
+}
+
+ // test_inserter_and_extractor -----------------------------------------------------//
+
+ void test_inserter_and_extractor()
+ {
+ std::cout << "testing inserter and extractor..." << std::endl;
+
+ path p1("foo bar"); // verify space in path roundtrips per ticket #3863
+ path p2;
+
+ std::stringstream ss;
+
+ CHECK(p1 != p2);
+ ss << p1;
+ ss >> p2;
+ CHECK(p1 == p2);
+
+ path wp1(L"foo bar");
+ path wp2;
+
+ std::wstringstream wss;
+
+ CHECK(wp1 != wp2);
+ wss << wp1;
+ wss >> wp2;
+ CHECK(wp1 == wp2);
+ }
+
+ // test_other_non_members ----------------------------------------------------------//
+
+ void test_other_non_members()
+ {
+ std::cout << "testing other_non_members..." << std::endl;
+
+ path p1("foo");
+ path p2("bar");
+
+ // operator /
+
+ CHECK(p1 / p2 == path("foo/bar").make_preferred());
+ CHECK("foo" / p2 == path("foo/bar").make_preferred());
+ CHECK(L"foo" / p2 == path("foo/bar").make_preferred());
+ CHECK(string("foo") / p2 == path("foo/bar").make_preferred());
+ CHECK(wstring(L"foo") / p2 == path("foo/bar").make_preferred());
+ CHECK(p1 / "bar" == path("foo/bar").make_preferred());
+ CHECK(p1 / L"bar" == path("foo/bar").make_preferred());
+ CHECK(p1 / string("bar") == path("foo/bar").make_preferred());
+ CHECK(p1 / wstring(L"bar") == path("foo/bar").make_preferred());
+
+ swap(p1, p2);
+
+ CHECK(p1 == "bar");
+ CHECK(p2 == "foo");
+
+ CHECK(!path("").filename_is_dot());
+ CHECK(!path("").filename_is_dot_dot());
+ CHECK(!path("..").filename_is_dot());
+ CHECK(!path(".").filename_is_dot_dot());
+ CHECK(!path("...").filename_is_dot_dot());
+ CHECK(path(".").filename_is_dot());
+ CHECK(path("..").filename_is_dot_dot());
+ CHECK(path("/.").filename_is_dot());
+ CHECK(path("/..").filename_is_dot_dot());
+ CHECK(!path("a.").filename_is_dot());
+ CHECK(!path("a..").filename_is_dot_dot());
+
+ // edge cases
+ CHECK(path("foo/").filename() == path("."));
+ CHECK(path("foo/").filename_is_dot());
+ CHECK(path("/").filename() == path("/"));
+ CHECK(!path("/").filename_is_dot());
+# ifdef BOOST_WINDOWS_API
+ CHECK(path("c:.").filename() == path("."));
+ CHECK(path("c:.").filename_is_dot());
+ CHECK(path("c:/").filename() == path("/"));
+ CHECK(!path("c:\\").filename_is_dot());
+# else
+ CHECK(path("c:.").filename() == path("c:."));
+ CHECK(!path("c:.").filename_is_dot());
+ CHECK(path("c:/").filename() == path("."));
+ CHECK(path("c:/").filename_is_dot());
+# endif
+
+ // check that the implementation code to make the edge cases above work right
+ // doesn't cause some non-edge cases to fail
+ CHECK(path("c:").filename() != path("."));
+ CHECK(!path("c:").filename_is_dot());
+
+ // examples from reference.html
+ std::cout << path(".").filename_is_dot(); // outputs 1
+ std::cout << path("/.").filename_is_dot(); // outputs 1
+ std::cout << path("foo/.").filename_is_dot(); // outputs 1
+ std::cout << path("foo/").filename_is_dot(); // outputs 1
+ std::cout << path("/").filename_is_dot(); // outputs 0
+ std::cout << path("/foo").filename_is_dot(); // outputs 0
+ std::cout << path("/foo.").filename_is_dot(); // outputs 0
+ std::cout << path("..").filename_is_dot(); // outputs 0
+ cout << std::endl;
+ }
+
+// // test_modifiers ------------------------------------------------------------------//
+//
+// void test_modifiers()
+// {
+// std::cout << "testing modifiers..." << std::endl;
+//
+// }
+
+ // test_iterators ------------------------------------------------------------------//
+
+ void test_iterators()
+ {
+ std::cout << "testing iterators..." << std::endl;
+
+ path p1;
+ CHECK(p1.begin() == p1.end());
+
+ path p2("/");
+ CHECK(p2.begin() != p2.end());
+ CHECK(*p2.begin() == "/");
+ CHECK(++p2.begin() == p2.end());
+
+ path p3("foo/bar/baz");
+
+ path::iterator it(p3.begin());
+ CHECK(p3.begin() != p3.end());
+ CHECK(*it == "foo");
+ CHECK(*++it == "bar");
+ CHECK(*++it == "baz");
+ CHECK(*--it == "bar");
+ CHECK(*--it == "foo");
+ CHECK(*++it == "bar");
+ CHECK(*++it == "baz");
+ CHECK(++it == p3.end());
+ }
+
+ // test_reverse_iterators ----------------------------------------------------------//
+
+ void test_reverse_iterators()
+ {
+ std::cout << "testing reverse_iterators..." << std::endl;
+
+ path p1;
+ CHECK(p1.rbegin() == p1.rend());
+
+ path p2("/");
+ CHECK(p2.rbegin() != p2.rend());
+ CHECK(*p2.rbegin() == "/");
+ CHECK(++p2.rbegin() == p2.rend());
+
+ path p3("foo/bar/baz");
+
+ path::reverse_iterator it(p3.rbegin());
+ CHECK(p3.rbegin() != p3.rend());
+ CHECK(*it == "baz");
+ CHECK(*++it == "bar");
+ CHECK(*++it == "foo");
+ CHECK(*--it == "bar");
+ CHECK(*--it == "baz");
+ CHECK(*++it == "bar");
+ CHECK(*++it == "foo");
+ CHECK(++it == p3.rend());
+ }
+
+ // test_modifiers ------------------------------------------------------------------//
+
+ void test_modifiers()
+ {
+ std::cout << "testing modifiers..." << std::endl;
+
+ CHECK(path("").remove_filename() == "");
+ CHECK(path("foo").remove_filename() == "");
+ CHECK(path("/foo").remove_filename() == "/");
+ CHECK(path("foo/bar").remove_filename() == "foo");
+ BOOST_TEST_EQ(path("foo/bar/").remove_filename(), path("foo/bar"));
+ BOOST_TEST_EQ(path(".").remove_filename(), path(""));
+ BOOST_TEST_EQ(path("./.").remove_filename(), path("."));
+ BOOST_TEST_EQ(path("/.").remove_filename(), path("/"));
+ BOOST_TEST_EQ(path("..").remove_filename(), path(""));
+ BOOST_TEST_EQ(path("../..").remove_filename(), path(".."));
+ BOOST_TEST_EQ(path("/..").remove_filename(), path("/"));
+
+ }
+
+ // test_decompositions -------------------------------------------------------------//
+
+ void test_decompositions()
+ {
+ std::cout << "testing decompositions..." << std::endl;
+
+ CHECK(path("").root_name().string() == "");
+ CHECK(path("foo").root_name().string() == "");
+ CHECK(path("/").root_name().string() == "");
+ CHECK(path("/foo").root_name().string() == "");
+ CHECK(path("//netname").root_name().string() == "//netname");
+ CHECK(path("//netname/foo").root_name().string() == "//netname");
+
+ CHECK(path("").root_directory().string() == "");
+ CHECK(path("foo").root_directory().string() == "");
+ CHECK(path("/").root_directory().string() == "/");
+ CHECK(path("/foo").root_directory().string() == "/");
+ CHECK(path("//netname").root_directory().string() == "");
+ CHECK(path("//netname/foo").root_directory().string() == "/");
+
+ CHECK(path("").root_path().string() == "");
+ CHECK(path("/").root_path().string() == "/");
+ CHECK(path("/foo").root_path().string() == "/");
+ CHECK(path("//netname").root_path().string() == "//netname");
+ CHECK(path("//netname/foo").root_path().string() == "//netname/");
+
+# ifdef BOOST_WINDOWS_API
+ CHECK(path("c:/foo").root_path().string() == "c:/");
+# endif
+
+ CHECK(path("").relative_path().string() == "");
+ CHECK(path("/").relative_path().string() == "");
+ CHECK(path("/foo").relative_path().string() == "foo");
+
+ CHECK(path("").parent_path().string() == "");
+ CHECK(path("/").parent_path().string() == "");
+ CHECK(path("/foo").parent_path().string() == "/");
+ CHECK(path("/foo/bar").parent_path().string() == "/foo");
+
+ CHECK(path("/foo/bar/baz.zoo").filename().string() == "baz.zoo");
+
+ CHECK(path("/foo/bar/baz.zoo").stem().string() == "baz");
+ CHECK(path("/foo/bar.woo/baz").stem().string() == "baz");
+
+ CHECK(path("foo.bar.baz.tar.bz2").extension().string() == ".bz2");
+ CHECK(path("/foo/bar/baz.zoo").extension().string() == ".zoo");
+ CHECK(path("/foo/bar.woo/baz").extension().string() == "");
+ }
+
+ // test_queries --------------------------------------------------------------------//
+
+ void test_queries()
+ {
+ std::cout << "testing queries..." << std::endl;
+
+ path p1("");
+ path p2("//netname/foo.doo");
+
+ CHECK(p1.empty());
+ CHECK(!p1.has_root_path());
+ CHECK(!p1.has_root_name());
+ CHECK(!p1.has_root_directory());
+ CHECK(!p1.has_relative_path());
+ CHECK(!p1.has_parent_path());
+ CHECK(!p1.has_filename());
+ CHECK(!p1.has_stem());
+ CHECK(!p1.has_extension());
+ CHECK(!p1.is_absolute());
+ CHECK(p1.is_relative());
+
+ CHECK(!p2.empty());
+ CHECK(p2.has_root_path());
+ CHECK(p2.has_root_name());
+ CHECK(p2.has_root_directory());
+ CHECK(p2.has_relative_path());
+ CHECK(p2.has_parent_path());
+ CHECK(p2.has_filename());
+ CHECK(p2.has_stem());
+ CHECK(p2.has_extension());
+ CHECK(p2.is_absolute());
+ CHECK(!p2.is_relative());
+
+ }
+
+ // test_imbue_locale ---------------------------------------------------------------//
+
+ void test_imbue_locale()
+ {
+ std::cout << "testing imbue locale..." << std::endl;
+
+ // weak test case for before/after states since we don't know what characters the
+ // default locale accepts.
+ path before("abc");
+
+ // So that tests are run with known encoding, use Boost UTF-8 codecvt
+ // \u2722 and \xE2\x9C\xA2 are UTF-16 and UTF-8 FOUR TEARDROP-SPOKED ASTERISK
+
+ std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet);
+ std::cout << " imbuing locale ..." << std::endl;
+ std::locale old_loc = path::imbue(loc);
+
+ std::cout << " testing with the imbued locale ..." << std::endl;
+ path p2("\xE2\x9C\xA2");
+ CHECK(p2.wstring().size() == 1);
+ CHECK(p2.wstring()[0] == 0x2722);
+
+ std::cout << " imbuing the original locale ..." << std::endl;
+ path::imbue(old_loc);
+
+ std::cout << " testing with the original locale ..." << std::endl;
+ path after("abc");
+ CHECK(before == after);
+
+ std::cout << " locale testing complete" << std::endl;
+ }
+
+ // test_codecvt_argument -----------------------------------------------------------//
+
+ void test_codecvt_argument()
+ {
+ std::cout << "testing codecvt arguments..." << std::endl;
+
+ const char * c1 = "a1";
+ const std::string s1(c1);
+ const std::wstring ws1(L"b2"); // off-by-one mimics test_codecvt
+ const std::string s2("y8");
+ const std::wstring ws2(L"z9");
+
+ test_codecvt cvt; // produces off-by-one values that will always differ from
+ // the system's default locale codecvt facet
+
+ int t = 0;
+
+ // constructors
+ std::cout << " constructors test " << ++t << std::endl;
+ path p(c1, cvt);
+ NATIVE_IS(p, s1, ws1);
+
+ std::cout << " test " << ++t << std::endl;
+ path p1(s1.begin(), s1.end(), cvt);
+ NATIVE_IS(p1, s1, ws1);
+
+ std::cout << " test " << ++t << std::endl;
+ path p2(ws2, cvt);
+ NATIVE_IS(p2, s2, ws2);
+
+ std::cout << " test " << ++t << std::endl;
+ path p3(ws2.begin(), ws2.end(), cvt);
+ NATIVE_IS(p3, s2, ws2);
+
+ // path p2(p1, cvt); // fails to compile, and that is OK
+
+ // assigns
+ p1.clear();
+ std::cout << " assigns test " << ++t << std::endl;
+ p1.assign(s1,cvt);
+ NATIVE_IS(p1, s1, ws1);
+ p1.clear();
+ std::cout << " test " << ++t << std::endl;
+ p1.assign(s1.begin(), s1.end(), cvt);
+ NATIVE_IS(p1, s1, ws1);
+ // p1.assign(p, cvt); // fails to compile, and that is OK
+
+ // appends
+ p1.clear();
+ std::cout << " appends test " << ++t << std::endl;
+ p1.append(s1,cvt);
+ NATIVE_IS(p1, s1, ws1);
+ p1.clear();
+ std::cout << " test " << ++t << std::endl;
+ p1.append(s1.begin(), s1.end(), cvt);
+ NATIVE_IS(p1, s1, ws1);
+ // p1.append(p, cvt); // fails to compile, and that is OK
+
+ // native observers
+ std::cout << " native observers test " << ++t << std::endl;
+ CHECK(p.string<std::string>(cvt) == s1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.string(cvt) == s1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.string<std::wstring>(cvt) == ws1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.wstring(cvt) == ws1);
+
+ // generic observers
+ std::cout << " generic observers test " << ++t << std::endl;
+ CHECK(p.generic_string<std::string>(cvt) == s1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.generic_string(cvt) == s1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.generic_string<std::wstring>(cvt) == ws1);
+ std::cout << " test " << ++t << std::endl;
+ CHECK(p.generic_wstring(cvt) == ws1);
+
+ std::cout << " codecvt arguments testing complete" << std::endl;
+ }
+
+ // test_overloads ------------------------------------------------------------------//
+
+ void test_overloads()
+ {
+ std::cout << "testing overloads..." << std::endl;
+ std::string sto("hello");
+ const char a[] = "goodbye";
+ path p1(sto);
+ path p2(sto.c_str());
+ path p3(a);
+ path p4("foo");
+
+ std::wstring wsto(L"hello");
+ const wchar_t wa[] = L"goodbye";
+ path wp1(wsto);
+ path wp2(wsto.c_str());
+ path wp3(wa);
+ path wp4(L"foo");
+ }
+
+ // test_error_handling -------------------------------------------------------------//
+
+ class error_codecvt
+ : public std::codecvt< wchar_t, char, std::mbstate_t >
+ {
+ public:
+ explicit error_codecvt()
+ : std::codecvt<wchar_t, char, std::mbstate_t>() {}
+ protected:
+
+ virtual bool do_always_noconv() const throw() { return false; }
+ virtual int do_encoding() const throw() { return 0; }
+
+ virtual std::codecvt_base::result do_in(std::mbstate_t&,
+ const char*, const char*, const char*&,
+ wchar_t*, wchar_t*, wchar_t*&) const
+ {
+ static std::codecvt_base::result r = std::codecvt_base::noconv;
+ if (r == std::codecvt_base::partial) r = std::codecvt_base::error;
+ else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv;
+ else r = std::codecvt_base::partial;
+ return r;
+ }
+
+ virtual std::codecvt_base::result do_out(std::mbstate_t &,
+ const wchar_t*, const wchar_t*, const wchar_t*&,
+ char*, char*, char*&) const
+ {
+ static std::codecvt_base::result r = std::codecvt_base::noconv;
+ if (r == std::codecvt_base::partial) r = std::codecvt_base::error;
+ else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv;
+ else r = std::codecvt_base::partial;
+ return r;
+ }
+
+ virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+ char*, char*, char* &) const { return ok; }
+ virtual int do_length(std::mbstate_t &,
+ const char*, const char*, std::size_t) const { return 0; }
+ virtual int do_max_length() const throw () { return 0; }
+ };
+
+ void test_error_handling()
+ {
+ std::cout << "testing error handling..." << std::endl;
+
+ std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new error_codecvt);
+ std::cout << " imbuing error locale ..." << std::endl;
+ std::locale old_loc = path::imbue(loc);
+
+ // These tests rely on a path constructor that fails in the locale conversion.
+ // Thus construction has to call codecvt. Force that by using a narrow string
+ // for Windows, and a wide string for POSIX.
+# ifdef BOOST_WINDOWS_API
+# define STRING_FOO_ "foo"
+# else
+# define STRING_FOO_ L"foo"
+# endif
+
+ {
+ std::cout << " testing std::codecvt_base::partial error..." << std::endl;
+ bool exception_thrown (false);
+ try { path(STRING_FOO_); }
+ catch (const bs::system_error & ex)
+ {
+ exception_thrown = true;
+ BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::partial,
+ fs::codecvt_error_category()));
+ }
+ catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+ BOOST_TEST(exception_thrown);
+ }
+
+ {
+ std::cout << " testing std::codecvt_base::error error..." << std::endl;
+ bool exception_thrown (false);
+ try { path(STRING_FOO_); }
+ catch (const bs::system_error & ex)
+ {
+ exception_thrown = true;
+ BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::error,
+ fs::codecvt_error_category()));
+ }
+ catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+ BOOST_TEST(exception_thrown);
+ }
+
+ {
+ std::cout << " testing std::codecvt_base::noconv error..." << std::endl;
+ bool exception_thrown (false);
+ try { path(STRING_FOO_); }
+ catch (const bs::system_error & ex)
+ {
+ exception_thrown = true;
+ BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::noconv,
+ fs::codecvt_error_category()));
+ }
+ catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+ BOOST_TEST(exception_thrown);
+ }
+
+ std::cout << " restoring original locale ..." << std::endl;
+ path::imbue(old_loc);
+ std::cout << " testing error handling complete" << std::endl;
+ }
+
+# if 0
+
+// // test_locales --------------------------------------------------------------------//
+//
+// void test_locales()
+// {
+// std::cout << "testing locales..." << std::endl;
+//
+// }
+
+ // test_user_supplied_type ---------------------------------------------------------//
+
+ typedef std::basic_string<int> user_string;
+
+} // unnamed namespace
+
+namespace boost
+{
+namespace filesystem
+{
+ namespace path_traits
+ {
+ template<> struct is_iterator<const user_string::value_type *> { static const bool value = true; };
+ template<> struct is_iterator<user_string::value_type *> { static const bool value = true; };
+ template<> struct is_iterator<user_string::iterator> { static const bool value = true; };
+ template<> struct is_iterator<user_string::const_iterator> { static const bool value = true; };
+ template<> struct is_container<user_string> { static const bool value = true; };
+
+ template<>
+ void append<user_string::value_type>(const user_string::value_type * begin,
+ const user_string::value_type * end, string_type & target, system::error_code & ec)
+ {
+ for (; begin != end && *begin; ++begin)
+ target += *begin + 1; // change so that results distinguishable from char cvts
+ }
+
+# ifdef __GNUC__
+ // This specialization shouldn't be needed, and VC++, Intel, and others work
+ // fine without it. But gcc 4.3.2, and presumably other versions, need it.
+ template<>
+ void append<user_string::value_type>(const user_string::value_type * begin,
+ string_type & target, system::error_code & ec)
+ {
+ path_traits::append<user_string::value_type>(begin,
+ static_cast<const user_string::value_type *>(0), target, ec);
+ }
+# endif
+
+ template<>
+ user_string convert<user_string>(const string_type & source,
+ system::error_code & ec)
+ {
+ user_string temp;
+ for (string_type::const_iterator it = source.begin();
+ it != source.end(); ++it)
+ temp += *it - 1;
+ return temp;
+ }
+ } // namespace path_traits
+} // namespace filesystem
+} // namespace boost
+
+namespace
+{
+
+ void test_user_supplied_type()
+ {
+ std::cout << "testing user supplied type..." << std::endl;
+
+ user_string::value_type usr_c_str[] = { 'a', 'b', 'c', 0 };
+ user_string usr(usr_c_str);
+
+ path p1(usr.c_str());
+ CHECK(p1 == path("bcd"));
+ CHECK(p1 == "bcd");
+ user_string s1(p1.string<user_string>());
+ CHECK(s1 == usr);
+ }
+
+# endif
+
+ inline const char* macro_value(const char* name, const char* value)
+ {
+ static const char* no_value = "[no value]";
+ static const char* not_defined = "[not defined]";
+
+ //if (0 != strcmp(name, value + 1)) // macro is defined
+ //{
+ // if (value[1])
+ // return value;
+ // else
+ // return no_value;
+ //}
+ //return not_defined;
+
+ return 0 == strcmp(name, value + 1)
+ ? not_defined
+ : (value[1] ? value : no_value);
+ }
+
+#define BOOST_MACRO_VALUE(X) macro_value(#X, BOOST_STRINGIZE(=X))
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// //
+// main //
+// //
+//--------------------------------------------------------------------------------------//
+
+int test_main(int, char*[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+ cout << "BOOST_POSIX_API" << endl;
+ BOOST_TEST(path::preferred_separator == '/');
+#endif
+#ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API" << endl;
+ BOOST_TEST(path::preferred_separator == '\\');
+#endif
+
+ cout << "BOOST_FILESYSTEM_DECL "
+ << BOOST_MACRO_VALUE(BOOST_FILESYSTEM_DECL) << endl;
+
+//#ifdef BOOST_FILESYSTEM_DECL
+// cout << "BOOST_FILESYSTEM_DECL is defined as "
+// << BOOST_STRINGIZE(BOOST_FILESYSTEM_DECL) << endl;
+//#else
+// cout << "BOOST_FILESYSTEM_DECL is not defined" << endl;
+//#endif
+
+ l.push_back('s');
+ l.push_back('t');
+ l.push_back('r');
+ l.push_back('i');
+ l.push_back('n');
+ l.push_back('g');
+
+ wl.push_back(L'w');
+ wl.push_back(L's');
+ wl.push_back(L't');
+ wl.push_back(L'r');
+ wl.push_back(L'i');
+ wl.push_back(L'n');
+ wl.push_back(L'g');
+
+ v.push_back('f');
+ v.push_back('u');
+ v.push_back('z');
+
+ wv.push_back(L'w');
+ wv.push_back(L'f');
+ wv.push_back(L'u');
+ wv.push_back(L'z');
+
+ test_overloads();
+ test_constructors();
+ test_assignments();
+ test_move_construction_and_assignment();
+ test_appends();
+ test_concats();
+ test_modifiers();
+ test_observers();
+ test_relationals();
+ test_inserter_and_extractor();
+ test_other_non_members();
+ test_iterators();
+ test_reverse_iterators();
+ test_decompositions();
+ test_queries();
+ test_imbue_locale();
+ test_codecvt_argument();
+ test_error_handling();
+
+#if 0
+
+ test_user_supplied_type();
+
+#endif
+
+ std::string foo("\\abc");
+ const char* bar = "/abc";
+
+ if (foo == bar)
+ cout << "unintended consequence\n";
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/quick.cpp b/src/boost/libs/filesystem/test/quick.cpp
new file mode 100644
index 000000000..d981a9d6a
--- /dev/null
+++ b/src/boost/libs/filesystem/test/quick.cpp
@@ -0,0 +1,24 @@
+
+// Copyright 2017 Peter Dimov.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+// See library home page at http://www.boost.org/libs/system
+
+#include <boost/filesystem.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+namespace fs = boost::filesystem;
+
+int main()
+{
+ fs::path p1( "a" );
+ fs::path p2 = p1 / "b";
+
+ BOOST_TEST_EQ( p2, "a/b" );
+
+ return boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/relative_test.cpp b/src/boost/libs/filesystem/test/relative_test.cpp
new file mode 100644
index 000000000..9c4b7d259
--- /dev/null
+++ b/src/boost/libs/filesystem/test/relative_test.cpp
@@ -0,0 +1,118 @@
+// filesystem relative_test.cpp ---------------------------------------------------- //
+
+// Copyright Beman Dawes 2015
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+// ---------------------------------------------------------------------------------- //
+//
+// At least initially, development is easier if these tests are in a separate file.
+//
+// ---------------------------------------------------------------------------------- //
+
+#include <boost/config/warning_disable.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/detail/lightweight_test_report.hpp>
+#include <iostream>
+
+using boost::filesystem::path;
+using std::cout;
+using std::endl;
+
+namespace
+{
+ void lexically_relative_test()
+ {
+ cout << "lexically_relative_test..." << endl;
+
+ BOOST_TEST(path("").lexically_relative("") == "");
+ BOOST_TEST(path("").lexically_relative("/foo") == "");
+ BOOST_TEST(path("/foo").lexically_relative("") == "");
+ BOOST_TEST(path("/foo").lexically_relative("/foo") == ".");
+ BOOST_TEST(path("").lexically_relative("foo") == "");
+ BOOST_TEST(path("foo").lexically_relative("") == "");
+ BOOST_TEST(path("foo").lexically_relative("foo") == ".");
+
+ BOOST_TEST(path("a/b/c").lexically_relative("a") == "b/c");
+ BOOST_TEST(path("a//b//c").lexically_relative("a") == "b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b") == "c");
+ BOOST_TEST(path("a///b//c").lexically_relative("a//b") == "c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/c") == ".");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x") == "..");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y") == "../..");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/x") == "../b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/x") == "../c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/x/y") == "../../b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/x/y") == "../../c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y/z") == "../../..");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/") == "b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/.") == "b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/./") == "b/c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/..") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/../") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/..") == "c");
+ BOOST_TEST(path("a/b/c").lexically_relative("a/b/d/../") == "c");
+
+ // paths unrelated except first element, and first element is root directory
+ BOOST_TEST(path("/a/b/c").lexically_relative("/x") == "../a/b/c");
+ BOOST_TEST(path("/a/b/c").lexically_relative("/x/y") == "../../a/b/c");
+ BOOST_TEST(path("/a/b/c").lexically_relative("/x/y/z") == "../../../a/b/c");
+
+ // paths unrelated
+ BOOST_TEST(path("a/b/c").lexically_relative("x") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("x/y") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("x/y/z") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("/x") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("/x/y") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("/x/y/z") == "");
+ BOOST_TEST(path("a/b/c").lexically_relative("/a/b/c") == "");
+
+ // TODO: add some Windows-only test cases that probe presence or absence of
+ // drive specifier-and root-directory
+
+ // Some tests from Jamie Allsop's paper
+ BOOST_TEST(path("/a/d").lexically_relative("/a/b/c") == "../../d");
+ BOOST_TEST(path("/a/b/c").lexically_relative("/a/d") == "../b/c");
+ #ifdef BOOST_WINDOWS_API
+ BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "../y");
+ #else
+ BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "");
+ #endif
+ BOOST_TEST(path("d:\\y").lexically_relative("c:\\x") == "");
+
+ // From issue #1976
+ BOOST_TEST(path("/foo/new").lexically_relative("/foo/bar") == "../new");
+ }
+
+ void lexically_proximate_test()
+ {
+ cout << "lexically_proximate_test..." << endl;
+ // paths unrelated
+ BOOST_TEST(path("a/b/c").lexically_proximate("x") == "a/b/c");
+ }
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+// //
+// main //
+// //
+//--------------------------------------------------------------------------------------//
+
+int test_main(int, char*[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+ cout << "BOOST_POSIX_API" << endl;
+#endif
+#ifdef BOOST_WINDOWS_API
+ cout << "BOOST_WINDOWS_API" << endl;
+#endif
+
+ lexically_relative_test();
+ lexically_proximate_test();
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/sample_test.cpp b/src/boost/libs/filesystem/test/sample_test.cpp
new file mode 100644
index 000000000..b19d2c89b
--- /dev/null
+++ b/src/boost/libs/filesystem/test/sample_test.cpp
@@ -0,0 +1,63 @@
+// filesystem sample_test.cpp ----------------------------------------------//
+
+// Copyright Beman Dawes 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// --------------------------------------------------------------------------//
+//
+// This program provides a template for bug reporting test cases.
+//
+// --------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <iostream>
+#include <string>
+#include <cstring>
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
+namespace fs = boost::filesystem;
+using fs::path;
+using std::cout;
+using std::endl;
+using std::string;
+using std::wstring;
+
+namespace
+{
+ bool cleanup = true;
+}
+
+// cpp_main ----------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ if (argc > 1 && std::strcmp(argv[1], "--no-cleanup") == 0)
+ cleanup = false;
+
+ // Test cases go after this block of comments
+ // Use test case macros from boost/core/lightweight_test.hpp:
+ //
+ // BOOST_TEST(predicate); // test passes if predicate evaluates to true
+ // BOOST_TEST_EQ(x, y); // test passes if x == y
+ // BOOST_TEST_NE(x, y); // test passes if x != y
+ // BOOST_ERROR(msg); // test fails, outputs msg
+ // Examples:
+ // BOOST_TEST(path("f00").size() == 3); // test passes
+ // BOOST_TEST_EQ(path("f00").size(), 3); // test passes
+ // BOOST_MSG("Oops!"); // test fails, outputs "Oops!"
+
+ if (cleanup)
+ {
+ // Remove any test files or directories here
+ }
+
+ return ::boost::report_errors();
+}
diff --git a/src/boost/libs/filesystem/test/test_codecvt.hpp b/src/boost/libs/filesystem/test/test_codecvt.hpp
new file mode 100644
index 000000000..666805ec1
--- /dev/null
+++ b/src/boost/libs/filesystem/test/test_codecvt.hpp
@@ -0,0 +1,79 @@
+// test_codecvt.hpp ------------------------------------------------------------------//
+
+// Copyright Beman Dawes 2009, 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM3_TEST_CODECVT_HPP
+#define BOOST_FILESYSTEM3_TEST_CODECVT_HPP
+
+#include <boost/filesystem/config.hpp>
+#include <locale>
+#include <cwchar> // for mbstate_t
+
+ //------------------------------------------------------------------------------------//
+ // //
+ // class test_codecvt //
+ // //
+ // Warning: partial implementation; even do_in and do_out only partially meet the //
+ // standard library specifications as the "to" buffer must hold the entire result. //
+ // //
+ // The value of a wide character is the value of the corresponding narrow character //
+ // plus 1. This ensures that compares against expected values will fail if the //
+ // code conversion did not occur as expected. //
+ // //
+ //------------------------------------------------------------------------------------//
+
+ class test_codecvt
+ : public std::codecvt< wchar_t, char, std::mbstate_t >
+ {
+ public:
+ explicit test_codecvt()
+ : std::codecvt<wchar_t, char, std::mbstate_t>() {}
+ protected:
+
+ virtual bool do_always_noconv() const throw() { return false; }
+
+ virtual int do_encoding() const throw() { return 0; }
+
+ virtual std::codecvt_base::result do_in(std::mbstate_t&,
+ const char* from, const char* from_end, const char*& from_next,
+ wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const
+ {
+ for (; from != from_end && to != to_end; ++from, ++to)
+ *to = wchar_t(*from + 1);
+ if (to == to_end)
+ return error;
+ *to = L'\0';
+ from_next = from;
+ to_next = to;
+ return ok;
+ }
+
+ virtual std::codecvt_base::result do_out(std::mbstate_t&,
+ const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
+ char* to, char* to_end, char*& to_next) const
+ {
+ for (; from != from_end && to != to_end; ++from, ++to)
+ *to = static_cast<char>(*from - 1);
+ if (to == to_end)
+ return error;
+ *to = '\0';
+ from_next = from;
+ to_next = to;
+ return ok;
+ }
+
+ virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+ char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; }
+
+ virtual int do_length(std::mbstate_t&,
+ const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; }
+
+ virtual int do_max_length() const throw () { return 0; }
+ };
+
+#endif // BOOST_FILESYSTEM3_TEST_CODECVT_HPP
diff --git a/src/boost/libs/filesystem/test/test_links.html b/src/boost/libs/filesystem/test/test_links.html
new file mode 100644
index 000000000..08c4b35d7
--- /dev/null
+++ b/src/boost/libs/filesystem/test/test_links.html
@@ -0,0 +1,1405 @@
+<html>
+<head>
+<title>Boost Test Details</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<table border="0">
+<tr>
+<td><img border="0" src="http://www.boost.org/boost.png" width="277" height="86"></td>
+<td>
+<h1>Boost Test Details - Win32</h1>
+<b>Run Date:</b> 10:58:37 UTC, Thursday 24 August 2017
+</td>
+</table>
+<br>
+<h2><a name="filesystem-config_info-gcc-mingw-c++03">filesystem - config_info - gcc-mingw-c++03</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-gcc-mingw-c++11">filesystem - config_info - gcc-mingw-c++11</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-gcc-mingw-c++14">filesystem - config_info - gcc-mingw-c++14</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-msvc-11.0">filesystem - config_info - msvc-11.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1700
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-msvc-12.0">filesystem - config_info - msvc-12.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1800
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-msvc-14.0">filesystem - config_info - msvc-14.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1900
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info-msvc-14.1">filesystem - config_info - msvc-14.1</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: 1
+ BOOST_FILESYSTEM_STATIC_LINK: [not defined]
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1911
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-gcc-mingw-c++03">filesystem - config_info_static - gcc-mingw-c++03</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-gcc-mingw-c++11">filesystem - config_info_static - gcc-mingw-c++11</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-gcc-mingw-c++14">filesystem - config_info_static - gcc-mingw-c++14</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: [not defined]
+ __MINGW32__: 1
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-msvc-11.0">filesystem - config_info_static - msvc-11.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1700
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-msvc-12.0">filesystem - config_info_static - msvc-12.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1800
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-msvc-14.0">filesystem - config_info_static - msvc-14.0</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1900
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-config_info_static-msvc-14.1">filesystem - config_info_static - msvc-14.1</a></h2>
+<h3>Run output:</h3><pre>
+Verify macro reporting works correctly
+ NOSUCHMACRO: [not defined]
+ SUCHAMACRO: [no value]
+ BOOST_VERSION: 106600
+Report macro values that may be useful in debugging various test programs
+ BOOST_VERSION: 106600
+ BOOST_FILESYSTEM_VERSION: 3
+ BOOST_FILESYSTEM_DEPRECATED: [not defined]
+ BOOST_FILESYSTEM_SOURCE: [not defined]
+ BOOST_FILESYSTEM_DYN_LINK: [not defined]
+ BOOST_FILESYSTEM_STATIC_LINK: 1
+ BOOST_ALL_NO_LIB: 1
+ BOOST_FILESYSTEM_NO_LIB: [no value]
+ BOOST_LIB_NAME: [not defined]
+ BOOST_POSIX_API: [not defined]
+ BOOST_WINDOWS_API: [no value]
+ _MSC_VER: 1911
+ __MINGW32__: [not defined]
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-fstream_test-msvc-11.0">filesystem - fstream_test - msvc-11.0</a></h2>
+<h3>Compiler output:</h3><pre>
+fstream_test.cpp
+C:\boost\develop\boost/filesystem/fstream.hpp(162) : warning C4250: 'boost::filesystem::basic_fstream&lt;charT&gt;' : inherits 'std::basic_istream&lt;_Elem,_Traits&gt;::std::basic_istream&lt;_Elem,_Traits&gt;::_Add_vtordisp1' via dominance
+ with
+ [
+ charT=char
+ ]
+ and
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+ and
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\istream(74) : see declaration of 'std::basic_istream&lt;_Elem,_Traits&gt;::_Add_vtordisp1'
+ with
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+ fstream_test.cpp(114) : see reference to class template instantiation 'boost::filesystem::basic_fstream&lt;charT&gt;' being compiled
+ with
+ [
+ charT=char
+ ]
+C:\boost\develop\boost/filesystem/fstream.hpp(162) : warning C4250: 'boost::filesystem::basic_fstream&lt;charT&gt;' : inherits 'std::basic_ostream&lt;_Elem,_Traits&gt;::std::basic_ostream&lt;_Elem,_Traits&gt;::_Add_vtordisp2' via dominance
+ with
+ [
+ charT=char
+ ]
+ and
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+ and
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream(90) : see declaration of 'std::basic_ostream&lt;_Elem,_Traits&gt;::_Add_vtordisp2'
+ with
+ [
+ _Elem=char,
+ _Traits=std::char_traits&lt;char&gt;
+ ]
+</pre>
+<h2><a name="filesystem-locale_info-gcc-mingw-c++03">filesystem - locale_info - gcc-mingw-c++03</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-gcc-mingw-c++11">filesystem - locale_info - gcc-mingw-c++11</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-gcc-mingw-c++14">filesystem - locale_info - gcc-mingw-c++14</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-msvc-11.0">filesystem - locale_info - msvc-11.0</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-msvc-12.0">filesystem - locale_info - msvc-12.0</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-msvc-14.0">filesystem - locale_info - msvc-14.0</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-locale_info-msvc-14.1">filesystem - locale_info - msvc-14.1</a></h2>
+<h3>Run output:</h3><pre>
+LANG environmental variable is not present
+
+locale default construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale()) is true
+
+locale("") construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale("")) is true
+
+locale(locale::classic()) copy construction OK
+has_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; &gt;(locale::classic()) is true
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-gcc-mingw-c++03">filesystem - operations_test - gcc-mingw-c++03</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793983430656
+ available = 793983430656
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_directory_symlink: The request is not supported: "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc\f1", "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc\f1" to "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:56:29 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:56:29 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-755c-8ccc\Temp"
+temp_directory_path() returned "op-test-755c-8ccc\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-755c-8ccc"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-gcc-mingw-c++11">filesystem - operations_test - gcc-mingw-c++11</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793982644224
+ available = 793982644224
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_directory_symlink: The request is not supported: "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a\f1", "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a\f1" to "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:56:50 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:56:50 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-e3e5-bc1a\Temp"
+temp_directory_path() returned "op-test-e3e5-bc1a\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-e3e5-bc1a"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-gcc-mingw-c++14">filesystem - operations_test - gcc-mingw-c++14</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793980874752
+ available = 793980874752
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_directory_symlink: The request is not supported: "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2\f1", "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2\f1" to "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:57:11 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:57:11 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-244d-0ad2\Temp"
+temp_directory_path() returned "op-test-244d-0ad2\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-244d-0ad2"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-msvc-11.0">filesystem - operations_test - msvc-11.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793979273216
+ available = 793979273216
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_symlink: A required privilege is not held by the client: "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1\f1", "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1\f1" to "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:57:29 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:57:29 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-3fc0-59b1\Temp"
+temp_directory_path() returned "op-test-3fc0-59b1\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-3fc0-59b1"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-msvc-12.0">filesystem - operations_test - msvc-12.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793978023936
+ available = 793978023936
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_symlink: A required privilege is not held by the client: "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d\f1", "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d\f1" to "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:57:44 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:57:44 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-c50b-e30d\Temp"
+temp_directory_path() returned "op-test-c50b-e30d\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-c50b-e30d"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-msvc-14.0">filesystem - operations_test - msvc-14.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793971998720
+ available = 793971998720
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-d745-8190"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-d745-8190\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_symlink: A required privilege is not held by the client: "C:\boost\develop\libs\filesystem\test\op-test-d745-8190\f1", "C:\boost\develop\libs\filesystem\test\op-test-d745-8190\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-d745-8190\f1" to "C:\boost\develop\libs\filesystem\test\op-test-d745-8190\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:58:01 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:58:01 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-d745-8190\Temp"
+temp_directory_path() returned "op-test-d745-8190\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-d745-8190"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test-msvc-14.1">filesystem - operations_test - msvc-14.1</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+API is Windows
+initial_path() is "C:\boost\develop\libs\filesystem\test"
+"C:", "/", "boost", "develop", "libs", "filesystem", "test"
+sizeof(boost::uintmax_t) = 8
+initial_tests...
+ current_path().string() is
+ "C:\boost\develop\libs\filesystem\test"
+
+predicate_and_status_tests...
+exception_tests...
+ catch runtime_error by value
+ catch system_error by value
+ catch filesystem_error by value
+ catch filesystem_error by const reference
+
+Warning: line 376 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+ exception_tests complete
+create_directory_tests...
+ create_directory_tests complete
+current_directory_tests...
+space_tests...
+ capacity = 1023159562240
+ free = 793972551680
+ available = 793972551680
+creating test directories and files in "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1"
+status_of_nonexistent_tests...
+status_error_reporting_tests...
+directory_iterator_tests...
+ directory_iterator_tests complete
+create_directories_tests...
+ p is "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1\level1/.\level2/./..\level3/"
+equivalent_tests...
+
+Warning: line 1893 exception reports default_error_condition().value() 50, should be 2
+ value() is 50
+create_hard_link_tests...
+ *** For information only ***
+ create_hard_link() succeeded
+create_symlink_tests...
+ *** For information only ***
+ create_symlink() attempt failed
+ filesystem_error.what() reports: boost::filesystem::create_symlink: A required privilege is not held by the client: "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1\f1", "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1\f4"
+ create_symlink() may not be supported on this operating system or file system
+resize_file_tests...
+absolute_tests...
+canonical_basic_tests...
+ init: "C:\boost\develop\libs\filesystem\test"
+ root: "C:\"
+ first: "boost"
+ expected: "C:\boost"
+permissions_tests...
+copy_file_tests...
+ copy "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1\f1" to "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1\d1\f2"
+ copy complete
+iterator_status_tests...
+recursive_directory_iterator_tests...
+ with error_code argument
+ recursive_directory_iterator_tests complete
+recursive_iterator_status_tests...
+rename_tests...
+remove_tests...
+write_time_tests...
+
+ UTC last_write_time() for a file just created is Thu Aug 24 10:58:22 2017
+
+
+ Year is 117
+ Change year to 116
+ last_write_time() for the file is now Wed Aug 24 10:58:22 2016
+
+
+ Reset to current time
+ original last_write_time() - current last_write_time() is 0 seconds
+temp_directory_path_tests...
+Fallback test, temp_directory_path() returned "C:\WINDOWS\Temp"
+temp_directory_path() returned "op-test-b992-a0a1\Temp"
+temp_directory_path() returned "op-test-b992-a0a1\Temp"
+Windows specific tests...
+ (may take several seconds)
+
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-test-b992-a0a1"
+post-test removal complete
+returning from main()
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_test_static-gcc-mingw-c++03">filesystem - operations_test_static - gcc-mingw-c++03</a></h2>
+<h3>Compiler output:</h3><pre>
+link.hardlink ..\..\..\boost\utility.hpp
+Hardlink created for ..\..\..\boost\utility.hpp &lt;&lt;===&gt;&gt; ..\..\utility\include\boost\utility.hpp
+link.hardlink ..\..\..\boost\utility\base_from_member.hpp
+Hardlink created for ..\..\..\boost\utility\base_from_member.hpp &lt;&lt;===&gt;&gt; ..\..\utility\include\boost\utility\base_from_member.hpp
+link.hardlink ..\..\..\boost\utility\binary.hpp
+Hardlink created for ..\..\..\boost\utility\binary.hpp &lt;&lt;===&gt;&gt; ..\..\utility\include\boost\utility\binary.hpp
+link.hardlink ..\..\..\boost\utility\identity_type.hpp
+Hardlink created for ..\..\..\boost\utility\identity_type.hpp &lt;&lt;===&gt;&gt; ..\..\utility\include\boost\utility\identity_type.hpp
+link.hardlink ..\..\..\boost\next_prior.hpp
+Hardlink created for ..\..\..\boost\next_prior.hpp &lt;&lt;===&gt;&gt; ..\..\utility\include\boost\next_prior.hpp
+link.hardlink ..\..\..\boost\detail\lightweight_test_report.hpp
+Hardlink created for ..\..\..\boost\detail\lightweight_test_report.hpp &lt;&lt;===&gt;&gt; ..\..\detail\include\boost\detail\lightweight_test_report.hpp
+</pre>
+<h2><a name="filesystem-operations_unit_test-gcc-mingw-c++03">filesystem - operations_unit_test - gcc-mingw-c++03</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__attribute__((__dllimport__))
+BOOST_SYMBOL_VISIBLE=__attribute__((__visibility__("default")))
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"dd87-ef40-4926-6938"
+"foo-ea70b-be93e-bar"
+"foo-e7335-10cdc-5d03c-5a3c9-f4650-f1021-7b6be-5019-bar"
+"foo-f7a8a-993d9-6f777-00134-3ed50-2fbcb-1e8f4-f2a70-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-8c2b-524a-cd05"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-gcc-mingw-c++11">filesystem - operations_unit_test - gcc-mingw-c++11</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__attribute__((__dllimport__))
+BOOST_SYMBOL_VISIBLE=__attribute__((__visibility__("default")))
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"754f-7b1a-3be6-e5c0"
+"foo-4bb0f-4d882-bar"
+"foo-ac642-09a4f-6aa7e-ea2d7-457da-b2948-53f4a-bad3-bar"
+"foo-ae2bd-64c16-22117-8a86b-44e97-c20ea-8af66-1675e-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-3440-0e3f-4e7e"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-gcc-mingw-c++14">filesystem - operations_unit_test - gcc-mingw-c++14</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__attribute__((__dllimport__))
+BOOST_SYMBOL_VISIBLE=__attribute__((__visibility__("default")))
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"7d80-f2f3-aeaa-b6c7"
+"foo-a01ed-b1b33-bar"
+"foo-4a551-dd753-dfa25-ed9a7-acb54-098df-6a620-a70f-bar"
+"foo-12c8d-06744-bd437-89fdc-a2c34-95e8f-a414d-b94be-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-e67e-bad2-8279"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-msvc-11.0">filesystem - operations_unit_test - msvc-11.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__declspec(dllimport)
+BOOST_SYMBOL_VISIBLE=
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"1ab4-8841-b0fc-e647"
+"foo-efb46-79c29-bar"
+"foo-59896-324e8-bdbd6-a42eb-de915-1ec1a-ce99d-4067-bar"
+"foo-1910a-90280-34d2b-ef1c2-71af0-a0b5e-08faf-f5b1f-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-9db7-fe9c-d2e3"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-msvc-12.0">filesystem - operations_unit_test - msvc-12.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__declspec(dllimport)
+BOOST_SYMBOL_VISIBLE=
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"8e2b-71ce-2521-a7db"
+"foo-848dc-69884-bar"
+"foo-4aa5a-9c482-8cbc0-d1620-52975-427ef-977b7-8d85-bar"
+"foo-539a8-bbd78-dc935-e4685-222d2-5fadc-eca06-d3123-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-56c9-60bb-08e3"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-msvc-14.0">filesystem - operations_unit_test - msvc-14.0</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__declspec(dllimport)
+BOOST_SYMBOL_VISIBLE=
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"f2ef-9c9a-bba1-2da9"
+"foo-2d9f5-883e8-bar"
+"foo-a6ab7-95190-f84db-88e6f-6ea6f-656af-d1520-c648-bar"
+"foo-f88e8-f15db-7b6a4-ef286-132b5-df468-819e2-8d568-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-1334-a91e-c0f5"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-operations_unit_test-msvc-14.1">filesystem - operations_unit_test - msvc-14.1</a></h2>
+<h3>Run output:</h3><pre>
+BOOST_WINDOWS_API is defined
+BOOST_FILESYSTEM_DECL=__declspec(dllimport)
+BOOST_SYMBOL_VISIBLE=
+current_path() is C:\boost\develop\libs\filesystem\test
+file_status test...
+ status(".") permissions are 666
+ symlink_status(".") permissions are 666
+query test...
+directory_iterator_test...
+directory_iterator_test complete
+recursive_directory_iterator_test...
+recursive_directory_iterator_test complete
+operations test...
+directory_entry test...
+directory_entry overload test...
+error handling test...
+
+as expected, attempt to get size of non-existent file threw a filesystem_error
+what() returns boost::filesystem::file_size: The system cannot find the file specified: "no-such-file"
+string_file_tests...
+"1f6b-83e8-b538-782f"
+"foo-4e6c4-de2ee-bar"
+"foo-1703a-adf72-ff6a8-cf07d-fcdec-818b0-3c067-0292-bar"
+"foo-b7e03-522a0-89b5a-3fa32-6fa98-df460-6be3a-7acdc-bar"
+testing complete
+post-test removal of "C:\boost\develop\libs\filesystem\test\op-unit_test-b9c6-6436-60ba"
+post-test removal complete
+No errors detected.
+
+EXIT STATUS: 0
+</pre>
+<h2><a name="filesystem-path_test-gcc-mingw-c++03">filesystem - path_test - gcc-mingw-c++03</a></h2>
+<h3>Compiler output:</h3><pre>
+link.hardlink ..\..\..\boost\smart_ptr.hpp
+Hardlink created for ..\..\..\boost\smart_ptr.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\smart_ptr.hpp
+link.hardlink ..\..\..\boost\scoped_ptr.hpp
+Hardlink created for ..\..\..\boost\scoped_ptr.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\scoped_ptr.hpp
+link.hardlink ..\..\..\boost\shared_array.hpp
+Hardlink created for ..\..\..\boost\shared_array.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\shared_array.hpp
+link.hardlink ..\..\..\boost\weak_ptr.hpp
+Hardlink created for ..\..\..\boost\weak_ptr.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\weak_ptr.hpp
+link.hardlink ..\..\..\boost\intrusive_ptr.hpp
+Hardlink created for ..\..\..\boost\intrusive_ptr.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\intrusive_ptr.hpp
+link.hardlink ..\..\..\boost\enable_shared_from_this.hpp
+Hardlink created for ..\..\..\boost\enable_shared_from_this.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\enable_shared_from_this.hpp
+link.hardlink ..\..\..\boost\make_shared.hpp
+Hardlink created for ..\..\..\boost\make_shared.hpp &lt;&lt;===&gt;&gt; ..\..\smart_ptr\include\boost\make_shared.hpp
+link.hardlink ..\..\..\boost\integer_fwd.hpp
+Hardlink created for ..\..\..\boost\integer_fwd.hpp &lt;&lt;===&gt;&gt; ..\..\integer\include\boost\integer_fwd.hpp
+link.hardlink ..\..\..\boost\detail\container_fwd.hpp
+Hardlink created for ..\..\..\boost\detail\container_fwd.hpp &lt;&lt;===&gt;&gt; ..\..\detail\include\boost\detail\container_fwd.hpp
+</pre>
+</body>
+</html>
diff --git a/src/boost/libs/filesystem/test/test_status.html b/src/boost/libs/filesystem/test/test_status.html
new file mode 100644
index 000000000..e20ee228f
--- /dev/null
+++ b/src/boost/libs/filesystem/test/test_status.html
@@ -0,0 +1,56 @@
+<html>
+<head>
+<title>Boost Test Results</title>
+</head>
+<body bgcolor="#ffffff" text="#000000">
+<table border="0">
+<tr>
+<td><img border="0" src="http://www.boost.org/boost.png" width="277" height="86"></td>
+<td>
+<h1>Boost Test Results - Win32</h1>
+<b>Run</b> 10:58:37 UTC, Thursday 24 August 2017
+</td>
+</table>
+<br>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr><td>Library</td><td>Test Name</td>
+<td><a href="compiler_status.html#test-type">Test Type</a></td>
+<td>gcc-mingw-c++03</td>
+<td>gcc-mingw-c++11</td>
+<td>gcc-mingw-c++14</td>
+<td>msvc-11.0</td>
+<td>msvc-12.0</td>
+<td>msvc-14.0</td>
+<td>msvc-14.1</td>
+</tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/example/file_status.cpp">file_status</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/example/simple_ls.cpp">simple_ls</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/config_info.cpp">config_info</a></td><td>run</td><td><a href="test_links.html#filesystem-config_info-gcc-mingw-c++03">Pass</a></td><td><a href="test_links.html#filesystem-config_info-gcc-mingw-c++11">Pass</a></td><td><a href="test_links.html#filesystem-config_info-gcc-mingw-c++14">Pass</a></td><td><a href="test_links.html#filesystem-config_info-msvc-11.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info-msvc-12.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info-msvc-14.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info-msvc-14.1">Pass</a></td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/config_info.cpp">config_info_static</a></td><td>run</td><td><a href="test_links.html#filesystem-config_info_static-gcc-mingw-c++03">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-gcc-mingw-c++11">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-gcc-mingw-c++14">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-msvc-11.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-msvc-12.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-msvc-14.0">Pass</a></td><td><a href="test_links.html#filesystem-config_info_static-msvc-14.1">Pass</a></td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/convenience_test.cpp">convenience_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/deprecated_test.cpp">deprecated_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/fstream_test.cpp">fstream_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td><a href="test_links.html#filesystem-fstream_test-msvc-11.0"><i>Warn</i></a></td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/large_file_support_test.cpp">large_file_support_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/locale_info.cpp">locale_info</a></td><td>run</td><td><a href="test_links.html#filesystem-locale_info-gcc-mingw-c++03">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-gcc-mingw-c++11">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-gcc-mingw-c++14">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-msvc-11.0">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-msvc-12.0">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-msvc-14.0">Pass</a></td><td><a href="test_links.html#filesystem-locale_info-msvc-14.1">Pass</a></td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/macro_default_test.cpp">macro_default_test</a></td><td>compile</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/odr1_test.cpp">odr1_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/operations_test.cpp">operations_test</a></td><td>run</td><td><a href="test_links.html#filesystem-operations_test-gcc-mingw-c++03">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-gcc-mingw-c++11">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-gcc-mingw-c++14">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-msvc-11.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-msvc-12.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-msvc-14.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_test-msvc-14.1">Pass</a></td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/operations_test.cpp">operations_test_static</a></td><td>run</td><td><a href="test_links.html#filesystem-operations_test_static-gcc-mingw-c++03"><i>Warn</i></a></td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/operations_unit_test.cpp">operations_unit_test</a></td><td>run</td><td><a href="test_links.html#filesystem-operations_unit_test-gcc-mingw-c++03">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-gcc-mingw-c++11">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-gcc-mingw-c++14">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-msvc-11.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-msvc-12.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-msvc-14.0">Pass</a></td><td><a href="test_links.html#filesystem-operations_unit_test-msvc-14.1">Pass</a></td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/path_test.cpp">path_test</a></td><td>run</td><td><a href="test_links.html#filesystem-path_test-gcc-mingw-c++03"><i>Warn</i></a></td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/path_test.cpp">path_test_static</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/path_unit_test.cpp">path_unit_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/path_unit_test.cpp">path_unit_test_static</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem">filesystem</a></td><td><a href="http://svn.boost.org/trac/boost/browser/trunk//libs/filesystem/test/relative_test.cpp">relative_test</a></td><td>run</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td><td>Pass</td></tr>
+<tr> <td> &nbsp;</td><td>Number of Failures</td><td> &nbsp;</td>
+<td align="center">0</td>
+<td align="center">0</td>
+<td align="center">0</td>
+<td align="center">0</td>
+<td align="center">0</td>
+<td align="center">0</td>
+<td align="center">0</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/src/boost/libs/filesystem/test/windows_attributes.cpp b/src/boost/libs/filesystem/test/windows_attributes.cpp
new file mode 100644
index 000000000..445e2ebd4
--- /dev/null
+++ b/src/boost/libs/filesystem/test/windows_attributes.cpp
@@ -0,0 +1,108 @@
+// windows_attributes ----------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+// Useful for debugging status related issues //
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <windows.h>
+#include <map>
+#include <utility>
+#include <iostream>
+#include <string>
+
+using std::make_pair;
+namespace fs = boost::filesystem;
+
+int cpp_main( int argc, char* argv[])
+{
+ typedef std::map<DWORD, std::string> decode_type;
+ decode_type table;
+
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ARCHIVE, "FILE_ATTRIBUTE_ARCHIVE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_COMPRESSED, "FILE_ATTRIBUTE_COMPRESSED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DEVICE, "FILE_ATTRIBUTE_DEVICE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DIRECTORY, "FILE_ATTRIBUTE_DIRECTORY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ENCRYPTED, "FILE_ATTRIBUTE_ENCRYPTED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_HIDDEN, "FILE_ATTRIBUTE_HIDDEN"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_OFFLINE, "FILE_ATTRIBUTE_OFFLINE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_READONLY, "FILE_ATTRIBUTE_READONLY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_REPARSE_POINT, "FILE_ATTRIBUTE_REPARSE_POINT"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SPARSE_FILE, "FILE_ATTRIBUTE_SPARSE_FILE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SYSTEM, "FILE_ATTRIBUTE_SYSTEM"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_TEMPORARY, "FILE_ATTRIBUTE_TEMPORARY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_VIRTUAL, "FILE_ATTRIBUTE_VIRTUAL"));
+
+ if (argc < 2)
+ {
+ std::cout << "Usage: windows_attributes path\n";
+ return 1;
+ }
+
+ // report Win32 ::GetFileAttributesA()
+
+ DWORD at(::GetFileAttributesA(argv[1]));
+ if (at == INVALID_FILE_ATTRIBUTES)
+ {
+ std::cout << "GetFileAttributes(\"" << argv[1]
+ << "\") returned INVALID_FILE_ATTRIBUTES\n";
+ return 0;
+ }
+
+ std::cout << "GetFileAttributes(\"" << argv[1]
+ << "\") returned ";
+
+ bool bar = false;
+ for (decode_type::iterator it = table.begin(); it != table.end(); ++it)
+ {
+ if (!(it->first & at))
+ continue;
+ if (bar)
+ std::cout << " | ";
+ bar = true;
+ std::cout << it->second;
+ at &= ~it->first;
+ }
+ std::cout << std::endl;
+
+ if (at)
+ std::cout << "plus unknown attributes " << at << std::endl;
+
+ // report Boost Filesystem file_type
+
+ fs::file_status stat = fs::status(argv[1]);
+
+ const char* types[] =
+ {
+ "status_error",
+ "file_not_found",
+ "regular_file",
+ "directory_file",
+ // the following may not apply to some operating systems or file systems
+ "symlink_file",
+ "block_file",
+ "character_file",
+ "fifo_file",
+ "socket_file",
+ "reparse_file", // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink
+ "type_unknown", // file does exist", but isn't one of the above types or
+ // we don't have strong enough permission to find its type
+
+ "_detail_directory_symlink" // internal use only; never exposed to users
+ };
+
+ std::cout << "boost::filesystem::status().type() is " << types[stat.type()] << std::endl;
+
+ return 0;
+}
diff --git a/src/boost/libs/filesystem/tools/backup.bat b/src/boost/libs/filesystem/tools/backup.bat
new file mode 100644
index 000000000..d5157baac
--- /dev/null
+++ b/src/boost/libs/filesystem/tools/backup.bat
@@ -0,0 +1,27 @@
+@echo off
+
+rem Copyright Beman Dawes 2011
+rem Distributed under to the Boost Software License, Version 1.0
+rem See http://www.boost.org/LICENSE_1_0.txt
+
+if not $%1==$ goto ok
+:error
+echo Usage: backup target-directory-path
+goto done
+
+:ok
+mkdir %1\boost\filesystem 2>nul
+mkdir %1\libs\filesystem 2>nul
+
+set BOOST_CURRENT_ROOT=.
+:loop
+if exist %BOOST_CURRENT_ROOT%\boost-build.jam goto loopend
+set BOOST_CURRENT_ROOT=..\%BOOST_CURRENT_ROOT%
+goto loop
+:loopend
+
+xcopy /exclude:exclude.txt /y /d /k /r %BOOST_CURRENT_ROOT%\boost\filesystem.hpp %1\boost
+xcopy /exclude:exclude.txt /y /d /k /s /r %BOOST_CURRENT_ROOT%\boost\filesystem %1\boost\filesystem
+xcopy /exclude:exclude.txt /y /d /k /s /r %BOOST_CURRENT_ROOT%\libs\filesystem %1\libs\filesystem
+
+:done
diff --git a/src/boost/libs/filesystem/tools/exclude.txt b/src/boost/libs/filesystem/tools/exclude.txt
new file mode 100644
index 000000000..037de66e9
--- /dev/null
+++ b/src/boost/libs/filesystem/tools/exclude.txt
@@ -0,0 +1,14 @@
+.svn
+.obj
+.exe
+.log
+.user
+.filters
+.sdf
+.ncb
+.ipch
+ipch
+Debug
+Release
+v3_operations_test
+temp_fs_test_dir
diff --git a/src/boost/libs/filesystem/tools/publish.bat b/src/boost/libs/filesystem/tools/publish.bat
new file mode 100644
index 000000000..e1ca8a970
--- /dev/null
+++ b/src/boost/libs/filesystem/tools/publish.bat
@@ -0,0 +1,8 @@
+copy /y c:\boost\modular\develop\libs\filesystem\doc\*.htm? C:\boost\filesystem-gh-pages
+pushd C:\boost\filesystem-gh-pages
+git commit -a -m "merge from develop"
+git push
+popd
+rem Copyright Beman Dawes, 2015
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt \ No newline at end of file