buildlib: supply -fPIC or -fpic if supported
[blocksruntime.git] / buildlib-osx
blob18c86658d1b88c844ac2b7f0acb2c87ab7487611
1 #!/bin/sh
3 # Attempt to build a universal library for OSX
5 set -e
7 done=
8 dp="$(xcode-select -print-path 2>/dev/null)"
9 : "${dp:=/Developer}"
11 gc40="$(command -v gcc-4.0 2>/dev/null)"
12 gc42="$(command -v gcc-4.2 2>/dev/null)"
13 mp42="$(command -v gcc-apple-4.2 2>/dev/null)"
14 lv42="$(command -v llvm-gcc-4.2 2>/dev/null)"
15 gca0=
16 gca2=
17 if [ -n "$gc42" ]; then
18 gca2="$gc42"
19 elif [ -n "$mp42" ]; then
20 gca2="$mp42"
21 elif [ -n "$lv42" ]; then
22 gca2="$lv42"
24 if [ -n "$gc40" ]; then
25 gca0="$gc40"
26 elif [ -n "$gca2" ]; then
27 gca0="$gca2"
30 if [ -d "$dp/SDKs" ]; then
31 # First see if 10.4u is available and gcc-4.0
32 if [ -z "$done" -a -r "$dp/SDKs/MacOSX10.4u.sdk/SDKSettings.plist" -a -n "$gc40" ]; then
33 done=1
34 NEWCC="$gc40"
35 NEWCFLAGS="-arch x86_64 -arch ppc64 -arch i386 -arch ppc"
36 NEWCFLAGS="$NEWCFLAGS -isysroot$dp/SDKs/MacOSX10.4u.sdk"
38 # Or see if 10.5 is available, any compiler will do
39 if [ -z "$done" -a -r "$dp/SDKs/MacOSX10.5.sdk/SDKSettings.plist" -a -n "$gca0" ]; then
40 done=1
41 NEWCC="$gca0"
42 NEWCFLAGS="-arch x86_64 -arch ppc64 -arch i386 -arch ppc"
43 NEWCFLAGS="$NEWCFLAGS -isysroot$dp/SDKs/MacOSX10.5.sdk"
45 # Or see if 10.6 is available, any 4.2 compiler will do
46 if [ -z "$done" -a -r "$dp/SDKs/MacOSX10.6.sdk/SDKSettings.plist" -a -n "$gca2" ]; then
47 done=1
48 NEWCC="$gca2"
49 NEWCFLAGS="-arch x86_64 -arch i386 -arch ppc"
50 NEWCFLAGS="$NEWCFLAGS -isysroot$dp/SDKs/MacOSX10.6.sdk"
52 # Or see if 10.7 is available, any 4.2 compiler will do
53 if [ -z "$done" -a -r "$dp/SDKs/MacOSX10.7.sdk/SDKSettings.plist" -a -n "$gca2" ]; then
54 done=1
55 NEWCC="$gca2"
56 NEWCFLAGS="-arch x86_64 -arch i386"
57 NEWCFLAGS="$NEWCFLAGS -isysroot$dp/SDKs/MacOSX10.7.sdk"
61 if [ -z "$done" ]; then
62 # Select by OS version as we have no SDKs
63 dv="$(sysctl -n kern.osrelease 2>/dev/null | cut -d. -f1 2>/dev/null)"
64 if [ -z "$done" -a "$dv" = "8" ]; then
65 # Tiger 10.4.x
66 done=1
67 NEWCC="$gca0"
68 # Tiger's system libraries are not guaranteed to be universal
70 if [ -z "$done" -a "$dv" = "9" ]; then
71 # Leopard 10.5.x
72 done=1
73 NEWCC="$gca0"
74 NEWCFLAGS="-arch x86_64 -arch ppc64 -arch i386 -arch ppc"
76 if [ -z "$done" -a "$dv" = "10" ]; then
77 # Snow Leopard 10.6.x
78 done=1
79 NEWCC="$gca2"
80 NEWCFLAGS="-arch x86_64 -arch i386 -arch ppc"
82 if [ -z "$done" -a "$dv" = "11" ]; then
83 # Lion 10.7.x
84 done=1
85 NEWCC="$gca2"
86 NEWCFLAGS="-arch x86_64 -arch i386"
89 if [ -n "$NEWCC" -a -z "$CC" ]; then
90 CC="$NEWCC" && export CC
92 if [ -n "$done" ]; then
93 if [ -z "$MACOSX_DEPLOYMENT_TARGET" ]; then
94 MACOSX_DEPLOYMENT_TARGET=10.4 && export MACOSX_DEPLOYMENT_TARGET
97 if [ -n "$NEWCFLAGS" ]; then
98 if [ -z "$CFLAGS" ]; then
99 CFLAGS="-O2 $NEWCFLAGS" && export CFLAGS
100 else
101 CFLAGS="$CFLAGS $NEWCFLAGS" && export CFLAGS
104 build="$(dirname "$0")/buildlib"
105 if [ -n "$MACOSX_DEPLOYMENT_TARGET" ]; then
106 echo "MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET"
108 exec "$build" "$@"