Both versions of the load command are still in use.

The cutoff for which load command gets used appears to be based on the 
deployment target that has been set. The clang driver (and ld64) then uses the 
right one, depending on that.

A deployment target of 10.14+ will set LC_BUILD_VERSION.
A deployment target of 10.13 or less will set LC_VERSION_MIN_MACOSX.

I would imagine that the App store might use the same criteria for examining 
your submission, and enforce those rules.

So (inference) if you are building something using MacPorts on a newer system 
to have a deployment target that is older (for this issue, 10.13 or less) you 
need to set that deployment target for everything you would use.

MacPorts does allow you to do that, setting an older deployment target, in 
macports.conf. And then yes, you would have to build everything from source to 
have that set correctly. Probably best to have a separate macports installation 
in a different prefix for that.

Please ask further if you have any other questions about this.

Best,

Ken





Evidence:

% cat libweakfunc.c
#include <stdio.h>

void
weakfunc(void)
{
    puts("I am a weak function. ");
}


11.2:
% clang -mmacosx-version-min=11.2 -dynamiclib libweakfunc.c -o libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION    
 cmdsize 24
    uuid 9B13A902-DABE-3376-B6F0-CF3049B0A66C
Load command 9
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform 1
    minos 11.2
      sdk 10.15.6
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX


10.14:
% clang -mmacosx-version-min=10.14 -dynamiclib libweakfunc.c -o 
libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION                  
 
 cmdsize 24
    uuid 46E2E497-E5CC-3254-8B2F-56A355EE8BBD
Load command 8
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform 1
    minos 10.14
      sdk 10.15.6
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX  


10.13:
% clang -mmacosx-version-min=10.13 -dynamiclib libweakfunc.c -o 
libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION                  
 
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX             
 
 cmdsize 24
    uuid 070BAEA2-4139-31F8-8A56-762F0E6122E2
Load command 8
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.15.6
Load command 9


10.6:
% clang -mmacosx-version-min=10.6 -dynamiclib libweakfunc.c -o libweakfunc.dylib
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION                  
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX             
 cmdsize 24
    uuid 9FB0F27C-55C3-3E76-87B4-FBDABDDFA38E
Load command 8
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.6
      sdk 10.15.6
Load command 9


and testing just MACOSX_DEPLOYMENT_TARGET without setting the command line 
parameter:

% export MACOSX_DEPLOYMENT_TARGET=10.13
% clang -dynamiclib libweakfunc.c -o libweakfunc.dylib 
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_BUILD_VERSION     
% otool -l libweakfunc.dylib | grep -A 4 -B 3 LC_VERSION_MIN_MACOSX
 cmdsize 24
    uuid 070BAEA2-4139-31F8-8A56-762F0E6122E2
Load command 8
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.15.6
Load command 9




Reply via email to