Prepare director thread dead lock example #13
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: linux | |
on: | |
push: | |
paths-ignore: | |
- 'CHANGES*' | |
- 'Doc/**' | |
- 'appveyor.yml' | |
pull_request: | |
branches: master | |
paths-ignore: | |
- 'CHANGES*' | |
- 'Doc/**' | |
- 'appveyor.yml' | |
permissions: | |
contents: read | |
jobs: | |
build: | |
# 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 build | |
continue-on-error: ${{ matrix.continue-on-error || false }} | |
runs-on: ${{ matrix.os || 'ubuntu-20.04' }} | |
# By default, the name of the build is the language used and SWIG options, but matrix entries | |
# can define the additional "desc" field with any additional information to include in the name. | |
name: ${{ matrix.SWIGLANG || 'none' }}${{ matrix.PY2 }} ${{ matrix.ENGINE}} ${{ matrix.VER }} ${{ matrix.PY_ABI_VER && format('abi={0}', matrix.PY_ABI_VER) }} ${{ matrix.SWIG_FEATURES }} ${{ (matrix.compiler || 'gcc') }}${{ matrix.GCC }} ${{ matrix.CPPSTD }} ${{ matrix.CSTD }} ${{ matrix.desc }} ${{ matrix.continue-on-error && '(can fail)' }} | |
strategy: | |
matrix: | |
include: | |
- SWIGLANG: "" | |
CPPFLAGS: "-DDOH_POISON" | |
- SWIGLANG: "" | |
GCC: 7 | |
CPPSTD: c++98 | |
CSTD: c99 | |
- SWIGLANG: "" | |
GCC: 7 | |
- SWIGLANG: "" | |
GCC: 8 | |
- SWIGLANG: "" | |
GCC: 9 | |
- SWIGLANG: "" | |
GCC: 10 | |
- SWIGLANG: "" | |
GCC: 11 | |
- SWIGLANG: "" | |
GCC: 12 | |
os: ubuntu-22.04 | |
- SWIGLANG: "" | |
GCC: 13 | |
os: ubuntu-22.04 | |
- SWIGLANG: "" | |
compiler: clang | |
os: ubuntu-22.04 | |
- SWIGLANG: c | |
CPPSTD: c++11 | |
- SWIGLANG: csharp | |
- SWIGLANG: d | |
VER: 'ldc' | |
CPPSTD: c++14 | |
- SWIGLANG: d | |
VER: 'gdmd' | |
CPPSTD: c++11 | |
- SWIGLANG: d | |
VER: '2.103.1' | |
CPPSTD: c++17 | |
- SWIGLANG: go | |
VER: '1.6' | |
CSTD: gnu11 | |
- SWIGLANG: go | |
VER: '1.8' | |
- SWIGLANG: go | |
VER: '1.12' | |
CSTD: gnu11 | |
- SWIGLANG: go | |
VER: '1.17' | |
- SWIGLANG: guile | |
- SWIGLANG: guile | |
VER: '2.2' | |
- SWIGLANG: guile | |
VER: '3.0' | |
- SWIGLANG: java | |
- SWIGLANG: javascript | |
ENGINE: jsc | |
VER: '4.0' | |
- SWIGLANG: javascript | |
ENGINE: node | |
VER: '12' | |
CPPSTD: c++11 | |
- SWIGLANG: lua | |
- SWIGLANG: lua | |
VER: '5.3' | |
- SWIGLANG: octave | |
CPPSTD: c++11 | |
- SWIGLANG: octave | |
os: ubuntu-22.04 # Octave 6.4.0 | |
CPPSTD: c++11 | |
- SWIGLANG: perl5 | |
- SWIGLANG: php | |
VER: '8.0' | |
- SWIGLANG: php | |
VER: '8.1' | |
- SWIGLANG: php | |
VER: '8.2' | |
- SWIGLANG: php | |
VER: '8.3' | |
- SWIGLANG: python | |
PY2: 2 | |
#- SWIGLANG: python | |
# VER: '3.3' | |
# os: ubuntu-18.04 # Python < 3.5 not available for 20.04. | |
#- SWIGLANG: python | |
# VER: '3.4' | |
# os: ubuntu-18.04 # Python < 3.5 not available for 20.04. | |
- SWIGLANG: python | |
VER: '3.5' | |
- SWIGLANG: python | |
VER: '3.6' | |
- SWIGLANG: python | |
VER: '3.7' | |
- SWIGLANG: python | |
VER: '3.8' | |
- SWIGLANG: python | |
VER: '3.9' | |
- SWIGLANG: python | |
VER: '3.10' | |
- SWIGLANG: python | |
VER: '3.11' | |
- SWIGLANG: python | |
VER: '3.12' | |
CSTD: gnu99 | |
- SWIGLANG: python | |
VER: '3.13' | |
CSTD: gnu99 | |
- SWIGLANG: python | |
PY2: 2 | |
SWIG_FEATURES: -builtin | |
- SWIGLANG: python | |
PY2: 2 | |
SWIG_FEATURES: -builtin -O | |
- SWIGLANG: python | |
SWIG_FEATURES: -builtin | |
- SWIGLANG: python | |
SWIG_FEATURES: -builtin -O | |
- SWIGLANG: python | |
VER: '3.13' | |
SWIG_FEATURES: -builtin | |
- SWIGLANG: python | |
VER: '3.13' | |
SWIG_FEATURES: -builtin -O | |
- SWIGLANG: python | |
VER: '3.8' | |
PY_ABI_VER: '3.4' | |
- SWIGLANG: r | |
- SWIGLANG: ruby | |
VER: '2.0' | |
- SWIGLANG: ruby | |
VER: '2.1' | |
- SWIGLANG: ruby | |
VER: '2.2' | |
- SWIGLANG: ruby | |
VER: '2.3' | |
- 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' | |
CPPSTD: c++11 | |
- SWIGLANG: ruby | |
VER: '3.1.4' # import_fragments testcase started to fail on upgrade to 3.1.5, see https://github.com/swig/swig/issues/2800 | |
CPPSTD: c++11 | |
- SWIGLANG: ruby | |
CPPSTD: c++11 | |
VER: '3.2.2' # import_fragments testcase started to fail on upgrade to 3.2.3, see https://github.com/swig/swig/issues/2800 | |
- SWIGLANG: scilab | |
VER: '5.5.2' | |
- SWIGLANG: scilab | |
VER: '6.0.2' | |
- SWIGLANG: scilab | |
os: ubuntu-22.04 # scilab 6.1.1 | |
- SWIGLANG: scilab | |
VER: '2023.1.0' | |
- SWIGLANG: scilab | |
VER: '2024.1.0' | |
- SWIGLANG: tcl | |
# c++11 testing | |
- SWIGLANG: csharp | |
CPPSTD: c++11 | |
- SWIGLANG: go | |
VER: '1.17' | |
CPPSTD: c++11 | |
CSTD: gnu11 | |
- SWIGLANG: guile | |
CPPSTD: c++11 | |
- SWIGLANG: java | |
CPPSTD: c++11 | |
- SWIGLANG: javascript | |
ENGINE: jsc | |
VER: '4.1' | |
os: ubuntu-22.04 | |
CPPSTD: c++11 | |
- SWIGLANG: javascript | |
ENGINE: node | |
VER: '14' | |
CPPSTD: c++11 | |
- SWIGLANG: lua | |
CPPSTD: c++11 | |
- SWIGLANG: perl5 | |
CPPSTD: c++11 | |
- SWIGLANG: php | |
CPPSTD: c++11 | |
CSTD: gnu11 | |
- SWIGLANG: python | |
CPPSTD: c++11 | |
- SWIGLANG: r | |
CPPSTD: c++11 | |
- SWIGLANG: ruby | |
CPPSTD: c++11 | |
VER: '3.3.4' # cpp11_rvalue_reference_move testcase apparently started to fail on upgrade to 3.3.5, see https://github.com/swig/swig/issues/3030 | |
- SWIGLANG: ruby | |
CPPSTD: c++11 | |
- SWIGLANG: scilab | |
CPPSTD: c++11 | |
- SWIGLANG: tcl | |
CPPSTD: c++11 | |
# c++14 testing | |
- SWIGLANG: csharp | |
CPPSTD: c++14 | |
- SWIGLANG: go | |
VER: '1.17' | |
CPPSTD: c++14 | |
CSTD: gnu11 | |
- SWIGLANG: guile | |
CPPSTD: c++14 | |
- SWIGLANG: java | |
CPPSTD: c++14 | |
- SWIGLANG: javascript | |
ENGINE: node | |
VER: '16' | |
CPPSTD: c++14 | |
- SWIGLANG: lua | |
CPPSTD: c++14 | |
- SWIGLANG: octave | |
CPPSTD: c++14 | |
- SWIGLANG: perl5 | |
CPPSTD: c++14 | |
- SWIGLANG: php | |
CPPSTD: c++14 | |
CSTD: gnu11 | |
- SWIGLANG: python | |
CPPSTD: c++14 | |
- SWIGLANG: r | |
CPPSTD: c++14 | |
- SWIGLANG: ruby | |
CPPSTD: c++14 | |
- SWIGLANG: scilab | |
CPPSTD: c++14 | |
- SWIGLANG: tcl | |
CPPSTD: c++14 | |
# c++17 testing (using gcc13) | |
- SWIGLANG: csharp | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: go | |
VER: '1.17' | |
CPPSTD: c++17 | |
GCC: 13 | |
CSTD: gnu17 | |
- SWIGLANG: guile | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: java | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: javascript | |
ENGINE: node | |
VER: '18' | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: javascript | |
ENGINE: napi | |
VER: '20' | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: lua | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: octave | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: perl5 | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: php | |
CPPSTD: c++17 | |
CSTD: gnu17 | |
GCC: 13 | |
- SWIGLANG: python | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: r | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: ruby | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: scilab | |
CPPSTD: c++17 | |
GCC: 13 | |
- SWIGLANG: tcl | |
CPPSTD: c++17 | |
GCC: 13 | |
# c++20 testing (using gcc13) | |
- SWIGLANG: c | |
CPPSTD: c++20 | |
GCC: 13 | |
os: ubuntu-22.04 | |
- SWIGLANG: python | |
CPPSTD: c++20 | |
GCC: 13 | |
os: ubuntu-22.04 | |
- SWIGLANG: javascript | |
ENGINE: napi | |
VER: '22' | |
CPPSTD: c++20 | |
GCC: 13 | |
os: ubuntu-22.04 | |
- SWIGLANG: javascript | |
ENGINE: node | |
VER: '20' | |
CPPSTD: c++20 | |
GCC: 13 | |
os: ubuntu-22.04 | |
- SWIGLANG: javascript | |
ENGINE: v8 | |
CSTD: c++14 | |
CPPSTD: c++14 | |
VER: '7.8' # oldest we can easily test as libnode-dev in 20.04 doesn't have the V8 headers | |
os: ubuntu-22.04 | |
- SWIGLANG: javascript | |
ENGINE: v8 | |
CSTD: c++14 | |
CPPSTD: c++14 | |
VER: '10.2' | |
os: ubuntu-24.04 | |
# Experimental languages (these are allowed to fail) | |
- SWIGLANG: mzscheme | |
continue-on-error: true | |
- SWIGLANG: ocaml | |
CPPSTD: c++17 | |
GCC: 13 | |
os: ubuntu-22.04 # ocaml-4.08 in ubuntu-20.04 doesn't work | |
continue-on-error: true | |
# Run all of them, as opposed to aborting when one fails | |
fail-fast: false | |
env: | |
SWIGLANG: ${{ matrix.SWIGLANG }} | |
PY2: ${{ matrix.PY2 }} | |
VER: ${{ matrix.VER }} | |
ENGINE: ${{ matrix.ENGINE }} | |
SWIG_FEATURES: ${{ matrix.SWIG_FEATURES }} | |
GCC: ${{ matrix.GCC }} | |
CSTD: ${{ matrix.CSTD }} | |
CPPSTD: ${{ matrix.CPPSTD }} | |
CPPFLAGS: ${{ matrix.CPPFLAGS }} | |
PY_ABI_VER: ${{ matrix.PY_ABI_VER }} | |
steps: | |
- name: Machine Info | |
run: | | |
echo "nproc..." | |
nproc --all | |
echo "uname..." | |
uname --all | |
echo "meminfo..." | |
cat /proc/meminfo | |
echo "lsb-release..." | |
cat /etc/lsb-release | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
show-progress: false | |
submodules: recursive | |
- name: Install CCache | |
uses: hendrikmuhs/ccache-action@v1 | |
with: | |
key: ${{ matrix.os || 'ubuntu-20.04' }}-${{ matrix.compiler || 'gcc' }}${{ matrix.GCC }} | |
# Uncomment to debug via ssh, see https://github.com/mxschmitt/action-tmate | |
# - name: Setup tmate session | |
# uses: mxschmitt/action-tmate@v3 | |
- name: Install Dependencies | |
run: | | |
set -x | |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" | |
echo PATH="$PATH" >> $GITHUB_ENV | |
source $GITHUB_WORKSPACE/Tools/GHA-linux-install.sh | |
echo WITHLANG="$WITHLANG" >> $GITHUB_ENV | |
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 | |
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 | |
ls -la $(which $CC) $(which $CXX) | |
$CC --version | |
$CXX --version | |
- name: Configure | |
run: | | |
source $GITHUB_WORKSPACE/Tools/CI-linux-environment.sh | |
set -x | |
if [[ -z "$CSTD" ]]; then | |
case "$CPPSTD" in | |
c++11) export CSTD=c11 ;; | |
c++14) export CSTD=c11 ;; | |
c++17) export CSTD=c17 ;; | |
c++20) export CSTD=c17 ;; | |
esac | |
echo CSTD="$CSTD" >> $GITHUB_ENV | |
fi | |
if test -z "$CPPSTD"; then CONFIGOPTS+=("--disable-cpp11-testing"); fi | |
if test -n "$CPPSTD"; then CONFIGOPTS+=("CXXFLAGS=-std=$CPPSTD $CXXFLAGS"); fi | |
if test -n "$CSTD"; then CONFIGOPTS+=("CFLAGS=-std=$CSTD $CFLAGS"); 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[@]}" | |
- name: Build | |
working-directory: build/build | |
run: | | |
set -x | |
make -s $SWIGJOBS | |
./swig -version && ./swig -pcreversion | |
- name: Test | |
working-directory: build/build | |
run: | | |
source $GITHUB_WORKSPACE/Tools/CI-linux-environment.sh | |
set -x | |
if test -z "$SWIGLANG"; then | |
make $SWIGJOBS check-ccache | |
make $SWIGJOBS check-errors-test-suite | |
else | |
case "$SWIGLANG" in | |
ocaml) | |
# `make check-ocaml-test-suite` fails with parallel make with: | |
# | |
# File "swig.ml", line 1: | |
# Error: Could not find the .cmi file for interface swig.mli. | |
# | |
# Apparently we ought to be using `ocamldep` to generate make | |
# dependencies. | |
unset SWIGJOBS | |
;; | |
scilab) | |
case $VER in | |
""|6.*|2023.*|2024.0.*|2024.1.*) | |
# Some older versions of scilab sporadically fail with: | |
# terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error' | |
# #2942 says that it was probably introduced in 6.x (we've | |
# seen it with 6.1.0.0, but haven't with 5.x); it also says | |
# "this issue was fixed in Scilab 2024.1.0" but we are | |
# still seeing sporadic failures with that version. | |
unset SWIGJOBS | |
;; | |
esac | |
;; | |
esac | |
# Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic. | |
cflags="$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC)" | |
cxxflags="$($GITHUB_WORKSPACE/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC)" | |
make check-$SWIGLANG-version | |
make check-$SWIGLANG-enabled | |
make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags" PY_ABI_VER="$PY_ABI_VER" | |
make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags" PY_ABI_VER="$PY_ABI_VER" | |
fi | |
- name: Install | |
working-directory: build/build | |
run: | | |
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 |