326 lines
9.6 KiB
YAML
326 lines
9.6 KiB
YAML
name: windows
|
|
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- 'CHANGES*'
|
|
- 'Doc/**'
|
|
- 'appveyor.yml'
|
|
pull_request:
|
|
branches: master
|
|
paths-ignore:
|
|
- 'CHANGES*'
|
|
- 'Doc/**'
|
|
- 'appveyor.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
win_ci:
|
|
# When continue-on-error is true for an individual build,
|
|
# that build can fail (it'll show red),
|
|
# but it won't fail the overall tests
|
|
continue-on-error: ${{ matrix.continue-on-error || false }}
|
|
|
|
# https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md
|
|
runs-on: ${{ matrix.os || 'windows-2022' }}
|
|
|
|
# The name of the test follow the tested language
|
|
name: >
|
|
${{ matrix.SWIGLANG }} ${{ matrix.VER }}
|
|
${{ matrix.COMPILER || 'msvc' }} ${{ matrix.os }} ${{ matrix.NOTEST }}
|
|
${{ matrix.continue-on-error && '(can fail)' }}
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- SWIGLANG: csharp
|
|
INSTALL: 'true'
|
|
- SWIGLANG: csharp
|
|
os: 'windows-2019'
|
|
- SWIGLANG: csharp
|
|
COMPILER: gcc
|
|
- SWIGLANG: csharp
|
|
INSTALL: 'true'
|
|
COMPILER: gcc
|
|
os: 'windows-2019'
|
|
- SWIGLANG: java
|
|
VER: 8
|
|
- SWIGLANG: java
|
|
VER: 17
|
|
- SWIGLANG: java
|
|
COMPILER: gcc
|
|
VER: 8
|
|
- SWIGLANG: java
|
|
COMPILER: gcc
|
|
VER: 11
|
|
# Next two are using old VC++ as the new visual c++ not handling containers of enums
|
|
# See https://github.com/swig/swig/issues/3008
|
|
- SWIGLANG: python
|
|
VER: '3.7'
|
|
os: 'windows-2019'
|
|
- SWIGLANG: python
|
|
VER: '3.12'
|
|
os: 'windows-2019'
|
|
# TODO require fixing of probing in configure.ac
|
|
#- SWIGLANG: python
|
|
# INSTALL: 'true'
|
|
# COMPILER: gcc
|
|
# NOTEST: 'no-test'
|
|
- SWIGLANG: ruby
|
|
# VER: '3.0.7'
|
|
NOTEST: 'no-test'
|
|
- SWIGLANG: ruby
|
|
VER: '3.1.6'
|
|
NOTEST: 'no-test'
|
|
- SWIGLANG: ruby
|
|
INSTALL: 'true'
|
|
COMPILER: gcc
|
|
NOTEST: 'no-test'
|
|
# Run all of them, as opposed to aborting when one fails
|
|
fail-fast: false
|
|
|
|
env:
|
|
CFLAGS: '-O2'
|
|
CXXFLAGS: '-O2'
|
|
CCCL_OPTIONS: '--cccl-muffle /W3 /EHsc'
|
|
PCRE2_CCCL_LD: '-lpcre2-8-static --cccl-link /NODEFAULTLIB:MSVCRT'
|
|
CHECK_OPTIONS: 'CSHARPOPTIONS=-platform:x64'
|
|
SWIGLANG: ${{ matrix.SWIGLANG }}
|
|
COMPILER: ${{ matrix.COMPILER }}
|
|
INSTALL: ${{ matrix.INSTALL }}
|
|
NOTEST: ${{ matrix.NOTEST }}
|
|
VER: ${{ matrix.VER }}
|
|
OS: ${{ matrix.os }}
|
|
|
|
# cl.exe:
|
|
# https://learn.microsoft.com//cpp/build/reference/compiler-options
|
|
# /EHc extern "C" defaults to nothrow.
|
|
# /EHs Enable C++ exception handling (no SEH exceptions).
|
|
# /W3 Warning level.
|
|
# /WX Treat warnings as errors.
|
|
# https://learn.microsoft.com//cpp/build/reference/linker-options
|
|
# cl.exe pass linker:
|
|
# /VERBOSE:LIB Outputs progress messages during the link process.
|
|
# /NODEFAULTLIB:lib Ignore library 'lib'
|
|
|
|
steps:
|
|
- name: Machine Info
|
|
shell: powershell
|
|
run: |
|
|
systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
show-progress: true
|
|
|
|
- name: Install CCache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: ${{ matrix.os || 'windows-2022' }}-${{ matrix.COMPILER || 'msvc' }}
|
|
|
|
- name: Install NuGet Packages
|
|
if: ${{ env.COMPILER == '' }}
|
|
shell: powershell
|
|
run: |
|
|
# 'nuget build for .NET: https://www.nuget.org/packages'
|
|
nuget install PCRE2 -OutputDirectory C:\Tools
|
|
nuget install boost -OutputDirectory C:\Tools
|
|
|
|
# Set MSVC compilers path and environment variables.
|
|
- name: Setup MSVC
|
|
if: ${{ env.COMPILER == '' || env.SWIGLANG == 'csharp' }}
|
|
uses: TheMrMilchmann/setup-msvc-dev@v3
|
|
with:
|
|
arch: x64
|
|
|
|
- name: Prepare Environment
|
|
shell: bash
|
|
run: |
|
|
uname --all
|
|
|
|
if [[ "$COMPILER" = "gcc" ]]; then
|
|
# MinGW-w64 packages to install with MSYS2
|
|
for n in binutils make autotools pcre2 boost; do
|
|
MORE_MSYS_PKGS+=" mingw-w64-x86_64-$n"
|
|
done
|
|
|
|
case "$SWIGLANG" in
|
|
python)
|
|
MORE_MSYS_PKGS+=" mingw-w64-x86_64-python"
|
|
;;
|
|
ruby)
|
|
MORE_MSYS_PKGS+=" mingw-w64-x86_64-ruby"
|
|
;;
|
|
perl)
|
|
MORE_MSYS_PKGS+=" mingw-w64-x86_64-perl"
|
|
;;
|
|
esac
|
|
|
|
# MinGW-w64 pcre2
|
|
echo "PCRE2_CFLAGS=-I/mingw64/include -DPCRE2_STATIC" >> $GITHUB_ENV
|
|
echo "PCRE2_LIBS=-L/mingw64/lib -lpcre2-8" >> $GITHUB_ENV
|
|
|
|
echo "MORE_MSYS_PKGS=base-devel $MORE_MSYS_PKGS" >> $GITHUB_ENV
|
|
echo "BOOST_PATH=/c/msys64/mingw64" >> $GITHUB_ENV
|
|
else
|
|
# COMPILER: cccl wrapping MSVC
|
|
curl --retry 15 -s -L https://github.com/swig/cccl/raw/master/cccl > /usr/bin/cccl
|
|
chmod +x /usr/bin/cccl
|
|
cp -p /usr/bin/cccl /c/msys64/usr/bin/cccl
|
|
|
|
# Using pcre2 installed with NuGet
|
|
PCRE2_PATH=$(ls -d /c/tools/PCRE2*)
|
|
echo "PCRE2_CFLAGS=-I$PCRE2_PATH/include -DPCRE2_STATIC" >> $GITHUB_ENV
|
|
echo "PCRE2_LIBS=-L$PCRE2_PATH/lib $PCRE2_CCCL_LD" >> $GITHUB_ENV
|
|
|
|
echo "CXX=/usr/bin/cccl" >> $GITHUB_ENV
|
|
echo "CC=/usr/bin/cccl" >> $GITHUB_ENV
|
|
echo "BOOST_PATH=$(ls -d /c/tools/boost*)/lib/native" >> $GITHUB_ENV
|
|
|
|
if [[ -n "$VER" ]]; then
|
|
case "$SWIGLANG" in
|
|
python)
|
|
PY3VER=$(cygpath -w $(ls -d /c/hostedtoolcache/windows/Python/$VER*)/x64)
|
|
echo "$PY3VER\\Script" >> $GITHUB_PATH
|
|
echo "$PY3VER" >> $GITHUB_PATH
|
|
;;
|
|
ruby)
|
|
RUBYDIR=$(cygpath -w $(ls -d /c/hostedtoolcache/windows/Ruby/$VER*)/x64)
|
|
echo "$RUBYDIR\\bin" >> $GITHUB_PATH
|
|
;;
|
|
esac
|
|
fi
|
|
fi # COMPILER
|
|
|
|
# Java must use VER!
|
|
if [[ "$SWIGLANG" = "java" ]]; then
|
|
declare -n java_path="JAVA_HOME_${VER}_X64"
|
|
echo "JAVA_HOME=$java_path" >> $GITHUB_ENV
|
|
fi
|
|
|
|
echo "SWIGJOBS=-j$NUMBER_OF_PROCESSORS" >> $GITHUB_ENV
|
|
|
|
echo 'C:\msys64\usr\bin' >> $GITHUB_PATH
|
|
|
|
- name: Install MSYS2 Packages
|
|
shell: cmd
|
|
run: |
|
|
rem 'MSYS2 uses MinGW-w64 https://packages.msys2.org/'
|
|
pacman -Syu --noconfirm --needed
|
|
if %ErrorLevel% NEQ 0 (exit 1)
|
|
pacman -Syu --noconfirm --needed autoconf automake bison %MORE_MSYS_PKGS%
|
|
if %ErrorLevel% NEQ 0 (exit 1)
|
|
|
|
- name: Autoconf
|
|
shell: bash
|
|
run: |
|
|
uname --all
|
|
|
|
if [[ -z "$COMPILER" ]]; then
|
|
which cl.exe
|
|
cl.exe /? 2>&1 | head -n1
|
|
else
|
|
# Use MinGW-w64 compiler
|
|
# We can not use GITHUB_PATH, as bash insert /usr/bin
|
|
export PATH="/mingw64/bin:$PATH"
|
|
|
|
which gcc
|
|
gcc --version | head -n1
|
|
which g++
|
|
g++ --version | head -n1
|
|
fi
|
|
|
|
case "$SWIGLANG" in
|
|
csharp)
|
|
which csc.exe
|
|
csc.exe /? | head -n1
|
|
;;
|
|
python)
|
|
which python.exe
|
|
python -V
|
|
;;
|
|
ruby)
|
|
which ruby.exe
|
|
ruby -v
|
|
;;
|
|
perl)
|
|
which perl.exe
|
|
perl -v | head -n3
|
|
;;
|
|
esac
|
|
|
|
make --version | head -n2
|
|
|
|
./autogen.sh
|
|
|
|
- name: Configure
|
|
shell: bash
|
|
run: |
|
|
if [[ "$COMPILER" = "gcc" ]]; then
|
|
# Use MinGW-w64 compiler
|
|
export PATH="/mingw64/bin:$PATH"
|
|
./configure --disable-dependency-tracking --with-boost="$BOOST_PATH" --with-csharp-compiler="csc.exe"
|
|
else
|
|
# cccl wrapping MSVC
|
|
./configure --disable-dependency-tracking --with-boost="$BOOST_PATH" --with-csharp-compiler="csc.exe" --disable-ccache
|
|
fi
|
|
|
|
- name: Build
|
|
shell: bash
|
|
run: |
|
|
if [[ "$COMPILER" = "gcc" ]]; then
|
|
# Use MinGW-w64 compiler
|
|
export PATH="/mingw64/bin:$PATH"
|
|
fi
|
|
|
|
make -s $SWIGJOBS
|
|
|
|
# Test the Windows swig have a proper SWIG library path
|
|
- name: Test swiglib
|
|
shell: bash
|
|
run: |
|
|
# path is based on executable location
|
|
if ! [[ "$(./swig.exe -swiglib)" = "$(cygpath -w "$PWD")\\Lib" ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
- name: Test
|
|
if: ${{ matrix.NOTEST == '' }}
|
|
shell: bash
|
|
run: |
|
|
if [[ "$COMPILER" = "gcc" ]]; then
|
|
# Use MinGW-w64 compiler
|
|
export PATH="/mingw64/bin:$PATH"
|
|
fi
|
|
./swig.exe -version
|
|
make check-$SWIGLANG-version
|
|
make check-$SWIGLANG-enabled
|
|
make -k check-$SWIGLANG-examples $SWIGJOBS $CHECK_OPTIONS
|
|
make -k check-$SWIGLANG-test-suite $SWIGJOBS $CHECK_OPTIONS
|
|
|
|
- name: Install
|
|
if: ${{ env.INSTALL == 'true' }}
|
|
shell: bash
|
|
run: |
|
|
make -s install > /dev/null
|
|
|
|
which swig.exe
|
|
swig.exe -version
|
|
|
|
# TODO: Make install of ccache-swig do not work on Windows
|
|
#if [[ "$COMPILER" = "gcc" ]]; then
|
|
# which ccache-swig.exe
|
|
# ccache-swig.exe -V
|
|
#fi
|
|
|
|
# The test by itself is not related to the installation.
|
|
# We just want to save testing time :-)
|
|
- name: Clean
|
|
if: ${{ env.INSTALL == 'true' }}
|
|
shell: bash
|
|
run: |
|
|
make check-maintainer-clean
|