.test:
  image: registry.gitlab.gnome.org/gnome/libxml2
  variables:
    BASE_CONFIG: "--with-ftp --with-legacy --with-xptr-locs"
  before_script:
    - rm -rf libxml2-build
    - mkdir libxml2-build
    - ln -s /tests/xmlconf libxml2-build
  script:
    - sh .gitlab-ci/test.sh

gcc:
  extends: .test
  variables:
    CONFIG: "--without-tls"
    CFLAGS: "-O2 -std=c89 -D_XOPEN_SOURCE=600"

gcc:minimum:
  extends: .test
  variables:
    BASE_CONFIG: "--with-minimum"
    CFLAGS: "-O2"

gcc:medium:
  extends: .test
  variables:
    BASE_CONFIG: "--with-minimum"
    CONFIG: "--with-threads --with-tree --with-xpath --with-output --with-html"
    CFLAGS: "-O2"

gcc:legacy:
  extends: .test
  only:
    - schedules
  variables:
    BASE_CONFIG: "--with-legacy"
    CFLAGS: "-O2"

gcc:python3:
  extends: .test
  variables:
    CFLAGS: "-O2"
    PYTHON: "/usr/bin/python3"

gcc:static:
  extends: .test
  variables:
    CONFIG: "--disable-shared --without-python --without-modules"
    CFLAGS: "-O2"

clang:asan:
  extends: .test
  tags:
    - asan
  variables:
    CONFIG: "--without-python"
    CC: clang
    CFLAGS: "-O2 -g -fno-omit-frame-pointer -fsanitize=address,undefined,integer -fno-sanitize-recover=all"
    UBSAN_OPTIONS: "print_stacktrace=1"
    ASAN_SYMBOLIZER_PATH: "$CI_PROJECT_DIR/.gitlab-ci/llvm-symbolizer"

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"
    MSAN_SYMBOLIZER_PATH: "$CI_PROJECT_DIR/.gitlab-ci/llvm-symbolizer"

.mingw:
  tags:
    - win32-ps
  variables:
    BASE_CONFIG: "--with-ftp --with-legacy --with-xptr-locs"
    CHERE_INVOKING: "yes"
  before_script:
    - $Env:Path="C:\msys64\usr\bin;$Env:Path"
    - bash -lc 'sh .gitlab-ci/setup_mingw.sh autotools'
  script:
    - bash -lc 'sh .gitlab-ci/test.sh'
  cache:
    key: "$MSYSTEM"
    paths:
      - libxml2-build/xmlconf/

mingw:w64-x86_64:shared:
  extends: .mingw
  variables:
    CFLAGS: "-O2"
    MSYSTEM: MINGW64

mingw:w64-i686:shared:
  extends: .mingw
  only:
    - schedules
  variables:
    CFLAGS: "-O2"
    MSYSTEM: MINGW32

# Disabled, GCC missing?
.mingw:msys:shared:
  extends: .mingw
  variables:
    CFLAGS: "-O2"
    MSYSTEM: MSYS

.cmake:linux:
  image: registry.gitlab.gnome.org/gnome/libxml2
  before_script:
    - rm -rf libxml2-build
    - mkdir libxml2-build
    - ln -s /tests/xmlconf libxml2-build
  script:
    - sh .gitlab-ci/test_cmake.sh
  artifacts:
    paths:
      - libxml2-$CI_COMMIT_SHORT_SHA-$SUFFIX.tar.gz
    expire_in: 1 day

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

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

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

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

.cmake:mingw:
  tags:
    - win32-ps
  variables:
    CHERE_INVOKING: "yes"
  before_script:
    - $Env:Path="C:\msys64\usr\bin;$Env:Path"
    - bash -lc 'sh .gitlab-ci/setup_mingw.sh cmake ninja'
  script:
    - bash -lc 'sh .gitlab-ci/test_cmake.sh -G Ninja'
  cache:
    key: "$MSYSTEM"
    paths:
      - libxml2-build/xmlconf/
  artifacts:
    paths:
      - libxml2-$Env:CI_COMMIT_SHORT_SHA-$Env:SUFFIX.tar.gz
    expire_in: 1 day

cmake:mingw:w64-i686:shared:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "ON"
    MSYSTEM: MINGW32
    SUFFIX: mingw-w64-i686-shared

cmake:mingw:w64-i686:static:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    MSYSTEM: MINGW32
    SUFFIX: mingw-w64-i686-static

cmake:mingw:w64-x86_64:shared:
  extends: .cmake:mingw
  variables:
    BUILD_SHARED_LIBS: "ON"
    MSYSTEM: MINGW64
    SUFFIX: mingw-w64-x86_64-shared

cmake:mingw:w64-x86_64:static:
  extends: .cmake:mingw
  only:
    - schedules
  variables:
    BUILD_SHARED_LIBS: "OFF"
    MSYSTEM: MINGW64
    SUFFIX: mingw-w64-x86_64-static

.cmake:msvc:
  tags:
    - win32-ps
  variables:
    # MSVC warns when casting `const char **` to `void *` which is wrong.
    # Disable warning C4090.
    CFLAGS: /WX /wd4090
    CMAKE_VERSION: 3.19.4
  script:
    - .gitlab-ci/Test-Msvc
  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.html public
    - mkdir -p public/examples
    - cp doc/examples/*.html doc/examples/*.c public/examples
  artifacts:
    paths:
      - public
    exclude:
      - public/devhelp/Makefile*
      - public/devhelp/*.xsl
  only:
    - master@GNOME/libxml2
