On 21.01.2021 02:07, Tom Lane wrote:
I now believe what is actually happening with the short command is
that it's iterating through the available SDKs (according to some not
very clear search path) and picking the first one it finds that
matches the host system version.  That matches the ktrace evidence
that shows it reading the SDKSettings.plist file in each SDK
directory.

Yes, you are right. After some more digging...

It searches the DEVELOPER_DIR first and then /Library/Developer/CommandLineTools, which is hardcoded.

My DEVELOPER_DIR is
% xcode-select -p
/Applications/Xcode.app/Contents/Developer

(For more detail try "otool -tV /usr/lib/libxcselect.dylib -p _xcselect_get_developer_dir_path".)

It reads ProductVersion from /System/Library/CoreServices/SystemVersion.plist

% plutil -p /System/Library/CoreServices/SystemVersion.plist | grep ProductVersion
  "ProductVersion" => "10.15.7"

Strips anything after the second dot, and prepends "macosx" to it, which gives "macosx10.15".

Then it scans through SDK dirs looking up CanonicalName from SDKSettings.plist until it finds a match with "macosx10.15".


The overall callstack:

% sudo dtrace -n 'syscall::getdirentries64:entry { ustack() }' -c 'xcrun --show-sdk-path'
dtrace: description 'syscall::getdirentries64:entry ' matched 1 probe
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20183 has exited
CPU     ID                    FUNCTION:NAME
  0    846            getdirentries64:entry
              libsystem_kernel.dylib`__getdirentries64+0xa
              libsystem_c.dylib`readdir$INODE64+0x23
              libsystem_c.dylib`scandir$INODE64+0x6c
              libxcrun.dylib`cltools_lookup_sdk_by_key+0x5f
              libxcrun.dylib`cltools_lookup_boot_system_sdk+0xda
              libxcrun.dylib`xcinfocache_resolve_sdkroot+0xc0
              libxcrun.dylib`xcrun_main2+0x57a
              libxcrun.dylib`xcrun_main+0x9
              libxcselect.dylib`xcselect_invoke_xcrun_via_library+0xc8
              libxcselect.dylib`xcselect_invoke_xcrun+0x25a
              xcrun`DYLD-STUB$$getprogname
              libdyld.dylib`start+0x1
              xcrun`0x2

  0    846            getdirentries64:entry
              libsystem_kernel.dylib`__getdirentries64+0xa
              libsystem_c.dylib`readdir$INODE64+0x23
              libsystem_c.dylib`scandir$INODE64+0x6c
              libxcrun.dylib`cltools_lookup_sdk_by_key+0x5f
              libxcrun.dylib`cltools_lookup_boot_system_sdk+0xf3
              libxcrun.dylib`xcinfocache_resolve_sdkroot+0xc0
              libxcrun.dylib`xcrun_main2+0x57a
              libxcrun.dylib`xcrun_main+0x9
              libxcselect.dylib`xcselect_invoke_xcrun_via_library+0xc8
              libxcselect.dylib`xcselect_invoke_xcrun+0x25a
              xcrun`DYLD-STUB$$getprogname
              libdyld.dylib`start+0x1
              xcrun`0x2


The SDK search path:

% sudo dtrace -n 'pid$target:::entry /probefunc=="cltools_lookup_sdk_by_key"/ { trace(copyinstr(arg0)); trace(copyinstr(arg1)) }' -c 'xcrun --show-sdk-path'
dtrace: description 'pid$target:::entry ' matched 17293 probes
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20191 has exited
CPU     ID                    FUNCTION:NAME
8 398290 cltools_lookup_sdk_by_key:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer macosx10.15 9 398290 cltools_lookup_sdk_by_key:entry /Library/Developer/CommandLineTools macosx10.15


The properties read from SDKSettings.plist:

% sudo dtrace -n 'pid$target:::entry /probefunc=="_cltools_lookup_property_in_path"/ { trace(copyinstr(arg0)); trace(copyinstr(arg1)); trace(copyinstr(arg2)) }' -c 'xcrun --show-sdk-path'
dtrace: description 'pid$target:::entry ' matched 17293 probes
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20195 has exited
CPU     ID                    FUNCTION:NAME
8 398288 _cltools_lookup_property_in_path:entry / System/Library/CoreServices/SystemVersion.plist ProductVersion 8 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk SDKSettings.plist IsBaseSDK 8 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk SDKSettings.plist CanonicalName 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk SDKSettings.plist CanonicalNameForBuildSettings 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk SDKSettings.plist IsBaseSDK 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk SDKSettings.plist CanonicalName 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk SDKSettings.plist CanonicalNameForBuildSettings 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk SDKSettings.plist PLATFORM_NAME 4 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk SDKSettings.plist IsBaseSDK 2 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk SDKSettings.plist CanonicalName 2 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk SDKSettings.plist CanonicalNameForBuildSettings 2 398288 _cltools_lookup_property_in_path:entry /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk SDKSettings.plist PLATFORM_NAME 2 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SDKSettings.plist IsBaseSDK 2 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SDKSettings.plist CanonicalName 2 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SDKSettings.plist CanonicalNameForBuildSettings 0 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SDKSettings.plist PLATFORM_NAME 0 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk SDKSettings.plist IsBaseSDK 0 398288 _cltools_lookup_property_in_path:entry /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk SDKSettings.plist CanonicalName


BTW, on my machine /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk is skipped because it points to 11.0:

% ls -l /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
lrwxr-xr-x 1 root wheel 14 Nov 17 02:21 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -> MacOSX11.0.sdk

For more detail try
% otool -tV /Applications/Xcode.app/Contents/Developer/usr/lib/libxcrun.dylib -p _cltools_lookup_boot_system_sdk


Reply via email to