2025-07-26 22:20:41 +03:00
|
|
|
#!/bin/sh
|
2025-07-26 23:41:34 +03:00
|
|
|
|
2025-07-26 22:20:41 +03:00
|
|
|
set -e
|
|
|
|
|
|
|
|
BUILD_DIR="BUILD"
|
|
|
|
INSTALL_DIR="$(pwd)/install"
|
2025-07-27 23:23:34 +03:00
|
|
|
CFLAGS="-std=c99 -Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token"
|
2025-07-26 22:20:41 +03:00
|
|
|
BUILD_SHARED=1
|
|
|
|
PTHREAD_SUPPORT=1
|
|
|
|
POSIX_SUPPORT=1
|
2025-07-26 23:46:46 +03:00
|
|
|
BUILD_PROGRAMS=1
|
2025-07-26 22:20:41 +03:00
|
|
|
SRC_DIR="src"
|
|
|
|
INCLUDE_DIR="include"
|
2025-07-26 23:41:34 +03:00
|
|
|
PROGRAMS_DIR="programs"
|
2025-07-26 22:20:41 +03:00
|
|
|
OUTPUT_NAME="libdcfg"
|
|
|
|
|
|
|
|
for arg in "$@"; do
|
|
|
|
case $arg in
|
|
|
|
--debug) CFLAGS="$CFLAGS -g -O0" ;;
|
|
|
|
--release) CFLAGS="$CFLAGS -O2" ;;
|
|
|
|
--no-pthread) PTHREAD_SUPPORT=0 ;;
|
|
|
|
--no-posix) POSIX_SUPPORT=0 ;;
|
2025-07-26 23:41:34 +03:00
|
|
|
--with-programs) BUILD_PROGRAMS=1 ;;
|
2025-07-26 22:20:41 +03:00
|
|
|
--clean) rm -rf "$BUILD_DIR" "$INSTALL_DIR"; echo "Cleaned."; exit 0 ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
# Setup directories
|
2025-07-26 23:41:34 +03:00
|
|
|
mkdir -p "$BUILD_DIR" "$INSTALL_DIR/lib" "$INSTALL_DIR/include" "$INSTALL_DIR/bin"
|
2025-07-26 22:20:41 +03:00
|
|
|
|
|
|
|
# Compiler and linker
|
|
|
|
CC=${CC:-cc}
|
|
|
|
|
|
|
|
if [ "$PTHREAD_SUPPORT" -eq 1 ]; then
|
|
|
|
CFLAGS="$CFLAGS -DDCFG_PTHREAD_SUPPORT"
|
|
|
|
LIBS="$LIBS -lpthread"
|
|
|
|
fi
|
|
|
|
if [ "$POSIX_SUPPORT" -eq 1 ]; then
|
|
|
|
CFLAGS="$CFLAGS -DDCFG_POSIX_SUPPORT"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Building DCFG..."
|
|
|
|
cd "$BUILD_DIR"
|
|
|
|
|
|
|
|
set -x
|
2025-07-26 23:41:34 +03:00
|
|
|
# Shared library
|
2025-07-26 22:20:41 +03:00
|
|
|
$CC $CFLAGS -fPIC -shared "../$SRC_DIR/dcfg.c" -I"../$INCLUDE_DIR" -o "$OUTPUT_NAME.so" $LIBS
|
|
|
|
|
2025-07-26 23:41:34 +03:00
|
|
|
# Static library
|
2025-07-26 22:20:41 +03:00
|
|
|
$CC $CFLAGS -c "../$SRC_DIR/dcfg.c" -I"../$INCLUDE_DIR"
|
|
|
|
ar rcs "$OUTPUT_NAME.a" dcfg.o
|
|
|
|
set +x
|
2025-07-26 23:46:46 +03:00
|
|
|
#
|
2025-07-26 23:41:34 +03:00
|
|
|
# Build programs if requested
|
|
|
|
if [ "$BUILD_PROGRAMS" -eq 1 ]; then
|
|
|
|
echo "Building example programs..."
|
|
|
|
for src in "../$PROGRAMS_DIR"/*.c; do
|
|
|
|
prog=$(basename "$src" .c)
|
|
|
|
echo "Building $prog..."
|
2025-07-26 23:46:46 +03:00
|
|
|
$CC $CFLAGS -c "$src" -I"../$INCLUDE_DIR"
|
|
|
|
mkdir -p bin
|
|
|
|
$CC $CFLAGS "$prog.o" "$OUTPUT_NAME.a" $LIBS -o "bin/$prog"
|
2025-07-26 23:41:34 +03:00
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2025-07-26 23:46:46 +03:00
|
|
|
echo "Installing library..."
|
|
|
|
cp -r "../$INCLUDE_DIR/"* "$INSTALL_DIR/include/"
|
|
|
|
cp "$OUTPUT_NAME.so" "$INSTALL_DIR/lib/"
|
|
|
|
cp "$OUTPUT_NAME.a" "$INSTALL_DIR/lib/"
|
|
|
|
cp -r "bin/"* "$INSTALL_DIR/bin/"
|
|
|
|
|
2025-07-26 22:20:41 +03:00
|
|
|
echo "Done. Installed to $INSTALL_DIR"
|