#!/bin/sh # shellcheck disable=SC2086 # default config ####################################################################### HC=ghc-8.2.2 CABAL=cabal CABALPLAN=cabal-plan JOBS=4 LIBTESTS=true CLITESTS=true CABALSUITETESTS=true LIBONLY=false DEPSONLY=false DOCTEST=false BENCHMARKS=false VERBOSE=false HACKAGETESTSALL=false TARGETS="" STEPS="" EXTRAHCS="" LISTSTEPS=false # Help ####################################################################### show_usage() { cat <>> $PRETTYCMD $RESET" start_time=$(date +%s) if $VERBOSE; then "$@" 2>&1 else "$@" > "$OUTPUT" 2>&1 fi # echo "MOCK" > "$OUTPUT" RET=$? end_time=$(date +%s) duration=$((end_time - start_time)) tduration=$((end_time - JOB_START_TIME)) if [ $RET -eq 0 ]; then if ! $VERBOSE; then # if output is relatively short, show everything if [ "$(wc -l < "$OUTPUT")" -le 50 ]; then cat "$OUTPUT" else echo "..." tail -n 20 "$OUTPUT" fi rm -f "$OUTPUT" fi echo "$GREEN<<< $PRETTYCMD $RESET ($duration/$tduration sec)" # bottom-margin echo "" else if ! $VERBOSE; then cat "$OUTPUT" fi echo "$RED<<< $PRETTYCMD $RESET ($duration/$tduration sec, $RET)" echo "$RED<<< $* $RESET ($duration/$tduration sec, $RET)" rm -f "$OUTPUT" exit 1 fi } print_header() { TITLE=$1 TITLEPAT="$(echo "$TITLE"|sed 's:.:=:g')" echo "$CYAN===X============================================================ $(date +%T) ===$RESET" \ | sed "s#X$TITLEPAT=# $TITLE #" } # getopt ####################################################################### while [ $# -gt 0 ]; do arg=$1 case $arg in --help) show_usage exit ;; -j|--jobs) JOBS="$2" shift shift ;; --lib-only) LIBONLY=true shift ;; --cli) LIBONLY=false shift ;; --run-lib-tests) LIBTESTS=true shift ;; --no-run-lib-tests) LIBTESTS=false shift ;; --run-cli-tests) CLITESTS=true shift ;; --no-run-cli-tests) CLITESTS=false shift ;; --run-lib-suite) LIBSUITE=true shift ;; --no-run-lib-suite) LIBSUITE=false shift ;; --run-cli-suite) CLISUITE=true shift ;; --no-run-cli-suite) CLISUITE=false shift ;; -w|--with-compiler) HC=$2 shift shift ;; --with-cabal) CABAL=$2 shift shift ;; --with-cabal-plan) CABALPLAN=$2 shift shift ;; --extra-hc) EXTRAHCS="$EXTRAHCS $2" shift shift ;; --doctest) DOCTEST=true shift ;; --no-doctest) DOCTEST=false shift ;; --solver-benchmarks) BENCHMARKS=true shift ;; --no-solver-benchmarks) BENCHMARKS=false shift ;; --complete-hackage-tests) HACKAGETESTSALL=true shift ;; --partial-hackage-tests) HACKAGETESTSALL=false shift ;; -v|--verbose) VERBOSE=true shift ;; -q|--quiet) VERBOSE=false shift ;; -s|--step) STEPS="$STEPS $2" shift shift ;; --list-steps) LISTSTEPS=true shift ;; *) echo "Unknown option $arg" exit 1 esac done # calculate steps and build targets ####################################################################### # If there are no explicit steps given calculate them if $LIBONLY; then CLITESTS=false CLISUITE=false BENCHMARKS=false fi if [ -z "$STEPS" ]; then STEPS="print-config print-tool-versions" if ! $LIBONLY; then STEPS="$STEPS make-cabal-install-dev"; fi STEPS="$STEPS build" if $DOCTEST; then STEPS="$STEPS doctest"; fi if $LIBTESTS; then STEPS="$STEPS lib-tests"; fi if $LIBSUITE; then STEPS="$STEPS lib-suite"; fi if $LIBSUITE && [ -n "$EXTRAHCS" ]; then STEPS="$STEPS lib-suite-extras"; fi if $CLITESTS; then STEPS="$STEPS cli-tests"; fi if $CLISUITE; then STEPS="$STEPS cli-suite"; fi if $BENCHMARKS; then STEPS="$STEPS solver-benchmarks-tests solver-benchmarks-run"; fi STEPS="$STEPS time-summary" fi TARGETS="Cabal cabal-testsuite" if ! $LIBONLY; then TARGETS="$TARGETS cabal-install"; fi if $BENCHMARKS; then TARGETS="$TARGETS solver-benchmarks"; fi if $LISTSTEPS; then echo "Targets: $TARGETS" echo "Steps: $STEPS" exit fi # Adjust runtime configuration ####################################################################### TESTSUITEJOBS="-j$JOBS" JOBS="-j$JOBS" # assume compiler is GHC RUNHASKELL=$(echo $HC | sed -E 's/ghc(-[0-9.]*)$/runghc\1/') if [ "$(uname)" = "Linux" ]; then ARCH="x86_64-linux" else ARCH="x86_64-osx" fi if $LIBONLY; then PROJECTFILE=cabal.project.validate.libonly else PROJECTFILE=cabal.project.validate fi BASEHC=ghc-$($HC --numeric-version) BUILDDIR=dist-newstyle-validate-$BASEHC CABAL_TESTSUITE_BDIR="$(pwd)/$BUILDDIR/build/$ARCH/$BASEHC/cabal-testsuite-3" CABALNEWBUILD="${CABAL} v2-build $JOBS -w $HC --builddir=$BUILDDIR --project-file=$PROJECTFILE" CABALPLANLISTBIN="${CABALPLAN} list-bin --builddir=$BUILDDIR" # header ####################################################################### step_print_config() { print_header print-config cat <