on:
  push:
    branches:
    - main
    tags:
    - '!*'
  pull_request:
    branches:
    - main

permissions:
  contents: read

name: Main
jobs:
  build_linux:
    name: Build Linux
    container:
      image: ubuntu:20.04
    runs-on: ubuntu-24.04

    strategy:
      fail-fast: false
      matrix:
        compiler: [ gcc, clang ]
        include:
          - compiler: gcc
            cxx_compiler: g++
            packages: gcc g++
          - compiler: clang
            cxx_compiler: clang++
            packages: clang

    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
        with:
          persist-credentials: false

      - name: Install dependencies
        run: |
          set -e
          export DEBIAN_FRONTEND=noninteractive
          apt-get update -y
          apt-get install -y autoconf git libtool make pkg-config ${{matrix.packages}}

      - name: Configure ImageMagick
        env:
          CC: ${{ matrix.compiler }}
          CXX: ${{ matrix.cxx_compiler }}
          CFLAGS: -Wno-deprecated-declarations
          CXXFLAGS: -Wno-deprecated-declarations
        run: |
          autoreconf -fiv
          ./configure --with-quantum-depth=16 --enable-hdri=no --without-perl --prefix=/usr

      - name: Build ImageMagick
        run: |
          make

      - name: Test ImageMagick
        run: |
          make check || exit_code=$?
          if [ "$exit_code" != "0" ] ; then cat ./test-suite.log ; fi
          exit $exit_code

      - name: Install ImageMagick
        run: |
          make install

  build_macos:
    name: Build MacOS
    runs-on: macos-14

    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
        with:
          persist-credentials: false

      - name: Install dependencies
        run: |
          set -e
          export HOMEBREW_NO_AUTO_UPDATE=1
          brew install automake libtool libxml2

      - name: Configure ImageMagick
        run: |
          export CFLAGS="-Wno-deprecated-declarations"
          export LDFLAGS=$(pkg-config --libs libjpeg)
          autoreconf -fiv
          ./configure --with-quantum-depth=16 --enable-hdri=no --without-perl

      - name: Build ImageMagick
        run: |
          set -e
          make
          sudo make install

  build_windows:
    name: Build Windows ${{matrix.architecture}}
    runs-on: windows-2025-vs2026

    strategy:
      fail-fast: false
      matrix:
        architecture: [ x64, x86 ]

    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
        with:
          path: ImageMagick
          persist-credentials: false

      - name: Download configure
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-configure.cmd

      - name: Download dependencies
        shell: cmd
        run: |
          ImageMagick\.github\build\windows\download-dependencies.cmd windows-${{matrix.architecture}}-static-openMP.zip

      - name: Configure ImageMagick
        shell: cmd
        working-directory: Configure
        run: |
          Configure.Release.x64.exe /noWizard /VS2026 /${{matrix.architecture}} /static

      - name: Build ImageMagick
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\Tools\VsDevCmd.bat"
          msbuild IM6.Static.${{matrix.architecture}}.sln /m /t:Rebuild /p:Configuration=Release,Platform=${{matrix.architecture}}

  build_msys2:
    name: Build MSYS2
    runs-on: windows-2025

    steps:
      - name: Prepare git
        run: git config --global core.autocrlf false

      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #v6.0.3
        with:
          persist-credentials: false

      - uses: msys2/setup-msys2@e9898307ac31d1a803454791be09ab9973336e1c #v2.31.1
        with:
          install: mingw-w64-x86_64-toolchain base-devel binutils
          update: true

      - name: Building ImageMagick
        run: cd .github/build/msys2 && makepkg-mingw --noconfirm --syncdeps
        env:
          MINGW_ARCH: mingw64
          PKGEXT: ".pkg.tar.xz"
        shell: msys2 {0}
