It's useful to see the configure step by itself, so split it out from the installation of prerequisites. The make install is verbose, put it in it's own step Move checking of the errors test-suite and ccache checks from the Build to Test step.
315 lines
9.6 KiB
YAML
315 lines
9.6 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: master
|
|
paths-ignore:
|
|
- 'CHANGES*'
|
|
- 'Doc/**'
|
|
- 'appveyor.yml'
|
|
pull_request:
|
|
branches: master
|
|
paths-ignore:
|
|
- 'CHANGES*'
|
|
- 'Doc/**'
|
|
- 'appveyor.yml'
|
|
|
|
jobs:
|
|
build:
|
|
|
|
runs-on: ${{ matrix.os || 'ubuntu-20.04' }}
|
|
|
|
# By default, the name of the build is just the language used, but matrix
|
|
# entries can define the additional "desc" field with any additional
|
|
# information to include in the name.
|
|
name: ${{ matrix.SWIGLANG || 'none' }}${{ matrix.PY3 }} ${{ matrix.ENGINE}} ${{ matrix.VER }} ${{ matrix.desc }}
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- SWIGLANG: ""
|
|
desc: gcc
|
|
- SWIGLANG: ""
|
|
GCC: 7
|
|
desc: gcc7
|
|
- SWIGLANG: ""
|
|
GCC: 8
|
|
desc: gcc8
|
|
- SWIGLANG: ""
|
|
GCC: 9
|
|
desc: gcc9
|
|
- SWIGLANG: ""
|
|
GCC: 10
|
|
desc: gcc10
|
|
- SWIGLANG: ""
|
|
compiler: clang
|
|
desc: clang
|
|
- SWIGLANG: csharp
|
|
# D support can't be enabled because dmd 2.066 fails to build anything
|
|
# under Ubuntu 18.04 due to its standard library (libphobos2.a) not
|
|
# being compiled with -FPIC, but system gcc using -fpie by default,
|
|
# resulting in linking errors for any output. And later versions, such
|
|
# as 2.086.1, are not supported and result in errors in SWIG test suite.
|
|
#
|
|
# - SWIGLANG: d
|
|
# VER: '2.066.0'
|
|
# os: ubuntu-18.04 # This dlang version doesn't work under 20.04.
|
|
- SWIGLANG: go
|
|
VER: '1.3'
|
|
- SWIGLANG: go
|
|
VER: '1.6'
|
|
- SWIGLANG: go
|
|
VER: '1.8'
|
|
- SWIGLANG: go
|
|
VER: '1.12'
|
|
CSTD: gnu99
|
|
- SWIGLANG: go
|
|
VER: '1.16'
|
|
CSTD: gnu99
|
|
- SWIGLANG: guile
|
|
- SWIGLANG: java
|
|
- SWIGLANG: javascript
|
|
ENGINE: node
|
|
VER: '12'
|
|
CPP11: 1
|
|
- SWIGLANG: javascript
|
|
ENGINE: node
|
|
VER: '14'
|
|
CPP11: 1
|
|
- SWIGLANG: javascript
|
|
ENGINE: node
|
|
VER: '16'
|
|
CPP14: 1
|
|
- SWIGLANG: javascript
|
|
ENGINE: jsc
|
|
os: ubuntu-18.04 # libwebkitgtk-dev dependency not available in 20.04.
|
|
- SWIGLANG: javascript
|
|
ENGINE: v8
|
|
os: ubuntu-18.04 # libv8-dev only actually provides v8 in 18.04.
|
|
- SWIGLANG: lua
|
|
- SWIGLANG: lua
|
|
VER: '5.3'
|
|
- SWIGLANG: octave
|
|
CPP11: 1
|
|
- SWIGLANG: perl5
|
|
- SWIGLANG: php
|
|
VER: '7.4'
|
|
- SWIGLANG: php
|
|
VER: '8.0'
|
|
- SWIGLANG: python
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.2'
|
|
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.3'
|
|
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.4'
|
|
os: ubuntu-18.04 # Python < 3.5 not available for 20.04.
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.5'
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.6'
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.7'
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.8'
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
VER: '3.9'
|
|
- SWIGLANG: python
|
|
SWIG_FEATURES: -builtin
|
|
desc: builtin
|
|
- SWIGLANG: python
|
|
SWIG_FEATURES: -builtin -O
|
|
desc: builtin optimized
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
SWIG_FEATURES: -builtin
|
|
desc: builtin
|
|
- SWIGLANG: python
|
|
PY3: 3
|
|
SWIG_FEATURES: -builtin -O
|
|
desc: builtin optimized
|
|
- SWIGLANG: r
|
|
- SWIGLANG: ruby
|
|
VER: '1.9'
|
|
os: ubuntu-18.04
|
|
- SWIGLANG: ruby
|
|
VER: '2.0'
|
|
os: ubuntu-18.04
|
|
- SWIGLANG: ruby
|
|
VER: '2.1'
|
|
os: ubuntu-18.04
|
|
- SWIGLANG: ruby
|
|
VER: '2.2'
|
|
os: ubuntu-18.04
|
|
- SWIGLANG: ruby
|
|
VER: '2.3'
|
|
os: ubuntu-18.04
|
|
- SWIGLANG: ruby
|
|
VER: '2.4'
|
|
- SWIGLANG: ruby
|
|
VER: '2.5'
|
|
- SWIGLANG: ruby
|
|
VER: '2.6'
|
|
- SWIGLANG: ruby
|
|
VER: '2.7'
|
|
- SWIGLANG: ruby
|
|
VER: '3.0'
|
|
CSTD: c99
|
|
CPP11: 1
|
|
- SWIGLANG: tcl
|
|
# let's run all of them, as opposed to aborting when one fails
|
|
fail-fast: false
|
|
|
|
env:
|
|
SWIGLANG: ${{ matrix.SWIGLANG }}
|
|
PY3: ${{ matrix.PY3 }}
|
|
VER: ${{ matrix.VER }}
|
|
ENGINE: ${{ matrix.ENGINE }}
|
|
SWIG_FEATURES: ${{ matrix.SWIG_FEATURES }}
|
|
CSTD: ${{ matrix.CSTD }}
|
|
CPP11: ${{ matrix.CPP11 }}
|
|
CPP14: ${{ matrix.CPP14 }}
|
|
CPP17: ${{ matrix.CPP17 }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install CCache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
with:
|
|
key: ${{ matrix.os || 'ubuntu-20.04' }}-${{ matrix.compiler || 'gcc' }}${{ matrix.GCC }}
|
|
|
|
- name: Install Dependencies
|
|
run: |
|
|
set -x
|
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
|
echo PATH="$PATH" >> $GITHUB_ENV
|
|
|
|
source Tools/GHA-linux-install.sh
|
|
|
|
if test '${{ matrix.compiler }}' = 'clang'; then
|
|
CC="clang"
|
|
CXX="clang++"
|
|
|
|
CFLAGS="$CFLAGS -fPIE"
|
|
CXXFLAGS="$CXXFLAGS -fPIE"
|
|
elif test -n "$GCC"; then
|
|
CC="gcc-$GCC"
|
|
CXX="g++-$GCC"
|
|
else
|
|
CC="gcc"
|
|
CXX="g++"
|
|
fi
|
|
|
|
export CC CXX
|
|
|
|
echo CC="$CC" >> $GITHUB_ENV
|
|
echo CXX="$CXX" >> $GITHUB_ENV
|
|
|
|
echo "Compiler used:"
|
|
ls -la $(which $CC) $(which $CXX)
|
|
$CC --version
|
|
$CXX --version
|
|
|
|
- name: Configure
|
|
run: |
|
|
set -x
|
|
if test -n '${{ matrix.CONFIGOPTS }}'; then
|
|
CONFIGOPTS=${{ matrix.CONFIGOPTS }}
|
|
fi
|
|
if test -n "$CPP11"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++11 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++11; fi
|
|
if test -n "$CPP14"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++14 $CXXFLAGS" "CFLAGS=-std=c11 $CFLAGS") && export CSTD=c11 && export CPPSTD=c++14; fi
|
|
if test -n "$CPP17"; then CONFIGOPTS+=(--enable-cpp11-testing "CXXFLAGS=-std=c++17 $CXXFLAGS" "CFLAGS=-std=c17 $CFLAGS") && export CSTD=c17 && export CPPSTD=c++17; fi
|
|
if test -n "$SWIGLANG"; then CONFIGOPTS+=(--without-alllang --with-$WITHLANG); fi
|
|
echo "${CONFIGOPTS[@]}"
|
|
./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}"
|
|
|
|
case $(uname) in
|
|
Linux)
|
|
cpu_count=$(nproc)
|
|
;;
|
|
|
|
Darwin)
|
|
cpu_count=$(sysctl -n hw.ncpu)
|
|
;;
|
|
|
|
*)
|
|
cpu_count=1
|
|
;;
|
|
esac
|
|
if [[ $cpu_count != 1 ]]; then
|
|
echo SWIGJOBS=-j$cpu_count >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: Build
|
|
working-directory: build/build
|
|
run: |
|
|
set -x
|
|
make $SWIGJOBS
|
|
./swig -version && ./swig -pcreversion
|
|
|
|
- name: Test
|
|
working-directory: build/build
|
|
run: |
|
|
case "$SWIGLANG" in
|
|
javascript)
|
|
case "$ENGINE" in
|
|
node)
|
|
export NVM_DIR="$HOME/.nvm"
|
|
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
|
nvm use ${VER}
|
|
;;
|
|
*)
|
|
# Running tests using v8 or jsc involves creating a custom
|
|
# interpreter in Tools/javascript, which is currently broken
|
|
# for parallel builds (we attempt to update this interpreter
|
|
# while running, resulting in "Text file busy" error).
|
|
unset SWIGJOBS
|
|
esac
|
|
;;
|
|
|
|
ruby)
|
|
source $HOME/.rvm/scripts/rvm
|
|
;;
|
|
esac
|
|
|
|
set -x
|
|
if test -n "$CPP11"; then export CPPSTD=c++11; fi
|
|
if test -n "$CPP14"; then export CPPSTD=c++14; fi
|
|
if test -n "$CPP17"; then export CPPSTD=c++17; fi
|
|
|
|
if test -z "$SWIGLANG"; then make $SWIGJOBS check-ccache; fi
|
|
if test -z "$SWIGLANG"; then make $SWIGJOBS check-errors-test-suite; fi
|
|
|
|
# Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic.
|
|
if test -n "$SWIGLANG"; then cflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC) && echo $cflags; fi
|
|
if test -n "$SWIGLANG"; then cxxflags=$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC) && echo $cxxflags; fi
|
|
if test -n "$SWIGLANG"; then make check-$SWIGLANG-version; fi
|
|
if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi
|
|
if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
|
|
if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
|
|
|
|
- name: Test Installation
|
|
run: |
|
|
working-directory: build/build
|
|
set -x
|
|
if test -z "$SWIGLANG"; then sudo make install && swig -version && ccache-swig -V; fi
|
|
|
|
- name: Clean
|
|
working-directory: build/build
|
|
run: |
|
|
set -x
|
|
make check-maintainer-clean && ../../configure $CONFIGOPTS
|