summaryrefslogtreecommitdiff
path: root/init.sh
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2017-08-22 10:05:20 +0300
committerRasmus Andersson <rasmus@notion.se>2017-08-22 12:23:08 +0300
commit3b1fffade1473f20f2558733fbd218f4580fc7c3 (patch)
treeea4f80b43b08744d493bb86ab646444ec04ddc7f /init.sh
downloadinter-3b1fffade1473f20f2558733fbd218f4580fc7c3.tar.xz
Initial public commitv1.0
Diffstat (limited to 'init.sh')
-rwxr-xr-xinit.sh289
1 files changed, 289 insertions, 0 deletions
diff --git a/init.sh b/init.sh
new file mode 100755
index 000000000..3141ea111
--- /dev/null
+++ b/init.sh
@@ -0,0 +1,289 @@
+#!/bin/bash
+
+SRCDIR=$(dirname "${BASH_SOURCE[0]}")
+BUILD_DIR=$SRCDIR/build
+
+if [[ "${BUILD_DIR:0:2}" == "./" ]]; then
+ BUILD_DIR=${BUILD_DIR:2}
+fi
+
+DIST_DIR=$BUILD_DIR/dist
+BUILD_TMP_DIR=$BUILD_DIR/tmp
+VENV_DIR=$BUILD_DIR/venv
+
+if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
+ # sourced
+ if [[ -z $VIRTUAL_ENV ]] && [[ ! -f "$VENV_DIR/bin/activate" ]]; then
+ echo "Project not configured." >&2
+ echo "Execute this script instead of sourcing it to perform setup." >&2
+ else
+ source "$VENV_DIR/bin/activate"
+ pushd "$SRCDIR" >/dev/null
+ SRCDIR_ABS=$(pwd)
+ popd >/dev/null
+ export PYTHONPATH=$SRCDIR_ABS/misc/pylib
+ fi
+else
+ # Subshell
+ set -e
+ cd "$SRCDIR"
+
+ # ————————————————————————————————————————————————————————————————————————————————————————————————
+ # virtualenv
+
+ mkdir -p "$VENV_DIR"
+
+ pushd "$(dirname "$VENV_DIR")" >/dev/null
+ VENV_DIR_ABS=$(pwd)/$(basename "$VENV_DIR")
+ popd >/dev/null
+
+ # must check and set VENV_ACTIVE before polluting local env
+ VENV_ACTIVE=false
+ if [[ "$VIRTUAL_ENV" == "$VENV_DIR_ABS" ]] && [[ "$1" != "-force" ]]; then
+ VENV_ACTIVE=true
+ fi
+
+ if ! (which virtualenv >/dev/null); then
+ echo "$0: Can't find virtualenv in PATH -- install through 'pip install --user virtualenv'" >&2
+ exit 1
+ fi
+
+ if [[ ! -d "$VENV_DIR/bin" ]]; then
+ echo "Setting up virtualenv in '$VENV_DIR'"
+ virtualenv "$VENV_DIR"
+ else
+ if [[ ! -z $VIRTUAL_ENV ]] && [[ "$VIRTUAL_ENV" != "$VENV_DIR_ABS" ]]; then
+ echo "Looks like the repository has moved location -- updating virtualenv"
+ virtualenv "$VENV_DIR"
+ fi
+ fi
+
+ source "$VENV_DIR/bin/activate"
+
+ UPDATE_TIMESTAMP_FILE="$VENV_DIR/last-pip-run.mark"
+ REQUIREMENTS_FILE=$SRCDIR/requirements.txt
+
+ if [ "$REQUIREMENTS_FILE" -nt "$UPDATE_TIMESTAMP_FILE" ]; then
+ echo "pip install -r $REQUIREMENTS_FILE"
+ pip install -r "$REQUIREMENTS_FILE"
+ date '+%s' > "$UPDATE_TIMESTAMP_FILE"
+ fi
+
+ # ————————————————————————————————————————————————————————————————————————————————————————————————
+ # deps
+ DEPS_DIR=$BUILD_DIR/deps
+ PATCH_DIR=$(pwd)/misc/patches
+ mkdir -p "$DEPS_DIR"
+
+ check_dep() {
+ NAME=$1
+ REPO_URL=$2
+ BRANCH=$3
+ TREE_REF=$4
+ set -e
+ REPODIR=$DEPS_DIR/$NAME
+ if [[ ! -d "$REPODIR/.git" ]]; then
+ rm -rf "$REPODIR"
+ echo "Fetching $NAME from $REPO_URL"
+ if ! (git clone --recursive --single-branch -b $BRANCH -- "$REPO_URL" "$REPODIR"); then
+ exit 1
+ fi
+ if [[ ! -z $TREE_REF ]]; then
+ git -C "$REPODIR" checkout "$TREE_REF"
+ git -C "$REPODIR" submodule update
+ fi
+ return 1
+ fi
+ # TODO: check that source matches tree ref
+ return 0
+ }
+
+ if ! (check_dep \
+ woff2 https://github.com/google/woff2.git master 36e6555b92a1519c927ebd43b79621810bf17c1a )
+ then
+ echo "Building woff2"
+ git -C "$DEPS_DIR/woff2" apply "$PATCH_DIR/woff2.patch"
+ if !(make -C "$DEPS_DIR/woff2" -j8 clean all); then
+ rm -rf "$DEPS_DIR/woff2"
+ exit 1
+ fi
+ fi
+ if [[ ! -f "$VENV_DIR/bin/woff2_compress" ]]; then
+ ln -vfs ../../deps/woff2/woff2_compress "$VENV_DIR/bin"
+ fi
+
+ # EOT is disabled
+ # if ! (check_dep \
+ # ttf2eot https://github.com/rsms/ttf2eot.git master )
+ # then
+ # echo "Building ttf2eot"
+ # make -C "$DEPS_DIR/ttf2eot" clean all
+ # fi
+ # if [[ ! -f "$VENV_DIR/bin/ttf2eot" ]]; then
+ # ln -vfs ../../deps/ttf2eot/ttf2eot "$VENV_DIR/bin"
+ # fi
+
+ if [[ ! -f "$DEPS_DIR/ttfautohint" ]]; then
+ URL=https://download.savannah.gnu.org/releases/freetype/ttfautohint-1.6-tty-osx.tar.gz
+ echo "Fetching $URL"
+ curl '-#' -o "$DEPS_DIR/ttfautohint.tar.gz" -L "$URL"
+ tar -C "$DEPS_DIR" -xzf "$DEPS_DIR/ttfautohint.tar.gz"
+ rm "$DEPS_DIR/ttfautohint.tar.gz"
+ fi
+ if [[ ! -f "$VENV_DIR/bin/ttfautohint" ]]; then
+ ln -vfs ../../deps/ttfautohint "$VENV_DIR/bin"
+ fi
+
+ if [[ ! -f "$VENV_DIR/bin/ttf2woff" ]] || [[ ! -f "$SRCDIR/misc/ttf2woff/ttf2woff" ]]; then
+ echo "Building ttf2woff"
+ make -C "$SRCDIR/misc/ttf2woff" -j8
+ fi
+ if [[ ! -f "$VENV_DIR/bin/ttf2woff" ]]; then
+ ln -vfs ../../../misc/ttf2woff/ttf2woff "$VENV_DIR/bin"
+ fi
+
+ # ————————————————————————————————————————————————————————————————————————————————————————————————
+ # $BUILD_TMP_DIR
+ # create and mount spare disk image needed on macOS to support case-sensitive filenames
+ if [[ "$(uname)" = *Darwin* ]]; then
+ bash misc/mac-tmp-disk-mount.sh
+ else
+ mkdir -p "$BUILD_TMP_DIR"
+ fi
+
+ # ————————————————————————————————————————————————————————————————————————————————————————————————
+ # $BUILD_DIR/etc/generated.make
+ master_styles=( \
+ Regular \
+ Bold \
+ )
+ derived_styles=( \
+ "RegularItalic : Regular" \
+ "Medium : Regular Bold" \
+ "MediumItalic : Regular Bold" \
+ "BoldItalic : Bold" \
+ # "Black : Regular Bold" \
+ # "BlackItalic : Regular Bold" \
+ )
+ web_formats=( woff woff2 ) # Disabled/unused: eot
+
+ mkdir -p "$BUILD_DIR/etc"
+ GEN_MAKE_FILE=$BUILD_DIR/etc/generated.make
+
+ # Only generate if there are changes to the font sources
+ NEED_GENERATE=false
+ if [[ ! -f "$GEN_MAKE_FILE" ]] || [[ "$0" -nt "$GEN_MAKE_FILE" ]]; then
+ NEED_GENERATE=true
+ else
+ for style in "${master_styles[@]}"; do
+ if $NEED_GENERATE; then
+ break
+ fi
+ for srcfile in $(find src/Interface-${style}.ufo -type f -newer "$GEN_MAKE_FILE"); do
+ NEED_GENERATE=true
+ break
+ done
+ done
+ fi
+
+ if $NEED_GENERATE; then
+ echo "Generating '$GEN_MAKE_FILE'"
+ echo "# Generated by init.sh -- do not modify manually" > "$GEN_MAKE_FILE"
+
+ all_styles=()
+
+ for style in "${master_styles[@]}"; do
+ all_styles+=( $style )
+ echo "${style}_ufo_d := " \
+ "\$(wildcard src/Interface-${style}.ufo/* src/Interface-${style}.ufo/*/*)" >> "$GEN_MAKE_FILE"
+ echo "$BUILD_TMP_DIR/InterfaceTTF/Interface-${style}.ttf: \$(${style}_ufo_d)" >> "$GEN_MAKE_FILE"
+ echo "$BUILD_TMP_DIR/InterfaceOTF/Interface-${style}.otf: \$(${style}_ufo_d)" >> "$GEN_MAKE_FILE"
+ done
+
+ for e in "${derived_styles[@]}"; do
+ style=$(echo "${e%%:*}" | xargs)
+ dependent_styles=$(echo "${e#*:}" | xargs)
+ all_styles+=( $style )
+
+ echo -n "$BUILD_TMP_DIR/InterfaceTTF/Interface-${style}.ttf:" >> "$GEN_MAKE_FILE"
+ for depstyle in $dependent_styles; do
+ echo -n " \$(${depstyle}_ufo_d)" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ echo -n "$BUILD_TMP_DIR/InterfaceOTF/Interface-${style}.otf:" >> "$GEN_MAKE_FILE"
+ for depstyle in $dependent_styles; do
+ echo -n " \$(${depstyle}_ufo_d)" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+ done
+
+ # STYLE and STYLE_ttf targets
+ for style in "${all_styles[@]}"; do
+ echo "${style}_ttf: $DIST_DIR/Interface-${style}.ttf" >> "$GEN_MAKE_FILE"
+ echo "${style}_otf: $DIST_DIR-unhinted/Interface-${style}.otf" >> "$GEN_MAKE_FILE"
+ echo "${style}_ttf_unhinted: $DIST_DIR-unhinted/Interface-${style}.ttf" >> "$GEN_MAKE_FILE"
+
+ echo -n "${style}: ${style}_otf" >> "$GEN_MAKE_FILE"
+ for format in "${web_formats[@]}"; do
+ echo -n " $DIST_DIR/Interface-${style}.${format}" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ echo -n "${style}_unhinted: ${style}_otf" >> "$GEN_MAKE_FILE"
+ for format in "${web_formats[@]}"; do
+ echo -n " $DIST_DIR-unhinted/Interface-${style}.${format}" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+ done
+
+ # all_otf target
+ echo -n "all_otf:" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style}_otf" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ # all_ttf target
+ echo -n "all_ttf:" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style}_ttf" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ echo -n "all_ttf_unhinted:" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style}_ttf_unhinted" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ # all_web target
+ echo -n "all_web:" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style}" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+ echo -n "all_web_unhinted:" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style}_unhinted" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+
+
+ echo -n ".PHONY: all_ttf all_ttf_unhinted all_web all_web_unhinted all_otf" >> "$GEN_MAKE_FILE"
+ for style in "${all_styles[@]}"; do
+ echo -n " ${style} ${style}_ttf ${style}_ttf_unhinted ${style}_otf" >> "$GEN_MAKE_FILE"
+ done
+ echo "" >> "$GEN_MAKE_FILE"
+ fi
+
+ # ————————————————————————————————————————————————————————————————————————————————————————————————
+ # summary
+ if ! $VENV_ACTIVE; then
+ echo "You now need to activate virtualenv by:"
+ echo " source '$0'"
+ echo "Or directly by sourcing the activate script:"
+ echo " source '$VENV_DIR/bin/activate'"
+ fi
+fi