From 6a13171bf1b3f231c6a82b3dc569b096837810df Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Thu, 11 Sep 2025 21:12:30 -0400 Subject: [PATCH] save --- configure | 68 +++++++++++++++++++++++++++++++-------------------- src/main.c | 3 ++- tools/Cleanup | 25 +++++++++---------- 3 files changed, 55 insertions(+), 41 deletions(-) diff --git a/configure b/configure index 49b831f..073fc3e 100755 --- a/configure +++ b/configure @@ -7,70 +7,84 @@ Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. - CC C compiler command [detected] - CFLAGS C compiler flags [-g, ...] - LDFLAGS C linker flags +CC C compiler command [detected] +CFLAGS C compiler flags [-g, ...] +LDFLAGS C linker flags - --prefix= Set the install path - --debug Flags for debug build, overides CFLAGS +--prefix= Set the install path +--debug Flags for debug build, overrides CFLAGS EOF exit 0 } -echo () { printf "%s\n" "$*" ; } -cmdexists () { type "$1" >/dev/null 2>&1 ; } -trycc () { test -z "$CC" && cmdexists "$1" && CC=$1 ; } +cmdexists() { type "$1" >/dev/null 2>&1 ; } +trycc() { [ -z "$CC" ] && cmdexists "$1" && CC=$1 ; } -prefix=/usr/bin/ -CFLAGS="-std=c23 -O2 -pipe -Wall -Wextra -Wpedantic -Wformat=2 -Wshadow -Wcast-qual -Wcast-align=strict -Wconversion -Wsign-conversion -Wnull-dereference -Wstrict-overflow=5 -Wstrict-aliasing=2 -Wswitch-enum -Wundef -fstack-protector-strong -D_FORTIFY_SOURCE=3 -fPIE -pie -fno-plt -Wl,-z,relro,-z,now" # release flags +prefix=/usr/local +CFLAGS="-std=c23" LDFLAGS= CC= printf "checking for C compiler... " -trycc clang trycc gcc +trycc clang trycc cc trycc icx printf "%s\n" "$CC" DEBUG=false -for arg ; do +for arg; do case "$arg" in ---help|h) usage ;; +--help|-h) usage ;; --prefix=*) prefix=${arg#*=} ;; ---debug=*) DEBUG=true ;; +--debug) DEBUG=true ;; CFLAGS=*) CFLAGS=${arg#*=} ;; LDFLAGS=*) LDFLAGS=${arg#*=} ;; CC=*) CC=${arg#*=} ;; -*) prinf "Unrecognized option %s" $arg;; +*) printf "Unrecognized option %s\n" "$arg" ;; esac done - printf "checking whether C compiler works... " -status="fail" tmpc="$(mktemp -d)/test.c" echo "typedef int x;" > "$tmpc" -if output=$($CC $CFLAGS -c -o /dev/null "$tmpc" 2>&1) ; then +if output=$($CC $CFLAGS -c -o /dev/null "$tmpc" 2>&1); then printf "yes\n" else printf "no; %s\n" "$output" exit 1 fi -if [ -z "$DEBUG" ]; then -CFLAGS="-std=c23 -O0 -g3 -Wall -Wextra -Wpedantic -Werror -Wshadow -Wdouble-promotion -Wformat=2 -Wnull-dereference -Wconversion -Wsign-conversion -Wcast-qual -Wcast-align=strict -Wpointer-arith -Wstrict-overflow=5 -Wstrict-aliasing=2 -Wundef -Wunreachable-code -Wswitch-enum -fanalyzer -fsanitize=undefined,address -fstack-protector-strong -D_FORTIFY_SOURCE=3" -fi +GDEBUGCFLAGS="-std=c23 -O0 -g3 -Wall -Wextra -Wpedantic -Werror -Wshadow -Wdouble-promotion -Wformat=2 -Wnull-dereference -Wconversion -Wsign-conversion -Wcast-qual -Wcast-align=strict -Wpointer-arith -Wstrict-overflow=5 -Wstrict-aliasing=2 -Wundef -Wunreachable-code -Wswitch-enum -fanalyzer -fsanitize=undefined,address -fstack-protector-strong -D_FORTIFY_SOURCE=3" +CDEBUGCFLAGS="-std=gnu2x -O0 -g3 -Wall -Wextra -Wpedantic -Werror -Wshadow -Wdouble-promotion -Wformat=2 -Wnull-dereference -Wconversion -Wsign-conversion -Wcast-qual -Wcast-align=strict -Wpointer-arith -Wstrict-overflow=5 -Wstrict-aliasing=2 -Wundef -Wunreachable-code -Wswitch-enum -fanalyzer -fsanitize=undefined,address -fstack-protector-strong -D_FORTIFY_SOURCE=3" -case "$OSTYPE" -case "cygwin"|"msys") echo "enabling windows specific flags" ; CFLAGS="-v ${CFLAGS}";; +if [ -z "$DEBUG" ]; then +case "$CC" in +gcc) CFLAGS="$GDEBUGFLAGS";; +clang) CFLAGS="$CDEBUGFLAGS";; *) ;; easc +else +case "$CC" in +gcc) ;; +clang) ;; +*) ;; +easc +fi + +case "$OSTYPE" in +cygwin|msys) +echo "enabling windows specific flags" +CFLAGS="-v $CFLAGS" +;; +esac printf "creating config.mak... " -printf "PREFIX=%s\n" "$prefix" > config.mak -printf "CFLAGS=%s\n" "$CFLAGS" >> config.mak -printf "LDFLAGS=%s\n" "$LDFLAGS" >> config.mak -printf "CC=%s\n" "$CC" >> config.mak +{ +printf "PREFIX=%s\n" "$prefix" +printf "CFLAGS=%s\n" "$CFLAGS" +printf "LDFLAGS=%s\n" "$LDFLAGS" +printf "CC=%s\n" "$CC" +} > config.mak printf "done\n" diff --git a/src/main.c b/src/main.c index a3f36c9..c104635 100644 --- a/src/main.c +++ b/src/main.c @@ -48,7 +48,8 @@ static void usage(int status) print_option("--make", "Use the GNU make build system (default)"); print_option("--bare", "Minimal C project structure"); print_option("--flat", "All files in project root."); - print_option("--extras=,", "Extra build options, Pass list to list out options."); + print_option("--extras=,", + "Extra build options, Pass list to list out options."); puts(" --help display this help text and exit"); puts(" --version output version information and exit"); } diff --git a/tools/Cleanup b/tools/Cleanup index 53e9f96..8fd1898 100755 --- a/tools/Cleanup +++ b/tools/Cleanup @@ -1,21 +1,20 @@ #!/bin/sh - # Usage: ./Cleanup fatal() { - echo "$@" - echo fail. - exit 1 + echo "fatal: $*" >&2 + exit 1 } -if [ ! -d "./tools" ]; then - echo "error: must be run from parent directory" - exit 1 -fi +run() { + "$@" || fatal "could not run: $*" +} -sh ./tools/format || fatal Could not run './tools/format' -rm -rf .cache || fatal Could not run 'rm -rf .cache' -rm -f compile_commands.json || fatal Could not run 'rm -f compile_commands.json' -make distclean || fatal Could not run 'make dist-clean' +[ -d "./tools" ] || fatal "must be run from parent directory" -echo done. +run sh ./tools/format +run rm -rf .cache +run rm -f compile_commands.json +run make distclean + +echo "done."