#!/usr/bin/env bash # This is intended for quickly developming with flatcc tools # in a standalone directory set -e DIR=`pwd` HERE=`dirname $0` cd $HERE/.. ROOT=`pwd` function usage() { echo "Usage: <flatcc-dir>/scripts/`basename $0` [options] <path>" echo "" echo "Options:" echo " -g | --gitignore : create/update .gitignore file" echo " -b | --build : build flatcc (otherwise is must have been)" echo " -x | --example : copy example source and schema" echo " -s | --script : copy generic build script" echo " -a | --all : all of the above" echo " -h | --help" echo "" echo "Sets up a client project for use with flatcc." echo "" echo "Links flatcc into bin, lib, and include directories and optionally" echo "starts a build first. Optionally creates or updates a .gitignore file" echo "and a generic build script, and a sample project." echo "Also adds an empty generated directory for 'flatcc -o generated'," echo "'cc -I generated', and for git to ignore. 'build' directory" echo "will be ignored if '-b' is selected." echo "" echo "When using the build script (-s), place source and schema files in 'src'." echo "It is only meant for sharing small examples." echo "" echo "The flatcc project must be the parent of the path to this script." exit 1 } while [ $# -gt 0 ]; do case "$1" in # Standard help option. -h|-\?|-help|--help|--doc*) usage ;; -g|--gitignore) G=1 ;; -b|--build) B=1 ;; -s|--script) S=1 ;; -x|--example) X=1 ;; -a|--all) G=1; B=1; S=1; X=1 ;; -*) echo "Unknown option \"$1\""; usage ;; *) break ;; # unforced end of user options esac shift # next option done if [[ -z "$1" ]]; then echo "Please specify a path" usage fi echo "Building flatcc libraries and tool" if [[ ! -d "$ROOT/include/flatcc" ]]; then echo "script not located in flatcc project" fi if [[ -n "$B" ]]; then $ROOT/scripts/build.sh fi echo "Linking flatcc tool and library into $1" mkdir -p $DIR/$1 cd $DIR/$1 if [[ -n "$S" ]]; then echo "Copying build script" mkdir -p scripts mkdir -p src cp $ROOT/scripts/_user_build.in scripts/build.sh chmod +x scripts/build.sh fi if [[ -n "$X" ]]; then echo "Copying monster sample project" mkdir -p src cp $ROOT/samples/monster/monster.{c,fbs} src fi mkdir -p lib mkdir -p bin mkdir -p include ln -sf $ROOT/bin/flatcc bin/ ln -sf $ROOT/lib/libflatcc.a lib/ ln -sf $ROOT/lib/libflatccrt.a lib/ ln -sf $ROOT/lib/libflatcc_d.a lib/ ln -sf $ROOT/lib/libflatccrt_d.a lib/ ln -sf $ROOT/include/flatcc include/ if [[ -n "$G" ]]; then echo "Updating .gitignore" touch .gitignore grep -q '^bin/flatcc*' .gitignore || echo 'bin/flatcc*' >> .gitignore grep -q '^lib/libflatcc*.a' .gitignore || echo 'lib/libflatcc*.a' >> .gitignore grep -q '^include/flatcc' .gitignore || echo 'include/flatcc' >> .gitignore grep -q '^generated/' .gitignore || echo 'generated/' >> .gitignore if [[ -n "$S" ]]; then grep -q '^build/' .gitignore || echo 'build/' >> .gitignore fi fi