mirror of
https://git.mirrors.martin98.com/https://github.com/gulrak/filesystem
synced 2025-06-04 11:13:58 +08:00
Work on CI support for MingW, fixing some MingW issues
This commit is contained in:
parent
3117060ed9
commit
91e02dc2c4
@ -1,13 +1,47 @@
|
|||||||
image: Visual Studio 2017
|
environment:
|
||||||
|
matrix:
|
||||||
|
- platform: x86
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
generator: "Visual Studio 14 2015"
|
||||||
|
compiler: msvc
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
platform:
|
- platform: x64
|
||||||
- Win32
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
- x64
|
generator: "Visual Studio 14 2015 Win64"
|
||||||
|
compiler: msvc
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
|
- platform: x86
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
generator: "Visual Studio 15 2017"
|
||||||
|
compiler: msvc
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
|
- platform: x64
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
generator: "Visual Studio 15 2017 Win64"
|
||||||
|
compiler: msvc
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
|
- platform: x86
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
generator: "MinGW Makefiles"
|
||||||
|
compiler: mingw
|
||||||
|
TOOLCHAIN_PATH: C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32\bin
|
||||||
|
CC: C:/mingw-w64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/bin/gcc.exe
|
||||||
|
CXX: C:/mingw-w64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/bin/g++.exe
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
|
- platform: x64
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
generator: "MinGW Makefiles"
|
||||||
|
compiler: mingw
|
||||||
|
TOOLCHAIN_PATH: C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin
|
||||||
|
CC: C:/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin/gcc.exe
|
||||||
|
CXX: C:/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin/g++.exe
|
||||||
|
configuration: Release
|
||||||
|
|
||||||
configuration:
|
|
||||||
- Debug
|
|
||||||
- Release
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: false
|
fast_finish: false
|
||||||
|
|
||||||
@ -17,17 +51,18 @@ init:
|
|||||||
|
|
||||||
install:
|
install:
|
||||||
- cmd: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
- cmd: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
||||||
|
- cmd: ren "C:\Program Files\Git\usr\bin\sh.exe" _sh.exe
|
||||||
|
|
||||||
before_build:
|
build_script:
|
||||||
- cmake . -Bbuild -A%PLATFORM% -DCMAKE_BUILD_TYPE=%configuration%
|
- mkdir build
|
||||||
|
- cd build
|
||||||
build:
|
- if [%compiler%]==[msvc] cmake -G"%generator%" ..
|
||||||
project: build/ghcfilesystem.sln
|
- if [%compiler%]==[mingw] set PATH=%TOOLCHAIN_PATH%;%PATH%
|
||||||
parallel: true
|
- if [%compiler%]==[mingw] cmake -G"%generator%" -DCMAKE_C_COMPILER=%CC% -DCMAKE_CXX_COMPILER=%CXX% -DCMAKE_SH=CMAKE_SH-NOTFOUND -DCMAKE_BUILD_TYPE=%configuration% ..
|
||||||
verbosity: minimal
|
- cmake --build . --config %configuration%
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- cd build
|
- cd %APPVEYOR_BUILD_FOLDER%\build
|
||||||
- set CTEST_OUTPUT_ON_FAILURE=1
|
- set CTEST_OUTPUT_ON_FAILURE=1
|
||||||
- ctest -C %configuration%
|
- ctest -C %configuration%
|
||||||
- cd ..
|
- cd ..
|
||||||
|
@ -21,5 +21,5 @@ BraceWrapping:
|
|||||||
SplitEmptyNamespace: true
|
SplitEmptyNamespace: true
|
||||||
BreakConstructorInitializers: BeforeComma
|
BreakConstructorInitializers: BeforeComma
|
||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
|
IndentPPDirectives: None
|
||||||
...
|
...
|
||||||
|
11
README.md
11
README.md
@ -61,8 +61,8 @@ of the UTF-8 preference on Windows).
|
|||||||
|
|
||||||
Unit tests are currently run with:
|
Unit tests are currently run with:
|
||||||
|
|
||||||
* macOS 10.12: XCode 9.2 (clang-900.0.39.2), GCC 8.1.0, Clang 7.0.0
|
* macOS 10.12: Xcode 9.2 (clang-900.0.39.2), Xcode 10.2, GCC 8.1.0, Clang 7.0.0
|
||||||
* Windows 10: Visual Studio 2017 15.8.5, MingW GCC 5.3
|
* Windows: Visual Studio 2017, Visual Studio 2015, MingW GCC 6.3 (Win32), GCC 7.2 (Win64)
|
||||||
* Linux (Ubuntu): GCC (5.5, 6.5, 7.4, 8.1, 8.2), Clang (5.0, 6.0, 7.1, 8.0)
|
* Linux (Ubuntu): GCC (5.5, 6.5, 7.4, 8.1, 8.2), Clang (5.0, 6.0, 7.1, 8.0)
|
||||||
|
|
||||||
|
|
||||||
@ -410,7 +410,7 @@ just a more complicated syntax for the `fs::create_symlink` or `fs::create_hardl
|
|||||||
and I don't want to believe, that this was the intention of the original writing.
|
and I don't want to believe, that this was the intention of the original writing.
|
||||||
As there is another issue related to copy, with a different take on the description.
|
As there is another issue related to copy, with a different take on the description.
|
||||||
|
|
||||||
*Note:* With v1.1.2 I decided to integrate a behavior switch for this and make the LWG #2682
|
**Note:** With v1.1.2 I decided to integrate a behavior switch for this and make the LWG #2682
|
||||||
the default.
|
the default.
|
||||||
|
|
||||||
## Open Issues
|
## Open Issues
|
||||||
@ -445,6 +445,11 @@ to the expected behavior.
|
|||||||
|
|
||||||
## Release Notes
|
## Release Notes
|
||||||
|
|
||||||
|
### v1.1.5 (wip)
|
||||||
|
|
||||||
|
* Added MingW 32/64 and Visual Studio 2015 builds to the CI configuration.
|
||||||
|
* Fixed additional compilation issues on MingW.
|
||||||
|
|
||||||
### [v1.1.4](https://github.com/gulrak/filesystem/releases/tag/v1.1.4)
|
### [v1.1.4](https://github.com/gulrak/filesystem/releases/tag/v1.1.4)
|
||||||
|
|
||||||
* Additional Bugfix for ([#12](https://github.com/gulrak/filesystem/issues/12)),
|
* Additional Bugfix for ([#12](https://github.com/gulrak/filesystem/issues/12)),
|
||||||
|
@ -1057,7 +1057,7 @@ GHC_INLINE std::error_code make_error_code(portable_error err)
|
|||||||
return std::error_code(ERROR_INVALID_PARAMETER, std::system_category());
|
return std::error_code(ERROR_INVALID_PARAMETER, std::system_category());
|
||||||
case portable_error::is_a_directory:
|
case portable_error::is_a_directory:
|
||||||
#ifdef ERROR_DIRECTORY_NOT_SUPPORTED
|
#ifdef ERROR_DIRECTORY_NOT_SUPPORTED
|
||||||
return std::error_code(ERROR_DIRECTORY_NOT_SUPPORTED, std::system_category());
|
return std::error_code(ERROR_DIRECTORY_NOT_SUPPORTED, std::system_category());
|
||||||
#else
|
#else
|
||||||
return std::error_code(ERROR_NOT_SUPPORTED, std::system_category());
|
return std::error_code(ERROR_NOT_SUPPORTED, std::system_category());
|
||||||
#endif
|
#endif
|
||||||
@ -1388,15 +1388,15 @@ namespace detail {
|
|||||||
GHC_INLINE bool equals_simple_insensitive(const char* str1, const char* str2)
|
GHC_INLINE bool equals_simple_insensitive(const char* str1, const char* str2)
|
||||||
{
|
{
|
||||||
#ifdef GHC_OS_WINDOWS
|
#ifdef GHC_OS_WINDOWS
|
||||||
# ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
while (::tolower((unsigned char)*str1) == ::tolower((unsigned char)*str2++)) {
|
while (::tolower((unsigned char)*str1) == ::tolower((unsigned char)*str2++)) {
|
||||||
if (*str1++ == 0)
|
if (*str1++ == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
# else
|
#else
|
||||||
return 0 == ::_stricmp(str1, str2);
|
return 0 == ::_stricmp(str1, str2);
|
||||||
# endif
|
#endif
|
||||||
#else
|
#else
|
||||||
return 0 == ::strcasecmp(str1, str2);
|
return 0 == ::strcasecmp(str1, str2);
|
||||||
#endif
|
#endif
|
||||||
@ -1555,7 +1555,7 @@ GHC_INLINE path resolveSymlink(const path& p, std::error_code& ec)
|
|||||||
UCHAR DataBuffer[1];
|
UCHAR DataBuffer[1];
|
||||||
} GenericReparseBuffer;
|
} GenericReparseBuffer;
|
||||||
} DUMMYUNIONNAME;
|
} DUMMYUNIONNAME;
|
||||||
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
|
} REPARSE_DATA_BUFFER;
|
||||||
#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE
|
#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE
|
||||||
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
|
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024)
|
||||||
#endif
|
#endif
|
||||||
@ -1567,18 +1567,17 @@ GHC_INLINE path resolveSymlink(const path& p, std::error_code& ec)
|
|||||||
return path();
|
return path();
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE] = {0};
|
std::shared_ptr<REPARSE_DATA_BUFFER> reparseData((REPARSE_DATA_BUFFER*)std::calloc(1, MAXIMUM_REPARSE_DATA_BUFFER_SIZE), std::free);
|
||||||
REPARSE_DATA_BUFFER& reparseData = *(REPARSE_DATA_BUFFER*)buffer;
|
|
||||||
ULONG bufferUsed;
|
ULONG bufferUsed;
|
||||||
path result;
|
path result;
|
||||||
if (DeviceIoControl(file.get(), FSCTL_GET_REPARSE_POINT, 0, 0, &reparseData, sizeof(buffer), &bufferUsed, 0)) {
|
if (DeviceIoControl(file.get(), FSCTL_GET_REPARSE_POINT, 0, 0, reparseData.get(), MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &bufferUsed, 0)) {
|
||||||
if (IsReparseTagMicrosoft(reparseData.ReparseTag)) {
|
if (IsReparseTagMicrosoft(reparseData->ReparseTag)) {
|
||||||
switch (reparseData.ReparseTag) {
|
switch (reparseData->ReparseTag) {
|
||||||
case IO_REPARSE_TAG_SYMLINK:
|
case IO_REPARSE_TAG_SYMLINK:
|
||||||
result = std::wstring(&reparseData.SymbolicLinkReparseBuffer.PathBuffer[reparseData.SymbolicLinkReparseBuffer.PrintNameOffset / sizeof(WCHAR)], reparseData.SymbolicLinkReparseBuffer.PrintNameLength / sizeof(WCHAR));
|
result = std::wstring(&reparseData->SymbolicLinkReparseBuffer.PathBuffer[reparseData->SymbolicLinkReparseBuffer.PrintNameOffset / sizeof(WCHAR)], reparseData->SymbolicLinkReparseBuffer.PrintNameLength / sizeof(WCHAR));
|
||||||
break;
|
break;
|
||||||
case IO_REPARSE_TAG_MOUNT_POINT:
|
case IO_REPARSE_TAG_MOUNT_POINT:
|
||||||
result = std::wstring(&reparseData.MountPointReparseBuffer.PathBuffer[reparseData.MountPointReparseBuffer.PrintNameOffset / sizeof(WCHAR)], reparseData.MountPointReparseBuffer.PrintNameLength / sizeof(WCHAR));
|
result = std::wstring(&reparseData->MountPointReparseBuffer.PathBuffer[reparseData->MountPointReparseBuffer.PrintNameOffset / sizeof(WCHAR)], reparseData->MountPointReparseBuffer.PrintNameLength / sizeof(WCHAR));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -3772,7 +3771,7 @@ GHC_INLINE void permissions(const path& p, perms prms, perm_options opts, std::e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef GHC_OS_WINDOWS
|
#ifdef GHC_OS_WINDOWS
|
||||||
# ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
auto oldAttr = GetFileAttributesW(p.wstring().c_str());
|
auto oldAttr = GetFileAttributesW(p.wstring().c_str());
|
||||||
if (oldAttr != INVALID_FILE_ATTRIBUTES) {
|
if (oldAttr != INVALID_FILE_ATTRIBUTES) {
|
||||||
DWORD newAttr = ((prms & perms::owner_write) == perms::owner_write) ? oldAttr & ~FILE_ATTRIBUTE_READONLY : oldAttr | FILE_ATTRIBUTE_READONLY;
|
DWORD newAttr = ((prms & perms::owner_write) == perms::owner_write) ? oldAttr & ~FILE_ATTRIBUTE_READONLY : oldAttr | FILE_ATTRIBUTE_READONLY;
|
||||||
@ -3781,7 +3780,7 @@ GHC_INLINE void permissions(const path& p, perms prms, perm_options opts, std::e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ec = std::error_code(::GetLastError(), std::system_category());
|
ec = std::error_code(::GetLastError(), std::system_category());
|
||||||
# else
|
#else
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
if ((prms & perms::owner_read) == perms::owner_read) {
|
if ((prms & perms::owner_read) == perms::owner_read) {
|
||||||
mode |= _S_IREAD;
|
mode |= _S_IREAD;
|
||||||
@ -3792,7 +3791,7 @@ GHC_INLINE void permissions(const path& p, perms prms, perm_options opts, std::e
|
|||||||
if (::_wchmod(p.wstring().c_str(), mode) != 0) {
|
if (::_wchmod(p.wstring().c_str(), mode) != 0) {
|
||||||
ec = std::error_code(::GetLastError(), std::system_category());
|
ec = std::error_code(::GetLastError(), std::system_category());
|
||||||
}
|
}
|
||||||
# endif
|
#endif
|
||||||
#else
|
#else
|
||||||
if ((opts & perm_options::nofollow) != perm_options::nofollow) {
|
if ((opts & perm_options::nofollow) != perm_options::nofollow) {
|
||||||
if (::chmod(p.c_str(), static_cast<mode_t>(prms)) != 0) {
|
if (::chmod(p.c_str(), static_cast<mode_t>(prms)) != 0) {
|
||||||
|
@ -212,7 +212,7 @@ inline bool isWow64Proc()
|
|||||||
bIsWow64 = FALSE;
|
bIsWow64 = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bIsWow64;
|
return bIsWow64 == TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_symlink_creation_supported()
|
static bool is_symlink_creation_supported()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user