[webkit-dev] BUILDING_ON_TIGER/LEOPARD macros

Mark Rowe mrowe at apple.com
Sat Mar 14 19:31:50 PDT 2009

On 2009-03-14, at 10:49, Kevin Ollivier wrote:

> Hi all,
> I'm seeing some strangeness with the OS X availability macros.  
> First, it looks like BUILDING_ON_TIGER and BUILDING_ON_LEOPARD are  
> defined in JavaScriptCorePrefix.h, which AFAICT is only used by the  
> Apple XCode projects, yet the use of these macros are often inside  
> PLATFORM(DARWIN) rather than PLATFORM(MAC) checks, meaning other  
> ports building on Mac will need them too. Second, even after I tried  
> moving them to Platform.h, the MAX_ALLOWED <= MAC_OS_X_VERSION_10_5  
> check doesn't work for me, because apparently MAX_ALLOWED is defined  
> to the actual latest release on my machine (1056) rather than  
> (1050), and so the check doesn't pass and so it sets things up as if  
> I'm running something post-Leopard, which I only wish I were  
> doing... ;-) Checking MAX_ALLOWED <= 1056 does get things going  
> right again.

The use of the BUILDING_ON macros inside PLATFORM(DARWIN) blocks may  
all be recent additions.  I introduced one such use earlier this week,  
and I believe Darin may have done so as well.  I'm not sure whether  
there were any instances of this prior to those two changes.  Moving  
the macro definitions in to wtf/Platform.h so that they can be used by  
other ports building on Mac OS X seems reasonable to me, but we may  
need to tweak them slightly to work with ports that aren't aware of  
the SDK and deployment target mechanisms that Mac OS X's compiler  
toolchain provides.

For some background: the way these macros are intended to function is  
that MAC_OS_X_VERSION_MIN_REQUIRED indicates the minimum version of  
the operating system that the binary will run on, while  
MAC_OS_X_VERSION_MAX_ALLOWED indicates the maximum version of the  
operating system that you intend to take advantage of.  Symbols  
introduced in OS versions between MAC_OS_X_VERSION_MIN_REQUIRED and  
MAC_OS_X_VERSION_MAX_ALLOWED will be weak-linked, and symbols  
introduced after MAC_OS_X_VERSION_MAX_ALLOWED will be unavailable for  

When building via Xcode these values are typically derived from two  
configuration settings:  the SDK that your project is targeting  
(corresponding to GCCs -isysroot argument), and the deployment target  
(-mmacosx-version-min).  If you build against the MacOSX10.5 SDK with  
a deployment target of 10.4 you will see that  
MAC_OS_X_VERSION_MIN_REQUIRED is set to 1040 and  

If you don't build against an SDK or specify a deployment target then  
will default to your current Mac OS X version (eg, 1056), and the  
compiler happily let you use functionality that would prevent your  
application from running on previous versions of Mac OS X.

The Mac build of WebKit explicitly sets a deployment target equal to  
the major version of the Mac OS X version that you are on.  This  
results in both MAC_OS_X_VERSION_MIN_REQUIRED and  
MAC_OS_X_VERSION_MAX_ALLOWED being set to the major component of the  
Mac OS X version (eg, 1050).

Since the wxWidgets build of WebKit doesn't build against an SDK or  
explicitly set a deployment target, it is seeing  
MAC_OS_X_VERSION_MAX_ALLOWED set to 1056 where the Mac build sees  
1050.  This is why the checks that set BUILDING_ON_LEOPARD aren't  
working for you.

I think we could rephrase the checks to accommodate building without  
an SDK and deployment target.  Something like the following should do  
the trick:


I hope this clears things up.  Let me know if you have any questions!

- Mark

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2413 bytes
Desc: not available
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090314/0f17aa30/attachment.bin>

More information about the webkit-dev mailing list