https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80204
Bug ID: 80204
Summary: macosx-version-min wrong for macOS Sierra 10.12.3
Product: gcc
Version: 7.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: simon at pushface dot org
Target Milestone: ---
Host: x86_64-apple-darwin
In gcc/config/darwin-driver.c, darwin_find_version_from_kernel() assumes
that the minor version in the Darwin kernel version (16.4.0, => minor
version 4) is equal to the bugfix component of the macOS version, so that
the compiler receives -mmacosx-version-min=10.12.4 and the linker receives
-macosx_version_min 10.12.4.
Unfortunately, Apple don’t apply this algorithm; the macOS version is
actually 10.12.3.
Getting this wrong means that it’s impossible to run an executable from
within a bundle: Sierra complains "You have macOS 10.12.3. The application
requires macOS 10.12.4 or later".
A workround would perhaps be to link the executable with
-Wl,-macosx_version_min,`sw_vers -productVersion` (I assume that it’s only
the linker phase that matters?)
There are several suggestions at e.g. http://stackoverflow.com/q/11072804/40851
which are perhaps unsatisfactory because of using objective-C. Perhaps we
could set up an environment variable during configure, using sw_vers as
above?
As an alternative, I see that Apple’s gcc (Apple LLVM version 8.0.0
(clang-800.0.42.1)) specifies - only at link time -
-macosx_version_min 10.12.0
Maybe we don’t need to include a specific bugfix component at all? That
would make life a lot easier!