#!/bin/sh set -e BUILD_DIR="BUILD" INSTALL_DIR=$PWD/install CFLAGS="-Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token -Wno-unused-command-line-argument" BUILD_SHARED=1 POSIX_SUPPORT=1 BUILD_PROGRAMS=1 SRC_DIR="src" INCLUDE_DIR="include" PROGRAMS_DIR="programs" OUTPUT_NAME="libdcfg" for arg in "$@"; do case $arg in --debug) CFLAGS="$CFLAGS -g -O0" ;; --release) CFLAGS="$CFLAGS -O2" ;; --no-posix) POSIX_SUPPORT=0 ;; --no-programs) BUILD_PROGRAMS=0 ;; --clean) rm -rf "$BUILD_DIR" "$INSTALL_DIR"; echo "Cleaned."; exit 0 ;; esac done # Detect SunOS OS=`uname` echo "Detected os:" $OS SHARED_FLAG="-shared" PIC_FLAG="-fPIC" if [ "$OS" = "SunOS" ]; then SHARED_FLAG="-G" PIC_FLAG="-KPIC" CFLAGS=`echo "$CFLAGS" | sed 's/-pedantic//g'` fi # Setup directories mkdir -p "$BUILD_DIR" "$INSTALL_DIR/lib" "$INSTALL_DIR/include" "$INSTALL_DIR/bin" # Compiler and linker CC=${CC:-cc} if [ "$OS" = "SunOS" ] && [ "$CC" = "cc" ]; then CFLAGS="$CFLAGS -xc99" else CFLAGS="$CFLAGS -std=c99" fi if [ "$POSIX_SUPPORT" -eq 1 ]; then CFLAGS="$CFLAGS -DDCFG_POSIX_SUPPORT=1" fi CFLAGS="$CFLAGS $PIC_FLAG -lm" echo "Building DCFG..." cd "$BUILD_DIR" set -x # Shared library $CC $CFLAGS $SHARED_FLAG "../$SRC_DIR/dcfg.c" -I"../$INCLUDE_DIR" -o "$OUTPUT_NAME.so" $LIBS # Static library $CC -c $CFLAGS "../$SRC_DIR/dcfg.c" -I"../$INCLUDE_DIR" -o dcfg.o if [ "$OS" = "SunOS" ]; then CC -xar -o "$OUTPUT_NAME.a" dcfg.o else ar rcs "$OUTPUT_NAME.a" dcfg.o fi cp "$OUTPUT_NAME.so" "$INSTALL_DIR/lib/" cp "$OUTPUT_NAME.a" "$INSTALL_DIR/lib/" cp -r "../$INCLUDE_DIR/"* "$INSTALL_DIR/include/" if [ "$BUILD_PROGRAMS" -eq 1 ]; then for prog in ../"$PROGRAMS_DIR"/*.c; do prog_name=`basename "$prog" .c` $CC $CFLAGS "$prog" -I"../$INCLUDE_DIR" $OUTPUT_NAME.a $LIBS -o "$prog_name" cp "$prog_name" "$INSTALL_DIR/bin/" done fi echo "Done. Installed to $INSTALL_DIR"