[prev in list] [next in list] [prev in thread] [next in thread]
List: netbsd-tech-pkg
Subject: Re: macOS 11 find-libs.mk POC
From: Chris Hanson <cmhanson () eschatologist ! net>
Date: 2020-08-26 20:54:48
Message-ID: 814CEEE3-E940-485C-89DE-AD1ED2DDBF7B () eschatologist ! net
[Download RAW message or body]
On Aug 26, 2020, at 3:45 AM, Sijmen J. Mulder <ik@sjmulder.nl> wrote:
>
> I agree this is the right approach in principle - if you want to see if
> a library can be linked, try to link it. However it's my understanding
> that this functionality needs to be available before we have selected a
> compiler.
You should generally use the compiler and linker provided by Xcode to target Apple \
platforms, in order to get the best compatibility.
> 2. Look for .tdb in the SDK instead of installed .dylibs in /usr/lib.
This is the route I would take if you absolutely need to know whether a library is \
present.
To find the macOS SDK provided by the selected Xcode, you can use xcrun and pass its \
identifier:
$ xcrun --toolchain default --sdk macosx --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
This should always produce an absolute path, though users can rename Xcode and put it \
in directories with spaces, so be careful of quoting.
The `--toolchain default` portion is important to use with xcrun in case the person \
running this has additional toolchains installed (e.g. because they hack on the Swift \
compiler); of course that should be overridable since someone who is working on the \
compilers may want to build pkgsrc content using their in-progress work for testing \
purposes.
The part that I mentioned about "the selected Xcode" is also important as many \
developers on Apple platforms will have more than one installed; xcrun will use the \
developer's preferred tools as specified by xcode-select, unless DEVELOPER_DIR is \
overridden in the environment to point to a different Xcode.
An example of where this may be used is if a developer keeps a release version of \
Xcode as their "selected" Xcode but wants to try building with a beta Xcode; just \
overriding DEVELOPER_DIR in the environment to point into the beta instead is enough \
to cause invocations of xcodebuild, the compiler, the linker, etc. to run from the \
beta Xcode and use SDKs from it.
Finally, anything building binaries for Apple platforms that are intended to be \
shared needs to take into account two things: Deployment target and code signing.
"Deployment target" is what we call the minimum operating system version you want the \
code to run on. It's passed to the compiler via an argument like \
`-mmacosx-version-min=10.13` and to the linker via an argument like \
`-macos_version_min 10.13` and results in any APIs introduced after 10.13 being \
weak-linked. Also, if they're not used within an availability check, they'll generate \
warnings at compilation time. I *think* the tools also use MACOSX_DEPLOYMENT_TARGET \
if it's present in the environment for propagating, so you may not need to use a \
command line argument for it.
Code signing is how the OS verifies the provenance of code executing on the system \
and is critical for preventing malware distribution. Code can be ad hoc signed to run \
locally (say because it was built locally) but should be signed by a real certificate \
if it's being distributed to others, so if it winds up containing malware it can be \
prevented from running very quickly. Ensuring binaries built by pkgsrc for macOS can \
be signed with a real certificate is probably a sizable project though since I don't \
think it's the sort of thing that can be propagated via an environment variable.
-- Chris
-- not speaking in any official caacity
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic