1 #!/bin/ksh
   2 # vim: set ts=8 sts=8 sw=8 noet:
   3 
   4 set -o errexit
   5 set -o pipefail
   6 
   7 function usage
   8 {
   9         printf "Usage: $0 %s %s %s %s[...]\n" "<build_dir>" \
  10             "<ctf_object_dir>" "<container_version>" "<program>" >&2
  11         exit 1
  12 }
  13 
  14 # Process input arguments:
  15 BUILD_DIR="$1"
  16 CTF_OBJECT_DIR="$2"
  17 CONTAINER_VERSION="$3"
  18 if [[ ! -d "${BUILD_DIR}" || -z "${CTF_OBJECT_DIR}" || \
  19     -z "${CONTAINER_VERSION}" ]]; then
  20         usage
  21 fi
  22 shift 3
  23 
  24 # Process input program list:
  25 if (( $# < 1 )); then
  26         usage
  27 fi
  28 PROGRAMS="$*"
  29 
  30 # Read from environment:
  31 if [[ -z "${DESTDIR}" ]]; then
  32         printf "Must set DESTDIR in the environment\n" >&2
  33         exit 1
  34 fi
  35 
  36 # These may contain wildcards, so expand:
  37 CTFMERGE="$(echo $CTFMERGE)"
  38 CTFCONVERT="$(echo $CTFCONVERT)"
  39 if [[ ! -n "${CTFMERGE}" || ! -n "${CTFCONVERT}" ]]; then
  40         printf "You must set CTFMERGE and CTFCONVERT in the environment.\n" >&2
  41         exit 1
  42 fi
  43 if [[ ! -x "${CTFMERGE}" ]]; then
  44         printf "Could not find CTFMERGE at '%s'\n" "${CTFMERGE}" >&2
  45         exit 1
  46 fi
  47 if [[ ! -x "${CTFCONVERT}" ]]; then
  48         printf "Could not find CTFCONVERT at '%s'\n" "${CTFCONVERT}" >&2
  49         exit 1
  50 fi
  51 
  52 # Convert DWARF to CTF in every object file we can find:
  53 rm -rf "${CTF_OBJECT_DIR}"
  54 mkdir -p "${CTF_OBJECT_DIR}"
  55 (cd "${BUILD_DIR}" && find * -name '*.o' -type f) | \
  56     sort | while read objf; do
  57         printf "  CTFCONVERT %s\n" "${objf}" >&2
  58         ctff="$(echo "$objf" | sed -e 's,/,%,g' -e 's/\.o$/\.ctf/')"
  59         ${CTFCONVERT} -l "${CONTAINER_VERSION}" \
  60             -o "${CTF_OBJECT_DIR}/${ctff}" \
  61             "${BUILD_DIR}/${objf}"
  62 done
  63 
  64 # Merge the CTF into the set of programs we ship:
  65 for program in ${PROGRAMS}; do
  66         program_path="${DESTDIR}${program}"
  67         printf "  CTFMERGE   %s\n" "${program_path}" >&2
  68         chmod u+w "${program_path}"
  69         ${CTFMERGE} -l "${CONTAINER_VERSION}" \
  70             -o "${program_path}" \
  71             ${CTF_OBJECT_DIR}/*.ctf
  72 done