#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
# SPDX-License-Identifier: curl
#
###########################################################################
# https://cirrus-ci.com/github/curl/curl
#
# Cirrus CI configuration:
# https://cirrus-ci.org/guide/writing-tasks/

freebsd_task:
  skip: "changesIncludeOnly(
    '**/CMakeLists.txt',
    '.azure-pipelines.yml',
    '.circleci/**',
    '.github/**',
    'appveyor.*',
    'CMake/**',
    'packages/**',
    'plan9/**',
    'projects/**',
    'winbuild/**'
    )"

  name: FreeBSD

  matrix:
    - name: FreeBSD 14.0
      freebsd_instance:
        image_family: freebsd-14-0

  env:
    CIRRUS_CLONE_DEPTH: 10
    CRYPTOGRAPHY_DONT_BUILD_RUST: 1
    MAKEFLAGS: -j 3

  pkginstall_script:
    - pkg update -f
    - pkg install -y autoconf automake libtool pkgconf brotli openldap26-client heimdal libpsl libssh2 libidn2 librtmp libnghttp2 nghttp2 stunnel py39-openssl py39-impacket py39-cryptography libpsl
    - pkg delete -y curl
  configure_script:
    - autoreconf -fi
    # Building with the address sanitizer is causing unexplainable test issues due to timeouts
    # - case `uname -r` in
    #     12.2*)
    #     export CC=clang;
    #     export CFLAGS="-fsanitize=address,undefined,signed-integer-overflow -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g";
    #     export CXXFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g";
    #     export LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer" ;;
    #   esac
    - ./configure --prefix="${HOME}"/install --enable-debug --with-openssl --with-libssh2 --with-brotli --with-gssapi --with-libidn2 --enable-manual --enable-ldap --enable-ldaps --with-librtmp --with-libpsl --with-nghttp2 || { tail -300 config.log; false; }
  compile_script:
    - make V=1 && make V=1 examples && cd tests && make V=1
  test_script:
    # blackhole?
    - sysctl net.inet.tcp.blackhole
    # make sure we don't run blackhole != 0
    - sudo sysctl net.inet.tcp.blackhole=0
    # Some tests won't run if run as root so run them as another user.
    # Make directories world writable so the test step can write wherever it needs.
    - find . -type d -exec chmod 777 {} \;
    # The OpenSSH server instance for the testsuite cannot be started on FreeBSD,
    # therefore the SFTP and SCP tests are disabled right away from the beginning.
    #
    - sudo -u nobody make V=1 TFLAGS="-n !SFTP !SCP" test-ci
  install_script:
    - make V=1 install
