Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Xcode 8 build breaks #1372

Merged
merged 1 commit into from
Feb 26, 2023
Merged

Conversation

ychin
Copy link
Member

@ychin ychin commented Feb 26, 2023

This fixes build breaks on older Xcode versions (e.g. Xcode 8, on macOS 10.11). Fixes a couple issues:

  • Vim's os_mac.h has an improperly specified backwards compatibility ifdef (Fix a build error on macOS when set MACOSX_DEPLOYMENT_TARGET vim/vim#10549). It's just checking for existence of MAC_OS_X_VERSION_10_12 instead of actually comparing it against MAC_OS_X_VERSION_MAX_ALLOWED. The previous code that it was fixing was comparing it against MAC_OS_X_VERSION_MIN_REQUIRED which was also wrong as the "min" just means the deploy target, whereas the "max" indicates the SDK you are compiling against.
  • Unfortunately, the @available syntax for checking runtime version was only introduced in Xcode 9. To make the code compilable in earlier Xcode versions, introduce a new macro AVAILABLE_MAC_OS which will use @available if compiling on Xcode 9+ (which is the vast majority of cases), and use NSAppKitVersion checks on Xcode 8 or below. We would like to still use @available checks if possible because the compiler can optimize that out if it detects that you are deploying to a higher target than what you are checking.
  • Some typedefs in MacVim are also introduced in 10.13+. Add those typedefs to MacVim.h

Fix #1342

@ychin ychin mentioned this pull request Feb 26, 2023
7 tasks
This fixes build breaks on older Xcode versions (e.g. Xcode 8, on macOS
10.11). Fixes a couple issues:

- Vim's os_mac.h has an improperly specified backwards compatibility
  ifdef (vim/vim#10549). It's just checking for
  existence of `MAC_OS_X_VERSION_10_12` instead of actually comparing it
  against `MAC_OS_X_VERSION_MAX_ALLOWED`. The previous code that it was
  fixing was comparing it against `MAC_OS_X_VERSION_MIN_REQUIRED` which
  was also wrong as the "min" just means the deploy target, whereas the
  "max" indicates the SDK you are compiling against.
- Unfortunately, the `@available` syntax for checking runtime version
  was only introduced in Xcode 9. To make the code compilable in earlier
  Xcode versions, introduce a new macro `AVAILABLE_MAC_OS` which will
  use `@available` if compiling on Xcode 9+ (which is the vast majority
  of cases), and use NSAppKitVersion checks on Xcode 8 or below. We
  would like to still use `@available` checks if possible because the
  compiler can optimize that out if it detects that you are deploying to
  a higher target than what you are checking.
- Some typedefs in MacVim are also introduced in 10.13+. Add those
  typedefs to MacVim.h

Fix macvim-dev#1342
@ychin ychin force-pushed the fix-xcode-8-build-breakage branch from 65297e4 to 70f49b9 Compare February 26, 2023 10:43
@ychin ychin added the Legacy macOS Issues related to legacy OS support (macOS 10.9 - 10.12) label Feb 26, 2023
@ychin ychin merged commit decde54 into macvim-dev:master Feb 26, 2023
@ychin ychin deleted the fix-xcode-8-build-breakage branch February 26, 2023 21:14
ychin added a commit to ychin/vim that referenced this pull request Feb 26, 2023
PR vim#10549 attempted to fix a build break on older Xcode versions (Xcode
8 / macOS 10.11 SDK), but it did it in a way that's not very reliable.
In particular, it did it just by checking whether
`MAC_OS_X_VERSION_10_12` exists, but that macro is just the version
number for 10.12 SDK. In MacVim, we manually define it to allow us to do
version check and would fail the build because of that.

Instead, the proper fix is to check `MAC_OS_X_VERSION_MAX_ALLOWED`
against `MAC_OS_X_VERSION_10_12`. The "max allowed" value is the version
of the SDK we are building with and it will be properly defined. The
previous bug that the PR was trying to fix was that it was using
`MAC_OS_X_VERSION_MIN_REQUIRED` instead, which is the "deployment
target" of the build and wasn't the right value to use.

See macvim-dev/macvim#1372
ychin added a commit to ychin/vim that referenced this pull request Feb 26, 2023
PR vim#10549 attempted to fix a build break on older Xcode versions (Xcode
8 / macOS 10.11 SDK), but it did it in a way that's not very reliable.
In particular, it did it just by checking whether
`MAC_OS_X_VERSION_10_12` exists, but that macro is just the version
number for 10.12 SDK. In MacVim, we manually define it to allow us to do
version checks. As a result, MacVim builds would fail on macOS 10.11
SDKs (or below).

Instead, the proper fix is to check `MAC_OS_X_VERSION_MAX_ALLOWED`
against `MAC_OS_X_VERSION_10_12`. The "max allowed" value is the version
of the SDK we are building with and it will be properly defined. The
previous bug that the PR was trying to fix was that it was using
`MAC_OS_X_VERSION_MIN_REQUIRED` instead, which is the "deployment
target" of the build and wasn't the right value to use.

See macvim-dev/macvim#1372
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Legacy macOS Issues related to legacy OS support (macOS 10.9 - 10.12)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

MacVim won't build on El Capitan
1 participant