maketests 2.52 KB
Newer Older
1
#! /bin/sh
2 3 4 5 6
# Build tests/* executables; assumes that libzmq.a or libzmq.so/libzmq.x
# is already built
#
# If libzmq.so and libzmq.x exist, then dynamic linking is used, otherwise
# static linking is used.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#
# Written by Ewen McNeill <ewen@imatix.com>, 2014-07-21
# Updated by Ewen McNeill <ewen@imatix.com>, 2014-07-22
#---------------------------------------------------------------------------

set -e    # Stop on errors

VERBOSE="${VERBOSE:-}"    # Set to non-empty for already done status
export VERBOSE

# Figure out where we are
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

# Locate compiler wrapper
ZCXX="${BIN_DIR}/zc++"

# Locate top of source tree, assuming we're in builds/zos
TOP="${BIN_DIR}/../.."
SRC="${TOP}/src"
TESTS="${TOP}/tests"

34 35 36 37 38 39 40
# Figure out how we are going to link to ZMQ
LINK_TYPE=unknown

if [ -f "${SRC}/platform.hpp" -a -f "${SRC}/libzmq.so" -a -f "${SRC}/libzmq.x" ]; then
  LINK_TYPE=dynamic
elif [ -f "${SRC}/platform.hpp" -a -f "${SRC}/libzmq.a" ]; then
  LINK_TYPE=static
41
else
42
  echo "Error: run makezmqlib to build libzmq.a and/or libzmq.so/libzmq.x first" >&2
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  exit 1
fi

# Copy in replacement test with timeout, if main version is not already
# up to date
#
if [ -f "${TESTS}/test_fork.cpp" ] && 
     grep "TIMEOUT" "${TESTS}/test_fork.cpp" >/dev/null 2>&1; then
  :  # Already copied in
else
  echo "Updating test_fork.cpp to version with master timeout"
  cp -p "${BIN_DIR}/test_fork.cpp" "${TESTS}/test_fork.cpp"
fi

# Compile all the source
58 59 60 61 62 63
if [ "${LINK_TYPE}" = "dynamic" ]; then
  ZCXXFLAGS="${ZCXXFLAGS} -Wc,DLL"
  export ZXCCFLAGS
  echo "Building tests to use DLL: ${ZCXXFLAGS}"
fi

64 65 66 67 68 69 70 71 72 73 74 75
cd "${TESTS}"
"${BIN_DIR}/cxxall"

# Link all the executables that are not already linked
skip() {
  OBJ="$1"
  EXE="$2"
  if [ -n "${VERBOSE}" ]; then
    echo "${OBJ} linked to ${EXE}"
  fi    
}

76
link() {
77 78 79
  OBJ="$1"
  EXE="$2"
  echo " LD ${EXE}"
80 81 82 83 84 85 86 87 88
  case "${LINK_TYPE}" in
    static)  "${ZCXX}" -L ../src -o "${EXE}" "${OBJ}" -lzmq
             ;;
    dynamic) "${ZCXX}" -o "${EXE}" "${OBJ}" ../src/libzmq.x
             ;;
    *)       echo "Do not know how to do ${LINK_TYPE} linking!" 2>&1
             exit 1
             ;;
  esac
89 90 91 92 93 94 95 96
}

for OBJ in *.o; do 
  EXE=$(echo "${OBJ}" | sed 's/\.o//;')
  if [ -f "${EXE}" ]; then 
    if [ "${EXE}" -nt	"${OBJ}" ]; then
      skip "${OBJ}" "${EXE}"
    else
97
      link "${OBJ}" "${EXE}"
98 99
    fi
  else
100
    link "${OBJ}" "${EXE}"
101 102
  fi
done