Skip to content

Instantly share code, notes, and snippets.

@JanX2
Forked from faithfracture/boost.sh
Last active February 7, 2021 12:01
Show Gist options
  • Save JanX2/80721c30192e64ed124e to your computer and use it in GitHub Desktop.
Save JanX2/80721c30192e64ed124e to your computer and use it in GitHub Desktop.
Boost build script for iOS (armv7, armv7s, arm64), iOS Simulator (i386, x86_64), and OSX (i386, x86_64)
-- 2016-01-24 UPDATE --
Quoted as many strings as possible that might contain non-word characters.
Added customizable OSX_ARCHS. No CLI for this currently, though. So you have to edit the script, if you want to only build for x86_64.
-- 2016-01-23 UPDATE --
Added support for MIN_OSX_VERSION.
Improved typography.
Updated preset boost version to 1.60.0.
-- 2015-09-22 UPDATE --
Added command line args!
You can now specify if you want to build just for iOS or OS X, along with some other things.
Run boost.sh -h for more info.
Let me know if there are any other parameters that you think would be useful.
-- 2015-09-18 UPDATE --
Fixed script for iOS Simulator (Thanks @XMitja!)
• There is now a MIN_IOS_VERSION variable. Make sure you set this appropriately.
cleanup function now actually removes all build artifacts
Fixed updateBoost function to move the existing user-config.jam instead
of copying it. Copying it resulted in writing duplicate entries each time
the script was run.
NOTE: Currently does not build with bitcode. I will figure that one out when I get time.
I'm at the cusp of a product release though, so it might be a little while.
Just disable bitcode for your project for the time being.
-- 2015-08-26 UPDATE --
The resulting libraries from this script are currently not working for
the iOS simulator under Xcode 7 as of beta 6. I have an issue opened
with Apple about this. It does still work for physical devices though.
As soon as I figure out what the problem is, I will post an update.
-- 2014-12-29 UPDATE --
Updated to work with Boost 1.56, 1.57, and 1.58
Automatically choose the currently selected SDK for both iOS and OSX
Fixed a couple places where the wrong $XXX_DEV_CMD was being used
-- END UPDATE --
This is a modified version of Pete Goodliffe's original boost.sh build script,
(and a couple of other sources whom I can't remember)
The original version didn't work with the 64-bit iPhone Simulator,
and didn't build at all for OSX.
This works for Boost 1.56 and 1.57. If you need the version that builds 1.55 and older, use this revision:
https://gist.github.com/faithfracture/c629ae4c7168216a9856/61be257e1c0839c85743777d0687becad9913bf7
I also ran into an issue where utf8_codecvt_facet.o existed in both the
program_options and filesystem libraries. When linking against the
framework, there was a missing vtable entry for it. Adding the step
in unpackArchive() that prepends the library name to the .o files
prevents this error.
I hope this keeps at least one other person from ripping their hair out.
Let me know if you find errors or have optimizations.
I will be updating this as often as necessary.
#===============================================================================
# Filename: boost.sh
# Author: Pete Goodliffe
# Copyright: (c) Copyright 2009 Pete Goodliffe
# Licence: Please feel free to use this, with attribution
# Modified version
#===============================================================================
#
# Builds a Boost framework for iOS, iOS Simulator, and OSX.
# Creates a set of universal libraries that can be used on an iOS and in the
# iOS simulator. Then creates a pseudo-framework to make using boost in Xcode
# less painful.
#
# To configure the script, define:
# BOOST_VERSION: Which version of Boost to build (e.g. 1.58.0)
# BOOST_VERSION2: Same as BOOST_VERSION, but with _ instead of . (e.g. 1_58_0)
# BOOST_LIBS: Which Boost libraries to build
# IOS_SDK_VERSION: iOS SDK version (e.g. 9.0)
# MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 8.0)
# OSX_SDK_VERSION: OSX SDK version (e.g. 10.11)
# MIN_OSX_VERSION: Minimum OS X Target Version (e.g. 10.10)
#
# If a boost tarball (a file named “boost_$BOOST_VERSION2.tar.bz2”) does not
# exist in the current directory, this script will attempt to download the
# version specified by BOOST_VERSION2. You may also manually place a matching
# tarball in the current directory and the script will use that.
#
#===============================================================================
BOOST_LIBS="atomic chrono date_time exception filesystem program_options random signals system test thread"
BUILD_IOS=
BUILD_OSX=
CLEAN=
NO_CLEAN=
NO_FRAMEWORK=
BOOST_VERSION=1.60.0
BOOST_VERSION2=1_60_0
IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphoneos | \
egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`
MIN_IOS_VERSION=8.0
OSX_SDK_VERSION=`xcodebuild -showsdks | grep macosx | \
egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`
MIN_OSX_VERSION=10.10
OSX_ARCHS="x86_64"
OSX_ARCH_COUNT=0
OSX_ARCH_FLAGS=""
for ARCH in $OSX_ARCHS; do
OSX_ARCH_FLAGS="$OSX_ARCH_FLAGS -arch $ARCH"
OSX_ARCH_COUNT=$[$OSX_ARCH_COUNT +1]
done
XCODE_ROOT=`xcode-select -print-path`
# The EXTRA_CPPFLAGS definition works around a thread race issue in
# shared_ptr. I encountered this historically and have not verified that
# the fix is no longer required. Without using the posix thread primitives
# an invalid compare-and-swap ARM instruction (non-thread-safe) was used for the
# shared_ptr use count causing nasty and subtle bugs.
#
# Should perhaps also consider/use instead: -BOOST_SP_USE_PTHREADS
EXTRA_CPPFLAGS="-DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -g -DNDEBUG \
-std=c++11 -stdlib=libc++ -fvisibility=hidden"
EXTRA_IOS_CPPFLAGS="$EXTRA_CPPFLAGS -mios-version-min=$MIN_IOS_VERSION"
EXTRA_OSX_CPPFLAGS="$EXTRA_CPPFLAGS -mmacosx-version-min=$MIN_OSX_VERSION"
TARBALLDIR=`pwd`
SRCDIR="$TARBALLDIR/src"
IOSOUTPUTDIR="$TARBALLDIR/ios"
OSXOUTPUTDIR="$TARBALLDIR/osx"
IOSBUILDDIR="$IOSOUTPUTDIR/build"
OSXBUILDDIR="$OSXOUTPUTDIR/build"
PREFIXDIR="$IOSOUTPUTDIR/prefix"
IOSFRAMEWORKDIR="$IOSOUTPUTDIR/framework"
OSXFRAMEWORKDIR="$OSXOUTPUTDIR/framework"
BOOST_TARBALL="$TARBALLDIR/boost_$BOOST_VERSION2.tar.bz2"
BOOST_SRC="$SRCDIR/boost_${BOOST_VERSION2}"
ARM_DEV_CMD="xcrun --sdk iphoneos"
SIM_DEV_CMD="xcrun --sdk iphonesimulator"
OSX_DEV_CMD="xcrun --sdk macosx"
#===============================================================================
# Functions
#===============================================================================
usage()
{
cat << EOF
usage: $0 options
Build Boost for iOS, iOS Simulator, and OS X
OPTIONS:
-h, -\? | --help
Display these options and exit.
--boost-version
Specify which version of Boost to build. Defaults to "$BOOST_VERSION".
-ios
Build for the iOS platform. May be used in conjunction with -osx.
If neither -ios nor -osx are specified, both are built.
-osx
Build for the OS X platform. May be used in conjunction with -ios.
If neither -ios nor -osx are specified, both are built.
--ios-sdk [num]
Specify the iOS SDK version to build with. Defaults to "$IOS_SDK_VERSION".
--min-ios-version [num]
Specify the minimum iOS version to target. Defaults to "$MIN_IOS_VERSION".
--osx-sdk [num]
Specify the OS X SDK version to build with. Defaults to "$OSX_SDK_VERSION".
--min-osx-version [num]
Specify the minimum OS X version to target. Defaults to "$MIN_OSX_VERSION".
--no-framework
Do not create the framework.
--clean
Just clean up build artifacts, but don’t actually build anything.
--no-clean
Do not clean up existing build artifacts before building.
EOF
}
abort()
{
echo
echo "Aborted: $@"
exit 1
}
die()
{
usage
exit 1
}
missingParameter()
{
echo $1 requires a parameter
die
}
unknownParameter()
{
if [[ -n $2 && $2 != "" ]]; then
echo Unknown argument \"$2\" for parameter $1.
else
echo Unknown argument $1
fi
die
}
parseArgs()
{
while [ "$1" != "" ]; do
case $1 in
-h | -\?)
usage
exit
;;
-ios)
BUILD_IOS=1
;;
-osx)
BUILD_OSX=1
;;
--boost-version)
if [ -n $2 ]; then
BOOST_VERSION="$2"
BOOST_VERSION2="${BOOST_VERSION//./_}"
BOOST_TARBALL="$TARBALLDIR/boost_$BOOST_VERSION2.tar.bz2"
BOOST_SRC="$SRCDIR/boost_${BOOST_VERSION2}"
shift
else
missingParameter $1
fi
;;
--ios-sdk)
if [ -n $2 ]; then
IOS_SDK_VERSION="$2"
shift
else
missingParameter $1
fi
;;
--min-ios-version)
if [ -n $2 ]; then
MIN_IOS_VERSION="$2"
shift
else
missingParameter $1
fi
;;
--osx-sdk)
if [ -n $2 ]; then
OSX_SDK_VERSION="$2"
shift
else
missingParameter $1
fi
;;
--min-osx-version)
if [ -n $2 ]; then
MIN_OSX_VERSION="$2"
shift
else
missingParameter $1
fi
;;
--clean)
CLEAN=1
;;
--no-clean)
NO_CLEAN=1
;;
--no-framework)
NO_FRAMEWORK=1
;;
*)
unknownParameter $1
;;
esac
shift
done
}
doneSection()
{
echo
echo "Done"
echo "================================================================="
echo
}
#===============================================================================
cleanup()
{
echo Cleaning everything
rm -rf "$BOOST_SRC/iphone-build"
rm -rf "$BOOST_SRC/iphonesim-build"
rm -rf "$BOOST_SRC/osx-build"
rm -rf "$IOSOUTPUTDIR"
rm -rf "$OSXOUTPUTDIR"
doneSection
}
#===============================================================================
downloadBoost()
{
if [ ! -s $BOOST_TARBALL ]; then
echo "Downloading boost ${BOOST_VERSION}"
curl -L -o "$BOOST_TARBALL" \
http://sourceforge.net/projects/boost/files/boost/${BOOST_VERSION}/boost_${BOOST_VERSION2}.tar.bz2/download
fi
doneSection
}
#===============================================================================
unpackBoost()
{
[ -f "$BOOST_TARBALL" ] || abort "Source tarball missing."
echo Unpacking boost into "$SRCDIR"...
[ -d $SRCDIR ] || mkdir -p "$SRCDIR"
[ -d $BOOST_SRC ] || ( cd "$SRCDIR"; tar xfj "$BOOST_TARBALL" )
[ -d $BOOST_SRC ] && echo " ...unpacked as $BOOST_SRC"
doneSection
}
#===============================================================================
inventMissingHeaders()
{
# These files are missing in the ARM iPhoneOS SDK, but they are in the simulator.
# They are supported on the device, so we copy them from x86 SDK to a staging area
# to use them on ARM, too.
echo Invent missing headers
cp "$XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${IOS_SDK_VERSION}.sdk/usr/include/{crt_externs,bzlib}.h" "$BOOST_SRC"
}
#===============================================================================
updateBoost()
{
echo Updating boost into $BOOST_SRC...
mv "$BOOST_SRC/tools/build/src/user-config.jam" "$BOOST_SRC/tools/build/src/user-config.jam-bk"
if [[ -n $BUILD_IOS ]]; then
cat >> "$BOOST_SRC/tools/build/src/user-config.jam" <<EOF
using darwin : ${IOS_SDK_VERSION}~iphone
: "$XCODE_ROOT/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++" -arch armv7 \
-arch armv7s -arch arm64 $EXTRA_IOS_CPPFLAGS
: <striper> <root>$XCODE_ROOT/Platforms/iPhoneOS.platform/Developer
: <architecture>arm <target-os>iphone
;
using darwin : ${IOS_SDK_VERSION}~iphonesim
: g++ -arch i386 -arch x86_64 $EXTRA_IOS_CPPFLAGS
: <striper> <root>$XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer
: <architecture>x86 <target-os>iphone
;
EOF
fi
if [[ -n $BUILD_OSX ]]; then
cat >> "$BOOST_SRC/tools/build/src/user-config.jam" <<EOF
using darwin : ${OSX_SDK_VERSION}
: g++ $OSX_ARCH_FLAGS $EXTRA_OSX_CPPFLAGS
: <striper> <root>$XCODE_ROOT/Platforms/MacOSX.platform/Developer
: <architecture>x86 <target-os>darwin
;
EOF
fi
doneSection
}
#===============================================================================
bootstrapBoost()
{
cd $BOOST_SRC
BOOST_LIBS_COMMA=$(echo $BOOST_LIBS | sed -e "s/ /,/g")
echo "Bootstrapping (with libs $BOOST_LIBS_COMMA)"
./bootstrap.sh --with-libraries=$BOOST_LIBS_COMMA
doneSection
}
#===============================================================================
buildBoost()
{
cd "$BOOST_SRC"
if [[ -n $BUILD_IOS ]]; then
echo Building Boost for iPhone
# Install this one so we can copy the headers for the frameworks...
./b2 -j16 --build-dir=iphone-build --stagedir=iphone-build/stage \
--prefix="$PREFIXDIR" toolset=darwin architecture=arm target-os=iphone \
macosx-version=iphone-${IOS_SDK_VERSION} define=_LITTLE_ENDIAN \
link=static stage
./b2 -j16 --build-dir=iphone-build --stagedir=iphone-build/stage \
--prefix="$PREFIXDIR" toolset=darwin architecture=arm \
target-os=iphone macosx-version=iphone-${IOS_SDK_VERSION} \
define=_LITTLE_ENDIAN link=static install
doneSection
echo Building Boost for iPhoneSimulator
./b2 -j16 --build-dir=iphonesim-build --stagedir=iphonesim-build/stage \
toolset=darwin-${IOS_SDK_VERSION}~iphonesim architecture=x86 \
target-os=iphone macosx-version=iphonesim-${IOS_SDK_VERSION} \
link=static stage
doneSection
fi
if [[ -n $BUILD_OSX ]]; then
echo building Boost for OSX
./b2 -j16 --build-dir=osx-build --stagedir=osx-build/stage toolset=clang \
cxxflags="-std=c++11 -stdlib=libc++ ${OSX_ARCH_FLAGS}" \
linkflags="-stdlib=libc++" link=static threading=multi \
macosx-version=${OSX_SDK_VERSION} stage
# If we are only building for OS X and we are outputting a framework,
# then we need to install this one so we can copy the headers
if [[ -z $BUILD_IOS && -z $NO_FRAMEWORK ]]; then
PREFIXDIR="$OSXBUILDDIR/prefix"
./b2 -j16 --build-dir=osx-build --stagedir=osx-build/stage \
--prefix="$PREFIXDIR" toolset=clang \
cxxflags="-std=c++11 -stdlib=libc++ ${OSX_ARCH_FLAGS}" \
linkflags="-stdlib=libc++" link=static threading=multi \
macosx-version=${OSX_SDK_VERSION} install
fi
doneSection
fi
}
#===============================================================================
unpackArchive()
{
BUILDDIR="$1"
LIBNAME="$2"
echo "Unpacking $LIBNAME"
if [[ -d "$BUILDDIR/$LIBNAME" ]]; then
cd "$BUILDDIR/$LIBNAME"
rm *.o
rm *.SYMDEF*
else
mkdir -p "$BUILDDIR/$LIBNAME"
fi
(
cd "$BUILDDIR/$NAME"; ar -x "../../libboost_$NAME.a";
for FILE in *.o; do
NEW_FILE="${NAME}_${FILE}"
mv "$FILE" "$NEW_FILE"
done
)
}
scrunchAllLibsTogetherInOneLibPerPlatform()
{
cd "$BOOST_SRC"
if [[ -n $BUILD_IOS ]]; then
# iOS Device
mkdir -p "$IOSBUILDDIR/armv7/obj"
mkdir -p "$IOSBUILDDIR/armv7s/obj"
mkdir -p "$IOSBUILDDIR/arm64/obj"
# iOS Simulator
mkdir -p "$IOSBUILDDIR/i386/obj"
mkdir -p "$IOSBUILDDIR/x86_64/obj"
fi
if [[ -n $BUILD_OSX ]]; then
# OSX
for ARCH in $OSX_ARCHS; do
mkdir -p "$OSXBUILDDIR/$ARCH/obj"
done
fi
ALL_LIBS=""
echo Splitting all existing fat binaries...
for NAME in $BOOST_LIBS; do
if [ "$NAME" == "test" ]; then
NAME="unit_test_framework"
fi
ALL_LIBS="$ALL_LIBS libboost_$NAME.a"
if [[ -n $BUILD_IOS ]]; then
$ARM_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
-thin armv7 -o "$IOSBUILDDIR/armv7/libboost_$NAME.a"
$ARM_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
-thin armv7s -o "$IOSBUILDDIR/armv7s/libboost_$NAME.a"
$ARM_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
-thin arm64 -o "$IOSBUILDDIR/arm64/libboost_$NAME.a"
$SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
-thin i386 -o "$IOSBUILDDIR/i386/libboost_$NAME.a"
$SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
-thin x86_64 -o "$IOSBUILDDIR/x86_64/libboost_$NAME.a"
fi
if [[ -n $BUILD_OSX ]]; then
if (( $OSX_ARCH_COUNT == 1 )); then
cp "osx-build/stage/lib/libboost_$NAME.a" \
"$OSXBUILDDIR/$ARCH/libboost_$NAME.a"
else
for ARCH in $OSX_ARCHS; do
$OSX_DEV_CMD lipo "osx-build/stage/lib/libboost_$NAME.a" \
-thin $ARCH -o "$OSXBUILDDIR/$ARCH/libboost_$NAME.a"
done
fi
fi
done
echo "Decomposing each architecture’s .a files"
for NAME in $BOOST_LIBS; do
if [ "$NAME" == "test" ]; then
NAME="unit_test_framework"
fi
echo "Decomposing libboost_${NAME}.a"
if [[ -n $BUILD_IOS ]]; then
unpackArchive "$IOSBUILDDIR/armv7/obj" $NAME
unpackArchive "$IOSBUILDDIR/armv7s/obj" $NAME
unpackArchive "$IOSBUILDDIR/arm64/obj" $NAME
unpackArchive "$IOSBUILDDIR/i386/obj" $NAME
unpackArchive "$IOSBUILDDIR/x86_64/obj" $NAME
fi
if [[ -n $BUILD_OSX ]]; then
for ARCH in $OSX_ARCHS; do
unpackArchive "$OSXBUILDDIR/$ARCH/obj" $NAME
done
fi
done
echo "Linking each architecture into an uberlib ($ALL_LIBS => libboost.a )"
if [[ -n $BUILD_IOS ]]; then
cd "$IOSBUILDDIR"
rm */libboost.a
fi
if [[ -n $BUILD_OSX ]]; then
for ARCH in $OSX_ARCHS; do
rm "$OSXBUILDDIR/$ARCH/libboost.a"
done
fi
for NAME in $BOOST_LIBS; do
if [ "$NAME" == "test" ]; then
NAME="unit_test_framework"
fi
echo $NAME
# The obj/$NAME/*.o below should all be quotet, but I couldn’t figure out how to do that elegantly.
# Boost lib names probably won’t contain non-word characters any time soon, though. ;) - Jan
if [[ -n $BUILD_IOS ]]; then
echo ...armv7
(cd "$IOSBUILDDIR/armv7"; $ARM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
echo ...armv7s
(cd "$IOSBUILDDIR/armv7s"; $ARM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
echo ...arm64
(cd "$IOSBUILDDIR/arm64"; $ARM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
echo ...i386
(cd "$IOSBUILDDIR/i386"; $SIM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
echo ...x86_64
(cd "$IOSBUILDDIR/x86_64"; $SIM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
fi
if [[ -n $BUILD_OSX ]]; then
for ARCH in $OSX_ARCHS; do
echo ...osx-$ARCH
(cd "$OSXBUILDDIR/$ARCH"; $OSX_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
done
fi
done
}
#===============================================================================
buildFramework()
{
: ${1:?}
FRAMEWORKDIR="$1"
BUILDDIR="$2"
VERSION_TYPE=Alpha
FRAMEWORK_NAME=boost
FRAMEWORK_VERSION=A
FRAMEWORK_CURRENT_VERSION="$BOOST_VERSION"
FRAMEWORK_COMPATIBILITY_VERSION="$BOOST_VERSION"
FRAMEWORK_BUNDLE="$FRAMEWORKDIR/$FRAMEWORK_NAME.framework"
echo "Framework: Building $FRAMEWORK_BUNDLE from $BUILDDIR..."
rm -rf "$FRAMEWORK_BUNDLE"
echo "Framework: Setting up directories..."
mkdir -p "$FRAMEWORK_BUNDLE"
mkdir -p "$FRAMEWORK_BUNDLE/Versions"
mkdir -p "$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION"
mkdir -p "$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources"
mkdir -p "$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers"
mkdir -p "$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation"
echo "Framework: Creating symlinks..."
ln -s "$FRAMEWORK_VERSION" "$FRAMEWORK_BUNDLE/Versions/Current"
ln -s "Versions/Current/Headers" "$FRAMEWORK_BUNDLE/Headers"
ln -s "Versions/Current/Resources" "$FRAMEWORK_BUNDLE/Resources"
ln -s "Versions/Current/Documentation" "$FRAMEWORK_BUNDLE/Documentation"
ln -s "Versions/Current/$FRAMEWORK_NAME" "$FRAMEWORK_BUNDLE/$FRAMEWORK_NAME"
FRAMEWORK_INSTALL_NAME="$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME"
echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..."
cd "$BUILDDIR"
if [[ -n $BUILD_IOS ]]; then
$ARM_DEV_CMD lipo -create */libboost.a -o "$FRAMEWORK_INSTALL_NAME" || abort "Lipo $1 failed"
fi
if [[ -n $BUILD_OSX ]]; then
$OSX_DEV_CMD lipo -create */libboost.a -o "$FRAMEWORK_INSTALL_NAME" || abort "Lipo $1 failed"
fi
echo "Framework: Copying includes..."
cd "$PREFIXDIR/include/boost"
cp -r * "$FRAMEWORK_BUNDLE/Headers/"
echo "Framework: Creating plist..."
cat > "$FRAMEWORK_BUNDLE/Resources/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundleIdentifier</key>
<string>org.boost</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${FRAMEWORK_CURRENT_VERSION}</string>
</dict>
</plist>
EOF
doneSection
}
#===============================================================================
restoreBoost()
{
cp "$BOOST_SRC/tools/build/src/user-config.jam-bk" "$BOOST_SRC/tools/build/src/user-config.jam"
}
#===============================================================================
# Execution starts here
#===============================================================================
parseArgs $@
if [ -n "$CLEAN" ]; then
cleanup
exit
fi
if [[ -z $BUILD_IOS && -z $BUILD_OSX ]]; then
BUILD_IOS=1
BUILD_OSX=1
fi
format="%-20s %s\n"
format2="%-20s %s (%u)\n"
printf "$format" "BUILD_IOS:" $( [[ -n $BUILD_IOS ]] && echo "YES" || echo "NO")
printf "$format" "BUILD_OSX:" $( [[ -n $BUILD_OSX ]] && echo "YES" || echo "NO")
printf "$format" "BOOST_VERSION:" "$BOOST_VERSION"
printf "$format" "IOS_SDK_VERSION:" "$IOS_SDK_VERSION"
printf "$format" "MIN_IOS_VERSION:" "$MIN_IOS_VERSION"
printf "$format" "OSX_SDK_VERSION:" "$OSX_SDK_VERSION"
printf "$format" "MIN_OSX_VERSION:" "$MIN_OSX_VERSION"
printf "$format2" "OSX_ARCHS:" "$OSX_ARCHS" $OSX_ARCH_COUNT
printf "$format" "BOOST_LIBS:" "$BOOST_LIBS"
printf "$format" "BOOST_SRC:" "$BOOST_SRC"
printf "$format" "IOSBUILDDIR:" "$IOSBUILDDIR"
printf "$format" "OSXBUILDDIR:" "$OSXBUILDDIR"
printf "$format" "PREFIXDIR:" "$PREFIXDIR"
printf "$format" "IOSFRAMEWORKDIR:" "$IOSFRAMEWORKDIR"
printf "$format" "OSXFRAMEWORKDIR:" "$OSXFRAMEWORKDIR"
printf "$format" "XCODE_ROOT:" "$XCODE_ROOT"
echo
if [ -z $NO_CLEAN ]; then
cleanup
fi
downloadBoost
unpackBoost
inventMissingHeaders
bootstrapBoost
updateBoost
buildBoost
scrunchAllLibsTogetherInOneLibPerPlatform
if [ -z $NO_FRAMEWORK ]; then
if [[ -n $BUILD_IOS ]]; then
buildFramework "$IOSFRAMEWORKDIR" "$IOSBUILDDIR"
fi
if [[ -n $BUILD_OSX ]]; then
buildFramework "$OSXFRAMEWORKDIR" "$OSXBUILDDIR"
fi
fi
restoreBoost
echo "Completed successfully"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment