2014-03-28 21:04:32 +01:00
|
|
|
#!/usr/bin/env bash
|
2017-01-18 11:02:52 +01:00
|
|
|
#
|
|
|
|
# Package the OS X SDKs into a tar file to be used by `build.sh`.
|
|
|
|
#
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
export LC_ALL=C
|
|
|
|
|
2015-09-19 23:04:53 +02:00
|
|
|
function set_xcode_dir()
|
|
|
|
{
|
|
|
|
local tmp=$(ls $1 2>/dev/null | grep "^Xcode.*.app" | grep -v "beta" | head -n1)
|
|
|
|
|
|
|
|
if [ -z "$tmp" ]; then
|
|
|
|
tmp=$(ls $1 2>/dev/null | grep "^Xcode.*.app" | head -n1)
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$tmp" ]; then
|
|
|
|
XCODEDIR="$1/$tmp"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
if [ $(uname -s) != "Darwin" ]; then
|
|
|
|
if [ -z "$XCODEDIR" ]; then
|
2015-09-19 23:04:53 +02:00
|
|
|
echo "This script must be run on OS X" 1>&2
|
|
|
|
echo "... Or with XCODEDIR=... on Linux" 1>&2
|
2014-09-27 14:35:42 +02:00
|
|
|
exit 1
|
|
|
|
else
|
2015-05-30 21:01:48 +02:00
|
|
|
case $XCODEDIR in
|
|
|
|
/*) ;;
|
|
|
|
*) XCODEDIR="$PWD/$XCODEDIR" ;;
|
|
|
|
esac
|
2015-09-19 23:04:53 +02:00
|
|
|
set_xcode_dir $XCODEDIR
|
2014-09-27 14:35:42 +02:00
|
|
|
fi
|
|
|
|
else
|
2015-09-19 23:04:53 +02:00
|
|
|
set_xcode_dir $(echo /Volumes/Xcode* | tr ' ' '\n' | grep -v "beta" | head -n1)
|
2014-06-20 14:16:57 +02:00
|
|
|
|
|
|
|
if [ -z "$XCODEDIR" ]; then
|
2015-09-19 23:04:53 +02:00
|
|
|
set_xcode_dir /Applications
|
|
|
|
|
|
|
|
if [ -z "$XCODEDIR" ]; then
|
|
|
|
set_xcode_dir $(echo /Volumes/Xcode* | tr ' ' '\n' | head -n1)
|
|
|
|
|
|
|
|
if [ -z "$XCODEDIR" ]; then
|
|
|
|
echo "please mount Xcode.dmg" 1>&2
|
|
|
|
exit 1
|
|
|
|
fi
|
2014-06-20 14:16:57 +02:00
|
|
|
fi
|
2014-04-06 15:58:15 +02:00
|
|
|
fi
|
2014-03-28 21:04:32 +01:00
|
|
|
fi
|
|
|
|
|
2014-11-04 02:48:53 +01:00
|
|
|
if [ ! -d $XCODEDIR ]; then
|
2015-05-30 21:01:48 +02:00
|
|
|
echo "cannot find Xcode (XCODEDIR=$XCODEDIR)" 1>&2
|
2014-09-27 14:35:42 +02:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2014-03-28 21:04:32 +01:00
|
|
|
echo -e "found Xcode: $XCODEDIR"
|
|
|
|
|
|
|
|
WDIR=$(pwd)
|
|
|
|
|
|
|
|
which gnutar &>/dev/null
|
|
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
2014-04-06 15:58:15 +02:00
|
|
|
TAR=gnutar
|
2014-03-28 21:04:32 +01:00
|
|
|
else
|
2014-04-06 15:58:15 +02:00
|
|
|
TAR=tar
|
2014-03-28 21:04:32 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
which xz &>/dev/null
|
|
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
2014-04-06 15:58:15 +02:00
|
|
|
COMPRESSOR=xz
|
|
|
|
PKGEXT="tar.xz"
|
2014-03-28 21:04:32 +01:00
|
|
|
else
|
2014-04-06 15:58:15 +02:00
|
|
|
COMPRESSOR=bzip2
|
|
|
|
PKGEXT="tar.bz2"
|
2014-03-28 21:04:32 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
pushd $XCODEDIR &>/dev/null
|
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
if [ -d "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" ]; then
|
|
|
|
pushd "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" &>/dev/null
|
|
|
|
else
|
|
|
|
if [ -d "../Packages" ]; then
|
|
|
|
pushd "../Packages" &>/dev/null
|
2015-05-30 21:01:48 +02:00
|
|
|
elif [ -d "Packages" ]; then
|
|
|
|
pushd "Packages" &>/dev/null
|
2014-09-27 14:35:42 +02:00
|
|
|
else
|
|
|
|
if [ $? -ne 0 ]; then
|
2015-05-30 21:01:48 +02:00
|
|
|
echo "Xcode (or this script) is out of date" 1>&2
|
|
|
|
echo "trying some magic to find the SDKs anyway ..." 1>&2
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
SDKDIR=$(find . -name SDKs -type d | grep MacOSX | head -n1)
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
if [ -z "$SDKDIR" ]; then
|
2015-09-19 23:04:53 +02:00
|
|
|
echo "cannot find SDKs!" 1>&2
|
2014-09-27 14:35:42 +02:00
|
|
|
exit 1
|
|
|
|
fi
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
pushd $SDKDIR &>/dev/null
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
SDKS=$(ls | grep "^MacOSX10.*" | grep -v "Patch")
|
2014-03-28 21:04:32 +01:00
|
|
|
|
|
|
|
if [ -z "$SDKS" ]; then
|
2015-05-30 21:01:48 +02:00
|
|
|
echo "No SDK found" 1>&2
|
2014-03-28 21:04:32 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2014-09-27 14:35:42 +02:00
|
|
|
# Xcode 5
|
|
|
|
LIBCXXDIR1="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1"
|
|
|
|
|
|
|
|
# Xcode 6
|
|
|
|
LIBCXXDIR2="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1"
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2015-06-21 14:07:19 +02:00
|
|
|
# Manual directory
|
|
|
|
MANDIR="Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man"
|
|
|
|
|
2014-03-28 21:04:32 +01:00
|
|
|
for SDK in $SDKS; do
|
2014-09-27 14:35:42 +02:00
|
|
|
echo -n "packaging $(echo "$SDK" | sed -E "s/(.sdk|.pkg)//g") SDK "
|
|
|
|
echo "(this may take several minutes) ..."
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
if [[ $SDK == *.pkg ]]; then
|
|
|
|
cp $SDK $WDIR
|
|
|
|
continue
|
|
|
|
fi
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
TMP=$(mktemp -d /tmp/XXXXXXXXXXX)
|
|
|
|
cp -r $SDK $TMP &>/dev/null || true
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
pushd $XCODEDIR &>/dev/null
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
# libc++ headers for C++11/C++14
|
2014-09-27 14:35:42 +02:00
|
|
|
if [ -d $LIBCXXDIR1 ]; then
|
|
|
|
cp -rf $LIBCXXDIR1 "$TMP/$SDK/usr/include/c++"
|
|
|
|
elif [ -d $LIBCXXDIR2 ]; then
|
|
|
|
cp -rf $LIBCXXDIR2 "$TMP/$SDK/usr/include/c++"
|
2014-04-06 15:58:15 +02:00
|
|
|
fi
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2015-06-21 14:07:19 +02:00
|
|
|
if [ -d $MANDIR ]; then
|
|
|
|
mkdir -p $TMP/$SDK/usr/share/man
|
|
|
|
cp -rf $MANDIR/* $TMP/$SDK/usr/share/man
|
|
|
|
fi
|
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
popd &>/dev/null
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
pushd $TMP &>/dev/null
|
|
|
|
$TAR -cf - * | $COMPRESSOR -9 -c - > "$WDIR/$SDK.$PKGEXT"
|
|
|
|
popd &>/dev/null
|
2014-03-28 21:04:32 +01:00
|
|
|
|
2014-04-06 15:58:15 +02:00
|
|
|
rm -rf $TMP
|
2014-03-28 21:04:32 +01:00
|
|
|
done
|
|
|
|
|
|
|
|
popd &>/dev/null
|
|
|
|
popd &>/dev/null
|
|
|
|
|
|
|
|
echo ""
|
2014-09-27 14:35:42 +02:00
|
|
|
ls -lh | grep MacOSX
|