platform:
- x64

skip_commits:
  files:
    - '.github/**'
    - 'CHANGES*'
    - 'Doc/**'
    - 'Tools/CI-*'

environment:
  global:
    MAKEJOBS: 2

  matrix:
  - SWIGLANG: python
    VSVER: 15
    VER: 38
    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
  - SWIGLANG: python
    VSVER: 16
    VER: 39
    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
  - SWIGLANG: python
    OSVARIANT: mingw
    WITHLANG: python
    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022

#matrix:
#  allow_failures:
#  - SWIGLANG: python
#    OSVARIANT: cygwin

# Skip stale commits (pull requests only), see https://github.com/appveyor/ci/issues/38#issuecomment-70628826
init:
- ps: |
    if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
        throw "There are newer queued builds for this pull request, failing early." }

install:
- date /T & time /T
- ps: >-
    if ($env:Platform -eq "x86") {
      $env:PCRE_PLATFORM="Win32"
      $env:JAVA_HOME="C:/Program Files (x86)/Java/jdk1.8.0"
      $env:VCVARS_PLATFORM="x86"
      $env:LANG_PLATFORM=""
      $env:CYGWINBIN="C:\cygwin\bin"
      $env:CYGWINSETUP="C:/cygwin/setup-x86.exe"
      $env:MSYSBIN="C:\msys64\usr\bin"
      $env:MINGWBIN="C:\msys64\mingw32\bin"
      $env:MBITS="32"
      $env:MARCH="i686"
      $env:VSARCH=""
    } else {
      $env:PCRE_PLATFORM="x64"
      $env:JAVA_HOME="C:/Program Files/Java/jdk17"
      $env:VCVARS_PLATFORM="amd64"
      $env:LANG_PLATFORM="-x64"
      $env:CYGWINBIN="C:\cygwin64\bin"
      $env:CYGWINSETUP="C:/cygwin64/setup-x86_64.exe"
      $env:MSYSBIN="C:\msys64\usr\bin"
      $env:MINGWBIN="C:\msys64\mingw64\bin"
      $env:MBITS="64"
      $env:MARCH="x86_64"
      $env:VSARCH=" Win64"
    }
- ps: >-
    if (!$env:OSVARIANT) {
      $env:PATH="$env:CYGWINBIN;$env:PATH"
      $env:CYGWIN="nodosfilewarning"
      $env:CC="cccl"
      $env:CXX="cccl"
      if ($env:VSVER -ge 17) {
        $env:VCVARSBAT="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars$env:MBITS.bat"
        $env:BOOSTROOT="C:/Libraries/boost_1_83_0"
      } elseif ($env:VSVER -eq 16) {
        $env:VCVARSBAT="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars$env:MBITS.bat"
        $env:BOOSTROOT="C:/Libraries/boost_1_83_0"
      } elseif ($env:VSVER -eq 15) {
        $env:VCVARSBAT="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars$env:MBITS.bat"
        $env:BOOSTROOT="C:/Libraries/boost_1_69_0"
        nuget install Bison -Version 3.7.4 -OutputDirectory C:\Tools\bison
      } else {
        $env:VSCOMNTOOLS=(Get-Content ("env:VS" + "$env:VSVER" + "0COMNTOOLS"))
        $env:VCVARSBAT="$env:VSCOMNTOOLS..\..\VC\vcvarsall.bat"
        $env:VCVARSARG="$env:VCVARS_PLATFORM"
        $env:BOOSTROOT="C:/Libraries/boost_1_69_0"
        nuget install Bison -Version 3.7.4 -OutputDirectory C:\Tools\bison
      }
    } elseif ($env:OSVARIANT -eq "cygwin") {
      $env:PATH="$env:CYGWINBIN;$env:PATH"
      $env:CYGWIN="nodosfilewarning"
      $env:CC="gcc"
      $env:CXX="g++"
    } elseif ($env:OSVARIANT -eq "mingw") {
      # Note mingw setup tests the native Windows Python distribution (not MinGW Python) with gcc
      $env:PATH="$env:MINGWBIN;$env:MSYSBIN;$env:PATH"
      $env:MSYSTEM="MINGW$env:MBITS" # This is important for msys2
      $env:CC="gcc"
      $env:CXX="g++"
    }
- if "%OSVARIANT%"=="" bash -c "cd /usr/bin && curl --retry 15 -s -L https://github.com/swig/cccl/archive/cccl-1.4.tar.gz | tar -xz --strip 1 cccl-cccl-1.4/cccl"
- if "%OSVARIANT%"=="" call "%VCVARSBAT%" %VCVARSARG%
- if "%OSVARIANT%"=="" appveyor-retry appveyor DownloadFile https://github.com/PhilipHazel/pcre2/archive/refs/tags/pcre2-10.39.zip
- if "%OSVARIANT%"=="" 7z x pcre2-10.39.zip
- if "%OSVARIANT%"=="" set PCRE_ROOT=C:/pcre
- if "%OSVARIANT%"=="" set PATH=C:\Python%VER%%LANG_PLATFORM%;%PATH%
- if "%OSVARIANT%"=="" bash -c "which cl.exe"
- if "%OSVARIANT%"=="" bash -c "cl.exe /? 2>&1 | head -n 1"
- if "%OSVARIANT%"=="" bash -c "which csc.exe"
- if "%OSVARIANT%"=="" bash -c "csc.exe /? | head -n 1"
- if "%OSVARIANT%"=="cygwin" %CYGWINSETUP% --quiet-mode --packages python3-devel,libpcre2-devel,libboost-devel > cygwin-install.txt || bash -c "cat cygwin-install.txt"
- if "%OSVARIANT%"=="mingw" bash -c "pacman --noconfirm --sync mingw%MBITS%/mingw-w64-%MARCH%-autotools mingw%MBITS%/mingw-w64-%MARCH%-pcre2 mingw%MBITS%/mingw-w64-%MARCH%-boost mingw%MBITS%/mingw-w64-%MARCH%-python"
- if not "%WITHLANG%"=="" set SWIGWITHLANG==%WITHLANG%
- if not "%WITHLANG%"=="" where %WITHLANG%
- if "%SWIGLANG%"=="python" set PY3=3
- if "%PY2%"=="2" set PY3=
- bash -c "which $CC"
- bash -c "which $CXX"
- bash -c "$CC --version | head -n 1"
- bash -c "$CXX --version | head -n 1"
- bash -c "which python"
- bash -c "python -V"
- bash -c "make --version | head -n 2"
- pwd
- echo MAKEJOBS=%MAKEJOBS%
- uname -a
- systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"

build_script:
- set PATH=C:\Tools\bison\Bison.3.7.4\bin;%PATH%
- set CCCL_OPTIONS=--cccl-muffle /W3 /EHsc
- set CHECK_OPTIONS=CSHARPOPTIONS=-platform:%Platform%
- if "%BUILDSYSTEM%"=="cmake" cd pcre2-pcre2-10.39 && cmake -G "Visual Studio 14 2015%VSARCH%" -DCMAKE_INSTALL_PREFIX="%PCRE_ROOT:\=/%" . && cmake --build . --config Release --target install && cd ..
- if "%BUILDSYSTEM%"=="cmake" cmake --version && cmake -G "Visual Studio 14 2015%VSARCH%" -DCMAKE_INSTALL_PREFIX="%CD:\=/%/install2" -DCMAKE_C_FLAGS="/WX /DPCRE2_STATIC" -DCMAKE_CXX_FLAGS="/WX /DPCRE2_STATIC" -DPCRE2_INCLUDE_DIR=%PCRE_ROOT%/include -DPCRE2_LIBRARY=%PCRE_ROOT%/lib/pcre2-8-static.lib -DBISON_EXECUTABLE=C:/Tools/bison/Bison.3.7.4/bin/bison.exe . && cmake --build . --config Release --target install && ctest --output-on-failure -V -C Release && appveyor exit
- if "%OSVARIANT%"=="" bash -c "exec 0</dev/null && cd pcre2-pcre2-10.39 && ./autogen.sh && ./configure CC=$CC CXX=$CXX CFLAGS='-O2' LDFLAGS='--cccl-link /LTCG' --prefix=%PCRE_ROOT% --disable-shared && time make -s -j%MAKEJOBS% LN_S=cp && make install && cd .. && cp -v %PCRE_ROOT%/lib/libpcre2-8.lib %PCRE_ROOT%/lib/pcre2-8.lib"
  # Open dummy file descriptor to fix error on cygwin: ./configure: line 560: 0: Bad file descriptor
- if "%OSVARIANT%"=="" bash -c "exec 0</dev/null && ./autogen.sh && time ./configure --disable-dependency-tracking --disable-ccache CC=$CC CXX=$CXX CFLAGS='-O2' CXXFLAGS='-O2' LDFLAGS='--cccl-link /LTCG' PCRE2_CFLAGS='-I%PCRE_ROOT%/include -DPCRE2_STATIC' PCRE2_LIBS='-L%PCRE_ROOT%/lib/ -lpcre2-8' --without-perl5 --without-go --with-boost=%BOOSTROOT% || cat config.log"
- if not "%OSVARIANT%"=="" bash -c "exec 0</dev/null && ./autogen.sh && time ./configure CC=%CC% CXX=%CXX% --without-alllang --with-$SWIGLANG$PY3$SWIGWITHLANG || cat config.log"
- bash -c "time make -s -j%MAKEJOBS%"

test_script:
- set CCCL_OPTIONS=--cccl-muffle /W3 /EHsc
- .\swig.exe -version
- .\swig.exe -pcreversion
- if not "%OSVARIANT%"=="" CCache\ccache-swig -V
- bash -c "file ./swig.exe"
- bash -c "make check-%SWIGLANG%-version"
- bash -c "make check-%SWIGLANG%-enabled"
- bash -c "time make -k check-%SWIGLANG%-examples %CHECK_OPTIONS% %CHECK_OPTIONS2%"
- bash -c "time make -k check-%SWIGLANG%-test-suite -j%MAKEJOBS% %CHECK_OPTIONS% %CHECK_OPTIONS2%"

# Do not build on tags (GitHub only)
skip_tags: true

#on_finish: # Display RDP connection information
#  - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
