summaryrefslogtreecommitdiffstats
path: root/src/civetweb/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/civetweb/build')
-rwxr-xr-xsrc/civetweb/build138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/civetweb/build b/src/civetweb/build
new file mode 100755
index 00000000..2b423108
--- /dev/null
+++ b/src/civetweb/build
@@ -0,0 +1,138 @@
+#!/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