Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 110 lines (87 sloc) 3.645 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
#!/bin/sh
# set -u
function error () { printf >&2 "%s\n\nPlease see README.md for build instructions.\n" "$1"; exit 1; }

# =================================================
# = Fallback build directory and signing identity =
# =================================================

: ${builddir:=$HOME/build/TextMate}
: ${identity:=-}
: ${rest_api:=https://api.textmate.org}

# ========================================================
# = Application name, version, revision, and required OS =
# ========================================================

name=TextMate
ver=2.0.0-alpha.\$APP_REVISION${tag:-+git.$(git rev-parse --short HEAD)}
rev=$(( $(curl -sf "${rest_api}/releases/nightly/revision")+1 ))
min_os=10.7

# ===============================================
# = Find clang via xcrun, MacPorts, or Homebrew =
# ===============================================

clang_good_enough() {
[[ -x "$CC" && -x "$CXX" ]] && "$CC" &>/dev/null -x objective-c -include Foundation/Foundation.h -c -o /dev/null - <<< 'int main () { id str = @("str"); return 0; }'
}
test_xcode_clang() {
if which -s xcrun; then
CC=$(xcrun -find clang)
CXX=$(xcrun -find clang++)
clang_good_enough && return
fi
false
}
test_local_clang() {
for cc in /{opt,usr}/local/bin/clang /usr/bin/clang; do
CC="${cc}"
CXX="${cc}++"
clang_good_enough && return
done
false
}

clang_good_enough || test_xcode_clang || test_local_clang || error "$CC is too old to build this project."

# ===============================
# = Check if boost is installed =
# ===============================

if which -s brew && [[ -z "$boostdir" && ! -d /usr/local/include/boost ]]; then
boostdir=$(brew --prefix boost)/include/boost
fi

for dir in "${boostdir:-/usr/include/boost}" /{opt,usr}/local/include/boost ${CPATH//:/ }; do
if [[ ! -L "${builddir}/include/boost" && -d "${dir}" ]]; then
mkdir -p "${builddir}/include" && ln -fs "${dir}" "${builddir}/include/boost"
fi
done

test -L "${builddir}/include/boost" || error "*** boost not installed."

# ==================================
# = Locate Xcode directory and SDK =
# ==================================

xcodedir=/Developer
sdk="/Developer/SDKs/${sdk:-MacOSX10.8}.sdk"

if which -s xcode-select; then
xcodedir=$(xcode-select -print-path)
if ! [[ -e "$sdk" ]]; then
sdk="$xcodedir/Platforms/MacOSX.platform$sdk"
fi
fi

if ! [[ -e "$sdk" ]]; then
sdk=""
echo 2>&1 "WARNING: Building without platform-specific SDK."
fi

# ===============================================
# = Check if we can use pbzip2 instead of bzip2 =
# ===============================================

bzip2_flag="-j"
if which -s pbzip2; then
bzip2_flag="--use-compress-prog=pbzip2"
fi

# ==============================
# = Check various dependencies =
# ==============================

for dep in ninja ragel multimarkdown pgrep pkill "$CC" "$CXX"; do
which -s "$dep" || error "*** dependency missing: ‘${dep}’."
done

# =====================================
# = Generate fixtures and build files =
# =====================================

mkdir -p "$builddir/Frameworks/SoftwareUpdate/fixtures"
DST=$(cd >/dev/null "$builddir/Frameworks/SoftwareUpdate/fixtures"; pwd) make -C Frameworks/SoftwareUpdate/fixtures

bin/gen_build -o build.ninja -C "$builddir" -dAPP_NAME="$name" -dAPP_REVISION="$rev" -dAPP_VERSION="$ver" -dAPP_MIN_OS="$min_os" -dCC="$CC" -dCXX="$CXX" -dxcodedir="$xcodedir" -didentity="$identity" -drest_api="$rest_api" -dsdk="$sdk" -dbzip2_flag="$bzip2_flag" target

BUNDLES_TBZ=Applications/TextMate/resources/DefaultBundles.tbz
test -e "$BUNDLES_TBZ" || builddir="$builddir" bin/create_default_bundles_tbz "$BUNDLES_TBZ"
Something went wrong with that request. Please try again.