| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | 
							- #!/bin/sh
 
- set -euo pipefail
 
- IFS=$'\n\t'
 
- stdout() {
 
-   cat <<< "$@"
 
- }
 
- stderr() {
 
-   cat <<< "$@" 1>&2
 
- }
 
- prereqs () {
 
-   local E_BADARGS=65
 
-   if [ $# -eq 0 ]; then
 
-     stderr "Usage: $(basename $0) [prerequisite_program] [another_program...]"
 
-     return $E_BADARGS
 
-   fi
 
-   for prog in $@; do
 
-     hash $prog 2>&-
 
-     if [ $? -ne 0 ]; then
 
-       return 1
 
-     fi
 
-   done
 
- }
 
- usage() {
 
-   if [ $# -ne 0 ]; then
 
-     stdout $@
 
-   fi
 
-   stdout "Usage: $(basename $0) [options]"
 
-   stdout
 
-   stdout "A convenience script to quickly build the library with CMake."
 
-   stdout
 
-   stdout "Options:"
 
-   stdout "  [--shared|(--static)]   Builds either a static or a shared library"
 
-   stdout "  [--debug|(--release)]   Builds a certain variant of the library"
 
-   stdout "  -g,--generator name     The CMake generator to use ('Unix Makefiles')"
 
-   stdout "  -o,--output folder      The place to output the build files (./output)"
 
-   stdout
 
-   stdout "Examples:"
 
-   stdout "  ./build"
 
-   stdout "  ./build --shared --debug"
 
-   stdout "  ./build --static --release -o ~/my-output-folder"
 
- }
 
- check() {
 
-   local E_BADARGS=65
 
-   if [ $# -ne 1 ]; then
 
-     stderr "Usage: check prerequisite_program"
 
-     return $E_BADARGS
 
-   fi
 
-   prereqs $1
 
-   if [ $? -ne 0 ]; then
 
-     stderr "Failed to find `$1` on the command line:"
 
-     stderr "Please install it with your package manager"
 
-     return 1
 
-   fi
 
- }
 
- sanitize() {
 
-   local E_BADARGS=65
 
-   if [ $# -ne 1 ]; then
 
-     stderr "Usage: sanitize string_to_clean"
 
-     return $E_BADARGS
 
-   fi
 
-   echo $(echo "$1" | sed "s|[^A-Za-z]\+|-|g" | tr '[:upper:]' '[:lower:]')
 
-   return 0
 
- }
 
- build () {
 
-   # Get the build locations
 
-   local src_dir=$(cd $(dirname $0); pwd -P)
 
-   # Arguments
 
-   local E_BADARGS=65
 
-   local generator="Unix Makefiles"
 
-   local shared=NO
 
-   local build_type=Release
 
-   local output_dir="${src_dir}/output"
 
-   while (( "$#" )); do
 
-     case "$1" in
 
-       --debug) build_type=Release;;
 
-       --release) build_type=Debug;;
 
-       --shared) shared=YES;;
 
-       --static) shared=NO;;
 
-       --output) shift; out="$1";;
 
-       -o) shift; output_dir="$1";;
 
-       --generator) shift; generator="$1";;
 
-       -g) shift; generator="$1";;
 
-       --help) usage; return 0;;
 
-       --) shift; break;;
 
-       -*) usage "Bad argument $1"; return ${E_BADARGS};;
 
-       *) break;;
 
-     esac
 
-     shift
 
-   done
 
-   # Update the build folder
 
-   local build_dir=${output_dir}/build
 
-   local install_dir=${output_dir}/install
 
-   # Create the build folder
 
-   mkdir -p ${build_dir}
 
-   # Enter the build folder
 
-   cd ${build_dir}
 
-   trap 'cd ${src_dir}' INT TERM EXIT
 
-   # Do the CMake configuration
 
-   check cmake
 
-   cmake -G ${generator} -DCMAKE_BUILD_TYPE=${build_type} -DBUILD_SHARED_LIBS:BOOL=${shared} ${src_dir}
 
-   # Do the build
 
-   if [ "${generator}" = "Unix Makefiles" ]; then
 
-     check make
 
-     make all test
 
-   else
 
-     stderr "Unknown build system for ${generator}, go to ${build_dir} and run the correct build program"
 
-   fi
 
-   # Do the install
 
-   cmake -DCMAKE_INSTALL_PREFIX="${install_dir}" -P "${build_dir}/cmake_install.cmake"
 
-   # Return to the correct folder
 
-   trap - INT TERM EXIT
 
-   cd ${src_dir}
 
-   # Notify the user
 
-   stdout "Built files are available at ${install_dir}"
 
- }
 
- # If the script was not sourced we need to run the function
 
- case "$0" in
 
-   *"build")
 
-     build "$@"
 
-     ;;
 
- esac
 
 
  |