stages: [build, test, deploy]

variables:
  GIT_SUBMODULE_STRATEGY: normal

.build_template: &build_definition
  stage: build
  artifacts:
    paths: ["build/", ".lock-waf*"]

.test_template: &test_definition
  stage: test
  artifacts:
    paths: [build/coverage]


arm32_dbg:
  <<: *build_definition
  image: lv2plugin/debian-arm32
  script: python ./waf configure build -dST --werror
  variables:
    CC: "arm-linux-gnueabihf-gcc"
    CXX: "arm-linux-gnueabihf-g++"

test:arm32_dbg:
  <<: *test_definition
  image: lv2plugin/debian-arm32
  script: python ./waf test --wrapper=qemu-arm
  needs: ["arm32_dbg"]


arm32_rel:
  <<: *build_definition
  image: lv2plugin/debian-arm32
  script: python ./waf configure build -ST --werror
  variables:
    CC: "arm-linux-gnueabihf-gcc"
    CXX: "arm-linux-gnueabihf-g++"

test:arm32_rel:
  <<: *test_definition
  image: lv2plugin/debian-arm32
  script: python ./waf test --wrapper=qemu-arm
  needs: ["arm32_rel"]


arm64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-arm64
  script: python ./waf configure build -dST --werror
  variables:
    CC: "aarch64-linux-gnu-gcc"
    CXX: "aarch64-linux-gnu-g++"

test:arm64_dbg:
  <<: *test_definition
  image: lv2plugin/debian-arm64
  script: python ./waf test --wrapper=qemu-aarch64
  needs: ["arm64_dbg"]


arm64_rel:
  <<: *build_definition
  image: lv2plugin/debian-arm64
  script: python ./waf configure build -ST --werror
  variables:
    CC: "aarch64-linux-gnu-gcc"
    CXX: "aarch64-linux-gnu-g++"

test:arm64_rel:
  <<: *test_definition
  image: lv2plugin/debian-arm64
  script: python ./waf test --wrapper=qemu-aarch64
  needs: ["arm64_rel"]


x64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -dST --werror --docs

test:x64_dbg:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script:
    - python ./waf test
    - cp doc/*.svg build/doc/
    - groff -Thtml -P -l -P -r -man -wall doc/serdi.1 > build/doc/serdi.html
  needs: ["x64_dbg"]
  artifacts:
    paths: ["build/coverage", "build/doc"]


x64_rel:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -ST --werror

test:x64_rel:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script: python ./waf test
  needs: ["x64_rel"]


x64_static:
  <<: *build_definition
  image: lv2plugin/debian-x64
  script: python ./waf configure build -ST --werror --no-posix --static-progs

test:x64_static:
  <<: *test_definition
  image: lv2plugin/debian-x64
  script: python ./waf test
  needs: ["x64_static"]


x64_sanitize:
  <<: *build_definition
  image: lv2plugin/debian-x64-clang
  script: python ./waf configure build -ST --werror --no-coverage
  variables:
    CC: "clang"
    CFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
    CXX: "clang++"
    CXXFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
    LINKFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"

test:x64_sanitize:
  <<: *test_definition
  image: lv2plugin/debian-x64-clang
  script: python ./waf test
  needs: ["x64_sanitize"]


mingw32_dbg:
  <<: *build_definition
  image: lv2plugin/debian-mingw32
  script: python ./waf configure build -dST --werror --no-coverage
  variables:
    CC: "i686-w64-mingw32-gcc"
    CXX: "i686-w64-mingw32-g++"

mingw32_rel:
  <<: *build_definition
  image: lv2plugin/debian-mingw32
  script: python ./waf configure build -ST --werror --no-coverage
  variables:
    CC: "i686-w64-mingw32-gcc"
    CXX: "i686-w64-mingw32-g++"


mingw64_dbg:
  <<: *build_definition
  image: lv2plugin/debian-mingw64
  script: python ./waf configure build -dST --werror --no-coverage
  variables:
    CC: "x86_64-w64-mingw32-gcc"
    CXX: "x86_64-w64-mingw32-g++"

mingw64_rel:
  <<: *build_definition
  image: lv2plugin/debian-mingw64
  script: python ./waf configure build -ST --werror --no-coverage
  variables:
    CC: "x86_64-w64-mingw32-gcc"
    CXX: "x86_64-w64-mingw32-g++"


mac_dbg:
  <<: *build_definition
  script: python ./waf configure build -dST --werror --no-coverage
  tags: [macos]

test:mac_dbg:
  <<: *test_definition
  script: python ./waf test
  needs: ["mac_dbg"]
  tags: [macos]


mac_rel:
  <<: *build_definition
  script: python ./waf configure build -ST --werror --no-coverage
  tags: [macos]

test:mac_rel:
  <<: *test_definition
  script: python ./waf test
  needs: ["mac_rel"]
  tags: [macos]


win_dbg:
  <<: *build_definition
  script: python ./waf configure build -dST --werror --no-coverage
  tags: [windows,msvc,python]

test:win_dbg:
  <<: *test_definition
  script: python ./waf test
  needs: ["win_dbg"]
  tags: [windows,msvc,python]


win_rel:
  <<: *build_definition
  script: python ./waf configure build -ST --werror --no-coverage
  tags: [windows,msvc,python]

test:win_rel:
  <<: *test_definition
  script: python ./waf test
  needs: ["win_rel"]
  tags: [windows,msvc,python]


pages:
  stage: deploy
  script:
    - mkdir -p .public/doc
    - mkdir -p .public/man
    - mkdir -p .public/images
    - mv build/doc/*.svg .public/images
    - mv build/doc/html/ .public/doc/html
    - mv build/coverage/ .public/coverage
    - mv build/doc/index.html .public/index.html
    - mv build/doc/serdi.html .public/man/serdi.html
    - mv .public public
  artifacts:
    paths:
      - public
  only:
    - master