name: CI on: push: branches: master paths-ignore: - 'CHANGES*' - 'Doc/**' pull_request: branches: master paths-ignore: - 'CHANGES*' - 'Doc/**' 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: Configure 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 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 if test -z "$SWIGLANG"; then make $SWIGJOBS check-ccache; fi if test -z "$SWIGLANG"; then make $SWIGJOBS check-errors-test-suite; fi echo 'Installing...' if test -z "$SWIGLANG"; then sudo make install && swig -version && ccache-swig -V; fi - 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} ;; 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 # 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: Clean working-directory: build/build run: | set -x make check-maintainer-clean && ../../configure $CONFIGOPTS