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

name: Main
permissions:
  contents: read
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@v5

    - 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-13

    steps:
    - uses: actions/checkout@v5

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

    - name: Configure ImageMagick
      run: |
        export CFLAGS="-Wno-deprecated-declarations"
        export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"
        ./configure --with-quantum-depth=16 --enable-hdri=no --without-perl

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

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

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

    steps:
    - uses: actions/checkout@v5
      with:
        path: ImageMagick

    - 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 /VS2022 /${{matrix.architecture}} /static

    - name: Build ImageMagick
      shell: cmd
      run: |
        call "C:\Program Files\Microsoft Visual Studio\2022\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-2022

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

    - uses: actions/checkout@v5

    - uses: msys2/setup-msys2@v2
      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}
