072b1ad15a
Apple made a number of changes to Xcode 4. The SDKs were moved, the entire Developer folder was moved, and PowerPC support was removed. The script will now adapt to those changes and should be future-proofed against additional changes in case Apple moves the Developer folder ever again. Also, the minimum OS X version compiler option was removed, so that the framework can be built against the latest SDK but still run in older cats.
147 lines
5.5 KiB
Bash
Executable File
147 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# This script performs all of the steps needed to build a
|
|
# universal binary libcurl.framework for Mac OS X 10.4 or greater.
|
|
#
|
|
# Hendrik Visage:
|
|
# Generalizations added since Snowleopard (10.6) do not include
|
|
# the 10.4u SDK.
|
|
#
|
|
# Also note:
|
|
# 10.5 is the *ONLY* SDK that support PPC64 :( -- 10.6 do not have ppc64 support
|
|
#If you need to have PPC64 support then change below to 1
|
|
PPC64_NEEDED=0
|
|
# Apple does not support building for PPC anymore in Xcode 4 and later.
|
|
# If you're using Xcode 3 or earlier and need PPC support, then change
|
|
# the setting below to 1
|
|
PPC_NEEDED=0
|
|
|
|
# For me the default is to develop for the platform I am on, and if you
|
|
#desire compatibility with older versions then change USE_OLD to 1 :)
|
|
USE_OLD=0
|
|
|
|
VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h`
|
|
FRAMEWORK_VERSION=Versions/Release-$VERSION
|
|
|
|
#I also wanted to "copy over" the system, and thus the reason I added the
|
|
# version to Versions/Release-7.20.1 etc.
|
|
# now a simple rsync -vaP libcurl.framework /Library/Frameworks will install it
|
|
# and setup the right paths to this version, leaving the system version
|
|
# "intact", so you can "fix" it later with the links to Versions/A/...
|
|
|
|
DEVELOPER_PATH=`xcode-select --print-path`
|
|
# Around Xcode 4.3, SDKs were moved from the Developer folder into the
|
|
# MacOSX.platform folder
|
|
if test -d "$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"; then
|
|
SDK_PATH="$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"
|
|
else
|
|
SDK_PATH="$DEVELOPER_PATH/SDKs";
|
|
fi
|
|
OLD_SDK=`ls $SDK_PATH|head -1`
|
|
NEW_SDK=`ls -r $SDK_PATH|head -1`
|
|
|
|
if test "0"$USE_OLD -gt 0
|
|
then
|
|
SDK32=$OLD_SDK
|
|
else
|
|
SDK32=$NEW_SDK
|
|
fi
|
|
|
|
MACVER=`echo $SDK32|sed -e s/[a-zA-Z]//g -e s/.\$//`
|
|
|
|
SDK32_DIR=$SDK_PATH/$SDK32
|
|
MINVER32='-mmacosx-version-min='$MACVER
|
|
if test $PPC_NEEDED -gt 0; then
|
|
ARCHES32='-arch i386 -arch ppc'
|
|
else
|
|
ARCHES32='-arch i386'
|
|
fi
|
|
|
|
if test $PPC64_NEEDED -gt 0
|
|
then
|
|
SDK64=10.5
|
|
ARCHES64='-arch x86_64 -arch ppc64'
|
|
SDK64=`ls $SDK_PATH|grep 10.5|head -1`
|
|
else
|
|
ARCHES64='-arch x86_64'
|
|
#We "know" that 10.4 and earlier do not support 64bit
|
|
OLD_SDK64=`ls $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
|
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
|
if test $USE_OLD -gt 0
|
|
then
|
|
SDK64=$OLD_SDK64
|
|
else
|
|
SDK64=$NEW_SDK64
|
|
fi
|
|
fi
|
|
|
|
SDK64_DIR=$SDK_PATH/$SDK64
|
|
MACVER64=`echo $SDK64|sed -e s/[a-zA-Z]//g -e s/.\$//`
|
|
|
|
MINVER64='-mmacosx-version-min='$MACVER64
|
|
|
|
if test ! -z $SDK32; then
|
|
echo "----Configuring libcurl for 32 bit universal framework..."
|
|
make clean
|
|
./configure --disable-dependency-tracking --disable-static --with-gssapi --with-darwinssl \
|
|
CFLAGS="-Os -isysroot $SDK32_DIR $ARCHES32" \
|
|
LDFLAGS="-Wl,-syslibroot,$SDK32_DIR $ARCHES32 -Wl,-headerpad_max_install_names" \
|
|
CC=$CC
|
|
|
|
echo "----Building 32 bit libcurl..."
|
|
make -j `sysctl -n hw.logicalcpu_max`
|
|
|
|
echo "----Creating 32 bit framework..."
|
|
rm -r libcurl.framework
|
|
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources
|
|
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
|
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
|
/usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist
|
|
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
|
|
cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
|
|
pushd libcurl.framework
|
|
ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl
|
|
ln -fs ${FRAMEWORK_VERSION}/Resources Resources
|
|
ln -fs ${FRAMEWORK_VERSION}/Headers Headers
|
|
cd Versions
|
|
ln -fs ${FRAMEWORK_VERSION} Current
|
|
|
|
echo Testing for SDK64
|
|
if test -d $SDK64_DIR; then
|
|
echo entering...
|
|
popd
|
|
make clean
|
|
echo "----Configuring libcurl for 64 bit universal framework..."
|
|
./configure --disable-dependency-tracking --disable-static --with-gssapi --with-darwinssl \
|
|
CFLAGS="-Os -isysroot $SDK64_DIR $ARCHES64" \
|
|
LDFLAGS="-Wl,-syslibroot,$SDK64_DIR $ARCHES64 -Wl,-headerpad_max_install_names" \
|
|
CC=$CC
|
|
|
|
echo "----Building 64 bit libcurl..."
|
|
make -j `sysctl -n hw.logicalcpu_max`
|
|
|
|
echo "----Appending 64 bit framework to 32 bit framework..."
|
|
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
|
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
|
cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32
|
|
pwd
|
|
lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
|
rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
|
cp libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild32.h
|
|
cp include/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild64.h
|
|
cat >libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h <<EOF
|
|
#ifdef __LP64__
|
|
#include "curl/curlbuild64.h"
|
|
#else
|
|
#include "curl/curlbuild32.h"
|
|
#endif
|
|
EOF
|
|
fi
|
|
|
|
pwd
|
|
lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
|
echo "libcurl.framework is built and can now be included in other projects."
|
|
echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks."
|
|
else
|
|
echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4/5/6 SDK installed."
|
|
fi
|