.test:
  # The image was generated with the following Dockerfile. It is also used
  # for libxslt, that's why we need git and libgcrypt-dev.
  #
  # FROM ubuntu:20.04
  # ENV DEBIAN_FRONTEND=noninteractive
  # RUN apt-get update && \
  #     apt-get upgrade -y && \
  #     apt-get install -y --no-install-recommends \
  #         curl git ca-certificates \
  #         autoconf automake libtool pkg-config \
  #         make gcc clang llvm \
  #         zlib1g-dev liblzma-dev libgcrypt-dev \
  #         python-dev python3-dev \
  #         cmake
  # WORKDIR /tests
  # RUN curl https://www.w3.org/XML/Test/xmlts20080827.tar.gz |tar xz
  image: registry.gitlab.gnome.org/gnome/libxml2
  script:
    - |
      ln -s /tests/xmlconf
      sh autogen.sh $CONFIG
      make -j$(nproc) V=1 CFLAGS="$CFLAGS -Werror"
      make check

gcc:
  extends: .test
  variables:
    CFLAGS: "-O2 -std=c89 -D_XOPEN_SOURCE=700"

gcc:python3:
  extends: .test
  only:
    - schedules
  variables:
    CONFIG: "--with-python=/usr/bin/python3"
    CFLAGS: "-O2"

clang:asan:
  extends: .test
  variables:
    CONFIG: "--without-python"
    CC: clang
    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined,integer -fno-sanitize-recover=all -Wno-error=cast-align"
    # LeakSanitizer requires SYS_CAP_PTRACE
    ASAN_OPTIONS: "detect_leaks=0"
    UBSAN_OPTIONS: "print_stacktrace=1"

clang:msan:
  extends: .test
  only:
    - schedules
  variables:
    CONFIG: "--without-python --without-zlib --without-lzma"
    CC: clang
    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=memory -Wno-error=cast-align"

.cmake:linux:
  image: registry.gitlab.gnome.org/gnome/libxml2
  script:
    - cmake -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS -DCMAKE_INSTALL_PREFIX=libxml2-install -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBXML2_XMLCONF_WORKING_DIR=/tests -S . -B libxml2-build
    - cmake --build libxml2-build --target install
    - mkdir -p libxml2-install/share/libxml2
    - cp Copyright libxml2-install/share/libxml2
    - cd libxml2-build
    - ctest -VV
  after_script:
    - cd libxml2-install
    - tar -czf ../libxml2-$CI_COMMIT_SHORT_SHA-$CC-$SUFFIX.tar.gz *
  artifacts:
    paths:
      - libxml2-$CI_COMMIT_SHORT_SHA-$CC-$SUFFIX.tar.gz
    expire_in: 1 day

cmake:linux:gcc:shared:
  extends: .cmake:linux
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "ON"
    CC: gcc
    SUFFIX: shared

cmake:linux:gcc:static:
  extends: .cmake:linux
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    CC: gcc
    SUFFIX: static

cmake:linux:clang:shared:
  extends: .cmake:linux
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "ON"
    CC: clang
    SUFFIX: shared

cmake:linux:clang:static:
  extends: .cmake:linux
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    CC: clang
    SUFFIX: static

.cmake:mingw:
  tags:
    - win32-ps
  before_script:
    - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12"
    - $Env:Path="C:\msys64\$Env:MINGW_PATH\bin;C:\msys64\usr\bin;$Env:Path"
    - pacman --noconfirm -Syu
    - pacman --noconfirm -S
        $Env:MINGW_PACKAGE_PREFIX-cmake
        $Env:MINGW_PACKAGE_PREFIX-libiconv
        $Env:MINGW_PACKAGE_PREFIX-ninja
        $Env:MINGW_PACKAGE_PREFIX-python
        $Env:MINGW_PACKAGE_PREFIX-python2
        $Env:MINGW_PACKAGE_PREFIX-xz
        $Env:MINGW_PACKAGE_PREFIX-zlib
    - if (-not (Test-Path 7za.exe)) {
        Invoke-WebRequest -Uri https://www.7-zip.org/a/7z1900-extra.7z -OutFile 7z1900-extra.7z ;
        cmake -E tar xf 7z1900-extra.7z 7za.exe
      }
    - if (-not (Test-Path libxml2-build/xmlconf)) {
        Invoke-WebRequest -Uri https://www.w3.org/XML/Test/xmlts20080827.tar.gz -OutFile xmlts20080827.tar.gz ;
        .\7za.exe x xmlts20080827.tar.gz -olibxml2-build
      }
  script:
    - cmake -G Ninja -DBUILD_SHARED_LIBS="$Env:BUILD_SHARED_LIBS" -DCMAKE_INSTALL_PREFIX=libxml2-install -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B libxml2-build
    - cmake --build libxml2-build --target install
    - New-Item -ItemType Directory libxml2-install\share\libxml2
    - Copy-Item Copyright libxml2-install\share\libxml2
    - cd libxml2-build
    - ctest -VV
  after_script:
    - .\7za.exe a libxml2-$Env:CI_COMMIT_SHORT_SHA-$Env:MINGW_PACKAGE_PREFIX-$Env:SUFFIX.7z .\libxml2-install\*
  cache:
    key: "$MINGW_PACKAGE_PREFIX"
    paths:
      - libxml2-build/xmlconf/
      - 7za.exe
  artifacts:
    paths:
      - libxml2-$Env:CI_COMMIT_SHORT_SHA-$Env:MINGW_PACKAGE_PREFIX-$Env:SUFFIX.7z
    expire_in: 1 day

cmake:mingw:w64-i686:shared:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "ON"
    MINGW_PACKAGE_PREFIX: mingw-w64-i686
    MINGW_PATH: mingw32
    SUFFIX: shared

cmake:mingw:w64-i686:static:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    MINGW_PACKAGE_PREFIX: mingw-w64-i686
    MINGW_PATH: mingw32
    SUFFIX: static

cmake:mingw:w64-x86_64:shared:
  extends: .cmake:mingw
  variables:
    BUILD_SHARED_LIBS: "ON"
    MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
    MINGW_PATH: mingw64
    SUFFIX: shared

cmake:mingw:w64-x86_64:static:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    MINGW_PACKAGE_PREFIX: mingw-w64-x86_64
    MINGW_PATH: mingw64
    SUFFIX: static

.cmake:msvc:
  tags:
    - win32-ps
  variables:
    CMAKE_VERSION: 3.19.4
  before_script:
    - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12"
    - if (-not (Test-Path cmake-$Env:CMAKE_VERSION-win64-x64)) {
        Invoke-WebRequest -Uri http://github.com/Kitware/CMake/releases/download/v$Env:CMAKE_VERSION/cmake-$Env:CMAKE_VERSION-win64-x64.zip -OutFile cmake-$Env:CMAKE_VERSION-win64-x64.zip ;
        Expand-Archive cmake-$Env:CMAKE_VERSION-win64-x64.zip -DestinationPath .
      }
    - $Env:Path="$Env:CI_PROJECT_DIR\cmake-$Env:CMAKE_VERSION-win64-x64\bin;$Env:Path"
    - if (-not (Test-Path 7za.exe)) {
        Invoke-WebRequest -Uri https://www.7-zip.org/a/7z1900-extra.7z -OutFile 7z1900-extra.7z ;
        cmake -E tar xf 7z1900-extra.7z 7za.exe
      }
    - if (-not (Test-Path libxml2-build/xmlconf)) {
        Invoke-WebRequest -Uri https://www.w3.org/XML/Test/xmlts20080827.tar.gz -OutFile xmlts20080827.tar.gz ;
        .\7za.exe x xmlts20080827.tar.gz -olibxml2-build
      }
  script:
    - cmake -DBUILD_SHARED_LIBS="$Env:BUILD_SHARED_LIBS" -DCMAKE_INSTALL_PREFIX=libxml2-install -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -S . -B libxml2-build
    - cmake --build libxml2-build --config Debug --target install
    - cmake --build libxml2-build --config Release --target install
    - New-Item -ItemType Directory libxml2-install\share\libxml2
    - Copy-Item Copyright libxml2-install\share\libxml2
    - cd libxml2-build
    - ctest -C Debug -VV
    - ctest -C Release -VV
  after_script:
    - .\7za.exe a libxml2-$Env:CI_COMMIT_SHORT_SHA-$Env:CMAKE_GENERATOR_TOOLSET-$Env:CMAKE_GENERATOR_PLATFORM-$Env:SUFFIX.7z .\libxml2-install\*
  cache:
    key: "msvc"
    paths:
      - cmake-$Env:CMAKE_VERSION-win64-x64/
      - libxml2-build/xmlconf/
      - 7za.exe
  artifacts:
    paths:
      - libxml2-$Env:CI_COMMIT_SHORT_SHA-$Env:CMAKE_GENERATOR_TOOLSET-$Env:CMAKE_GENERATOR_PLATFORM-$Env:SUFFIX.7z
    expire_in: 1 day

.cmake:msvc:v141:
  extends: .cmake:msvc
  variables:
    CMAKE_GENERATOR: Visual Studio 15 2017
    CMAKE_GENERATOR_TOOLSET: v141

.cmake:msvc:v141:x64:
  extends: .cmake:msvc:v141
  variables:
    CMAKE_GENERATOR_PLATFORM: x64

cmake:msvc:v141:x64:shared:
  extends: .cmake:msvc:v141:x64
  variables:
    BUILD_SHARED_LIBS: "ON"
    SUFFIX: shared

cmake:msvc:v141:x64:static:
  extends: .cmake:msvc:v141:x64
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    SUFFIX: static

.cmake:msvc:v141:x86:
  extends: .cmake:msvc:v141
  only:
    - schedules
  variables:
    CMAKE_GENERATOR_PLATFORM: Win32

cmake:msvc:v141:x86:shared:
  extends: .cmake:msvc:v141:x86
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "ON"
    SUFFIX: shared

cmake:msvc:v141:x86:static:
  extends: .cmake:msvc:v141:x86
  variables:
    BUILD_SHARED_LIBS: "OFF"
    SUFFIX: static

pages:
  script:
    - mkdir -p public
    - cp -r doc/devhelp doc/tutorial doc/xmllint.html doc/xmlcatalog_man.html public
  artifacts:
    paths:
      - public
    exclude:
      - public/devhelp/Makefile*
      - public/devhelp/*.xsl
  only:
    - master@GNOME/libxml2
