C99 Compliance #29

Merged
jordan merged 11 commits from c99 into master 2024-01-13 22:13:46 +00:00
Showing only changes of commit 40a9c089ee - Show all commits

69
configure vendored
View file

@ -13,23 +13,44 @@ SRC="src"
INCLUDE="src/include" INCLUDE="src/include"
TOOLS="tools" TOOLS="tools"
CFLAGS="-Wall -Wextra -pedantic -std=c99 -O3 -pipe -D_DEFAULT_SOURCE -I${INCLUDE}" # Default compiler flags. These must be supported by all POSIX C compilers.
LIBS="-lm -pthread" # "Fancy" compilers that have additional options must be detected and set below.
CFLAGS="-O1 -D_DEFAULT_SOURCE -I${INCLUDE}"
LIBS="-lm -lpthread"
# Default args for all platforms.
SCRIPT_ARGS="--prefix=/usr/local --lib-name=Cytoplasm --lib-version=0.4.1"
# Set default args for all platforms # Set SSL flags depending on the platform.
SCRIPT_ARGS="--cc=c99 --prefix=/usr/local --enable-ld-extra --lib-name=Cytoplasm --lib-version=0.4.1 $@"
# Set platform specific args
case "$(uname)" in case "$(uname)" in
OpenBSD) OpenBSD)
SCRIPT_ARGS="--with-libressl $SCRIPT_ARGS" SCRIPT_ARGS="${SCRIPT_ARGS} --with-libressl"
;; ;;
*) *)
SCRIPT_ARGS="--with-openssl $SCRIPT_ARGS" SCRIPT_ARGS="${SCRIPT_ARGS} --with-openssl"
;; ;;
esac esac
# Set compiler depending on the platform.
case "$(uname)" in
Linux|NetBSD)
# These systems typically use GCC.
SCRIPT_ARGS="${SCRIPT_ARGS} --cc=gcc"
;;
OpenBSD|FreeBSD)
# These systems typically use Clang.
SCRIPT_ARGS="${SCRIPT_ARGS} --cc=clang"
;;
*)
# Use default compiler which is required to be present on
# all POSIX-compliant systems.
SCRIPT_ARGS="${SCRIPT_ARGS} --cc=c99"
;;
esac
# Append any additional args specified by user
SCRIPT_ARGS="${SCRIPT_ARGS} $@"
echo "Processing options..." echo "Processing options..."
echo "Ran with arguments: $SCRIPT_ARGS" echo "Ran with arguments: $SCRIPT_ARGS"
@ -38,6 +59,14 @@ for arg in $SCRIPT_ARGS; do
case "$arg" in case "$arg" in
--cc=*) --cc=*)
CC=$(echo "$arg" | cut -d '=' -f 2-) CC=$(echo "$arg" | cut -d '=' -f 2-)
case "${CC}" in
gcc*|clang*)
# "Fancy" compilers that support a plethora of additional flags we
# want to enable if present.
CFLAGS="-Wall -Werror -pedantic -std=c99 ${CFLAGS}"
LDFLAGS="-flto -fdata-sections -ffunction-sections -s -Wl,-gc-sections"
;;
esac
;; ;;
--with-openssl) --with-openssl)
TLS_IMPL="TLS_OPENSSL" TLS_IMPL="TLS_OPENSSL"
@ -54,12 +83,6 @@ for arg in $SCRIPT_ARGS; do
--prefix=*) --prefix=*)
PREFIX=$(echo "$arg" | cut -d '=' -f 2-) PREFIX=$(echo "$arg" | cut -d '=' -f 2-)
;; ;;
--enable-ld-extra)
LD_EXTRA="-flto -fdata-sections -ffunction-sections -s -Wl,-gc-sections"
;;
--disable-ld-extra)
LD_EXTRA=""
;;
--lib-name=*) --lib-name=*)
LIB_NAME=$(echo "$arg" | cut -d '=' -f 2-) LIB_NAME=$(echo "$arg" | cut -d '=' -f 2-)
;; ;;
@ -68,21 +91,10 @@ for arg in $SCRIPT_ARGS; do
;; ;;
--enable-debug) --enable-debug)
DEBUG="-O0 -g" DEBUG="-O0 -g"
echo "Notice: --enable-debug implies --disable-ld-extra and --no-static."
echo "You must explicitly provide --enable-ld-extra and/or --static after"
echo "specifying --enable-debug if you wish to enable these features in debug mode."
LD_EXTRA=""
STATIC=""
;; ;;
--disable-debug) --disable-debug)
DEBUG="" DEBUG=""
;; ;;
--static)
STATIC="-static -Wl,-static"
;;
--no-static)
STATIC=""
;;
*) *)
echo "Invalid argument: $arg" echo "Invalid argument: $arg"
exit 1 exit 1
@ -96,7 +108,7 @@ if [ -n "$TLS_IMPL" ]; then
fi fi
CFLAGS="${CFLAGS} '-DLIB_NAME=\"${LIB_NAME}\"' '-DLIB_VERSION=\"${LIB_VERSION}\"' ${DEBUG}" CFLAGS="${CFLAGS} '-DLIB_NAME=\"${LIB_NAME}\"' '-DLIB_VERSION=\"${LIB_VERSION}\"' ${DEBUG}"
LDFLAGS="${LIBS} ${LD_EXTRA}" LDFLAGS="${LIBS} ${LDFLAGS}"
# #
# Makefile generation # Makefile generation
@ -159,16 +171,13 @@ compile_bin() {
echo "${out}: ${OUT}/lib/lib${LIB_NAME}.a ${OUT}/lib/lib${LIB_NAME}.so ${src}" echo "${out}: ${OUT}/lib/lib${LIB_NAME}.a ${OUT}/lib/lib${LIB_NAME}.so ${src}"
echo "${TAB}@mkdir -p ${OUT}/bin" echo "${TAB}@mkdir -p ${OUT}/bin"
echo "${TAB}\$(CC) \$(CFLAGS) -o \"${out}\" \"${src}\" -L${OUT}/lib \$(LDFLAGS) -l${LIB_NAME} ${STATIC}" echo "${TAB}\$(CC) \$(CFLAGS) -o \"${out}\" \"${src}\" -L${OUT}/lib \$(LDFLAGS) -l${LIB_NAME}"
} }
compile_doc() { compile_doc() {
src="$1" src="$1"
out="$2" out="$2"
if [ -z "${STATIC}" ]; then
pref="LD_LIBRARY_PATH=${OUT}/lib " pref="LD_LIBRARY_PATH=${OUT}/lib "
fi
echo "${out}: ${OUT}/bin/hdoc ${src}" echo "${out}: ${OUT}/bin/hdoc ${src}"
echo "${TAB}@mkdir -p ${OUT}/man/man3" echo "${TAB}@mkdir -p ${OUT}/man/man3"