#!/usr/bin/env bash # # Time running a single parse without invoking a compare with emacs. set -euo pipefail IFS=$'\n\t' DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" : ${PROFILE:="debug"} ############## Setup ######################### function cleanup { for f in "${folders[@]}"; do log "Deleting $f" rm -rf "$f" done } folders=() for sig in EXIT INT QUIT HUP TERM; do trap "set +e; cleanup" "$sig" done function die { local status_code="$1" shift (>&2 echo "${@}") exit "$status_code" } function log { (>&2 echo "${@}") } ############## Program ######################### function main { if [ "$#" -gt 0 ]; then export CARGO_TARGET_DIR="$1" else local work_directory=$(mktemp -d -t 'organic.XXXXXX') folders+=("$work_directory") export CARGO_TARGET_DIR="$work_directory" fi local features=(compare foreign_document_test tracing event_count wasm wasm_test) ENABLED_FEATURES= for_each_combination "${features[@]}" } function for_each_combination { local additional_flags=() if [ "$PROFILE" = "dev" ] || [ "$PROFILE" = "debug" ]; then PROFILE="debug" else additional_flags+=(--profile "$PROFILE") fi local flag=$1 shift if [ "$#" -gt 0 ]; then ENABLED_FEATURES="$ENABLED_FEATURES" for_each_combination "${@}" elif [ -z "$ENABLED_FEATURES" ]; then (cd "$DIR/../" && printf "\n\n\n========== no features ==========\n\n\n" && set -x && cargo build "${additional_flags[@]}" --no-default-features) else (cd "$DIR/../" && printf "\n\n\n========== %s ==========\n\n\n" "${ENABLED_FEATURES:1}" && set -x && cargo build "${additional_flags[@]}" --no-default-features --features "${ENABLED_FEATURES:1}") fi ENABLED_FEATURES="$ENABLED_FEATURES,$flag" if [ "$#" -gt 0 ]; then ENABLED_FEATURES="$ENABLED_FEATURES" for_each_combination "${@}" else (cd "$DIR/../" && printf "\n\n\n========== %s ==========\n\n\n" "${ENABLED_FEATURES:1}" && set -x && cargo build "${additional_flags[@]}" --no-default-features --features "${ENABLED_FEATURES:1}") fi } main "${@}"