1#!/bin/bash 2# Suggested setup to use the script: 3# (on the root of the project) 4# $ NOCONFIGURE=1 ./autogen.sh && mkdir build && cd build 5# $ ../configure --with-freetype --with-glib --with-gobject --with-cairo 6# $ make -j5 && cd .. 7# $ src/dev-run.sh [FONT-FILE] [TEXT] 8# 9# Or, using cmake: 10# $ cmake -DHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild 11# $ src/dev-run.sh [FONT-FILE] [TEXT] 12# 13# If you want to open the result rendering using a GUI app, 14# $ src/dev-run.sh open [FONT-FILE] [TEXT] 15# 16# And if you are using iTerm2, you can use the script like this, 17# $ src/dev-run.sh img [FONT-FILE] [TEXT] 18# 19 20[ $# = 0 ] && echo Usage: "src/dev-run.sh [FONT-FILE] [TEXT]" && exit 21command -v entr >/dev/null 2>&1 || { echo >&2 "This script needs `entr` be installed"; exit 1; } 22 23 24GDB=gdb 25# if gdb doesn't exist, hopefully lldb exist 26command -v $GDB >/dev/null 2>&1 || export GDB="lldb" 27 28 29[ $1 = "open" ] && openimg=1 && shift 30OPEN=xdg-open 31[ "$(uname)" == "Darwin" ] && OPEN=open 32 33 34[ $1 = "img" ] && img=1 && shift 35# http://iterm2.com/documentation-images.html 36osc="\033]" 37if [[ $TERM == screen* ]]; then osc="\033Ptmux;\033\033]"; fi 38st="\a" 39if [[ $TERM == screen* ]]; then st="\a"; fi 40 41 42tmp=tmp.png 43[ -f 'build/build.ninja' ] && CMAKENINJA=TRUE 44# or "fswatch -0 . -e build/ -e .git" 45find src/ | entr printf '\0' | while read -d ""; do 46 clear 47 yes = | head -n`tput cols` | tr -d '\n' 48 if [[ $CMAKENINJA ]]; then 49 ninja -Cbuild hb-shape hb-view && { 50 build/hb-shape $@ 51 if [ $openimg ]; then 52 build/hb-view $@ -O png -o $tmp 53 $OPEN $tmp 54 elif [ $img ]; then 55 build/hb-view $@ -O png -o $tmp 56 printf "\n${osc}1337;File=;inline=1:`cat $tmp | base64`${st}\n" 57 else 58 build/hb-view $@ 59 fi 60 } 61 else 62 make -Cbuild/src -j5 -s lib && { 63 build/util/hb-shape $@ 64 if [ $openimg ]; then 65 build/util/hb-view $@ -O png -o $tmp 66 $OPEN $tmp 67 elif [ $img ]; then 68 build/util/hb-view $@ -O png -o $tmp 69 printf "\n${osc}1337;File=;inline=1:`cat $tmp | base64`${st}\n" 70 else 71 build/util/hb-view $@ 72 fi 73 } 74 fi 75done 76 77read -n 1 -p "[C]heck, [D]ebug, [R]estart, [Q]uit? " answer 78case "$answer" in 79c|C ) 80 if [[ $CMAKENINJA ]]; then 81 CTEST_OUTPUT_ON_FAILURE=1 CTEST_PARALLEL_LEVEL=5 ninja -Cbuild test 82 else 83 make -Cbuild -j5 check && .ci/fail.sh 84 fi 85;; 86d|D ) 87 if [[ $CMAKENINJA ]]; then 88 echo "Not supported on cmake builds yet" 89 else 90 build/libtool --mode=execute $GDB -- build/util/hb-shape $@ 91 fi 92;; 93r|R ) 94 src/dev-run.sh $@ 95;; 96* ) 97 exit 98;; 99esac 100