# Continuous integration tasks running on Cirrus CI.
#
# This is currently used for testing under FreeBSD, which is not available at
# the other CI providers used by wx.

env:
  CCACHE_SIZE: 1G
  CCACHE_DIR: /tmp/ccache

task:
  skip: "changesIncludeOnly('appveyor.yml','CMakeLists.txt','.circleci/**','.github/**','docs/**','interface/**','include/wx/{msw,osx,qt}/**','src/{msw,osx,qt}/**','build/{cmake,msw,osx}/**','locale/**')"
  matrix:
    - name: Cirrus CI / FreeBSD wxGTK 3
      freebsd_instance:
        image_family: freebsd-14-0
      env:
        osname: FreeBSD
    - name: Cirrus CI / Debian ARM wxGTK 3
      arm_container:
        image: debian:11-slim
      env:
        osname: Linux
        arch: arm

  before_script: |
    wxPROC_COUNT=`./build/tools/proc_count.sh`
    # ARM systems have 64 CPUs but run out of memory and crash when using that
    # many jobs, so limit them to something reasonable.
    if [ $wxPROC_COUNT -gt 12 ]; then
      wxPROC_COUNT=12
    fi

    echo wxBUILD_ARGS=-j$wxPROC_COUNT >> $CIRRUS_ENV

    WX_EXTRA_PACKAGES='ccache git'
    export WX_EXTRA_PACKAGES

    case "${osname}" in
      Linux)
        WX_EXTRA_PACKAGES="$WX_EXTRA_PACKAGES \
              g++ libexpat1-dev libjpeg-dev libpng-dev libtiff-dev make zlib1g-dev"
        ;;
    esac

    wxGTK_VERSION=3 ./build/tools/before_install.sh

    echo "PATH=/usr/local/libexec/ccache:$PATH" >> $CIRRUS_ENV

    # Show some information about the system.
    uname -a
    c++ --version
    ccache --version
    locale
    locale -a

  # Rather than getting all submodules, get just the ones we need, as we can
  # use system libraries instead of the other ones.
  update_submodules_script: |
    git submodule update --init 3rdparty/catch 3rdparty/nanosvg src/stc/scintilla src/stc/lexilla

  ccache_cache:
    folder: /tmp/ccache

  configure_script: |
    case "${osname}" in
      FreeBSD)
        # We need to pass these flags so that libraries under /usr/local are found,
        # because configure doesn't look for them there by default (it ought to
        # always use pkg-config instead, but it currently doesn't do this either).
        CPPFLAGS=-I/usr/local/include
        LDFLAGS=-L/usr/local/lib
        ;;
    esac

    ./configure --disable-optimise --disable-debug_info CXXFLAGS=-Werror CPPFLAGS=$CPPFLAGS LDFLAGS=$LDFLAGS

  build_library_script: |
    make -k $wxBUILD_ARGS

  build_tests_script: |
    make -k -C tests $wxBUILD_ARGS

  test_script: |
    cd tests
    WX_TEST_WEBREQUEST_URL="0" ./test

  build_samples_script: |
    make -k -C samples $wxBUILD_ARGS

  install_script: |
    make install
    case "${osname}" in
      FreeBSD)
        # Building sample requires GNU make, so install it just for this.
        pkg install -q -y gmake
        ;;
    esac

    gmake -C samples/minimal -f makefile.unx clean
    gmake -C samples/minimal -f makefile.unx $wxBUILD_ARGS

  # Show cache statistics for information.
  end_script: |
    ccache -s
