stages:
 - build

# FIXME: Use --werror once warnings are fixed.
variables:
  MESON_ARGS: --fatal-meson-warnings
  MESON_ARGS_WINDOWS: ${MESON_ARGS} --force-fallback-for=zlib

.build windows common:
  # See
  # https://gitlab.freedesktop.org/gstreamer/gst-ci/container_registry/213
  image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v14-master'
  stage: 'build'
  tags:
    - 'docker'
    - 'windows'
    - '1809'
    - 'gstreamer-windows'

.build linux common:
  # See
  # https://gitlab.freedesktop.org/freetype/docker-images/container_registry/20896
  image: 'registry.freedesktop.org/freetype/docker-images/debian:latest'
  stage: 'build'

.build windows meson:
  extends: '.build windows common'
  variables:
    # Make sure any failure in PowerShell scripts is fatal.
    ErrorActionPreference: 'Stop'
    WarningPreference: 'Stop'
    # Uncomment the following key if need to pass custom args, as well with
    # the `$env:MESON_ARGS` line in the `script:` blocks.
    # MESON_ARGS: >-
    #   -Dfoo=enabled
    #   -Dbar=disabled
  before_script:
    # Make sure meson is up to date, so we don't need to rebuild the image
    # with each release.
    - pip3 install -U meson ninja
  script:
    # For some reason, options are separated by newlines instead of spaces,
    # so we have to replace them first.
    #- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
    # Gitlab executes PowerShell in docker, but `VsDevCmd.bat` is a batch
    # script.  Environment variables substitutions is done by PowerShell
    # before calling `cmd.exe`, that's why we use `$env:FOO` instead of
    # `%FOO%`.
    - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
        meson setup build $env:MESON_ARGS_WINDOWS &&
        meson compile --verbose -C build &&
        meson test -C build &&
        meson test -C build --benchmark"


# Format of job names:
# <OS> <Build-Tool> <Build-Params> <Architecture> 


# Windows jobs
windows meson vs2017 amd64:
  extends: '.build windows meson'
  variables:
    ARCH: 'amd64'

windows meson vs2017 x86:
  extends: '.build windows meson'
  variables:
    ARCH: 'x86'


# Linux Jobs
# Jobs with "libs" in the name force enable libraries.
# They are disabled in rest of the jobs.
linux autotools:
  extends: '.build linux common'
  script: |
    ./autogen.sh
    ./configure --with-brotli=no \
                --with-bzip2=no \
                --with-harfbuzz=no \
                --with-png=no \
                --with-zlib=no

    make -j$(nproc) && make install

linux autotools libs:
  extends: '.build linux common'
  script: |
    ./autogen.sh
    ./configure --with-brotli=yes \
                --with-bzip2=yes \
                --with-harfbuzz=yes \
                --with-png=yes \
                --with-zlib=yes

    make -j$(nproc) && make install

linux meson:
  extends: '.build linux common'
  script: |
    meson setup build -Dbrotli=disabled \
                      -Dbzip2=disabled \
                      -Dharfbuzz=disabled \
                      -Dpng=disabled \
                      -Dzlib=disabled

    meson compile --verbose -C build
    meson install -C build

linux meson libs:
  extends: '.build linux common'
  script: |
    meson setup build -Dbrotli=enabled \
                      -Dbzip2=enabled \
                      -Dharfbuzz=disabled \
                      -Dpng=disabled \
                      -Dzlib=disabled

    meson compile --verbose -C build
    meson install -C build

linux cmake:
  extends: '.build linux common'
  script: |
    cmake -B build -D FT_WITH_BROTLI=OFF \
                   -D FT_WITH_BZIP2=OFF \
                   -D FT_WITH_HARFBUZZ=OFF \
                   -D FT_WITH_PNG=OFF \
                   -D FT_WITH_ZLIB=OFF

    cmake --build build --target install

linux cmake libs:
  extends: '.build linux common'
  script: |
    cmake -B build -D FT_WITH_BROTLI=ON \
                   -D FT_WITH_BZIP2=ON \
                   -D FT_WITH_HARFBUZZ=ON \
                   -D FT_WITH_PNG=ON \
                   -D FT_WITH_ZLIB=ON

    cmake --build build --target install
