#! /bin/sh # Attempt to compile all *.cpp files in the current directory, that are # not already compiled. Uses zc++ wrapper around C++ compiler, to add # additional compile arguments. # # Written by Ewen McNeill , 2014-07-19 # Updated by Ewen McNeill , 2014-07-24 #--------------------------------------------------------------------------- VERBOSE="${VERBOSE:-}" # Set to non-empty for already done status export VERBOSE # Locate compiler wrapper BIN_DIR=$(dirname $0) if [ -z "${BIN_DIR}" ]; then BIN_DIR="."; fi case "${BIN_DIR}" in .) BIN_DIR="$(pwd)"; ;; /*) ;; *) BIN_DIR="$(pwd)/${BIN_DIR}"; ;; esac ZCXX="${BIN_DIR}/zc++" # Determine compile flags CPPFLAGS="-D_XOPEN_SOURCE_EXTENDED=1 -D_OPEN_THREADS=3 -D_OPEN_SYS_SOCK_IPV6" CXXFLAGS="-DZMQ_HAVE_ZOS -DHAVE_CONFIG_H -D_REENTRANT -D_THREAD_SAFE -DZMQ_USE_POLL" case $(pwd) in *src) CXXFLAGS="${CXXFLAGS} -I." ;; *tests) CXXFLAGS="${CXXFLAGS} -I. -I../src -I../include" ;; *) echo "Currently only builds in src/ and tests/" >&2 exit 1 ;; esac skip() { SRC="$1" OBJ="$2" if [ -n "${VERBOSE}" ]; then echo " ${SRC} compiled already" fi } compile() { SRC="$1" OBJ="$2" echo "CXX ${SRC}" "${ZCXX}" ${CXXFLAGS} ${CPPFLAGS} -+ -c -o "${OBJ}" "${SRC}" } for SRC in *.cpp; do OBJ=$(echo $SRC | sed 's/\.cpp/.o/;') if [ -f "${OBJ}" ]; then if [ "${OBJ}" -nt "${SRC}" ]; then skip "${SRC}" "${OBJ}" else compile "${SRC}" "${OBJ}" fi else compile "${SRC}" "${OBJ}" fi done