flint3-sys 3.5.1

Rust bindings to the FLINT C library
Documentation
name: CI

on:
  pull_request:
    paths:
      - '.github/workflows/CI.yml'
      - 'src/**'
      - 'examples/**'
      - 'acinclude.m4'
      - 'bootstrap.sh'
      - 'CMakeLists.txt'
      - 'config/**'
      - 'configure.ac'
      - 'Makefile.in'
  push:
    paths:
      - '.github/workflows/CI.yml'
      - 'src/**'
      - 'examples/**'
      - 'acinclude.m4'
      - 'bootstrap.sh'
      - 'CMakeLists.txt'
      - 'config/**'
      - 'configure.ac'
      - 'Makefile.in'

env:
  GLOBAL_MULTIPLIER: 1

concurrency:
  # Group by workflow and ref, and to limit to 1 concurrent job except for main
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref != 'refs/heads/main' || github.run_number }}
  # Cancel intermediate builds for pull requests
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
  assert-ntl-msolve-nemo:
    name: NTL, msolve and Nemo.jl
    runs-on: ubuntu-24.04
    env:
      CC: "gcc"
      TESTCOEFF: "0.1"
    steps:
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          sudo apt-get install -y libgmp-dev libmpfr-dev libntl-dev autoconf libtool-bin
          $CC --version
          make --version
          autoconf --version
          libtool --version
          julia --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Build FLINT for msolve"
        run: |
          ./bootstrap.sh && ./configure CC=${CC} --with-ntl --enable-assert
          $MAKE && sudo make install && sudo ldconfig
      - name: "Test FLINT for msolve"
        run: |
          $MAKE tests
          $MAKE check
      - name: "Test msolve"
        run: |
          git clone --depth=1 https://github.com/algebraic-solving/msolve
          cd msolve/ && ./autogen.sh && ./configure && $MAKE && make check
      - name: "Build FLINT for Nemo"
        run: |
          gmp_path=$(julia -e 'include("dev/find_gmp_mpfr.jl"); print(gmp_artifact_dir())')
          mpfr_path=$(julia -e 'include("dev/find_gmp_mpfr.jl"); print(mpfr_artifact_dir())')
          echo "Path to GMP and MPFR: ${gmp_path}, ${mpfr_path}"
          ./bootstrap.sh && ./configure CC=${CC} --with-gmp=$gmp_path --with-mpfr=$mpfr_path && $MAKE
          mkdir lib
          cp libflint.so* lib/
      - name: "Test Nemo.jl"
        run: |
          git clone --depth 1 https://github.com/Nemocas/Nemo.jl.git
          mkdir -p ~/.julia/artifacts
          echo -e "[e134572f-a0d5-539d-bddf-3cad8db41a82]\nFLINT = \"$(pwd)\"" > ~/.julia/artifacts/Overrides.toml
          julia -e "import Pkg; Pkg.develop(path=\"./Nemo.jl\"); Pkg.test(\"Nemo\")"

  ubuntu-codecov:
    name: codecov (x10)
    runs-on: ubuntu-24.04
    env:
      CC: "gcc"
      TESTCOEFF: "10"
    steps:
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          sudo apt-get install -y libgmp-dev libmpfr-dev autoconf libtool-bin lcov
          $CC --version
          make --version
          autoconf --version
          libtool --version
          lcov --version
          python3 --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} --enable-avx2 --enable-coverage
      - name: "Compile library"
        run: $MAKE && ldd libflint.so
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check
      - name: "Check Python"
        run: $MAKE check PYTHON=1
      - name: "Gather coverage data"
        run: $MAKE coverage
      - name: "Upload coverage data"
        uses: codecov/codecov-action@v5
        if: github.repository == 'flintlib/flint'
        with:
          files: build/coverage/coverage.info
          token: ${{ secrets.CODECOV_TOKEN }}

  regression-check:
    name: Regression check
    runs-on: ubuntu-24.04
    env:
      CC: "gcc"
      CFLAGS: "-march=native -std=c11 -Wall -Wextra -Werror"
      MODULES: "build/thread_pool_merged.lo build/thread_support_merged.lo build/ulong_extras_merged.lo build/long_extras_merged.lo build/perm_merged.lo build/double_extras_merged.lo build/d_vec_merged.lo build/d_mat_merged.lo build/mpn_extras_merged.lo build/nmod_merged.lo build/nmod_vec_merged.lo build/nmod_mat_merged.lo build/nmod_poly_merged.lo build/mpn_mod_merged.lo build/fmpz_merged.lo build/fmpz_vec_merged.lo build/fmpz_mat_merged.lo build/fmpz_poly_merged.lo build/fmpz_mod_merged.lo build/fmpz_mod_vec_merged.lo build/fmpz_mod_mat_merged.lo build/fmpz_mod_poly_merged.lo build/fmpq_merged.lo build/fmpq_vec_merged.lo build/fmpq_mat_merged.lo build/fmpq_poly_merged.lo build/fq_merged.lo build/fq_vec_merged.lo build/fq_mat_merged.lo build/fq_poly_merged.lo build/fq_nmod_merged.lo build/fq_nmod_vec_merged.lo build/fq_nmod_mat_merged.lo build/fq_nmod_poly_merged.lo build/fq_zech_merged.lo build/fq_zech_mat_merged.lo build/fq_zech_poly_merged.lo build/fq_default_merged.lo build/fq_default_mat_merged.lo build/fq_default_poly_merged.lo build/fq_embed_merged.lo build/fq_nmod_embed_merged.lo build/fq_zech_embed_merged.lo build/padic_merged.lo build/padic_mat_merged.lo build/padic_poly_merged.lo build/qadic_merged.lo build/nmod_poly_factor_merged.lo build/fmpz_factor_merged.lo build/fmpz_poly_factor_merged.lo build/fmpz_mod_poly_factor_merged.lo build/fq_poly_factor_merged.lo build/fq_nmod_poly_factor_merged.lo build/fq_zech_poly_factor_merged.lo build/fq_default_poly_factor_merged.lo build/nmod_poly_mat_merged.lo build/fmpz_poly_mat_merged.lo build/mpoly_merged.lo build/nmod_mpoly_merged.lo build/fmpz_mpoly_merged.lo build/fmpz_mod_mpoly_merged.lo build/fmpq_mpoly_merged.lo build/fq_nmod_mpoly_merged.lo build/fq_zech_mpoly_merged.lo build/nmod_mpoly_factor_merged.lo build/fmpz_mpoly_factor_merged.lo build/fmpz_mod_mpoly_factor_merged.lo build/fmpq_mpoly_factor_merged.lo build/fq_nmod_mpoly_factor_merged.lo build/fq_zech_mpoly_factor_merged.lo build/fft_merged.lo build/fft_small_merged.lo"
      # Everything until fmpz_poly_q
    steps:
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          sudo apt-get install -y libgmp-dev libmpfr-dev autoconf libtool-bin
          $CC --version
          make --version
          autoconf --version
          libtool --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} CFLAGS="${CFLAGS}" --disable-debug
      - name: "Check regression in a subset of modules"
        run: $MAKE $MODULES

  ubuntu-arm:
    name: ARM (x0.5)
    runs-on: ubuntu-24.04-arm
    env:
      CC: "gcc"
      TESTCOEFF: "0.5"
    steps:
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          sudo apt-get install -y libgmp-dev libmpfr-dev autoconf libtool-bin
          $CC --version
          make --version
          autoconf --version
          libtool --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} --disable-debug
      - name: "Compile library"
        run: $MAKE && ldd libflint.so
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check

  macos-m1:
    name: M1 (x0.5)
    runs-on: macos-26
    env:
      TESTCOEFF: "0.5"
    steps:
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          brew install make autoconf libtool automake llvm
          $(brew --prefix llvm)/bin/clang --version
          gmake --version
          autoconf --version
          echo "MAKE=gmake -j$(expr $(nproc) + 1) -l 10 --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=$(brew --prefix llvm)/bin/clang --with-gmp=$(brew --prefix) --with-mpfr=$(brew --prefix) --disable-debug
      - name: "Compile library"
        run: $MAKE
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Compile profiles"
        run: $MAKE profile
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check

  ubuntu-clang:
    name: ASan, BLAS, examples (x1)
    runs-on: ubuntu-24.04
    env:
      CC: "clang"
      TESTCOEFF: "1"
    steps:
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - uses: actions/checkout@v5
      - name: "Setup"
        run: |
          sudo apt-get install -y libgmp-dev libmpfr-dev autoconf libtool-bin perl libopenblas-dev
          clang --version
          make --version
          autoconf --version
          libtool --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} --with-blas --disable-debug --enable-asan
      - name: "Compile library"
        run: $MAKE && ldd libflint.so
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check
      - name: "Compile examples"
        run: $MAKE examples
      - name: "Check examples"
        run: $MAKE checkexamples

  mingw64-gcc:
    name: MinGW (x0.5)
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    env:
      CC: "gcc"
      TESTCOEFF: "0.5"
    steps:
      - uses: actions/checkout@v5
      - name: "Setup MinGW"
        uses: msys2/setup-msys2@v2
        with:
          msystem: mingw64
          update: true
          install: bc mingw-w64-x86_64-gcc mingw-w64-x86_64-autotools
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - name: "Setup"
        run: |
          gcc --version
          make --version
          autoconf --version
          libtool --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} --enable-fast-build --disable-debug
      - name: "Compile library"
        run: $MAKE
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check

  msvc:
    name: MSVC (x0.5)
    runs-on: windows-latest
    env:
      TESTCOEFF: "0.5"
    steps:
      - name: "Rescale multiplier"
        run: |
          $TESTCOEFF = $env:TESTCOEFF * $env:GLOBAL_MULTIPLIER
          echo "FLINT_TEST_MULTIPLIER=$TESTCOEFF" | Out-File -Append -FilePath $env:GITHUB_ENV
      - uses: actions/checkout@v5
      - name: "Cache vcpkg packages"
        uses: actions/cache@v4
        with:
          path: ${{ runner.temp }}\vcpkg\archives
          key: ${{ runner.os }}-vcpkg-${{ hashFiles('**/vcpkg.json') }}
          restore-keys: |
            ${{ runner.os }}-vcpkg-
      - name: "Install vcpkg packages"
        run: vcpkg install gmp mpfr pthreads --binarysource="clear;files,${{ runner.temp }}\vcpkg\archives,readwrite"
      - name: "Setup MSVC"
        uses: ilammy/msvc-dev-cmd@v1.13.0
        with:
          arch: x86_64
      - name: "Configure"
        run: |
          mkdir build; cd build
          cmake `
            -G "Ninja" `
            -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake `
            -DCMAKE_C_FLAGS="/wd4018 /wd4146 /wd4244 /wd4267 /wd4305 /wd4996" `
            -DBUILD_TESTING=ON `
            -DCMAKE_BUILD_TYPE=Release `
            ..
      - name: "Build"
        run: cd build; cmake --build . -j5
      - name: "Check"
        run: |
          cd build
          set "FLINT_TEST_MULTIPLIER=$env:FLINT_TEST_MULTIPLIER"
          ctest -j5 --output-on-failure

  alpine-32bit:
    name: 32-bit, musl, assert (x2.5)
    runs-on: ubuntu-24.04
    env:
      CC: "gcc"
      TESTCOEFF: "2.5"
    defaults:
      run:
        shell: alpine.sh {0}
    steps:
      - uses: actions/checkout@v5
      - name: "Setup latest Alpine Linux"
        uses: jirutka/setup-alpine@v1
        with:
          arch: x86
          branch: edge
          packages: gmp-dev mpfr-dev gcc musl-dev make autoconf automake libtool
      - name: "Rescale multiplier"
        run: echo "FLINT_TEST_MULTIPLIER=$(echo "${TESTCOEFF} * ${GLOBAL_MULTIPLIER}" | bc)" >> $GITHUB_ENV
      - name: "Setup"
        run: |
          gcc --version
          make --version
          autoconf --version
          libtool --version
          echo "MAKE=make -j$(expr $(nproc) + 1) --output-sync=target" >> $GITHUB_ENV
      - name: "Configure"
        run: ./bootstrap.sh && ./configure CC=${CC} --enable-assert --disable-debug
      - name: "Compile library"
        run: $MAKE
      - name: "Compile tests"
        run: $MAKE tests
      - name: "Check"
        run: echo "FLINT_TEST_MULTIPLIER = $FLINT_TEST_MULTIPLIER" && $MAKE check