fontconfig fails to compile on Mac OS X 10.4 because it uses the OSAtomicCompareAndSwapPtrBarrier() function in a macro definition in fcatomic.h; this function was first introduced in 10.5. This is the only function that fontconfig uses which isn't in Tiger, and otherwise it compiles and functions perfectly. Tiger does have 32-bit and 64-bit specific equivalents to that function. The patch below defines the macro to use those specific functions on Tiger based on the CPU arch for which fontconfig is being used, and otherwise uses OSAtomicCompareAndSwapPtrBarrier() on 10.5 and newer. I've tested on both 10.4 and 10.7 to ensure that it works. Misty De Meo >From 7657bd4d690f218ed9f3a43045fc474a935cbe27 Mon Sep 17 00:00:00 2001 From: Misty De Meo <mistydemeo@xxxxxxxxx> Date: Sun, 14 Apr 2013 22:10:21 -0500 Subject: [PATCH] Fix fc_atomic_ptr_cmpexch on Mac OS X 10.4 The OSAtomicCompareAndSwapPtrBarrier() function was introduced in Mac OS X 10.5, but size-specific versions are available in 10.4. This commit defines the fc_atomic_ptr_cmpexch macro using OSAtomicCompareAndSwapPtrBarrier() on 10.5 or newer, and otherwise defines it as the 32-bit or 64-bit equivalent based on the CPU architecture for which fontconfig is being built. --- src/fcatomic.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/fcatomic.h b/src/fcatomic.h index a764311..7d2fc7d 100644 --- a/src/fcatomic.h +++ b/src/fcatomic.h @@ -69,13 +69,23 @@ typedef LONG fc_atomic_int_t; #elif !defined(FC_NO_MT) && defined(__APPLE__) +#include <AvailabilityMacros.h> #include <libkern/OSAtomic.h> typedef int fc_atomic_int_t; #define fc_atomic_int_add(AI, V) (OSAtomicAdd32Barrier ((V), &(AI)) - (V)) #define fc_atomic_ptr_get(P) (OSMemoryBarrier (), (void *) *(P)) + +/* OSAtomicCompareAndSwapPtrBarrier() was introduced in 10.5, but 32-bit + * and 64-bit specific functions are available in 10.4. */ +#ifdef MAC_OS_X_VERSION_10_5 #define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P)) +#elif defined(__LP64__) +#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap64Barrier ((void *) (O), (void *) (N), (void **) (P)) +#else +#define fc_atomic_ptr_cmpexch(P,O,N) OSAtomicCompareAndSwap32Barrier ((void *) (O), (void *) (N), (void **) (P)) +#endif #elif !defined(FC_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES) -- 1.8.2 _______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/fontconfig