cxxall 1.59 KB
Newer Older
1 2 3 4 5 6
#! /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 <ewen@imatix.com>, 2014-07-19
7
# Updated by Ewen McNeill <ewen@imatix.com>, 2014-07-24
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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"
25
CXXFLAGS="-DZMQ_HAVE_ZOS -DHAVE_CONFIG_H -D_REENTRANT -D_THREAD_SAFE -DZMQ_USE_POLL"
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
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