xref: /curl/.github/workflows/macos.yml (revision 7fbd0666)
1# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
2#
3# SPDX-License-Identifier: curl
4
5name: macOS
6
7'on':
8  push:
9    branches:
10      - master
11      - '*/ci'
12    paths-ignore:
13      - '**/*.md'
14      - '.circleci/**'
15      - 'appveyor.*'
16      - 'packages/**'
17      - 'plan9/**'
18      - 'projects/**'
19      - 'winbuild/**'
20  pull_request:
21    branches:
22      - master
23    paths-ignore:
24      - '**/*.md'
25      - '.circleci/**'
26      - 'appveyor.*'
27      - 'packages/**'
28      - 'plan9/**'
29      - 'projects/**'
30      - 'winbuild/**'
31
32concurrency:
33  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
34  cancel-in-progress: true
35
36permissions: {}
37
38# Deprecated Apple APIs and the macos-version-min value required to avoid
39# deprecation warnings with llvm/clang:
40#
41# - 10.7  Lion (2011)          - GSS
42# - 10.8  Mountain Lion (2012) - CFURLCreateDataAndPropertiesFromResource (used by curl Secure Transport code)
43# - 10.9  Maverick (2013)      - LDAP
44# - 10.14 Mojave (2018)        - Secure Transport
45#
46# For Secure Transport, curl implements features that require a target
47# newer than the 10.8 required by `CFURLCreateDataAndPropertiesFromResource`.
48# In this case `-Wno-deprecated-declarations` still comes handy to pacify
49# deprecation warnings, though the real solution would be to avoid calling
50# that function.
51
52env:
53  LDFLAGS: -w  # suppress 'object file was built for newer macOS version than being linked' warnings
54  MAKEFLAGS: -j 4
55
56jobs:
57  macos:
58    name: "${{ matrix.build.generate && 'CM' || 'AM' }} ${{ matrix.compiler }} ${{ matrix.build.name }}"
59    runs-on: 'macos-latest'
60    timeout-minutes: 45
61    env:
62      DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer"
63      CC: ${{ matrix.compiler }}
64      CFLAGS: ''
65    strategy:
66      fail-fast: false
67      matrix:
68        compiler: [clang, llvm@15, gcc-12]
69        build:
70          # automake
71          - name: '!ssl !debug brotli zstd'
72            compiler: clang
73            install: brotli zstd
74            configure: --without-ssl --with-brotli --with-zstd
75            macos-version-min: '10.9'
76          - name: '!ssl !debug'
77            compiler: gcc-12
78            configure: --without-ssl
79            macos-version-min: '10.9'
80          - name: '!ssl'
81            compiler: clang
82            configure: --enable-debug --without-ssl
83            macos-version-min: '10.9'
84          - name: '!ssl libssh2 AppleIDN'
85            compiler: clang
86            configure: --enable-debug --with-libssh2=$(brew --prefix libssh2) --without-ssl --with-apple-idn
87            macos-version-min: '10.9'
88          - name: 'OpenSSL libssh c-ares'
89            compiler: clang
90            install: libssh
91            configure: --enable-debug --with-libssh --with-openssl=$(brew --prefix openssl) --enable-ares
92            macos-version-min: '10.9'
93          - name: 'OpenSSL libssh'
94            compiler: llvm@15
95            install: libssh
96            configure: --enable-debug --with-libssh --with-openssl=$(brew --prefix openssl)
97            macos-version-min: '10.9'
98          - name: '!ssl c-ares'
99            compiler: clang
100            configure: --enable-debug --enable-ares --without-ssl
101            macos-version-min: '10.9'
102          - name: '!ssl HTTP-only'
103            compiler: clang
104            configure: >-
105              --enable-debug
106              --disable-alt-svc --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap
107              --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp
108              --disable-shared --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets
109              --without-brotli --without-gssapi --without-libidn2 --without-libpsl --without-librtmp --without-libssh2
110              --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib --without-zstd
111
112            macos-version-min: '10.15'  # Catalina (2019)
113          - name: 'SecureTransport libssh2'
114            compiler: clang
115            configure: --enable-debug --with-secure-transport --with-libssh2=$(brew --prefix libssh2)
116            macos-version-min: '10.8'
117          - name: 'SecureTransport libssh2 10.12'
118            compiler: clang
119            configure: --enable-debug --with-secure-transport --with-libssh2=$(brew --prefix libssh2)
120            macos-version-min: '10.12'  # for monotonic timers
121            cflags: '-Wno-deprecated-declarations'
122          - name: 'SecureTransport libssh2'
123            compiler: gcc-12
124            configure: --enable-debug --with-secure-transport --with-libssh2=$(brew --prefix libssh2)
125            macos-version-min: '10.8'
126          - name: 'LibreSSL +examples'
127            compiler: clang
128            install: libressl
129            configure: --enable-debug --with-openssl=$(brew --prefix libressl)
130            macos-version-min: '10.9'
131          - name: 'OpenSSL'
132            compiler: clang
133            configure: --enable-debug --with-openssl=$(brew --prefix openssl)
134            macos-version-min: '10.9'
135          - name: 'OpenSSL event-based'
136            compiler: clang
137            configure: --enable-debug --with-openssl=$(brew --prefix openssl)
138            macos-version-min: '10.9'
139            tflags: --test-event
140          - name: 'OpenSSL libssh2 !ldap 10.15'
141            compiler: clang
142            configure: --enable-debug --disable-ldap --with-openssl=$(brew --prefix openssl)
143            macos-version-min: '10.15'
144          # cmake
145          - name: 'OpenSSL gsasl AppleIDN'
146            install: gsasl
147            generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DCURL_USE_GSASL=ON -DUSE_APPLE_IDN=ON
148            macos-version-min: '10.9'
149          - name: 'OpenSSL +static libssh +examples'
150            install: libssh
151            generate: -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DBUILD_STATIC_LIBS=ON -DCURL_USE_LIBSSH2=OFF -DCURL_USE_LIBSSH=ON
152            macos-version-min: '10.9'
153          - name: 'SecureTransport debug'
154            generate: -DCURL_USE_SECTRANSP=ON -DENABLE_DEBUG=ON
155            macos-version-min: '10.8'
156          - name: 'LibreSSL !ldap heimdal c-ares +examples'
157            install: libressl heimdal
158            generate: -DOPENSSL_ROOT_DIR=$(brew --prefix libressl) -DENABLE_ARES=ON -DCURL_USE_GSSAPI=ON -DGSS_ROOT_DIR=$(brew --prefix heimdal) -DCURL_DISABLE_LDAP=ON
159            macos-version-min: '10.15'
160          - name: 'wolfSSL !ldap brotli zstd'
161            install: brotli wolfssl zstd
162            generate: -DCURL_USE_WOLFSSL=ON -DCURL_BROTLI=ON -DCURL_ZSTD=ON -DCURL_DISABLE_LDAP=ON -DUSE_HTTPSRR=ON -DUSE_ECH=ON
163            macos-version-min: '10.15'
164          - name: 'mbedTLS !ldap brotli zstd'
165            install: brotli mbedtls zstd
166            generate: -DCURL_USE_MBEDTLS=ON -DCURL_BROTLI=ON -DCURL_ZSTD=ON -DCURL_DISABLE_LDAP=ON
167            macos-version-min: '10.15'
168          - name: 'GnuTLS !ldap krb5'
169            install: gnutls nettle krb5
170            generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_USE_GSSAPI=ON -DGSS_ROOT_DIR=$(brew --prefix krb5) -DCURL_DISABLE_LDAP=ON
171            macos-version-min: '10.15'
172          - name: 'OpenSSL torture !FTP'
173            generate: -DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DENABLE_THREADED_RESOLVER=OFF -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DCURL_BROTLI=ON -DCURL_ZSTD=ON
174            tflags: -t --shallow=25 !FTP
175            macos-version-min: '10.9'
176            torture: true
177          - name: 'OpenSSL torture FTP'
178            generate: -DENABLE_DEBUG=ON -DBUILD_SHARED_LIBS=OFF -DENABLE_THREADED_RESOLVER=OFF -DOPENSSL_ROOT_DIR=$(brew --prefix openssl) -DCURL_BROTLI=ON -DCURL_ZSTD=ON
179            tflags: -t --shallow=20 FTP
180            macos-version-min: '10.9'
181            torture: true
182        exclude:
183          - { compiler: llvm@15, build: { macos-version-min: '10.15' } }
184          - { compiler: llvm@15, build: { torture: true } }
185          - { compiler: gcc-12, build: { torture: true } }
186          # opt out jobs from combinations that have the compiler set manually
187          - { compiler: llvm@15, build: { compiler: 'clang' } }
188          - { compiler: llvm@15, build: { compiler: 'gcc-12' } }
189          - { compiler: gcc-12, build: { compiler: 'clang' } }
190          - { compiler: gcc-12, build: { compiler: 'llvm@15' } }
191          - { compiler: clang, build: { compiler: 'gcc-12' } }
192          - { compiler: clang, build: { compiler: 'llvm@15' } }
193
194    steps:
195      - name: 'brew install'
196        # Run this command with retries because of spurious failures seen
197        # while running the tests, for example
198        # https://github.com/curl/curl/runs/4095721123?check_suite_focus=true
199        run: |
200          echo ${{ matrix.build.generate && 'ninja' || 'automake libtool' }} \
201            pkgconf libpsl libssh2 nghttp2 stunnel ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
202          while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
203
204      - name: 'brew unlink openssl'
205        run: |
206          if test -d $(brew --prefix)/include/openssl; then
207            brew unlink openssl
208          fi
209
210      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
211
212      - name: 'toolchain versions'
213        run: |
214          [[ '${{ matrix.compiler }}' = 'llvm'* ]] && CC="$(brew --prefix ${{ matrix.compiler }})/bin/clang"
215          [[ '${{ matrix.compiler }}' = 'gcc'* ]] && "${CC}" --print-sysroot
216          which "${CC}"; "${CC}" --version || true
217          xcodebuild -version || true
218          xcrun --sdk macosx --show-sdk-path 2>/dev/null || true
219          xcrun --sdk macosx --show-sdk-version || true
220          ls -l /Library/Developer/CommandLineTools/SDKs || true
221          echo '::group::macros predefined'; "${CC}" -dM -E - < /dev/null | sort || true; echo '::endgroup::'
222          echo '::group::brew packages installed'; ls -l "$(brew --prefix)/opt"; echo '::endgroup::'
223
224      - name: 'autoreconf'
225        if: ${{ matrix.build.configure }}
226        run: autoreconf -fi
227
228      - name: 'configure'
229        run: |
230          if [[ '${{ matrix.compiler }}' = 'gcc'* ]]; then
231            sysroot="$("${CC}" --print-sysroot)"  # Must match the SDK gcc was built for
232          else
233            sysroot="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null)"
234          fi
235
236          if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then
237            CC="$(brew --prefix ${{ matrix.compiler }})/bin/clang"
238            CC+=" --sysroot=${sysroot}"
239            CC+=" --target=$(uname -m)-apple-darwin"
240          fi
241
242          if [ -n '${{ matrix.build.configure }}' ]; then
243            export CFLAGS
244            if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then
245              options+=" --target=$(uname -m)-apple-darwin"
246            fi
247            if [ '${{ matrix.compiler }}' != 'clang' ]; then
248              options+=" --with-sysroot=${sysroot}"
249              CFLAGS+=" --sysroot=${sysroot}"
250            fi
251            CFLAGS+=' ${{ matrix.build.cflags }}'
252            CFLAGS+=' -mmacosx-version-min=${{ matrix.build.macos-version-min }}'
253            mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
254              --disable-dependency-tracking \
255              --with-libpsl=$(brew --prefix libpsl) \
256              ${{ matrix.build.configure }} ${options}
257          else
258            cmake -B bld -G Ninja -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
259              -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.build.macos-version-min }} \
260              "-DCMAKE_OSX_SYSROOT=${sysroot}" \
261              "-DCMAKE_C_COMPILER_TARGET=$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
262              ${{ matrix.build.generate }}
263          fi
264
265      - name: 'configure log'
266        if: ${{ !cancelled() }}
267        run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
268
269      - name: 'curl_config.h'
270        run: |
271          echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
272          grep -F '#define' bld/lib/curl_config.h | sort || true
273
274      - name: 'build-cert'
275        if: contains(matrix.build.generate, '-DCURL_USE_SECTRANSP=ON') || contains(matrix.build.configure, '--with-secure-transport')
276        run: |
277          if [ -n '${{ matrix.build.configure }}' ]; then
278            make -C bld/tests/certs clean-certs
279            make -C bld/tests/certs build-certs -j1
280          else
281            cmake --build bld --target clean-certs
282            cmake --build bld --target build-certs --parallel 1
283          fi
284
285      - name: 'build'
286        run: |
287          if [ -n '${{ matrix.build.configure }}' ]; then
288            make -C bld V=1
289          else
290            cmake --build bld --verbose
291          fi
292
293      - name: 'curl version'
294        run: bld/src/curl --disable --version
295
296      - name: 'build tests'
297        run: |
298          if [ -n '${{ matrix.build.configure }}' ]; then
299            make -C bld V=1 -C tests
300          else
301            cmake --build bld --target testdeps
302          fi
303
304      - name: 'install test prereqs'
305        run: |
306          python3 -m venv $HOME/venv
307          source $HOME/venv/bin/activate
308          python3 -m pip install -r tests/requirements.txt
309
310      - name: 'run tests'
311        timeout-minutes: ${{ matrix.build.torture && 20 || 10 }}
312        run: |
313          export TFLAGS='-j20 ${{ matrix.build.tflags }}'
314          if [ -z '${{ matrix.build.torture }}' ]; then
315            TFLAGS+=' ~2037 ~2041'  # flaky
316            if [[ '${{ matrix.compiler }}' = 'gcc'* ]]; then
317              TFLAGS+=' ~RTSP'  # 567 568 569 570 571 572 577 689 3100
318              TFLAGS+=' ~1156 ~1539'  # HTTP Content-Range, Content-Length
319              if [[ -n '${{ matrix.build.configure }}' || \
320                    '${{ matrix.build.generate }}' = *'-DCURL_USE_SECTRANSP=ON'* ]]; then
321                TFLAGS+=' ~2100'  # 2100:'HTTP GET using DoH' https://github.com/curl/curl/actions/runs/9942146678/job/27462937524#step:15:5059
322              fi
323              if [[ '${{ matrix.build.configure }}' = *'--with-secure-transport'* || \
324                    '${{ matrix.build.generate }}' = *'-DCURL_USE_SECTRANSP=ON'* ]]; then
325                TFLAGS+=' ~HTTP/2'  # 2400 2401 2402 2403 2404 2406, Secure Transport + nghttp2
326              else
327                TFLAGS+=' ~2402 ~2404'  # non-Secure Transport + nghttp2
328              fi
329            fi
330            if [[ '${{ matrix.build.configure }}' = *'--with-secure-transport'* || \
331                  '${{ matrix.build.generate }}' = *'-DCURL_USE_SECTRANSP=ON'* ]]; then
332              TFLAGS+=' ~313'  # Secure Transport does not support crl file
333              TFLAGS+=' ~1631 ~1632'  # Secure Transport is not able to shutdown ftp over https gracefully yet
334            fi
335          fi
336          source $HOME/venv/bin/activate
337          rm -f $HOME/.curlrc
338          if [ -n '${{ matrix.build.configure }}' ]; then
339            make -C bld V=1 ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
340          else
341            cmake --build bld --target ${{ matrix.build.torture && 'test-torture' || 'test-ci' }}
342          fi
343
344      - name: 'build examples'
345        if: ${{ contains(matrix.build.name, '+examples') }}
346        run: |
347          if [ -n '${{ matrix.build.configure }}' ]; then
348            make -C bld examples V=1
349          else
350            cmake --build bld --target curl-examples --verbose
351          fi
352
353  combinations:  # Test buildability with host OS, Xcode / SDK, compiler, target-OS, Secure Transport/not, built tool, combinations
354    if: true  # Set to `true` to enable this test matrix. It runs quickly.
355    name: "${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} ${{ matrix.image }} ${{ matrix.xcode }} ${{ matrix.config }}"
356    runs-on: ${{ matrix.image }}
357    timeout-minutes: 10
358    env:
359      DEVELOPER_DIR: "/Applications/Xcode${{ matrix.xcode && format('_{0}', matrix.xcode) || '' }}.app/Contents/Developer"
360      CC: ${{ matrix.compiler }}
361    strategy:
362      fail-fast: false
363      matrix:
364        config: [SecureTransport]  # also: OpenSSL
365        compiler: [gcc-12, gcc-13, gcc-14, llvm@15, llvm@18, clang]
366        # Xcode support matrix as of 2024-07, with default macOS SDK versions and OS names, years:
367        # * = default Xcode on the runner.
368        # macos-13: 14.1, 14.2, 14.3.1, 15.0.1, 15.1,*15.2
369        # macos-14:                     15.0.1, 15.1, 15.2, 15.3,*15.4
370        # macos-15:                                                    *16.0, 16.1
371        # macOSSDK: 13.0, 13.1, 13.3,   14.0,   14.2, 14.2, 14.4, 14.5, 15.0, 15.1
372        #           Ventura (2022)      Sonoma (2023)                   Sequoia (2024)
373        # https://github.com/actions/runner-images/tree/main/images/macos
374        # https://en.wikipedia.org/wiki/MacOS_version_history
375        image: [macos-13, macos-14, macos-15]
376        # Can skip these to reduce jobs:
377        #   15.1 has the same default macOS SDK as 15.2 and identical test result.
378        #   14.1, 15.4 not revealing new fallouts.
379        #xcode: ['14.1', '14.2', '14.3.1', '15.0.1', '15.1', '15.2', '15.3', '15.4', '16.0', '16.1']  # all Xcode
380        #xcode: ['14.1', '14.2', '14.3.1', '15.0.1'        , '15.2', '15.3', '15.4', '16.0', '16.1']  # all SDK
381        #xcode: [        '14.2', '14.3.1', '15.0.1'        , '15.2', '15.3'        , '16.0'        ]  # coverage
382        xcode: ['']  # default Xcodes
383        macos-version-min: ['10.8']
384        build: [autotools, cmake]
385        exclude:
386          # Combinations uncovered by runner images:
387          - { image: macos-13, xcode: '15.3'   }
388          - { image: macos-13, xcode: '15.4'   }
389          - { image: macos-13, xcode: '16.0'   }
390          - { image: macos-13, xcode: '16.1'   }
391          - { image: macos-14, xcode: '14.1'   }
392          - { image: macos-14, xcode: '14.2'   }
393          - { image: macos-14, xcode: '14.3.1' }
394          - { image: macos-14, xcode: '16.0'   }
395          - { image: macos-14, xcode: '16.1'   }
396          - { image: macos-15, xcode: '14.1'   }
397          - { image: macos-15, xcode: '14.2'   }
398          - { image: macos-15, xcode: '14.3.1' }
399          - { image: macos-15, xcode: '15.0.1' }
400          - { image: macos-15, xcode: '15.1'   }
401          - { image: macos-15, xcode: '15.2'   }
402          - { image: macos-15, xcode: '15.3'   }
403          - { image: macos-15, xcode: '15.4'   }
404          - { image: macos-13, compiler: 'llvm@18' }
405          - { image: macos-14, compiler: 'llvm@18' }
406          - { image: macos-15, compiler: 'llvm@15' }
407          # Reduce build combinations, by dropping less interesting ones
408          - { compiler: gcc-12, config: SecureTransport }
409          - { compiler: gcc-13, build: cmake }
410          - { compiler: gcc-14, build: autotools }
411    steps:
412      - name: 'install autotools'
413        if: ${{ matrix.build == 'autotools' }}
414        run: |
415          echo automake libtool | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
416          while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
417
418      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
419
420      - name: 'toolchain versions'
421        run: |
422          [[ '${{ matrix.compiler }}' = 'llvm'* ]] && CC="$(brew --prefix ${{ matrix.compiler }})/bin/clang"
423          [[ '${{ matrix.compiler }}' = 'gcc'* ]] && "${CC}" --print-sysroot
424          which "${CC}"; "${CC}" --version || true
425          xcodebuild -version || true
426          xcrun --sdk macosx --show-sdk-path 2>/dev/null || true
427          xcrun --sdk macosx --show-sdk-version || true
428          ls -l /Library/Developer/CommandLineTools/SDKs || true
429          echo '::group::macros predefined'; "${CC}" -dM -E - < /dev/null | sort || true; echo '::endgroup::'
430          echo '::group::brew packages preinstalled'; ls -l "$(brew --prefix)/opt"; echo '::endgroup::'
431
432      - name: 'autoreconf'
433        if: ${{ matrix.build == 'autotools' }}
434        run: autoreconf -fi
435
436      - name: 'configure / ${{ matrix.build }}'
437        run: |
438          if [[ '${{ matrix.compiler }}' = 'gcc'* ]]; then
439            sysroot="$("${CC}" --print-sysroot)"  # Must match the SDK gcc was built for
440          else
441            sysroot="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null)"
442          fi
443
444          if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then
445            CC="$(brew --prefix ${{ matrix.compiler }})/bin/clang"
446            CC+=" --sysroot=${sysroot}"
447            CC+=" --target=$(uname -m)-apple-darwin"
448          fi
449
450          if [ '${{ matrix.build }}' = 'autotools' ]; then
451            export CFLAGS
452            if [[ '${{ matrix.compiler }}' = 'llvm'* ]]; then
453              options+=" --target=$(uname -m)-apple-darwin"
454            fi
455            if [ '${{ matrix.compiler }}' != 'clang' ]; then
456              options+=" --with-sysroot=${sysroot}"
457              CFLAGS+=" --sysroot=${sysroot}"
458            fi
459            [ '${{ matrix.config }}' = 'OpenSSL' ]         && options+=" --with-openssl=$(brew --prefix openssl)"
460            [ '${{ matrix.config }}' = 'SecureTransport' ] && options+=' --with-secure-transport'
461            CFLAGS+=' -mmacosx-version-min=${{ matrix.macos-version-min }}'
462            # would pick up nghttp2, libidn2, but libssh2 is disabled by default
463            mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
464              --disable-dependency-tracking \
465              --disable-docs --disable-manual \
466              --without-nghttp2 --without-libidn2 \
467              --without-libpsl \
468              ${options}
469          else
470            [ '${{ matrix.config }}' = 'OpenSSL' ]         && options+=' -DCURL_USE_OPENSSL=ON'
471            [ '${{ matrix.config }}' = 'SecureTransport' ] && options+=' -DCURL_USE_SECTRANSP=ON'
472            # would pick up nghttp2, libidn2, and libssh2
473            cmake -B bld -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
474              -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.macos-version-min }} \
475              "-DCMAKE_OSX_SYSROOT=${sysroot}" \
476              "-DCMAKE_C_COMPILER_TARGET=$(uname -m | sed 's/arm64/aarch64/')-apple-darwin$(uname -r)" \
477              "-DCMAKE_IGNORE_PREFIX_PATH=$(brew --prefix)" \
478              -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF \
479              -DUSE_NGHTTP2=OFF -DUSE_LIBIDN2=OFF \
480              -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF \
481              ${options}
482          fi
483
484      - name: 'configure log'
485        if: ${{ !cancelled() }}
486        run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
487
488      - name: 'curl_config.h'
489        run: |
490          echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
491          grep -F '#define' bld/lib/curl_config.h | sort || true
492
493      - name: 'build / ${{ matrix.build }}'
494        run: make -C bld V=1 VERBOSE=1
495
496      - name: 'curl version'
497        run: bld/src/curl --disable --version
498