From 2c2b1fc3a375eaf3e7ddac0cbd62afc3336a8ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 1/6] Do a bytecode build if native compiler not found Instead of requiring the user to specify NATIVE=false, automatically do a bytecode-only build if the native compiler is not found. --- src/Makefile | 3 ++- src/Makefile.OCaml | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 4df90202a..02ccf4f87 100644 --- a/src/Makefile +++ b/src/Makefile @@ -5,7 +5,8 @@ # Set NATIVE=false if you are not using the native code compiler (ocamlopt) # This is not advised, though: Unison runs much slower when byte-compiled. -NATIVE=true +# Set NATIVE=true to force a native build, should auto-detection fail. +NATIVE=auto ######################################################################## ######################################################################## diff --git a/src/Makefile.OCaml b/src/Makefile.OCaml index 0dc3aab3d..fd2ce191e 100644 --- a/src/Makefile.OCaml +++ b/src/Makefile.OCaml @@ -189,6 +189,14 @@ clean:: #################################################################### ### Compilation boilerplate +ifeq ($(NATIVE), auto) + ifneq ($(strip $(shell command -v $(OCAMLOPT) 2> /dev/null)),) + NATIVE=true + else + NATIVE=false + endif +endif + ifeq ($(NATIVE), true) ## Set up for native code compilation From e7a6d08fa42bc27caf31c14bb26c93975cbb0d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 2/6] Use more reliable tool prefixes for mingw builds Improve detection of tool prefixes by consulting the OCaml compiler's configuration, in order to increase compatibility with various mingw setups/system configurations. This is a more generic solution; the previous setup appears to have relied more on a specific (cross compilation) environment being correctly set up. --- src/Makefile.OCaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile.OCaml b/src/Makefile.OCaml index fd2ce191e..cd9e29a14 100644 --- a/src/Makefile.OCaml +++ b/src/Makefile.OCaml @@ -221,7 +221,10 @@ else endif -WINDRES := $(or ${TOOL_PREFIX},$(filter i686-w64-mingw32- x86_64-w64-mingw32-,$(CC:gcc${EXEC_EXT}=)))windres +OCAML_C_COMPILER := $(shell $(OCAMLC) -config-var c_compiler) +C_COMPILER := $(or ${OCAML_C_COMPILER},${CC}) +C_COMPILER_PREFIX := $(C_COMPILER:gcc=) +WINDRES := $(or ${TOOL_PREFIX},$(filter i686-w64-mingw32- x86_64-w64-mingw32-,$(C_COMPILER_PREFIX:gcc${EXEC_EXT}=)))windres ##$(info windres='${WINDRES}') #################################################################### From 76fdbacd3bee91b017adc43218f1bd28a79dc7f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 3/6] Fix bytecode build option detection Automatically detecting supported compiler options by simply executing the compiler with no input is no longer possible since OCaml 5.2.0. Using '-version' instead of supplying an input seems to work well so far and can be used as a workaround. --- src/Makefile.OCaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Makefile.OCaml b/src/Makefile.OCaml index cd9e29a14..97a129313 100644 --- a/src/Makefile.OCaml +++ b/src/Makefile.OCaml @@ -210,7 +210,9 @@ else CAMLC=$(OCAMLC) # -output-complete-exe is available since OCaml 4.10 - ifneq ($(strip $(shell $(OCAMLC) -output-complete-exe 2>&1)),) + # OCaml > 5.2.0 no longer supports detection of compiler options, + # hence the hack of comparing the output to -version. + ifneq ($(strip $(shell $(OCAMLC) -output-complete-exe -version 2>&1)), $(strip $(shell $(OCAMLC) -version))) CAMLLDFLAGS+=-custom else CAMLLDFLAGS+=-output-complete-exe # can safely strip the binary From 8a01568f531e7cf8fffe8090fdd43e70061de794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 4/6] GHA: Migrate to setup-ocaml v3 This is mainly required for building in Windows and for enabling OCaml 5 builds in Windows. Building in Windows has always been a bit tricky. For many years, a separate opam repository with patched compilers (and packages), together with (optional) pre-compiled compiler binaries was used to make these builds possible. That separate repository, however, was created and maintained by a single person who decided to retire it as of August 2021. After a while, a migration path was proposed, which started with a compatibility mechanism in the upstream opam repository and concluded with a recent release of opam 2.2.0, a version which supports Windows natively. setup-ocaml v3 makes use of opam 2.2+ and is thus required to complete the migration of Windows build environments. Use of opam 2.2 and the upstream opam repository requires a few changes in the CI build process: - The depext mechanism is no longer available in Windows. Not sure if this is permanent or not, but since Unison builds were not relying on it heavily anyway (just for GTK), work around this by explicitly installing GTK before the GUI builds. - Many (likely most) opam packages are not compatible with Windows, often in just missing little things in the build process. Luckily, Unison does not rely on packages other than lablgtk and its dependencies, which just require a workaround for pkg-config (see further comments in the build script). - ocaml-env is no longer required nor available. Any invocations can simply be removed from the build script. --- .github/workflows/CI.yml | 51 +++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 024b00b5a..2778a54af 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -20,10 +20,9 @@ jobs: uses: actions/checkout@v4 - name: Use OCaml - uses: ocaml/setup-ocaml@v2 + uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: 4.14.x - opam-depext: false - run: sudo apt-get install hevea lynx texlive-latex-base @@ -53,8 +52,8 @@ jobs: - { os: ubuntu-22.04 , ocaml-version: 5.2.0 } - { os: ubuntu-22.04 , ocaml-version: 4.14.2 } - { os: ubuntu-20.04 , ocaml-version: 4.14.2 } - - { os: windows-2022 , ocaml-version: 4.14.0+mingw64c , publish: true , fnsuffix: -windows-x86_64 } - - { os: windows-2019 , ocaml-version: 4.14.0+mingw32c , publish: true , fnsuffix: -windows-i386 } + - { os: windows-2022 , ocaml-version: "4.14.2,system-mingw" , publish: true , fnsuffix: -windows-x86_64 } + - { os: windows-2019 , ocaml-version: "4.14.2,system-mingw,arch-x86_32" , publish: true , fnsuffix: -windows-i386 } runs-on: ${{ matrix.job.os }} @@ -88,7 +87,7 @@ jobs: outputs OCAML_VARIANT OCAML_COMPILER # architecture/platform vars EXE_suffix='' ; case '${{ matrix.job.os }}' in windows-*) EXE_suffix=".exe" ;; esac - MinGW_ARCH='x86_64' ; case '${{ matrix.job.ocaml-version }}' in *+mingw32*) MinGW_ARCH='i686' ;; *+mingw64*) MinGW_ARCH='x86_64' ;; esac + MinGW_ARCH='x86_64' ; case '${{ matrix.job.ocaml-version }}' in *x86_32*) MinGW_ARCH='i686' ;; *mingw*) MinGW_ARCH='x86_64' ;; esac MSVC_ARCH='' ; case '${{ matrix.job.ocaml-version }}' in *+msvc32*) MSVC_ARCH='x86' ;; *+msvc64*) MSVC_ARCH='x64' ;; esac outputs EXE_suffix MinGW_ARCH MSVC_ARCH case '${{ matrix.job.os }}','${{ matrix.job.ocaml-version }}' in @@ -140,11 +139,10 @@ jobs: if: contains(matrix.job.ocaml-version, '+msvc') - name: Use OCaml ${{ matrix.job.ocaml-version }} - uses: ocaml/setup-ocaml@v2 + uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: "${{ steps.vars.outputs.OCAML_COMPILER }}" opam-pin: false - opam-depext: false # setup-ocaml can prepare the build environment from unison.opam # We're not relying on that capability here, to make sure the builds # also work without using unison.opam @@ -157,9 +155,6 @@ jobs: if: runner.os == 'Windows' shell: cmd run: | - echo %CYGWIN_ROOT_BIN%>> %GITHUB_PATH% - echo %CYGWIN_ROOT_WRAPPERBIN%>> %GITHUB_PATH% - echo "/usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/sys-root/mingw/bin">> %GITHUB_PATH% echo SHELLOPTS=igncr>> %GITHUB_ENV% - shell: bash @@ -208,10 +203,9 @@ jobs: ./src/unison -ui text -selftest testr3 socket://{./localsocket/test.sock}/testr4 -killserver - name: Prepare lablgtk install (Windows) - if: ${{ runner.os == 'Windows' && contains(matrix.job.ocaml-version, '+mingw') }} + if: ${{ runner.os == 'Windows' && contains(matrix.job.ocaml-version, 'mingw') }} shell: bash run: | - opam install opam-depext depext-cygwinports setup-x86_64.exe --quiet-mode --root "${CYGWIN_ROOT}" --site http://cygwin.mirror.constant.com --symlink-type=sys --packages hicolor-icon-theme,adwaita-icon-theme # [2022-11] This terrible (terrible) hack is here to forcibly skip # building the fontconfig cache because it can take 30-45 minutes @@ -233,11 +227,28 @@ jobs: rm tsetup.ini sha512sum > sha512.sum setup-x86_64.exe --quiet-mode --root "${CYGWIN_ROOT}" --symlink-type=sys --local-install --local-package-dir 'D:/a/https%3a%2f%2fcygwin.mirror.constant.com%2f' --mirror-mode --no-verify --packages mingw64-${{ steps.vars.outputs.MinGW_ARCH }}-fontconfig + # [2024-11] Not exactly sure what is happening here, but opam + # packages using pkg-config will fail in Windows without this. + # /usr/bin/pkg-config is a symlink to /usr/bin/pkgconf + # This does not work when opam packages try to execute pkg-config + # directly (that is, D:\cygwin\bin\pkg-config). + # It looks like this issue is being worked around package-by-package + # upstream, but the fix here is universal, so let's keep it for now. + cp /usr/bin/pkgconf /usr/bin/pkg-config.exe + # [2024-11] opam depext has been broken/disabled by migration to + # opam >= 2.2 which can support Windows natively. System dependencies + # in Windows must be installed manually (for now, at least). + setup-x86_64.exe --quiet-mode --root "${CYGWIN_ROOT}" --site http://cygwin.mirror.constant.com --symlink-type=sys --packages mingw64-${{ steps.vars.outputs.MinGW_ARCH }}-cairo,mingw64-${{ steps.vars.outputs.MinGW_ARCH }}-gtk3 + # [2024-11] Setting PKG_CONFIG_LIBDIR like this is required with + # opam >= 2.2 which can support Windows natively. Not sure why, + # but it's likely due to pkg-conf being executed "outside" Cygwin + # environment. + echo PKG_CONFIG_LIBDIR=/usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/sys-root/mingw/lib/pkgconfig >> "$GITHUB_ENV" - name: lablgtk install ## [2020-09] non-working/unavailable for MSVC or musl OCaml variants ; also, non-working for 32bit OCaml variant (see [GH:garrigue/lablgtk#64](https://github.com/garrigue/lablgtk/issues/64)) if: ${{ ! ( contains(matrix.job.ocaml-version, '+msvc') || contains(matrix.job.ocaml-version, '-musl') || contains(matrix.job.ocaml-version, '-32bit') ) }} - run: opam depext --install --verbose --yes lablgtk3 && opam install ocamlfind + run: opam install lablgtk3 ocamlfind - if: ${{ !matrix.job.static }} ## unable to build static gtk/gui shell: bash @@ -298,20 +309,19 @@ jobs: # causing MinGW binutils not to be found (while other binutils # pre-installed in the GHA images may be found instead), which in turn # causes the DLL extracting functions to silently fail. - export PATH="/usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/bin":${PATH} + export PATH="/usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/bin":"/usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/sys-root/mingw/bin":${PATH} ## package artifact(s) PKG_DIR='${{ steps.vars.outputs.PKG_DIR }}' # collect any needed dlls/libraries # dlls - dll_refs() { eval "$(opam env)" ; eval "$(ocaml-env cygwin)" ; objdump -x "$@" | grep -Po "\S+[.]dll$" | xargs -I{} 2>/dev/null which "{}" | sort -u ; } + dll_refs() { eval "$(opam env)" ; objdump -x "$@" | grep -Po "\S+[.]dll$" | xargs -I{} 2>/dev/null which "{}" | sort -u ; } filtered_dll_refs() { list="$(dll_refs "$@" | grep -vF "$(cygpath ${WINDIR})" | perl -lape '$_ = qq/@{[sort @F]}/')" ; echo "$list" ; } recursive_filtered_dll_refs() { list="$(filtered_dll_refs "$@")" ; n=0 ; while [ $n -lt $(echo "$list" | wc -l) ]; do n=$(echo "$list" | wc -l) ; list="$(filtered_dll_refs $list)" ; done ; echo "$list" ; } IFS=$'\n' DLL_list=( "$(recursive_filtered_dll_refs "${PKG_DIR}"/bin/*)" ) for dll in ${DLL_list[@]} ; do cp "${dll}" "${PKG_DIR}"/bin ; done - TARGET_ARCH_ID='x86_64'; case '${{ matrix.job.ocaml-version }}' in *+mingw32*|*+msvc32*) TARGET_ARCH_ID='i686' ;; esac # required gdk support files mkdir "${PKG_DIR}"/lib - cp -r /usr/${TARGET_ARCH_ID}-w64-mingw32/sys-root/mingw/lib/gdk-pixbuf-2.0 "${PKG_DIR}"/lib/ + cp -r /usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/sys-root/mingw/lib/gdk-pixbuf-2.0 "${PKG_DIR}"/lib/ # update loader.cache to point to local relative installation mv "${PKG_DIR}"/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache "${PKG_DIR}"/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache.original cat "${PKG_DIR}"/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache.original | sed -E 's#([^"]*)(lib/gdk-pixbuf-2.0/2.10.0/loaders/[^"]*[.]dll)#../\2#' > "${PKG_DIR}"/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache @@ -321,7 +331,7 @@ jobs: cp -rL /usr/share/icons "${PKG_DIR}"/share # compile glib settings schema mkdir -p "${PKG_DIR}"/share/glib-2.0 - cp -r /usr/${TARGET_ARCH_ID}-w64-mingw32/sys-root/mingw/share/glib-2.0/schemas "${PKG_DIR}"/share/glib-2.0 + cp -r /usr/${{ steps.vars.outputs.MinGW_ARCH }}-w64-mingw32/sys-root/mingw/share/glib-2.0/schemas "${PKG_DIR}"/share/glib-2.0 glib-compile-schemas "${PKG_DIR}"/share/glib-2.0/schemas # add gtk configuration mkdir -p "${PKG_DIR}"/etc/gtk-3.0 @@ -783,7 +793,7 @@ jobs: uses: actions/checkout@v4 - name: Use OCaml ${{ matrix.job.ocaml-compiler }} - uses: ocaml/setup-ocaml@v2 + uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: "${{ matrix.job.ocaml-compiler }}" @@ -810,11 +820,10 @@ jobs: uses: actions/checkout@v4 - name: Use OCaml ${{ matrix.job.ocaml-compiler }} - uses: ocaml/setup-ocaml@v2 + uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: "${{ matrix.job.ocaml-compiler }}" opam-pin: false - opam-depext: false - run: opam exec -- make tui NATIVE=false From 084267ba66f8308f1cf241b4be64c5fb1c6bc8ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 5/6] GHA: Add Windows MSVC builds lablgtk and/or cairo do not build with MSVC, so no GUI builds with MSVC. --- .github/workflows/CI.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2778a54af..5b3bc522b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -54,6 +54,8 @@ jobs: - { os: ubuntu-20.04 , ocaml-version: 4.14.2 } - { os: windows-2022 , ocaml-version: "4.14.2,system-mingw" , publish: true , fnsuffix: -windows-x86_64 } - { os: windows-2019 , ocaml-version: "4.14.2,system-mingw,arch-x86_32" , publish: true , fnsuffix: -windows-i386 } + - { os: windows-2022 , ocaml-version: "4.14.2,system-msvc" } + - { os: windows-2019 , ocaml-version: "4.14.2,system-msvc,arch-x86_32" } runs-on: ${{ matrix.job.os }} @@ -88,8 +90,7 @@ jobs: # architecture/platform vars EXE_suffix='' ; case '${{ matrix.job.os }}' in windows-*) EXE_suffix=".exe" ;; esac MinGW_ARCH='x86_64' ; case '${{ matrix.job.ocaml-version }}' in *x86_32*) MinGW_ARCH='i686' ;; *mingw*) MinGW_ARCH='x86_64' ;; esac - MSVC_ARCH='' ; case '${{ matrix.job.ocaml-version }}' in *+msvc32*) MSVC_ARCH='x86' ;; *+msvc64*) MSVC_ARCH='x64' ;; esac - outputs EXE_suffix MinGW_ARCH MSVC_ARCH + outputs EXE_suffix MinGW_ARCH case '${{ matrix.job.os }}','${{ matrix.job.ocaml-version }}' in macos-*,4*) MACOSX_DEPLOYMENT_TARGET=10.6 ;; macos-*,5*) MACOSX_DEPLOYMENT_TARGET=10.7 ;; macos-14*,*) MACOSX_DEPLOYMENT_TARGET=10.13 ;; @@ -132,12 +133,6 @@ jobs: mkdir -p '${{ steps.vars.outputs.PKG_DIR }}' mkdir -p '${{ steps.vars.outputs.PKG_DIR }}'/bin - - name: Enable/config MSVC environment (if/when needed) - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: "${{ steps.vars.outputs.MSVC_ARCH }}" - if: contains(matrix.job.ocaml-version, '+msvc') - - name: Use OCaml ${{ matrix.job.ocaml-version }} uses: ocaml/setup-ocaml@v3 with: @@ -247,10 +242,10 @@ jobs: - name: lablgtk install ## [2020-09] non-working/unavailable for MSVC or musl OCaml variants ; also, non-working for 32bit OCaml variant (see [GH:garrigue/lablgtk#64](https://github.com/garrigue/lablgtk/issues/64)) - if: ${{ ! ( contains(matrix.job.ocaml-version, '+msvc') || contains(matrix.job.ocaml-version, '-musl') || contains(matrix.job.ocaml-version, '-32bit') ) }} + if: ${{ ! ( contains(matrix.job.ocaml-version, 'msvc') || contains(matrix.job.ocaml-version, '-musl') || contains(matrix.job.ocaml-version, '-32bit') ) }} run: opam install lablgtk3 ocamlfind - - if: ${{ !matrix.job.static }} ## unable to build static gtk/gui + - if: ${{ !matrix.job.static && !contains(matrix.job.ocaml-version, 'msvc') }} ## unable to build static gtk/gui shell: bash run: | opam exec -- make gui @@ -260,7 +255,7 @@ jobs: cp "src/${project_exe_stem}-gui${{ steps.vars.outputs.EXE_suffix }}" "${{ steps.vars.outputs.PKG_DIR }}/bin/" - name: "Build WinOS text+gui hybrid" - if: ${{ runner.os == 'Windows' && !matrix.job.static }} ## WinOS, non-static (unable to build static gtk/gui) + if: ${{ runner.os == 'Windows' && !matrix.job.static && !contains(matrix.job.ocaml-version, 'msvc') }} ## WinOS, non-static (unable to build static gtk/gui) shell: bash run: | # create and stage text+gui hybrid for Windows @@ -300,7 +295,7 @@ jobs: cp CONTRIBUTING.md "${PKG_DIR}"/ cp NEWS.md "${PKG_DIR}"/ - - if: runner.os == 'Windows' + - if: ${{ runner.os == 'Windows' && !contains(matrix.job.ocaml-version, 'msvc') }} name: "Windows: Package gtk" shell: bash run: | From 0ec31df396fd1e669165c4ffd0439c46f07dee24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B5ivo=20Leedj=C3=A4rv?= Date: Wed, 13 Nov 2024 17:09:42 +0100 Subject: [PATCH 6/6] GHA: Upgrade macOS runners macOS 12 GHA runners are deprecated and will be shut down soon. Increase the macOS target version as with older target versions the builds are starting to fail with newer runner images and OCaml compiler versions. --- .github/workflows/CI.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5b3bc522b..2bfa3f3cd 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -48,7 +48,7 @@ jobs: job: - { os: macos-14 , ocaml-version: 5.2.0 } - { os: macos-14 , ocaml-version: 4.14.2 , publish: true , fnsuffix: -macos-arm64 } - - { os: macos-12 , ocaml-version: 4.14.2 , publish: true , fnsuffix: -macos-x86_64 } + - { os: macos-13 , ocaml-version: 4.14.2 , publish: true , fnsuffix: -macos-x86_64 } - { os: ubuntu-22.04 , ocaml-version: 5.2.0 } - { os: ubuntu-22.04 , ocaml-version: 4.14.2 } - { os: ubuntu-20.04 , ocaml-version: 4.14.2 } @@ -91,10 +91,7 @@ jobs: EXE_suffix='' ; case '${{ matrix.job.os }}' in windows-*) EXE_suffix=".exe" ;; esac MinGW_ARCH='x86_64' ; case '${{ matrix.job.ocaml-version }}' in *x86_32*) MinGW_ARCH='i686' ;; *mingw*) MinGW_ARCH='x86_64' ;; esac outputs EXE_suffix MinGW_ARCH - case '${{ matrix.job.os }}','${{ matrix.job.ocaml-version }}' in - macos-*,4*) MACOSX_DEPLOYMENT_TARGET=10.6 ;; macos-*,5*) MACOSX_DEPLOYMENT_TARGET=10.7 ;; - macos-14*,*) MACOSX_DEPLOYMENT_TARGET=10.13 ;; - esac + MACOSX_DEPLOYMENT_TARGET=10.13 case '${{ matrix.job.os }}' in macos-*) echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" >> $GITHUB_ENV ; echo "XCODEFLAGS=-arch $(uname -m) -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" >> $GITHUB_ENV ; @@ -397,9 +394,9 @@ jobs: - { os: windows-2019 , ocaml-version: ocaml-variants.4.14.0+mingw64c , ref: v2.53.5 } - { os: windows-2019 , ocaml-version: ocaml-variants.4.14.0+mingw64c , ref: v2.52.1 , oldmake: true } - { os: windows-2019 , ocaml-version: ocaml-variants.4.08.1+mingw32c , ref: v2.51.5 , oldmake: true } - - { os: macos-12 , ocaml-version: 4.14.x , ref: v2.53.5 } - - { os: macos-12 , ocaml-version: 4.14.x , ref: v2.52.1 , oldmake: true } - - { os: macos-12 , ocaml-version: 4.08.x , ref: v2.51.2 , oldmake: true } + - { os: macos-13 , ocaml-version: 4.14.x , ref: v2.53.5 } + - { os: macos-13 , ocaml-version: 4.14.x , ref: v2.52.1 , oldmake: true } + - { os: macos-13 , ocaml-version: 4.08.x , ref: v2.51.2 , oldmake: true } runs-on: ${{ matrix.job.os }}