xref: /aosp_15_r20/external/armnn/third-party/ghc/README.md (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker![Supported Platforms](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows%20%7C%20FreeBSD-blue.svg)
2*89c4ff92SAndroid Build Coastguard Worker![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)
3*89c4ff92SAndroid Build Coastguard Worker[![Build Status](https://travis-ci.org/gulrak/filesystem.svg?branch=master)](https://travis-ci.org/gulrak/filesystem)
4*89c4ff92SAndroid Build Coastguard Worker[![Build Status](https://ci.appveyor.com/api/projects/status/t07wp3k2cddo0hpo/branch/master?svg=true)](https://ci.appveyor.com/project/gulrak/filesystem)
5*89c4ff92SAndroid Build Coastguard Worker[![Build Status](https://api.cirrus-ci.com/github/gulrak/filesystem.svg?branch=master)](https://cirrus-ci.com/github/gulrak/filesystem)
6*89c4ff92SAndroid Build Coastguard Worker[![Build Status](https://cloud.drone.io/api/badges/gulrak/filesystem/status.svg?ref=refs/heads/master)](https://cloud.drone.io/gulrak/filesystem)
7*89c4ff92SAndroid Build Coastguard Worker[![Coverage Status](https://coveralls.io/repos/github/gulrak/filesystem/badge.svg?branch=master)](https://coveralls.io/github/gulrak/filesystem?branch=master)
8*89c4ff92SAndroid Build Coastguard Worker[![Latest Release Tag](https://img.shields.io/github/tag/gulrak/filesystem.svg)](https://github.com/gulrak/filesystem/tree/v1.3.2)
9*89c4ff92SAndroid Build Coastguard Worker
10*89c4ff92SAndroid Build Coastguard Worker# Filesystem
11*89c4ff92SAndroid Build Coastguard Worker
12*89c4ff92SAndroid Build Coastguard WorkerThis is a header-only single-file std::filesystem compatible helper library,
13*89c4ff92SAndroid Build Coastguard Workerbased on the C++17 specs, but implemented for C++11, C++14 or C++17 (tightly following
14*89c4ff92SAndroid Build Coastguard Workerthe C++17 with very few documented exceptions). It is currently tested on
15*89c4ff92SAndroid Build Coastguard WorkermacOS 10.12/10.14, Windows 10, Ubuntu 18.04, FreeBSD 12 and Alpine ARM/ARM64 Linux
16*89c4ff92SAndroid Build Coastguard Workerbut should work on other systems too, as long as you have at least a
17*89c4ff92SAndroid Build Coastguard WorkerC++11 compatible compiler. It is of course in its own namespace `ghc::filesystem`
18*89c4ff92SAndroid Build Coastguard Workerto not interfere with a regular `std::filesystem` should you use it in a mixed C++17
19*89c4ff92SAndroid Build Coastguard Workerenvironment.
20*89c4ff92SAndroid Build Coastguard Worker
21*89c4ff92SAndroid Build Coastguard Worker*It could still use some polishing, test coverage is above 90%, I didn't benchmark
22*89c4ff92SAndroid Build Coastguard Workermuch yet, but I'll try to optimize some parts and refactor others, so I'm striving
23*89c4ff92SAndroid Build Coastguard Workerto improve it as long as it doesn't introduce additional C++17 compatibility
24*89c4ff92SAndroid Build Coastguard Workerissues. Feedback is always welcome. Simply open an issue if you see something missing
25*89c4ff92SAndroid Build Coastguard Workeror wrong or not behaving as expected and I'll comment.*
26*89c4ff92SAndroid Build Coastguard Worker
27*89c4ff92SAndroid Build Coastguard Worker
28*89c4ff92SAndroid Build Coastguard Worker## Motivation
29*89c4ff92SAndroid Build Coastguard Worker
30*89c4ff92SAndroid Build Coastguard WorkerI'm often in need of filesystem functionality, mostly `fs::path`, but directory
31*89c4ff92SAndroid Build Coastguard Workeraccess too, and when beginning to use C++11, I used that language update
32*89c4ff92SAndroid Build Coastguard Workerto try to reduce my third-party dependencies. I could drop most of what
33*89c4ff92SAndroid Build Coastguard WorkerI used, but still missed some stuff that I started implementing for the
34*89c4ff92SAndroid Build Coastguard Workerfun of it. Originally I based these helpers on my own coding- and naming
35*89c4ff92SAndroid Build Coastguard Workerconventions. When C++17 was finalized, I wanted to use that interface,
36*89c4ff92SAndroid Build Coastguard Workerbut it took a while, to push myself to convert my classes.
37*89c4ff92SAndroid Build Coastguard Worker
38*89c4ff92SAndroid Build Coastguard WorkerThe implementation is closely based on chapter 30.10 from the C++17 standard
39*89c4ff92SAndroid Build Coastguard Workerand a draft close to that version is
40*89c4ff92SAndroid Build Coastguard Worker[Working Draft N4687](https://github.com/cplusplus/draft/raw/master/papers/n4687.pdf).
41*89c4ff92SAndroid Build Coastguard WorkerIt is from after the standardization of C++17 but it contains the latest filesystem
42*89c4ff92SAndroid Build Coastguard Workerinterface changes compared to the
43*89c4ff92SAndroid Build Coastguard Worker[Working Draft N4659](https://github.com/cplusplus/draft/raw/master/papers/n4659.pdf).
44*89c4ff92SAndroid Build Coastguard Worker
45*89c4ff92SAndroid Build Coastguard WorkerI want to thank the people working on improving C++, I really liked how the language
46*89c4ff92SAndroid Build Coastguard Workerevolved with C++11 and the following standards. Keep on the good work!
47*89c4ff92SAndroid Build Coastguard Worker
48*89c4ff92SAndroid Build Coastguard WorkerOh, and if you ask yourself, what `ghc` is standing for, it is simply
49*89c4ff92SAndroid Build Coastguard Worker`gulraks helper classes`, yeah, I know, not very imaginative, but I wanted a
50*89c4ff92SAndroid Build Coastguard Workershort namespace and I use it in some of my private classes (so it has nothing
51*89c4ff92SAndroid Build Coastguard Workerto do with Haskell).
52*89c4ff92SAndroid Build Coastguard Worker
53*89c4ff92SAndroid Build Coastguard Worker## Platforms
54*89c4ff92SAndroid Build Coastguard Worker
55*89c4ff92SAndroid Build Coastguard Worker`ghc::filesystem` is developed on macOS but tested on Windows and Linux.
56*89c4ff92SAndroid Build Coastguard WorkerIt should work on any of these with a C++11-capable compiler. I currently
57*89c4ff92SAndroid Build Coastguard Workerdon't have a BSD derivate besides macOS, so the preprocessor checks will
58*89c4ff92SAndroid Build Coastguard Workercry out if you try to use it there, but if there is demand, I can try to
59*89c4ff92SAndroid Build Coastguard Workerhelp. Also there are some checks to hopefully better work on Android, but
60*89c4ff92SAndroid Build Coastguard Workeras I currently don't test with the Android NDK, I wouldn't call it a
61*89c4ff92SAndroid Build Coastguard Workersupported platform yet. All in all, I don't see it replacing `std::filesystem`
62*89c4ff92SAndroid Build Coastguard Workerwhere full C++17 is available, it doesn't try to be a "better"
63*89c4ff92SAndroid Build Coastguard Worker`std::filesystem`, just a drop-in if you can't use it (with the exception
64*89c4ff92SAndroid Build Coastguard Workerof the UTF-8 preference on Windows).
65*89c4ff92SAndroid Build Coastguard Worker
66*89c4ff92SAndroid Build Coastguard Worker
67*89c4ff92SAndroid Build Coastguard WorkerUnit tests are currently run with:
68*89c4ff92SAndroid Build Coastguard Worker
69*89c4ff92SAndroid Build Coastguard Worker* macOS 10.12: Xcode 9.2 (clang-900.0.39.2), GCC 9.2, Clang 9.0, macOS 10.13: Xcode 10.1, macOS 10.14: Xcode 11.2
70*89c4ff92SAndroid Build Coastguard Worker* Windows: Visual Studio 2017, Visual Studio 2015, Visual Studio 2019, MinGW GCC 6.3 (Win32), GCC 7.2 (Win64)
71*89c4ff92SAndroid Build Coastguard Worker* Linux (Ubuntu): GCC (5.5, 6.5, 7.4, 8.3, 9.2), Clang (5.0, 6.0, 7.1, 8.0, 9.0)
72*89c4ff92SAndroid Build Coastguard Worker* Linux (Alpine ARM/ARM64): GCC 9.2.0
73*89c4ff92SAndroid Build Coastguard Worker* FreeBSD: Clang 8.0
74*89c4ff92SAndroid Build Coastguard Worker
75*89c4ff92SAndroid Build Coastguard Worker
76*89c4ff92SAndroid Build Coastguard Worker## Tests
77*89c4ff92SAndroid Build Coastguard Worker
78*89c4ff92SAndroid Build Coastguard WorkerThe header comes with a set of unit-tests and uses [CMake](https://cmake.org/)
79*89c4ff92SAndroid Build Coastguard Workeras a build tool and [Catch2](https://github.com/catchorg/Catch2) as test framework.
80*89c4ff92SAndroid Build Coastguard Worker
81*89c4ff92SAndroid Build Coastguard WorkerAll tests agains this implementation should succeed, depending on your environment
82*89c4ff92SAndroid Build Coastguard Workerit might be that there are some warnings, e.g. if you have no rights to create
83*89c4ff92SAndroid Build Coastguard WorkerSymlinks on Windows or at least the test thinks so, but these are just informative.
84*89c4ff92SAndroid Build Coastguard Worker
85*89c4ff92SAndroid Build Coastguard WorkerTo build the tests from inside the project directory under macOS or Linux just:
86*89c4ff92SAndroid Build Coastguard Worker
87*89c4ff92SAndroid Build Coastguard Worker```cpp
88*89c4ff92SAndroid Build Coastguard Workermkdir build
89*89c4ff92SAndroid Build Coastguard Workercd build
90*89c4ff92SAndroid Build Coastguard Workercmake -DCMAKE_BUILD_TYPE=Debug ..
91*89c4ff92SAndroid Build Coastguard Workermake
92*89c4ff92SAndroid Build Coastguard Worker```
93*89c4ff92SAndroid Build Coastguard Worker
94*89c4ff92SAndroid Build Coastguard WorkerThis generates `filesystem_test`, the binary that runs all tests.
95*89c4ff92SAndroid Build Coastguard Worker
96*89c4ff92SAndroid Build Coastguard WorkerIf the default compiler is a GCC 8 or newer, or Clang 7 or newer, it
97*89c4ff92SAndroid Build Coastguard Workeradditionally tries to build a version of the test binary compiled against GCCs/Clangs
98*89c4ff92SAndroid Build Coastguard Worker`std::filesystem` implementation, named `std_filesystem_test`
99*89c4ff92SAndroid Build Coastguard Workeras an additional test of conformance. Ideally all tests should compile and
100*89c4ff92SAndroid Build Coastguard Workersucceed with all filesystem implementations, but in reality, there are
101*89c4ff92SAndroid Build Coastguard Workersome differences in behavior, sometimes due to room for interpretation in
102*89c4ff92SAndroid Build Coastguard Workerin the standard, and there might be issues in these implementations too.
103*89c4ff92SAndroid Build Coastguard Worker
104*89c4ff92SAndroid Build Coastguard Worker
105*89c4ff92SAndroid Build Coastguard Worker## Usage
106*89c4ff92SAndroid Build Coastguard Worker
107*89c4ff92SAndroid Build Coastguard Worker### Downloads
108*89c4ff92SAndroid Build Coastguard Worker
109*89c4ff92SAndroid Build Coastguard WorkerThe latest release version is [v1.3.2](https://github.com/gulrak/filesystem/tree/v1.3.2) and
110*89c4ff92SAndroid Build Coastguard Workersource archives can be found [here](https://github.com/gulrak/filesystem/releases/tag/v1.3.2).
111*89c4ff92SAndroid Build Coastguard Worker
112*89c4ff92SAndroid Build Coastguard Worker### Using it as Single-File-Header
113*89c4ff92SAndroid Build Coastguard Worker
114*89c4ff92SAndroid Build Coastguard WorkerAs `ghc::filesystem` is at first a header-only library, it should be enough to copy the header
115*89c4ff92SAndroid Build Coastguard Workeror the `include/ghc` directory into your project folder oder point your include path to this place and
116*89c4ff92SAndroid Build Coastguard Workersimply include the `filesystem.hpp` header (or `ghc/filesystem.hpp` if you use the subdirectory).
117*89c4ff92SAndroid Build Coastguard Worker
118*89c4ff92SAndroid Build Coastguard WorkerEverything is in the namespace `ghc::filesystem`, so one way to use it only as
119*89c4ff92SAndroid Build Coastguard Workera fallback could be:
120*89c4ff92SAndroid Build Coastguard Worker
121*89c4ff92SAndroid Build Coastguard Worker```cpp
122*89c4ff92SAndroid Build Coastguard Worker#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include)
123*89c4ff92SAndroid Build Coastguard Worker#if __has_include(<filesystem>)
124*89c4ff92SAndroid Build Coastguard Worker#define GHC_USE_STD_FS
125*89c4ff92SAndroid Build Coastguard Worker#include <filesystem>
126*89c4ff92SAndroid Build Coastguard Workernamespace fs = std::filesystem;
127*89c4ff92SAndroid Build Coastguard Worker#endif
128*89c4ff92SAndroid Build Coastguard Worker#endif
129*89c4ff92SAndroid Build Coastguard Worker#ifndef GHC_USE_STD_FS
130*89c4ff92SAndroid Build Coastguard Worker#include <ghc/filesystem.hpp>
131*89c4ff92SAndroid Build Coastguard Workernamespace fs = ghc::filesystem;
132*89c4ff92SAndroid Build Coastguard Worker#endif
133*89c4ff92SAndroid Build Coastguard Worker```
134*89c4ff92SAndroid Build Coastguard Worker
135*89c4ff92SAndroid Build Coastguard Worker**Note that this code uses a two-stage preprocessor condition because Visual Studio 2015
136*89c4ff92SAndroid Build Coastguard Workerdoesn't like the `(<...>)` syntax, even if it could cut evaluation early before.**
137*89c4ff92SAndroid Build Coastguard Worker
138*89c4ff92SAndroid Build Coastguard Worker**Note also, that on MSVC this detection only works starting from version 15.7 on and when setting
139*89c4ff92SAndroid Build Coastguard Workerthe `/Zc:__cplusplus` compile switch, as the compiler allways reports `199711L`
140*89c4ff92SAndroid Build Coastguard Workerwithout that switch ([see](https://blogs.msdn.microsoft.com/vcblog/2018/04/09/msvc-now-correctly-reports-__cplusplus/)).**
141*89c4ff92SAndroid Build Coastguard Worker
142*89c4ff92SAndroid Build Coastguard WorkerIf you want to also use the `fstream` wrapper with `path` support as fallback,
143*89c4ff92SAndroid Build Coastguard Workeryou might use:
144*89c4ff92SAndroid Build Coastguard Worker
145*89c4ff92SAndroid Build Coastguard Worker```cpp
146*89c4ff92SAndroid Build Coastguard Worker#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include)
147*89c4ff92SAndroid Build Coastguard Worker#if __has_include(<filesystem>)
148*89c4ff92SAndroid Build Coastguard Worker#define GHC_USE_STD_FS
149*89c4ff92SAndroid Build Coastguard Worker#include <filesystem>
150*89c4ff92SAndroid Build Coastguard Workernamespace fs {
151*89c4ff92SAndroid Build Coastguard Workerusing namespace std::filesystem;
152*89c4ff92SAndroid Build Coastguard Workerusing ifstream = std::ifstream;
153*89c4ff92SAndroid Build Coastguard Workerusing ofstream = std::ofstream;
154*89c4ff92SAndroid Build Coastguard Workerusing fstream = std::fstream;
155*89c4ff92SAndroid Build Coastguard Worker}
156*89c4ff92SAndroid Build Coastguard Worker#endif
157*89c4ff92SAndroid Build Coastguard Worker#endif
158*89c4ff92SAndroid Build Coastguard Worker#ifndef GHC_USE_STD_FS
159*89c4ff92SAndroid Build Coastguard Worker#include <ghc/filesystem.hpp>
160*89c4ff92SAndroid Build Coastguard Workernamespace fs {
161*89c4ff92SAndroid Build Coastguard Workerusing namespace ghc::filesystem;
162*89c4ff92SAndroid Build Coastguard Workerusing ifstream = ghc::filesystem::ifstream;
163*89c4ff92SAndroid Build Coastguard Workerusing ofstream = ghc::filesystem::ofstream;
164*89c4ff92SAndroid Build Coastguard Workerusing fstream = ghc::filesystem::fstream;
165*89c4ff92SAndroid Build Coastguard Worker}
166*89c4ff92SAndroid Build Coastguard Worker#endif
167*89c4ff92SAndroid Build Coastguard Worker```
168*89c4ff92SAndroid Build Coastguard Worker
169*89c4ff92SAndroid Build Coastguard WorkerNow you have e.g. `fs::ofstream out(somePath);` and it is either the wrapper or
170*89c4ff92SAndroid Build Coastguard Workerthe C++17 `std::ofstream`.
171*89c4ff92SAndroid Build Coastguard Worker
172*89c4ff92SAndroid Build Coastguard Worker**Be aware, as a header-only library, it is not hiding the fact, that it
173*89c4ff92SAndroid Build Coastguard Workeruses system includes, so they "pollute" your global namespace.**
174*89c4ff92SAndroid Build Coastguard Worker
175*89c4ff92SAndroid Build Coastguard Worker:information_source: **Hint:** There is an additional header named `ghc/fs_std.hpp` that implements this
176*89c4ff92SAndroid Build Coastguard Workerdynamic selection of a filesystem implementation, that you can include
177*89c4ff92SAndroid Build Coastguard Workerinstead of `ghc/filesystem.hpp` when you want std::filesystem where
178*89c4ff92SAndroid Build Coastguard Workeravailable and ghc::filesystem where not. It also enables the `wchar_t`
179*89c4ff92SAndroid Build Coastguard Workersupport on `ghc::filesystem` on Windows, so the resulting implementation
180*89c4ff92SAndroid Build Coastguard Workerin the `fs` namespace will be compatible.
181*89c4ff92SAndroid Build Coastguard Worker
182*89c4ff92SAndroid Build Coastguard Worker
183*89c4ff92SAndroid Build Coastguard Worker### Using it as Forwarding-/Implementation-Header
184*89c4ff92SAndroid Build Coastguard Worker
185*89c4ff92SAndroid Build Coastguard WorkerAlternatively, starting from v1.1.0 `ghc::filesystem` can also be used by
186*89c4ff92SAndroid Build Coastguard Workerincluding one of two additional wrapper headers. These allow to include
187*89c4ff92SAndroid Build Coastguard Workera forwarded version in most places (`ghc/fs_fwd.hpp`) while hiding the
188*89c4ff92SAndroid Build Coastguard Workerimplementation details in a single cpp that includes `ghc/fs_impl.hpp` to
189*89c4ff92SAndroid Build Coastguard Workerimplement the needed code. That way system includes are only visible from
190*89c4ff92SAndroid Build Coastguard Workerinside the cpp, all other places are clean.
191*89c4ff92SAndroid Build Coastguard Worker
192*89c4ff92SAndroid Build Coastguard WorkerBe aware, that it is currently not supported to hide the implementation
193*89c4ff92SAndroid Build Coastguard Workerinto a Windows-DLL, as a DLL interface with C++ standard templates in interfaces
194*89c4ff92SAndroid Build Coastguard Workeris a different beast. If someone is willing to give it a try, I might integrate
195*89c4ff92SAndroid Build Coastguard Workera PR but currently working on that myself is not a priority.
196*89c4ff92SAndroid Build Coastguard Worker
197*89c4ff92SAndroid Build Coastguard WorkerIf you use the forwarding/implementation approach, you can still use the dynamic
198*89c4ff92SAndroid Build Coastguard Workerswitching like this:
199*89c4ff92SAndroid Build Coastguard Worker
200*89c4ff92SAndroid Build Coastguard Worker```cpp
201*89c4ff92SAndroid Build Coastguard Worker#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include)
202*89c4ff92SAndroid Build Coastguard Worker#if __has_include(<filesystem>)
203*89c4ff92SAndroid Build Coastguard Worker#define GHC_USE_STD_FS
204*89c4ff92SAndroid Build Coastguard Worker#include <filesystem>
205*89c4ff92SAndroid Build Coastguard Workernamespace fs {
206*89c4ff92SAndroid Build Coastguard Workerusing namespace std::filesystem;
207*89c4ff92SAndroid Build Coastguard Workerusing ifstream = std::ifstream;
208*89c4ff92SAndroid Build Coastguard Workerusing ofstream = std::ofstream;
209*89c4ff92SAndroid Build Coastguard Workerusing fstream = std::fstream;
210*89c4ff92SAndroid Build Coastguard Worker}
211*89c4ff92SAndroid Build Coastguard Worker#endif
212*89c4ff92SAndroid Build Coastguard Worker#endif
213*89c4ff92SAndroid Build Coastguard Worker#ifndef GHC_USE_STD_FS
214*89c4ff92SAndroid Build Coastguard Worker#include <ghc/fs-fwd.hpp>
215*89c4ff92SAndroid Build Coastguard Workernamespace fs {
216*89c4ff92SAndroid Build Coastguard Workerusing namespace ghc::filesystem;
217*89c4ff92SAndroid Build Coastguard Workerusing ifstream = ghc::filesystem::ifstream;
218*89c4ff92SAndroid Build Coastguard Workerusing ofstream = ghc::filesystem::ofstream;
219*89c4ff92SAndroid Build Coastguard Workerusing fstream = ghc::filesystem::fstream;
220*89c4ff92SAndroid Build Coastguard Worker}
221*89c4ff92SAndroid Build Coastguard Worker#endif
222*89c4ff92SAndroid Build Coastguard Worker```
223*89c4ff92SAndroid Build Coastguard Worker
224*89c4ff92SAndroid Build Coastguard Workerand in the implementation hiding cpp, you might use (before any include that includes `ghc/fs_fwd.hpp`
225*89c4ff92SAndroid Build Coastguard Workerto take precedence:
226*89c4ff92SAndroid Build Coastguard Worker
227*89c4ff92SAndroid Build Coastguard Worker```cpp
228*89c4ff92SAndroid Build Coastguard Worker#if !(defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include)
229*89c4ff92SAndroid Build Coastguard Worker#if __has_include(<filesystem>))
230*89c4ff92SAndroid Build Coastguard Worker#include <ghc/fs_impl.hpp>
231*89c4ff92SAndroid Build Coastguard Worker#endif
232*89c4ff92SAndroid Build Coastguard Worker#endif
233*89c4ff92SAndroid Build Coastguard Worker```
234*89c4ff92SAndroid Build Coastguard Worker
235*89c4ff92SAndroid Build Coastguard Worker:information_source: **Hint:** There are additional helper headers, named `ghc/fs_std_fwd.hpp` and
236*89c4ff92SAndroid Build Coastguard Worker`ghc/fs_std_impl.hpp` that use this technique, so you can simply include them
237*89c4ff92SAndroid Build Coastguard Workerif you want to dynamically select the filesystem implementation. they also
238*89c4ff92SAndroid Build Coastguard Workerenable the `wchar_t` support on `ghc::filesystem` on Windows, so the resulting
239*89c4ff92SAndroid Build Coastguard Workerimplementation in the `fs` namespace will be compatible.
240*89c4ff92SAndroid Build Coastguard Worker
241*89c4ff92SAndroid Build Coastguard Worker
242*89c4ff92SAndroid Build Coastguard Worker
243*89c4ff92SAndroid Build Coastguard Worker### Git Submodule and CMake
244*89c4ff92SAndroid Build Coastguard Worker
245*89c4ff92SAndroid Build Coastguard WorkerStarting from v1.1.0, it is possible to add `ghc::filesystem`
246*89c4ff92SAndroid Build Coastguard Workeras a git submodule, add the directory to your `CMakeLists.txt` with
247*89c4ff92SAndroid Build Coastguard Worker`add_subdirectory()` and then simply use `target_link_libraries(your-target ghc_filesystem)`
248*89c4ff92SAndroid Build Coastguard Workerto ensure correct include path that allow `#include <ghc/filesystem.hpp>`
249*89c4ff92SAndroid Build Coastguard Workerto work.
250*89c4ff92SAndroid Build Coastguard Worker
251*89c4ff92SAndroid Build Coastguard WorkerThe `CMakeLists.txt` offers a few options to customize its behaviour:
252*89c4ff92SAndroid Build Coastguard Worker
253*89c4ff92SAndroid Build Coastguard Worker* `GHC_FILESYSTEM_BUILD_TESTING` - Compile tests, default is `OFF` when used as
254*89c4ff92SAndroid Build Coastguard Worker  a submodule, else `ON`.
255*89c4ff92SAndroid Build Coastguard Worker* `GHC_FILESYSTEM_BUILD_EXAMPLES` - Compile the examples, default is `OFF` when used as
256*89c4ff92SAndroid Build Coastguard Worker  a submodule, else `ON`.
257*89c4ff92SAndroid Build Coastguard Worker* `GHC_FILESYSTEM_WITH_INSTALL` - Add install target to build, default is `OFF` when used as
258*89c4ff92SAndroid Build Coastguard Worker  a submodule, else `ON`.
259*89c4ff92SAndroid Build Coastguard Worker
260*89c4ff92SAndroid Build Coastguard Worker### Versioning
261*89c4ff92SAndroid Build Coastguard Worker
262*89c4ff92SAndroid Build Coastguard WorkerThere is a version macro `GHC_FILESYSTEM_VERSION` defined in case future changes
263*89c4ff92SAndroid Build Coastguard Workermight make it needed to react on the version, but I don't plan to break anything.
264*89c4ff92SAndroid Build Coastguard WorkerIt's the version as decimal number `(major * 10000 + minor * 100 + patch)`.
265*89c4ff92SAndroid Build Coastguard Worker
266*89c4ff92SAndroid Build Coastguard Worker**Note:** Starting from v1.0.2 only even patch versions will be used for releases
267*89c4ff92SAndroid Build Coastguard Workerand odd patch version will only be used for in between commits while working on
268*89c4ff92SAndroid Build Coastguard Workerthe next version.
269*89c4ff92SAndroid Build Coastguard Worker
270*89c4ff92SAndroid Build Coastguard Worker
271*89c4ff92SAndroid Build Coastguard Worker## Documentation
272*89c4ff92SAndroid Build Coastguard Worker
273*89c4ff92SAndroid Build Coastguard WorkerThere is almost no documentation in this release, as any `std::filesystem`
274*89c4ff92SAndroid Build Coastguard Workerdocumentation would work, besides the few differences explained in the next
275*89c4ff92SAndroid Build Coastguard Workersection. So you might head over to https://en.cppreference.com/w/cpp/filesystem
276*89c4ff92SAndroid Build Coastguard Workerfor a description of the components of this library.
277*89c4ff92SAndroid Build Coastguard Worker
278*89c4ff92SAndroid Build Coastguard WorkerThe only additions to the standard are documented here:
279*89c4ff92SAndroid Build Coastguard Worker
280*89c4ff92SAndroid Build Coastguard Worker
281*89c4ff92SAndroid Build Coastguard Worker### `ghc::filesystem::ifstream`, `ghc::filesystem::ofstream`, `ghc::filesystem::fstream`
282*89c4ff92SAndroid Build Coastguard Worker
283*89c4ff92SAndroid Build Coastguard WorkerThese are simple wrappers around `std::ifstream`, `std::ofstream` and `std::fstream`.
284*89c4ff92SAndroid Build Coastguard WorkerThey simply add an `open()` method and a constuctor with an `ghc::filesystem::path`
285*89c4ff92SAndroid Build Coastguard Workerargument as the `fstream` variants in C++17 have them.
286*89c4ff92SAndroid Build Coastguard Worker
287*89c4ff92SAndroid Build Coastguard Worker### `ghc::filesystem::u8arguments`
288*89c4ff92SAndroid Build Coastguard Worker
289*89c4ff92SAndroid Build Coastguard WorkerThis is a helper class that currently checks for UTF-8 encoding on non-Windows platforms but on Windows it
290*89c4ff92SAndroid Build Coastguard Workerfetches the command line arguments als Unicode strings from the OS with
291*89c4ff92SAndroid Build Coastguard Worker
292*89c4ff92SAndroid Build Coastguard Worker```cpp
293*89c4ff92SAndroid Build Coastguard Worker::CommandLineToArgvW(::GetCommandLineW(), &argc)
294*89c4ff92SAndroid Build Coastguard Worker```
295*89c4ff92SAndroid Build Coastguard Worker
296*89c4ff92SAndroid Build Coastguard Workerand then converts them to UTF-8, and replaces `argc` and `argv`. It is a guard-like
297*89c4ff92SAndroid Build Coastguard Workerclass that reverts its changes when going out of scope.
298*89c4ff92SAndroid Build Coastguard Worker
299*89c4ff92SAndroid Build Coastguard WorkerSo basic usage is:
300*89c4ff92SAndroid Build Coastguard Worker
301*89c4ff92SAndroid Build Coastguard Worker```cpp
302*89c4ff92SAndroid Build Coastguard Workernamespace fs = ghc::filesystem;
303*89c4ff92SAndroid Build Coastguard Worker
304*89c4ff92SAndroid Build Coastguard Workerint main(int argc, char* argv[])
305*89c4ff92SAndroid Build Coastguard Worker{
306*89c4ff92SAndroid Build Coastguard Worker    fs::u8arguments u8guard(argc, argv);
307*89c4ff92SAndroid Build Coastguard Worker    if(!u8guard.valid()) {
308*89c4ff92SAndroid Build Coastguard Worker        std::cerr << "Bad encoding, needs UTF-8." << std::endl;
309*89c4ff92SAndroid Build Coastguard Worker        exit(EXIT_FAILURE);
310*89c4ff92SAndroid Build Coastguard Worker    }
311*89c4ff92SAndroid Build Coastguard Worker
312*89c4ff92SAndroid Build Coastguard Worker    // now use argc/argv as usual, they have utf-8 enconding on windows
313*89c4ff92SAndroid Build Coastguard Worker    // ...
314*89c4ff92SAndroid Build Coastguard Worker
315*89c4ff92SAndroid Build Coastguard Worker    return 0;
316*89c4ff92SAndroid Build Coastguard Worker}
317*89c4ff92SAndroid Build Coastguard Worker```
318*89c4ff92SAndroid Build Coastguard Worker
319*89c4ff92SAndroid Build Coastguard WorkerThat way `argv` is UTF-8 encoded as long as the scope from `main` is valid.
320*89c4ff92SAndroid Build Coastguard Worker
321*89c4ff92SAndroid Build Coastguard Worker**Note:** On macOS, while debugging under Xcode the code currently will return
322*89c4ff92SAndroid Build Coastguard Worker`false` as Xcode starts the application with `US-ASCII` as encoding, no matter what
323*89c4ff92SAndroid Build Coastguard Workerencoding is actually used and even setting `LC_ALL` in the product scheme doesn't
324*89c4ff92SAndroid Build Coastguard Workerchange anything. I still need to investigate this.
325*89c4ff92SAndroid Build Coastguard Worker
326*89c4ff92SAndroid Build Coastguard Worker
327*89c4ff92SAndroid Build Coastguard Worker## Differences
328*89c4ff92SAndroid Build Coastguard Worker
329*89c4ff92SAndroid Build Coastguard WorkerAs this implementation is based on existing code from my private helper
330*89c4ff92SAndroid Build Coastguard Workerclasses, it derived some constraints of it, leading to some differences
331*89c4ff92SAndroid Build Coastguard Workerbetween this and the standard C++17 API.
332*89c4ff92SAndroid Build Coastguard Worker
333*89c4ff92SAndroid Build Coastguard Worker
334*89c4ff92SAndroid Build Coastguard Worker### LWG Defects
335*89c4ff92SAndroid Build Coastguard Worker
336*89c4ff92SAndroid Build Coastguard WorkerThis implementation has switchable behavior for the LWG defects
337*89c4ff92SAndroid Build Coastguard Worker[#2682](https://wg21.cmeerw.net/lwg/issue2682),
338*89c4ff92SAndroid Build Coastguard Worker[#2935](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2935) and
339*89c4ff92SAndroid Build Coastguard Worker[#2937](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2937).
340*89c4ff92SAndroid Build Coastguard WorkerThe currently selected behavior is following
341*89c4ff92SAndroid Build Coastguard Worker[#2682](https://wg21.cmeerw.net/lwg/issue2682),
342*89c4ff92SAndroid Build Coastguard Worker[#2937](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2937) but
343*89c4ff92SAndroid Build Coastguard Workernot following [#2935](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2935),
344*89c4ff92SAndroid Build Coastguard Workeras I feel it is a bug to report no error on a `create_directory()` or `create_directories()`
345*89c4ff92SAndroid Build Coastguard Workerwhere a regular file of the same name prohibits the creation of a directory and forces
346*89c4ff92SAndroid Build Coastguard Workerthe user of those functions to double-check via `fs::is_directory` if it really worked.
347*89c4ff92SAndroid Build Coastguard WorkerThe more intuitive approach to directory creation of treating a file with that name as an
348*89c4ff92SAndroid Build Coastguard Workererror is also advocated by the newer paper
349*89c4ff92SAndroid Build Coastguard Worker[WG21 P1164R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1164r0.pdf), the revison
350*89c4ff92SAndroid Build Coastguard WorkerP1161R1 was agreed upon on Kona 2019 meeting [see merge](https://github.com/cplusplus/draft/issues/2703)
351*89c4ff92SAndroid Build Coastguard Workerand GCC by now switched to following its proposal
352*89c4ff92SAndroid Build Coastguard Worker([GCC #86910](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86910)).
353*89c4ff92SAndroid Build Coastguard Worker
354*89c4ff92SAndroid Build Coastguard Worker### Not Implemented on C++ before C++17
355*89c4ff92SAndroid Build Coastguard Worker
356*89c4ff92SAndroid Build Coastguard Worker```cpp
357*89c4ff92SAndroid Build Coastguard Worker// methods in ghc::filesystem::path:
358*89c4ff92SAndroid Build Coastguard Workerpath& operator+=(basic_string_view<value_type> x);
359*89c4ff92SAndroid Build Coastguard Workerint compare(basic_string_view<value_type> s) const;
360*89c4ff92SAndroid Build Coastguard Worker```
361*89c4ff92SAndroid Build Coastguard Worker
362*89c4ff92SAndroid Build Coastguard WorkerThese are not implemented under C++11 and C++14, as there is no
363*89c4ff92SAndroid Build Coastguard Worker`std::basic_string_view` available and I did want to keep this
364*89c4ff92SAndroid Build Coastguard Workerimplementation self-contained and not write a full C++17-upgrade for
365*89c4ff92SAndroid Build Coastguard WorkerC++11/14. Starting with v1.1.0 these are supported when compiling
366*89c4ff92SAndroid Build Coastguard Workerghc::filesystem under C++17.
367*89c4ff92SAndroid Build Coastguard Worker
368*89c4ff92SAndroid Build Coastguard Worker
369*89c4ff92SAndroid Build Coastguard Worker### Differences in API
370*89c4ff92SAndroid Build Coastguard Worker
371*89c4ff92SAndroid Build Coastguard Worker```cpp
372*89c4ff92SAndroid Build Coastguard Workerfilesystem::path::string_type
373*89c4ff92SAndroid Build Coastguard Workerfilesystem::path::value_type
374*89c4ff92SAndroid Build Coastguard Worker```
375*89c4ff92SAndroid Build Coastguard Worker
376*89c4ff92SAndroid Build Coastguard WorkerIn Windows, an implementation should use `std::wstring` and `wchar_t` as types used
377*89c4ff92SAndroid Build Coastguard Workerfor the native representation, but as I'm a big fan of the
378*89c4ff92SAndroid Build Coastguard Worker["UTF-8 Everywhere" philosophy](https://utf8everywhere.org/), I decided
379*89c4ff92SAndroid Build Coastguard Workeragains it for now. If you need to call some Windows API, use the W-variant
380*89c4ff92SAndroid Build Coastguard Workerwith the `path::wstring()` member
381*89c4ff92SAndroid Build Coastguard Worker(e.g. `GetFileAttributesW(p.wstring().c_str())`). This gives you the
382*89c4ff92SAndroid Build Coastguard WorkerUnicode variant independant of the `UNICODE` macro and makes sharing code
383*89c4ff92SAndroid Build Coastguard Workerbetween Windows, Linux and macOS easier.
384*89c4ff92SAndroid Build Coastguard Worker
385*89c4ff92SAndroid Build Coastguard WorkerStarting with v1.2.0 `ghc::filesystem` has the option to select the more
386*89c4ff92SAndroid Build Coastguard Workerstandard conforming APi with `wchar_t` and `std::wstring` on Windows by
387*89c4ff92SAndroid Build Coastguard Workerdefining `GHC_WIN_WSTRING_STRING_TYPE`. This define has no effect on other
388*89c4ff92SAndroid Build Coastguard Workerplatforms and will be set by the helping headers `ghc/fs_std.hpp` and
389*89c4ff92SAndroid Build Coastguard Workerthe pair `ghc/fs_std_fwd.hpp`/`ghc/fs_std_impl.hpp` to enhance compatibility.
390*89c4ff92SAndroid Build Coastguard Worker
391*89c4ff92SAndroid Build Coastguard Worker
392*89c4ff92SAndroid Build Coastguard Worker```cpp
393*89c4ff92SAndroid Build Coastguard Workerconst path::string_type& path::native() const /*noexcept*/;
394*89c4ff92SAndroid Build Coastguard Workerconst path::value_type *path::c_str() const /*noexcept*/;
395*89c4ff92SAndroid Build Coastguard Worker```
396*89c4ff92SAndroid Build Coastguard Worker
397*89c4ff92SAndroid Build Coastguard WorkerThese two can not be `noexcept` with the current implementation. This due
398*89c4ff92SAndroid Build Coastguard Workerto the fact, that internally path is working on the generic path version
399*89c4ff92SAndroid Build Coastguard Workeronly, and the getters need to do a conversion to native path format.
400*89c4ff92SAndroid Build Coastguard Worker
401*89c4ff92SAndroid Build Coastguard Worker```cpp
402*89c4ff92SAndroid Build Coastguard Workerconst path::string_type& path::generic_string() const;
403*89c4ff92SAndroid Build Coastguard Worker```
404*89c4ff92SAndroid Build Coastguard Worker
405*89c4ff92SAndroid Build Coastguard WorkerThis returns a const reference, instead of a value, because it can. This
406*89c4ff92SAndroid Build Coastguard Workerimplementation uses the generic representation for internal workings, so
407*89c4ff92SAndroid Build Coastguard Workerit's "free" to return that.
408*89c4ff92SAndroid Build Coastguard Worker
409*89c4ff92SAndroid Build Coastguard Worker
410*89c4ff92SAndroid Build Coastguard Worker### Differences in Behavior
411*89c4ff92SAndroid Build Coastguard Worker
412*89c4ff92SAndroid Build Coastguard Worker#### fs.path ([ref](https://en.cppreference.com/w/cpp/filesystem/path))
413*89c4ff92SAndroid Build Coastguard Worker
414*89c4ff92SAndroid Build Coastguard WorkerAs the complete inner mechanics of this implementation `fs::path` are working
415*89c4ff92SAndroid Build Coastguard Workeron the generic format, it is the internal representation. So creating any mixed
416*89c4ff92SAndroid Build Coastguard Workerslash `fs::path` object under Windows (e.g. with `"C:\foo/bar"`) will lead to a
417*89c4ff92SAndroid Build Coastguard Workerunified path with `"C:\foo\bar"` via `native()` and `"C:/foo/bar"` via
418*89c4ff92SAndroid Build Coastguard Worker`generic_string()` API.
419*89c4ff92SAndroid Build Coastguard Worker
420*89c4ff92SAndroid Build Coastguard WorkerAdditionally this implementation follows the standards suggestion to handle
421*89c4ff92SAndroid Build Coastguard Workerposix paths of the form `"//host/path"` and USC path on windows also as having
422*89c4ff92SAndroid Build Coastguard Workera root-name (e.g. `"//host"`). The GCC implementation didn't choose to do that
423*89c4ff92SAndroid Build Coastguard Workerwhile testing on Ubuntu 18.04 and macOS with GCC 8.1.0 or Clang 7.0.0. This difference
424*89c4ff92SAndroid Build Coastguard Workerwill show as warnings under std::filesystem. This leads to a change in the
425*89c4ff92SAndroid Build Coastguard Workeralgorithm described in the standard for `operator/=(path& p)` where any path
426*89c4ff92SAndroid Build Coastguard Worker`p` with `p.is_absolute()` will degrade to an assignment, while this implementation
427*89c4ff92SAndroid Build Coastguard Workerhas the exception where `*this == *this.root_name()` and `p == preferred_seperator`
428*89c4ff92SAndroid Build Coastguard Workera normal append will be done, to allow:
429*89c4ff92SAndroid Build Coastguard Worker
430*89c4ff92SAndroid Build Coastguard Worker```cpp
431*89c4ff92SAndroid Build Coastguard Workerfs::path p1 = "//host/foo/bar/file.txt";
432*89c4ff92SAndroid Build Coastguard Workerfs::path p2;
433*89c4ff92SAndroid Build Coastguard Workerfor (auto p : p1) p2 /= p;
434*89c4ff92SAndroid Build Coastguard WorkerASSERT(p1 == p2);
435*89c4ff92SAndroid Build Coastguard Worker```
436*89c4ff92SAndroid Build Coastguard Worker
437*89c4ff92SAndroid Build Coastguard WorkerFor all non-host-leading paths the behaviour will match the one described by
438*89c4ff92SAndroid Build Coastguard Workerthe standard.
439*89c4ff92SAndroid Build Coastguard Worker
440*89c4ff92SAndroid Build Coastguard Worker#### fs.op.copy ([ref](https://en.cppreference.com/w/cpp/filesystem/copy))
441*89c4ff92SAndroid Build Coastguard Worker
442*89c4ff92SAndroid Build Coastguard WorkerThen there is `fs::copy`. The tests in the suite fail partially with C++17 `std::filesystem`
443*89c4ff92SAndroid Build Coastguard Workeron GCC/Clang. They complain about a copy call with `fs::copy_options::recursive` combined
444*89c4ff92SAndroid Build Coastguard Workerwith `fs::copy_options::create_symlinks` or `fs::copy_options::create_hard_links` if the
445*89c4ff92SAndroid Build Coastguard Workersource is a directory. There is nothing in the standard that forbids this combination
446*89c4ff92SAndroid Build Coastguard Workerand it is the only way to deep-copy a tree while only create links for the files.
447*89c4ff92SAndroid Build Coastguard WorkerThere is [LWG #2682](https://wg21.cmeerw.net/lwg/issue2682) that supports this
448*89c4ff92SAndroid Build Coastguard Workerinterpretation, but the issue ignores the usefulness of the combination with recursive
449*89c4ff92SAndroid Build Coastguard Workerand part of the justification for the proposed solution is "we did it so for almost two years".
450*89c4ff92SAndroid Build Coastguard WorkerBut this makes `fs::copy` with `fs::copy_options::create_symlinks` or `fs::copy_options::create_hard_links`
451*89c4ff92SAndroid Build Coastguard Workerjust a more complicated syntax for the `fs::create_symlink` or `fs::create_hardlink` operation
452*89c4ff92SAndroid Build Coastguard Workerand I don't want to believe, that this was the intention of the original writing.
453*89c4ff92SAndroid Build Coastguard WorkerAs there is another issue related to copy, with a different take on the description.
454*89c4ff92SAndroid Build Coastguard Worker
455*89c4ff92SAndroid Build Coastguard Worker**Note:** With v1.1.2 I decided to integrate a behavior switch for this and make the LWG #2682
456*89c4ff92SAndroid Build Coastguard Workerthe default.
457*89c4ff92SAndroid Build Coastguard Worker
458*89c4ff92SAndroid Build Coastguard Worker## Open Issues
459*89c4ff92SAndroid Build Coastguard Worker
460*89c4ff92SAndroid Build Coastguard Worker### General Known Issues
461*89c4ff92SAndroid Build Coastguard Worker
462*89c4ff92SAndroid Build Coastguard WorkerThere are still some methods that break the `noexcept` clause, some
463*89c4ff92SAndroid Build Coastguard Workerare related to LWG defects, some are due to my implementation. I
464*89c4ff92SAndroid Build Coastguard Workerwork on fixing the later ones, and might in cases where there is no
465*89c4ff92SAndroid Build Coastguard Workerway of implementing the feature without risk of an exception, break
466*89c4ff92SAndroid Build Coastguard Workerconformance and remove the `noexcept`.
467*89c4ff92SAndroid Build Coastguard Worker
468*89c4ff92SAndroid Build Coastguard Worker### Windows
469*89c4ff92SAndroid Build Coastguard Worker
470*89c4ff92SAndroid Build Coastguard Worker#### Symbolic Links on Windows
471*89c4ff92SAndroid Build Coastguard Worker
472*89c4ff92SAndroid Build Coastguard WorkerAs symbolic links on Windows, while being supported more or less since
473*89c4ff92SAndroid Build Coastguard WorkerWindows Vista (with some strict security constraints) and fully since some earlier
474*89c4ff92SAndroid Build Coastguard Workerbuild of Windows 10, when "Developer Mode" is activated, are at time of writing
475*89c4ff92SAndroid Build Coastguard Worker(2018) rarely used, still they are supported with this implementation.
476*89c4ff92SAndroid Build Coastguard Worker
477*89c4ff92SAndroid Build Coastguard Worker#### Permissions
478*89c4ff92SAndroid Build Coastguard Worker
479*89c4ff92SAndroid Build Coastguard WorkerThe Windows ACL permission feature translates badly to the POSIX permission
480*89c4ff92SAndroid Build Coastguard Workerbit mask used in the interface of C++17 filesystem. The permissions returned
481*89c4ff92SAndroid Build Coastguard Workerin the `file_status` are therefore currently synthesized for the `user`-level
482*89c4ff92SAndroid Build Coastguard Workerand copied to the `group`- and `other`-level. There is still some potential
483*89c4ff92SAndroid Build Coastguard Workerfor more interaction with the Windows permission system, but currently setting
484*89c4ff92SAndroid Build Coastguard Workeror reading permissions with this implementation will most certainly not lead
485*89c4ff92SAndroid Build Coastguard Workerto the expected behavior.
486*89c4ff92SAndroid Build Coastguard Worker
487*89c4ff92SAndroid Build Coastguard Worker
488*89c4ff92SAndroid Build Coastguard Worker## Release Notes
489*89c4ff92SAndroid Build Coastguard Worker
490*89c4ff92SAndroid Build Coastguard Worker### [v1.3.2](https://github.com/gulrak/filesystem/releases/tag/v1.3.2)
491*89c4ff92SAndroid Build Coastguard Worker
492*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#58](https://github.com/gulrak/filesystem/issues/58), on MinGW the
493*89c4ff92SAndroid Build Coastguard Worker  compilation could fail with an error about an undefined `ERROR_FILE_TOO_LARGE`
494*89c4ff92SAndroid Build Coastguard Worker  constant.
495*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#56](https://github.com/gulrak/filesystem/issues/58), `fs::lexically_relative`
496*89c4ff92SAndroid Build Coastguard Worker  didn't ignore trailing slash on the base parameter, thanks for PR
497*89c4ff92SAndroid Build Coastguard Worker  [#57](https://github.com/gulrak/filesystem/pull/57).
498*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#55](https://github.com/gulrak/filesystem/issues/55), `fs::create_directories`
499*89c4ff92SAndroid Build Coastguard Worker  returned `true` when nothing needed to be created, because the directory already existed.
500*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#54](https://github.com/gulrak/filesystem/issues/54), `error_code`
501*89c4ff92SAndroid Build Coastguard Worker  was not reset, if cached result was returned.
502*89c4ff92SAndroid Build Coastguard Worker* Pull request [#53](https://github.com/gulrak/filesystem/pull/53), fix for wrong
503*89c4ff92SAndroid Build Coastguard Worker  handling of leading whitespace when reading `fs::path` from a stream.
504*89c4ff92SAndroid Build Coastguard Worker* Pull request [#52](https://github.com/gulrak/filesystem/pull/52), an ARM Linux
505*89c4ff92SAndroid Build Coastguard Worker  target is now part of the CI infrastructure with the service of Drone CI.
506*89c4ff92SAndroid Build Coastguard Worker* Pull request [#51](https://github.com/gulrak/filesystem/pull/51), FreeBSD is now
507*89c4ff92SAndroid Build Coastguard Worker  part of the CI infrastucture with the service of Cirrus CI.
508*89c4ff92SAndroid Build Coastguard Worker* Pull request [#50](https://github.com/gulrak/filesystem/pull/50), adaptive cast to
509*89c4ff92SAndroid Build Coastguard Worker  `timespec` fields to avoid warnings.
510*89c4ff92SAndroid Build Coastguard Worker
511*89c4ff92SAndroid Build Coastguard Worker### [v1.3.0](https://github.com/gulrak/filesystem/releases/tag/v1.3.0)
512*89c4ff92SAndroid Build Coastguard Worker
513*89c4ff92SAndroid Build Coastguard Worker* **Important: `ghc::filesystem` is re-licensed from BSD-3-Clause to MIT license.** (see
514*89c4ff92SAndroid Build Coastguard Worker  [#47](https://github.com/gulrak/filesystem/issues/47))
515*89c4ff92SAndroid Build Coastguard Worker* Pull request [#46](https://github.com/gulrak/filesystem/pull/46), suppresses
516*89c4ff92SAndroid Build Coastguard Worker  unused parameter warning on Android.
517*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#44](https://github.com/gulrak/filesystem/issues/44), fixes
518*89c4ff92SAndroid Build Coastguard Worker  for warnings from newer Xcode versions.
519*89c4ff92SAndroid Build Coastguard Worker
520*89c4ff92SAndroid Build Coastguard Worker### [v1.2.10](https://github.com/gulrak/filesystem/releases/tag/v1.2.10)
521*89c4ff92SAndroid Build Coastguard Worker
522*89c4ff92SAndroid Build Coastguard Worker* The Visual Studio 2019 compiler, GCC 9.2 and Clang 9.0 where added to the
523*89c4ff92SAndroid Build Coastguard Worker  CI configuration.
524*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#41](https://github.com/gulrak/filesystem/issues/41), `fs::rename`
525*89c4ff92SAndroid Build Coastguard Worker  on Windows didn't replace an axisting regular file as required by the standard,
526*89c4ff92SAndroid Build Coastguard Worker  but gave an error. New tests and a fix as provided in the issue was implemented.
527*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#39](https://github.com/gulrak/filesystem/issues/39), for the
528*89c4ff92SAndroid Build Coastguard Worker  forwarding use via `fs_fwd.hpp` or `fs_std_fwd.hpp` der was a use of
529*89c4ff92SAndroid Build Coastguard Worker  `DWORD` in the forwarding part leading to an error if `Windows.h` was not
530*89c4ff92SAndroid Build Coastguard Worker  included before the header. The tests were changed to give an error in that
531*89c4ff92SAndroid Build Coastguard Worker  case too and the useage of `DWORD` was removed.
532*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#38](https://github.com/gulrak/filesystem/issues/38), casting the
533*89c4ff92SAndroid Build Coastguard Worker  return value of `GetProcAddress` gave a warning with `-Wcast-function-type`
534*89c4ff92SAndroid Build Coastguard Worker  on MSYS2 and MinGW GCC 9 builds.
535*89c4ff92SAndroid Build Coastguard Worker
536*89c4ff92SAndroid Build Coastguard Worker### [v1.2.8](https://github.com/gulrak/filesystem/releases/tag/v1.2.8)
537*89c4ff92SAndroid Build Coastguard Worker
538*89c4ff92SAndroid Build Coastguard Worker* Pull request [#30](https://github.com/gulrak/filesystem/pull/30), the
539*89c4ff92SAndroid Build Coastguard Worker  `CMakeLists.txt` will automatically exclude building examples and tests when
540*89c4ff92SAndroid Build Coastguard Worker  used as submodule, the configuration options now use a prefixed name to
541*89c4ff92SAndroid Build Coastguard Worker  reduce risk of conflicts.
542*89c4ff92SAndroid Build Coastguard Worker* Pull request [#24](https://github.com/gulrak/filesystem/pull/24), install
543*89c4ff92SAndroid Build Coastguard Worker  target now creates a `ghcFilesystemConfig.cmake` in
544*89c4ff92SAndroid Build Coastguard Worker  `${CMAKE_INSTALL_LIBDIR}/cmake/ghcFilesystem` for `find_package` that
545*89c4ff92SAndroid Build Coastguard Worker  exports a target as `ghcFilesystem::ghc_filesystem`.
546*89c4ff92SAndroid Build Coastguard Worker* Pull request [#31](https://github.com/gulrak/filesystem/pull/31), fixes
547*89c4ff92SAndroid Build Coastguard Worker  `error: redundant redeclaration of 'constexpr' static data member` deprecation
548*89c4ff92SAndroid Build Coastguard Worker  warning in C++17 mode.
549*89c4ff92SAndroid Build Coastguard Worker* Pull request [#32](https://github.com/gulrak/filesystem/pull/32), fixes
550*89c4ff92SAndroid Build Coastguard Worker  old-style-cast warnings.
551*89c4ff92SAndroid Build Coastguard Worker* Pull request [#34](https://github.com/gulrak/filesystem/pull/34), fixes
552*89c4ff92SAndroid Build Coastguard Worker  [TOCTOU](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use) situation
553*89c4ff92SAndroid Build Coastguard Worker  on `fs::create_directories`, thanks for the PR!
554*89c4ff92SAndroid Build Coastguard Worker* Feature [#35](https://github.com/gulrak/filesystem/issues/35), new CMake
555*89c4ff92SAndroid Build Coastguard Worker  option to add an install target `GHC_FILESYSTEM_WITH_INSTALL` that is
556*89c4ff92SAndroid Build Coastguard Worker  defaulted to OFF if `ghc::filesystem` is used via `add_subdirectory`.
557*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#33](https://github.com/gulrak/filesystem/issues/33), fixes
558*89c4ff92SAndroid Build Coastguard Worker  an issue with `fs::path::lexically_normal()` that leaves a trailing separator
559*89c4ff92SAndroid Build Coastguard Worker  in case of a resulting path ending with `..` as last element.
560*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#36](https://github.com/gulrak/filesystem/issues/36), warings
561*89c4ff92SAndroid Build Coastguard Worker  on Xcode 11.2 due to unhelpfull references in path element iteration.
562*89c4ff92SAndroid Build Coastguard Worker
563*89c4ff92SAndroid Build Coastguard Worker### [v1.2.6](https://github.com/gulrak/filesystem/releases/tag/v1.2.6)
564*89c4ff92SAndroid Build Coastguard Worker
565*89c4ff92SAndroid Build Coastguard Worker* Pull request [#23](https://github.com/gulrak/filesystem/pull/23), tests and
566*89c4ff92SAndroid Build Coastguard Worker  examples can now be disabled in CMake via seting `BUILD_TESTING` and
567*89c4ff92SAndroid Build Coastguard Worker  `BUILD_EXAMPLES` to `NO`, `OFF` or `FALSE`.
568*89c4ff92SAndroid Build Coastguard Worker* Pull request [#25](https://github.com/gulrak/filesystem/pull/25),
569*89c4ff92SAndroid Build Coastguard Worker  missing specialization for construction from `std::string_view` when
570*89c4ff92SAndroid Build Coastguard Worker  available was added.
571*89c4ff92SAndroid Build Coastguard Worker* Additional test case when `std::string_view` is available.
572*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#27](https://github.com/gulrak/filesystem/issues/27), the
573*89c4ff92SAndroid Build Coastguard Worker  `fs::path::preferred_seperator` declaration was not compiling on pre
574*89c4ff92SAndroid Build Coastguard Worker  C++17 compilers and no test accessed it, to show the problem. Fixed
575*89c4ff92SAndroid Build Coastguard Worker  it to an construction C++11 compiler should accept and added a test that
576*89c4ff92SAndroid Build Coastguard Worker  is successful on all combinations tested.
577*89c4ff92SAndroid Build Coastguard Worker* Bugfix for [#29](https://github.com/gulrak/filesystem/issues/29), stricter
578*89c4ff92SAndroid Build Coastguard Worker  warning settings where chosen and resulting warnings where fixed.
579*89c4ff92SAndroid Build Coastguard Worker
580*89c4ff92SAndroid Build Coastguard Worker### [v1.2.4](https://github.com/gulrak/filesystem/releases/tag/v1.2.4)
581*89c4ff92SAndroid Build Coastguard Worker
582*89c4ff92SAndroid Build Coastguard Worker* Enabled stronger warning switches and resulting fixed issues on GCC and MinGW
583*89c4ff92SAndroid Build Coastguard Worker* Bugfix for #22, the `fs::copy_options` where not forwarded from `fs::copy` to
584*89c4ff92SAndroid Build Coastguard Worker  `fs::copy_file` in one of the cases.
585*89c4ff92SAndroid Build Coastguard Worker
586*89c4ff92SAndroid Build Coastguard Worker### [v1.2.2](https://github.com/gulrak/filesystem/releases/tag/v1.2.2)
587*89c4ff92SAndroid Build Coastguard Worker
588*89c4ff92SAndroid Build Coastguard Worker* Fix for ([#21](https://github.com/gulrak/filesystem/pull/21)), when compiling
589*89c4ff92SAndroid Build Coastguard Worker  on Alpine Linux with musl instead of glibc, the wrong `strerror_r` signature
590*89c4ff92SAndroid Build Coastguard Worker  was expected. The complex preprocessor define mix was dropped in favor of
591*89c4ff92SAndroid Build Coastguard Worker  the usual dispatch by overloading a unifying wrapper.
592*89c4ff92SAndroid Build Coastguard Worker
593*89c4ff92SAndroid Build Coastguard Worker### [v1.2.0](https://github.com/gulrak/filesystem/releases/tag/v1.2.0)
594*89c4ff92SAndroid Build Coastguard Worker
595*89c4ff92SAndroid Build Coastguard Worker* Added MinGW 32/64 and Visual Studio 2015 builds to the CI configuration.
596*89c4ff92SAndroid Build Coastguard Worker* Fixed additional compilation issues on MinGW.
597*89c4ff92SAndroid Build Coastguard Worker* Pull request ([#13](https://github.com/gulrak/filesystem/pull/13)), set
598*89c4ff92SAndroid Build Coastguard Worker  minimum required CMake version to 3.7.2 (as in Debian 8).
599*89c4ff92SAndroid Build Coastguard Worker* Pull request ([#14](https://github.com/gulrak/filesystem/pull/14)), added
600*89c4ff92SAndroid Build Coastguard Worker  support for a make install target.
601*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#15](https://github.com/gulrak/filesystem/issues/15)), the
602*89c4ff92SAndroid Build Coastguard Worker  forward/impl way of using `ghc::filesystem` missed a `<vector>` include
603*89c4ff92SAndroid Build Coastguard Worker  in the windows case.
604*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#16](https://github.com/gulrak/filesystem/issues/16)),
605*89c4ff92SAndroid Build Coastguard Worker  VS2019 didn't like the old size dispatching in the utf8 decoder, so it
606*89c4ff92SAndroid Build Coastguard Worker  was changed to a sfinae based approach.
607*89c4ff92SAndroid Build Coastguard Worker* New feature ([#17](https://github.com/gulrak/filesystem/issues/17)), optional
608*89c4ff92SAndroid Build Coastguard Worker  support for standard conforming `wchar_t/std::wstring` interface when
609*89c4ff92SAndroid Build Coastguard Worker  compiling on Windows with defined `GHC_WIN_WSTRING_STRING_TYPE`, this is
610*89c4ff92SAndroid Build Coastguard Worker  default when using the `ghc/fs_std*.hpp` header, to enhance compatibility.
611*89c4ff92SAndroid Build Coastguard Worker* New feature ([#18](https://github.com/gulrak/filesystem/issues/18)), optional
612*89c4ff92SAndroid Build Coastguard Worker  filesystem exceptions/errors on unicode errors with defined
613*89c4ff92SAndroid Build Coastguard Worker  `GHC_RAISE_UNICODE_ERRORS` (instead of replacing invalid code points or
614*89c4ff92SAndroid Build Coastguard Worker  UTF-8 encoding errors with the replacement character `U+FFFD`).
615*89c4ff92SAndroid Build Coastguard Worker* Pull request ([#20](https://github.com/gulrak/filesystem/pull/20)), fix for
616*89c4ff92SAndroid Build Coastguard Worker  file handle leak in `fs::copy_file`.
617*89c4ff92SAndroid Build Coastguard Worker* Coverage now checked in CI (~95% line coverage).
618*89c4ff92SAndroid Build Coastguard Worker
619*89c4ff92SAndroid Build Coastguard Worker### [v1.1.4](https://github.com/gulrak/filesystem/releases/tag/v1.1.4)
620*89c4ff92SAndroid Build Coastguard Worker
621*89c4ff92SAndroid Build Coastguard Worker* Additional Bugfix for ([#12](https://github.com/gulrak/filesystem/issues/12)),
622*89c4ff92SAndroid Build Coastguard Worker  error in old unified `readdir/readdir_r` code of `fs::directory_iterator`;
623*89c4ff92SAndroid Build Coastguard Worker  as `readdir_r` is now depricated, I decided to drop it and the resulting
624*89c4ff92SAndroid Build Coastguard Worker  code is much easier, shorter and due to more refactoring faster
625*89c4ff92SAndroid Build Coastguard Worker* Fix for crashing unit tests against MSVC C++17 std::filesystem
626*89c4ff92SAndroid Build Coastguard Worker* Travis-CI now additionally test with Xcode 10.2 on macOS
627*89c4ff92SAndroid Build Coastguard Worker* Some minor refactorings
628*89c4ff92SAndroid Build Coastguard Worker
629*89c4ff92SAndroid Build Coastguard Worker### [v1.1.2](https://github.com/gulrak/filesystem/releases/tag/v1.1.2)
630*89c4ff92SAndroid Build Coastguard Worker
631*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#11](https://github.com/gulrak/filesystem/issues/11)),
632*89c4ff92SAndroid Build Coastguard Worker  `fs::path::lexically_normal()` had some issues with `".."`-sequences.
633*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#12](https://github.com/gulrak/filesystem/issues/12)),
634*89c4ff92SAndroid Build Coastguard Worker  `fs::recursive_directory_iterator` could run into endless loops,
635*89c4ff92SAndroid Build Coastguard Worker  the methods depth() and pop() had issues and the copy behaviour and
636*89c4ff92SAndroid Build Coastguard Worker  `input_iterator_tag` conformance was broken, added tests
637*89c4ff92SAndroid Build Coastguard Worker* Restructured some CMake code into a macro to ease the support for
638*89c4ff92SAndroid Build Coastguard Worker  C++17 std::filesystem builds of tests and examples for interoperability
639*89c4ff92SAndroid Build Coastguard Worker  checks.
640*89c4ff92SAndroid Build Coastguard Worker* Some fixes on Windows tests to ease interoperability test runs.
641*89c4ff92SAndroid Build Coastguard Worker* Reduced noise on `fs::weakly_canonical()` tests against `std::fs`
642*89c4ff92SAndroid Build Coastguard Worker* Added simple `du` example showing the `recursive_directory_iterator`
643*89c4ff92SAndroid Build Coastguard Worker  used to add the sizes of files in a directory tree.
644*89c4ff92SAndroid Build Coastguard Worker* Added error checking in `fs::file_time_type` test helpers
645*89c4ff92SAndroid Build Coastguard Worker* `fs::copy()` now conforms LWG #2682, disallowing the use of
646*89c4ff92SAndroid Build Coastguard Worker  `copy_option::create_symlinks' to be used on directories
647*89c4ff92SAndroid Build Coastguard Worker
648*89c4ff92SAndroid Build Coastguard Worker### [v1.1.0](https://github.com/gulrak/filesystem/releases/tag/v1.1.0)
649*89c4ff92SAndroid Build Coastguard Worker
650*89c4ff92SAndroid Build Coastguard Worker* Restructuring of the project directory. The header files are now using
651*89c4ff92SAndroid Build Coastguard Worker  `hpp` as extension to be marked as c++ and they where moved to
652*89c4ff92SAndroid Build Coastguard Worker  `include/ghc/` to be able to include by `<ghc/filesystem.hpp>` as the
653*89c4ff92SAndroid Build Coastguard Worker  former include name might have been to generic and conflict with other
654*89c4ff92SAndroid Build Coastguard Worker  files.
655*89c4ff92SAndroid Build Coastguard Worker* Better CMake support: `ghc::filesystem` now can be used as a submodul
656*89c4ff92SAndroid Build Coastguard Worker  and added with `add_subdirectory` and will export itself as `ghc_filesystem`
657*89c4ff92SAndroid Build Coastguard Worker  target. To use it, only `target_link_libraries(your-target ghc_filesystem)`
658*89c4ff92SAndroid Build Coastguard Worker  is needed and the include directories will be set so `#include <ghc/filesystem.hpp>`
659*89c4ff92SAndroid Build Coastguard Worker  will be a valid directive.
660*89c4ff92SAndroid Build Coastguard Worker  Still you can simply only add the header file to you project and include it
661*89c4ff92SAndroid Build Coastguard Worker  from there.
662*89c4ff92SAndroid Build Coastguard Worker* Enhancement ([#10](https://github.com/gulrak/filesystem/issues/10)),
663*89c4ff92SAndroid Build Coastguard Worker  support for separation of implementation and forwarded api: Two
664*89c4ff92SAndroid Build Coastguard Worker  additional simple includes are added, that can be used to forward
665*89c4ff92SAndroid Build Coastguard Worker  `ghc::filesystem` declarations (`fs_fwd.hpp`) and to wrap the
666*89c4ff92SAndroid Build Coastguard Worker  implementation into a single cpp (`fs_impl.hpp`)
667*89c4ff92SAndroid Build Coastguard Worker* The `std::basic_string_view` variants of the `fs::path` api are
668*89c4ff92SAndroid Build Coastguard Worker  now supported when compiling with C++17.
669*89c4ff92SAndroid Build Coastguard Worker* Added CI integration for Travis-CI and Appveyor.
670*89c4ff92SAndroid Build Coastguard Worker* Fixed MinGW compilation issues.
671*89c4ff92SAndroid Build Coastguard Worker* Added long filename support for Windows.
672*89c4ff92SAndroid Build Coastguard Worker
673*89c4ff92SAndroid Build Coastguard Worker### [v1.0.10](https://github.com/gulrak/filesystem/releases/tag/v1.0.10)
674*89c4ff92SAndroid Build Coastguard Worker
675*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#9](https://github.com/gulrak/filesystem/issues/9)), added
676*89c4ff92SAndroid Build Coastguard Worker  missing return statement to `ghc::filesystem::path::generic_string()`
677*89c4ff92SAndroid Build Coastguard Worker* Added checks to hopefully better compile against Android NDK. There where
678*89c4ff92SAndroid Build Coastguard Worker  no tests run yet, so feedback is needed to actually call this supported.
679*89c4ff92SAndroid Build Coastguard Worker* `filesystem.h` was renamed `filesystem.hpp` to better reflect that it is
680*89c4ff92SAndroid Build Coastguard Worker  a c++ language header.
681*89c4ff92SAndroid Build Coastguard Worker
682*89c4ff92SAndroid Build Coastguard Worker### [v1.0.8](https://github.com/gulrak/filesystem/releases/tag/v1.0.8)
683*89c4ff92SAndroid Build Coastguard Worker
684*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#6](https://github.com/gulrak/filesystem/issues/6)), where
685*89c4ff92SAndroid Build Coastguard Worker  `ghc::filesystem::remove()` and `ghc::filesystem::remove_all()` both are
686*89c4ff92SAndroid Build Coastguard Worker  now able to remove a single file and both will not raise an error if the
687*89c4ff92SAndroid Build Coastguard Worker  path doesn't exist.
688*89c4ff92SAndroid Build Coastguard Worker* Merged pull request ([#7](https://github.com/gulrak/filesystem/pull/7)),
689*89c4ff92SAndroid Build Coastguard Worker  a typo leading to setting error code instead of comparing it in
690*89c4ff92SAndroid Build Coastguard Worker  `ghc::filesystem::remove()` under Windows.
691*89c4ff92SAndroid Build Coastguard Worker* Bugfix for (([#8](https://github.com/gulrak/filesystem/issues/8)), the
692*89c4ff92SAndroid Build Coastguard Worker  Windows version of `ghc::filesystem::directory_iterator` now releases
693*89c4ff92SAndroid Build Coastguard Worker  resources when reaching `end()` like the POSIX one does.
694*89c4ff92SAndroid Build Coastguard Worker
695*89c4ff92SAndroid Build Coastguard Worker
696*89c4ff92SAndroid Build Coastguard Worker### [v1.0.6](https://github.com/gulrak/filesystem/releases/tag/v1.0.6)
697*89c4ff92SAndroid Build Coastguard Worker
698*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#4](https://github.com/gulrak/filesystem/issues/4)), missing error_code
699*89c4ff92SAndroid Build Coastguard Worker  propagation in `ghc::filesystem::copy()` and `ghc::filesystem::remove_all` fixed.
700*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#5](https://github.com/gulrak/filesystem/issues/5)), added missing std
701*89c4ff92SAndroid Build Coastguard Worker  namespace in `ghc::filesystem::recursive_directory_iterator::difference_type`.
702*89c4ff92SAndroid Build Coastguard Worker
703*89c4ff92SAndroid Build Coastguard Worker### [v1.0.4](https://github.com/gulrak/filesystem/releases/tag/v1.0.4)
704*89c4ff92SAndroid Build Coastguard Worker
705*89c4ff92SAndroid Build Coastguard Worker* Bugfix for ([#3](https://github.com/gulrak/filesystem/issues/3)), fixed missing inlines
706*89c4ff92SAndroid Build Coastguard Worker  and added test to ensure including into multiple implementation files works as expected.
707*89c4ff92SAndroid Build Coastguard Worker* Building tests with `-Wall -Wextra -Werror` and fixed resulting issues.
708*89c4ff92SAndroid Build Coastguard Worker
709*89c4ff92SAndroid Build Coastguard Worker### [v1.0.2](https://github.com/gulrak/filesystem/releases/tag/v1.0.2)
710*89c4ff92SAndroid Build Coastguard Worker
711*89c4ff92SAndroid Build Coastguard Worker* Updated catch2 to v2.4.0.
712*89c4ff92SAndroid Build Coastguard Worker* Refactored `fs.op.permissions` test to work with all tested `std::filesystem`
713*89c4ff92SAndroid Build Coastguard Worker  implementations (gcc, clang, msvc++).
714*89c4ff92SAndroid Build Coastguard Worker* Added helper class `ghc::filesystem::u8arguments` as `argv` converter, to
715*89c4ff92SAndroid Build Coastguard Worker  help follow the UTF-8 path on windows. Simply instantiate it with `argc` and
716*89c4ff92SAndroid Build Coastguard Worker  `argv` and it will fetch the Unicode version of the command line and convert
717*89c4ff92SAndroid Build Coastguard Worker  it to UTF-8. The destructor reverts the change.
718*89c4ff92SAndroid Build Coastguard Worker* Added `examples` folder with hopefully some usefull example usage. Examples are
719*89c4ff92SAndroid Build Coastguard Worker  tested (and build) with `ghc::filesystem` and C++17 `std::filesystem` when
720*89c4ff92SAndroid Build Coastguard Worker  available.
721*89c4ff92SAndroid Build Coastguard Worker* Starting with this version, only even patch level versions will be tagged and
722*89c4ff92SAndroid Build Coastguard Worker  odd patch levels mark in-between non-stable wip states.
723*89c4ff92SAndroid Build Coastguard Worker* Tests can now also be run against MS version of std::filesystem for comparison.
724*89c4ff92SAndroid Build Coastguard Worker* Added missing `fstream` include.
725*89c4ff92SAndroid Build Coastguard Worker* Removed non-conforming C99 `timespec`/`timeval` usage.
726*89c4ff92SAndroid Build Coastguard Worker* Fixed some integer type mismatches that could lead to warnings.
727*89c4ff92SAndroid Build Coastguard Worker* Fixed `chrono` conversion issues in test and example on clang 7.0.0.
728*89c4ff92SAndroid Build Coastguard Worker
729*89c4ff92SAndroid Build Coastguard Worker### [v1.0.1](https://github.com/gulrak/filesystem/releases/tag/v1.0.1)
730*89c4ff92SAndroid Build Coastguard Worker
731*89c4ff92SAndroid Build Coastguard Worker* Bugfix: `ghc::filesystem::canonical` now sees empty path as non-existant and reports
732*89c4ff92SAndroid Build Coastguard Worker  an error. Due to this `ghc::filesystem::weakly_canonical` now returns relative
733*89c4ff92SAndroid Build Coastguard Worker  paths for non-existant argument paths. ([#1](https://github.com/gulrak/filesystem/issues/1))
734*89c4ff92SAndroid Build Coastguard Worker* Bugfix: `ghc::filesystem::remove_all` now also counts directories removed ([#2](https://github.com/gulrak/filesystem/issues/2))
735*89c4ff92SAndroid Build Coastguard Worker* Bugfix: `recursive_directory_iterator` tests didn't respect equality domain issues
736*89c4ff92SAndroid Build Coastguard Worker  and dereferencable constraints, leading to fails on `std::filesystem` tests.
737*89c4ff92SAndroid Build Coastguard Worker* Bugfix: Some `noexcept` tagged methods and functions could indirectly throw exceptions
738*89c4ff92SAndroid Build Coastguard Worker  due to UFT-8 decoding issues.
739*89c4ff92SAndroid Build Coastguard Worker* `std_filesystem_test` is now also generated if LLVM/clang 7.0.0 is found.
740*89c4ff92SAndroid Build Coastguard Worker
741*89c4ff92SAndroid Build Coastguard Worker
742*89c4ff92SAndroid Build Coastguard Worker### [v1.0.0](https://github.com/gulrak/filesystem/releases/tag/v1.0.0)
743*89c4ff92SAndroid Build Coastguard Worker
744*89c4ff92SAndroid Build Coastguard WorkerThis was the first public release version. It implements the full range of
745*89c4ff92SAndroid Build Coastguard WorkerC++17 std::filesystem, as far as possible without other C++17 dependencies.
746*89c4ff92SAndroid Build Coastguard Worker
747