#!/bin/env bash cc="gcc" ld="gcc" ar="ar" cflags="-std=c99 -fPIC -Wall -Wextra -g -Wno-error -pedantic -lm -ffast-math" proc=$(nproc) rm -rf ./include/ rm -rf ./lib/ rm -rf ./bin/ rm -rf ./obj/ mkdir ./include/ mkdir ./lib/ mkdir ./bin/ mkdir ./obj/ echo "[BUILD] ungrateful.c" $cc $cflags \ -c -o obj/ungrateful.o \ -g src/ungrateful.c if [[ $? -ne 0 ]]; then exit fi echo "[BUILD] cynic.c" $cc $cflags -Isrc/ \ -c -o obj/cynic.o \ -g src/cynic.c if [[ $? -ne 0 ]]; then exit fi $ar rcs lib/libungrateful.a obj/ungrateful.o $ar rcs lib/libcynic.a obj/cynic.o cp src/ungrateful.h include/ungrateful.h cp src/cynic.h include/cynic.h # ------------ Tests from here # if [[ $1 == "no_tests" ]]; then exit fi echo echo "---- Ungrateful tests ----" for test in tests/un/*.c; do fname=$(basename -- "$test") fname="${fname%.*}" echo "[BUILD] $test" $cc $cflags -o bin/$fname $test -Llib/ -Iinclude/ -lungrateful & if [[ $(jobs -r -p | wc -l) -ge $proc ]]; then wait fi done echo echo "---- Cynic tests ----" for test in tests/cyn/*.c; do fname=$(basename -- "$test") fname="${fname%.*}" echo "[BUILD] $test" $cc $cflags -o bin/$fname $test -Llib/ -Iinclude/ -lungrateful -lcynic & if [[ $(jobs -r -p | wc -l) -ge $proc ]]; then wait fi done wait echo "---- Compiled ----" echo echo "---- Running tests ----" passed=0 failed=0 for case in bin/*; do if [[ $1 == "quiet" ]]; then $case > /dev/null 2>&1 else $case fi if [[ $? -eq 0 ]]; then let "passed++" echo "[DONE] $case" else let "failed++" echo "[FAIL] $case" fi done echo echo "---- Done ----" echo "Passed: $passed, Failed: $failed"