mirror of
https://github.com/textmate/textmate.git
synced 2026-01-20 12:18:06 -05:00
114 lines
3.6 KiB
Bash
Executable File
114 lines
3.6 KiB
Bash
Executable File
#!/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-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
|
||
|
||
ninja Frameworks/encoding/src/frequencies.capnp.h
|
||
ninja Frameworks/plist/src/cache.capnp.h
|
||
|
||
BUNDLES_TBZ=Applications/TextMate/resources/DefaultBundles.tbz
|
||
test -e "$BUNDLES_TBZ" || builddir="$builddir" bin/create_default_bundles_tbz "$BUNDLES_TBZ"
|