Skip to content

Commit

Permalink
AppVeyor MinGW-w64 gcc-5.3.0 test build, fix build with MinGW-w64
Browse files Browse the repository at this point in the history
  • Loading branch information
KindDragon committed Aug 24, 2016
1 parent ed9d1e1 commit dc19770
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 40 deletions.
89 changes: 51 additions & 38 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,71 +1,84 @@
version: '{build}'

os: Visual Studio 2015

environment:
matrix:
- Toolset: v140
- Toolset: v120
- Toolset: v110
- Toolset: v100
- compiler: msvc-10-seh
generator: "Visual Studio 10 2010"

- compiler: msvc-11-seh
generator: "Visual Studio 11 2012"

- compiler: msvc-11-seh
generator: "Visual Studio 11 2012 Win64"

- compiler: msvc-12-seh
generator: "Visual Studio 12 2013"

- compiler: msvc-12-seh
generator: "Visual Studio 12 2013 Win64"

platform:
- Win32
- x64
- compiler: msvc-14-seh
generator: "Visual Studio 14 2015"

- compiler: msvc-14-seh
generator: "Visual Studio 14 2015 Win64"

- compiler: gcc-5.3.0-posix
generator: "MinGW Makefiles"

configuration:
# - Release
- Debug
- Release

build:
verbosity: minimal

artifacts:
- path: '_build/Testing/Temporary/*'
name: test_results

before_build:
install:
- ps: |
Write-Output "Configuration: $env:CONFIGURATION"
Write-Output "Platform: $env:PLATFORM"
$generator = switch ($env:TOOLSET)
{
"v140" {"Visual Studio 14 2015"}
"v120" {"Visual Studio 12 2013"}
"v110" {"Visual Studio 11 2012"}
"v100" {"Visual Studio 10 2010"}
}
if ($env:PLATFORM -eq "x64")
{
$generator = "$generator Win64"
Write-Output "Compiler: $env:compiler"
Write-Output "Generator: $env:generator"
# git bash conflicts with MinGW makefiles
if ($env:generator -eq "MinGW Makefiles") {
$env:path = $env:path.replace("C:\Program Files\Git\usr\bin;", "")
if ($env:compiler -eq "gcc-5.3.0-posix") {
$cxx_path = "C:\mingw-w64\i686-5.3.0-posix-dwarf-rt_v4-rev0\mingw32\bin"
}
if ($cxx_path -ne "") {
$env:path += ";$cxx_path"
}
}
build_script:
- ps: |
if (($env:TOOLSET -eq "v100") -and ($env:PLATFORM -eq "x64"))
{
return
}
md _build -Force | Out-Null
cd _build
& cmake -G "$generator" -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -Dgtest_build_tests=ON -Dgtest_build_samples=ON -Dgmock_build_tests=ON ..
$conf = if ($env:generator -eq "MinGW Makefiles") {"-DCMAKE_BUILD_TYPE=$env:configuration"} else {"-DCMAKE_CONFIGURATION_TYPES=Debug;Release"}
# Disable test for MinGW (gtest tests fail, gmock tests can not build)
$gtest_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgtest_build_tests=OFF"} else {"-Dgtest_build_tests=ON"}
$gmock_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgmock_build_tests=OFF"} else {"-Dgmock_build_tests=ON"}
& cmake -G "$env:generator" $conf -Dgtest_build_samples=ON $gtest_build_tests $gmock_build_tests ..
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
}
& cmake --build . --config $env:CONFIGURATION
& cmake --build . --config $env:configuration
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
}
test_script:
- ps: |
if (($env:Toolset -eq "v100") -and ($env:PLATFORM -eq "x64"))
{
return
if ($env:generator -eq "MinGW Makefiles") {
return # No test available for MinGW
}
& ctest -C $env:CONFIGURATION --output-on-failure
& ctest -C $env:configuration --timeout 300 --output-on-failure
if ($LastExitCode -ne 0) {
throw "Exec: $ErrorMessage"
}
artifacts:
- path: '_build/CMakeFiles/*.log'
name: logs
- path: '_build/Testing/**/*.xml'
name: test_results
9 changes: 9 additions & 0 deletions googletest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ option(
"Build gtest with internal symbols hidden in shared libraries."
OFF)

option(gtest_workaround_old_mingw64 "Enable workaround error with old MinGW w64." OFF)

# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build().
include(cmake/hermetic_build.cmake OPTIONAL)

Expand Down Expand Up @@ -79,6 +81,13 @@ if (MSVC AND MSVC_VERSION EQUAL 1700)
add_definitions(/D _VARIADIC_MAX=10)
endif()

# Enable this option if you have this error with MINGW64:
# "error: cannot convert 'CRITICAL_SECTION* {aka _CRITICAL_SECTION*}' to
# '_RTL_CRITICAL_SECTION*' in initialization critical_section_(new CRITICAL_SECTION)"
if (gtest_workaround_old_mingw64)
add_definitions(/D GTEST_WORKAROUND_OLD_MINGW64)
endif()

########################################################################
#
# Defines the gtest & gtest_main libraries. User tests should link
Expand Down
2 changes: 1 addition & 1 deletion googletest/include/gtest/internal/gtest-port.h
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@
# include <io.h>
# endif
// In order to avoid having to include <windows.h>, use forward declaration
#if GTEST_OS_WINDOWS_MINGW
#if GTEST_OS_WINDOWS_MINGW && defined(GTEST_WORKAROUND_OLD_MINGW64)
// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two
// separate (equivalent) structs, instead of using typedef
typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
Expand Down
2 changes: 1 addition & 1 deletion googletest/test/gtest-port_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1295,7 +1295,7 @@ TEST(WindowsTypesTest, HANDLEIsVoidStar) {
StaticAssertTypeEq<HANDLE, void*>();
}

#if GTEST_OS_WINDOWS_MINGW
#if GTEST_OS_WINDOWS_MINGW && defined(GTEST_WORKAROUND_OLD_MINGW64)
TEST(WindowsTypesTest, _CRITICAL_SECTIONIs_CRITICAL_SECTION) {
StaticAssertTypeEq<CRITICAL_SECTION, _CRITICAL_SECTION>();
}
Expand Down

0 comments on commit dc19770

Please sign in to comment.