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 a build error on macOS when set MACOSX_DEPLOYMENT_TARGET #10549

Closed
wants to merge 1 commit into from

Conversation

ichizok
Copy link
Contributor

@ichizok ichizok commented Jun 9, 2022

Setting MACOSX_DEPLOYMENT_TARGET environment variable to former than 10.12 causes a build error that clockid_t is redefined.

NOTE: Compiler sets MAC_OS_X_VERSION_MIN_REQUIRED from MACOSX_DEPLOYMENT_TARGET.

"clockid_t" is redefined when set "MACOSX_DEPLOYMENT_TARGET" to former than 10.12
@codecov
Copy link

codecov bot commented Jun 9, 2022

Codecov Report

Merging #10549 (dae4f6f) into master (ebb01bd) will decrease coverage by 0.00%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master   #10549      +/-   ##
==========================================
- Coverage   81.67%   81.67%   -0.01%     
==========================================
  Files         158      158              
  Lines      185328   185328              
  Branches    41912    41912              
==========================================
- Hits       151375   151374       -1     
- Misses      21499    21504       +5     
+ Partials    12454    12450       -4     
Flag Coverage Δ
huge-clang-none 82.56% <ø> (-0.01%) ⬇️
linux 82.56% <ø> (-0.01%) ⬇️
mingw-x64-HUGE 0.00% <ø> (ø)
mingw-x64-HUGE-gui 78.10% <ø> (+<0.01%) ⬆️
windows 76.88% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
src/channel.c 83.87% <0.00%> (-0.14%) ⬇️
src/netbeans.c 72.74% <0.00%> (-0.08%) ⬇️
src/term.c 73.30% <0.00%> (-0.06%) ⬇️
src/terminal.c 77.29% <0.00%> (-0.03%) ⬇️
src/gui_w32.c 34.87% <0.00%> (+0.03%) ⬆️
src/libvterm/src/state.c 38.45% <0.00%> (+0.06%) ⬆️
src/gui_gtk_x11.c 52.16% <0.00%> (+0.09%) ⬆️
src/if_xcmdsrv.c 76.79% <0.00%> (+0.17%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update ebb01bd...dae4f6f. Read the comment docs.

@brammool brammool closed this in f5465ff Jun 9, 2022
@ichizok ichizok deleted the fix/os_mac branch June 9, 2022 16:35
ychin added a commit to ychin/macvim that referenced this pull request 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 (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
ychin added a commit to ychin/macvim that referenced this pull request 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 (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
ychin added a commit to ychin/macvim that referenced this pull request 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 (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
ychin added a commit to ychin/macvim that referenced this pull request 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 (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
ychin added a commit to ychin/macvim that referenced this pull request 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 (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 added a commit to ychin/macvim that referenced this pull request 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 (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 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
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant