#
453d032b |
| 15-Aug-2024 |
Viktor Szakats |
tidy-up: misc build, tests, `lib/macos.c` - mkhelp.pl: drop unused assigment. - Makefile.mk: update a comment. - lib/macos.c: delete redundant block. - fix two typos. Cl
tidy-up: misc build, tests, `lib/macos.c` - mkhelp.pl: drop unused assigment. - Makefile.mk: update a comment. - lib/macos.c: delete redundant block. - fix two typos. Closes #14558
show more ...
|
#
e91fcbac |
| 09-Jul-2024 |
Viktor Szakats |
macos: undo `availability` macro enabled by Homebrew gcc Homebrew gcc builds starting with 12.4.0, 13.3.0 and 14.1.0 enabled the `availability` attribute. This broke builds beca
macos: undo `availability` macro enabled by Homebrew gcc Homebrew gcc builds starting with 12.4.0, 13.3.0 and 14.1.0 enabled the `availability` attribute. This broke builds because the way the Apple SDK uses attributes (when available) are incompatible with how gcc accepts them. Causing these errors: ``` error: attributes should be specified before the declarator in a function definition error: expected ',' or '}' before ``` Upstream commits implementing the `availability` macro: gcc-12: https://github.com/iains/gcc-12-branch/commit/fd5530b7cb0012bf4faeddd45e13054a1dfa6783 gcc-13: https://github.com/iains/gcc-13-branch/commit/cb7e4eca68cfc4763474e2eb0935a844458842a8 gcc-14: https://github.com/iains/gcc-14-branch/commit/ff62a108865a6403f5017380d7018250c1d3306f The project above is a Darwin gcc compatibility pack, that is applied to Homebrew gcc builds. This patch works by redefining the `availability` macro to an invalid value, making `__has_attribute(availability)` checks fail, stopping Apple SDK from inserting the incompatible attributes. It also replaces the previous, local workaround for `lib/macos.c`. Example with gcc 12.4.0 with macOS SDK 14.0 (Xcode 15.0.1): ``` In file included from <path-to-sdk>/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:54, from <path-to-sdk>/MacOSX14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework/Headers/SCDynamicStoreCopySpecific.h:30, from /Users/runner/work/curl/curl/lib/macos.c:33, from /Users/runner/work/curl/curl/build/lib/CMakeFiles/libcurl_shared.dir/Unity/unity_0_c.c:244: <path-to-sdk>/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h:126:1: error: attributes should be specified before the declarator in a function definition 126 | CF_INLINE CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOptionFlags)(1UL << (8 + i)));} | ^~~~~~~~~ ``` Ref: https://github.com/curl/curl/actions/runs/9787982387/job/27025351601?pr=14096#step:7:18 The gcc vs. llvm/clang incompatibility possibly tracked here upstream: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796 More info: https://github.com/llvm/llvm-project/issues/81767 https://github.com/gcc-mirror/gcc/commit/8433baadec88e5f31fa141b6d78094e91256079d https://discourse.llvm.org/t/changing-attribute-ast-printing-location-for-gcc-compatibility/73215 https://reviews.llvm.org/D159362 Follow-up to db135f8d7207b20d531e7e2100a49f3e16bdcfab #14119 Ref: https://github.com/curl/curl/pull/14091#issuecomment-2222703468 Fixes #13700 Cherry-picked from #14097 Closes #14155
show more ...
|
#
db135f8d |
| 04-Jul-2024 |
Viktor Szakats |
macos: add workaround for gcc, non-c-ares, IPv6, compile error Apple macOS SDK 13.0 and later are increasingly incompatible with gcc, which started causing CI errors with the 20240701.9
macos: add workaround for gcc, non-c-ares, IPv6, compile error Apple macOS SDK 13.0 and later are increasingly incompatible with gcc, which started causing CI errors with the 20240701.9 revision of the `macos-latest` (= `macos-14-arm64`) runner image. This error is happening inside an Apple SDK header. We use the header for calling a function in a resolver-related hack, in non-c-ares, IPv6 builds. You can avoid the problem by using c-ares or disabling IPv6 (or using clang, llvm, or a compatible gcc + SDK combination). This patch fixes affected builds by declaring the ncessary framework function manually, and not including the problematic header. This workaround is ugly, doesn't cover all combinations, and fragile. Other options are to disable this resolver-related hack for GCC, or to replace it with a solution that doesn't rely on Apple SDK. If you are aware of a stable fix or workaround, let us know. gcc 12.4.0 + macOS SDK 14.0 (Xcode 15.0.1) error example: ``` In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:54, from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework/Headers/SCDynamicStoreCopySpecific.h:30, from /Users/runner/work/curl/curl/lib/macos.c:33, from /Users/runner/work/curl/curl/build/lib/CMakeFiles/libcurl_shared.dir/Unity/unity_0_c.c:244: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h:126:1: error: attributes should be specified before the declarator in a function definition 126 | CF_INLINE CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOptionFlags)(1UL << (8 + i)));} | ^~~~~~~~~ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h:127:1: error: attributes should be specified before the declarator in a function definition 127 | CF_INLINE CFOptionFlags CFUserNotificationSecureTextField(CFIndex i) API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOptionFlags)(1UL << (16 + i)));} | ^~~~~~~~~ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h:128:1: error: attributes should be specified before the declarator in a function definition 128 | CF_INLINE CFOptionFlags CFUserNotificationPopUpSelection(CFIndex n) API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOptionFlags)(n << 24));} | ^~~~~~~~~ ``` Ref: https://github.com/curl/curl/actions/runs/9787982387/job/27025351601?pr=14096#step:7:18 The exact conditions are fuzzy. Oddly enough gcc 12.3.0 and the SDK same as above are _compatible_: https://github.com/curl/curl/actions/runs/9791701214/job/27036037162 Also notice that similar errors can also happen in SecureTransport builds, due to the SDK headers required. Ref: https://github.com/curl/curl/pull/14097#issuecomment-2208639046 Ref: https://github.com/curl/curl/pull/14091#issuecomment-2205870854 Cherry-picked from #14097 Closes #14119
show more ...
|
#
8b7cbe9d |
| 25-Jul-2023 |
Ryan Schmidt |
macOS: fix target detection more Now SCDynamicStoreCopyProxies is called (and the required frameworks are linked in) on all versions of macOS and only on macOS. Fixes crash due to un
macOS: fix target detection more Now SCDynamicStoreCopyProxies is called (and the required frameworks are linked in) on all versions of macOS and only on macOS. Fixes crash due to undefined symbol when built with the macOS 10.11 SDK or earlier. CURL_OSX_CALL_COPYPROXIES is renamed to CURL_MACOS_CALL_COPYPROXIES and is now only defined when SCDynamicStoreCopyProxies will actually be called. Previously, it was defined when ENABLE_IPV6 was not defined but SCDynamicStoreCopyProxies is not called in that case. TARGET_OS_OSX is only defined in the macOS 10.12 SDK and later and only when dynamic targets are enabled. TARGET_OS_MAC is always defined but means any Mac OS or derivative including macOS, iOS, tvOS, and watchOS. TARGET_OS_IPHONE means any Darwin OS other than macOS. Follow-up to c73b2f82 Fixes #11502 Closes #11516
show more ...
|
#
c7308592 |
| 05-Jun-2023 |
Stan Hu |
hostip.c: Move macOS-specific calls into global init call https://github.com/curl/curl/pull/7121 introduced a macOS system call to `SCDynamicStoreCopyProxies`, which is invoked every tim
hostip.c: Move macOS-specific calls into global init call https://github.com/curl/curl/pull/7121 introduced a macOS system call to `SCDynamicStoreCopyProxies`, which is invoked every time an IP address needs to be resolved. However, this system call is not thread-safe, and macOS will kill the process if the system call is run first in a fork. To make it possible for the parent process to call this once and prevent the crash, only invoke this system call in the global initialization routine. In addition, this change is beneficial because it: 1. Avoids extra macOS system calls for every IP lookup. 2. Consolidates macOS-specific initialization in a separate file. Fixes #11252 Closes #11254
show more ...
|