1#!/usr/bin/env bash 2 3# This script looks for the necessary BOOST sub-libraries. 4# If found, it prints out two SHELL assignments (to be processed 5# using the eval commmand) to BOOST_LIB_DIR & BOOST_LDLIBS. 6# If not, it prints out a warning and returns with exit code 1. 7 8SCRIPT_NAME=[[`basename "$0"`]] 9 10SUBLIBS="system thread filesystem" 11 12# taken from StackExchange 256434 13is_absolute() 14{ 15 case "$1" in 16 ///* | //) true;; 17 //*) false;; 18 /*) true;; 19 *) false;; 20 esac 21} 22 23################################################################## 24# Check we have 1 arg 25 26if [ "$#" \!= "1" -o -z "$1" ] 27then 28 echo "ERROR: expected 1 arg (full path of BOOST_HDR_DIR) $SCRIPT_NAME" > /dev/stderr 29 exit 1 30fi 31 32if [ \! -d "$1" -o \! -d "$1/boost" ] 33then 34 echo "ERROR: arg must be a directory containing subdir \"boost\" $SCRIPT_NAME" > /dev/stderr 35 exit 2 36fi 37 38BOOST_HDR_DIR="$1" 39 40# Check environment variable COCOA_EXTLIB_DIR 41 42if [ -z "$COCOA_EXTLIB_DIR" ] 43then 44 echo "ERROR: environment variable COCOA_EXTLIB_DIR not set. $SCRIPT_NAME" > /dev/stderr 45 exit 1 46fi 47 48# The following is a cryptic if...then block 49is_absolute "$COCOA_EXTLIB_DIR" || 50( 51 echo "ERROR: environment variable COCOA_EXTLIB_DIR is not absolute: \"$COCOA_EXTLIB_DIR\" $SCRIPT_NAME" > /dev/stderr 52 exit 1 53) 54 55if [ \! -d "$COCOA_EXTLIB_DIR" -o \! -d "$COCOA_EXTLIB_DIR/include" -o \! -d "$COCOA_EXTLIB_DIR/lib" ] 56then 57 echo "ERROR: environment variable COCOA_EXTLIB_DIR is implausible: \"$COCOA_EXTLIB_DIR\" $SCRIPT_NAME" > /dev/stderr 58 exit 1 59fi 60 61 62 63############################################################################# 64# Find directory of this script (taken from link below) 65# http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself 66 67pushd . > /dev/null 68SCRIPT_PATH="${BASH_SOURCE[0]}" 69while [ -L "$SCRIPT_PATH" ] 70do 71 cd "`dirname "$SCRIPT_PATH"`" 72 SCRIPT_PATH="$(readlink "`basename "$SCRIPT_PATH"`")" 73done 74cd "`dirname "$SCRIPT_PATH"`" > /dev/null 75SCRIPT_DIR="`pwd`" 76popd > /dev/null 77 78 79has_libboost_mt () 80{ 81 MISSING_SUBLIBS= 82 for sublib in $SUBLIBS 83 do 84 /bin/ls "${1}"/libboost_$sublib-mt.* >/dev/null 2>&1 85 if [ $? -ne 0 ] 86 then 87 MISSING_SUBLIBS="libboost_$sublib-mt $MISSING_SUBLIBS" 88 fi 89 done 90 test -z "$MISSING_SUBLIBS" 91} 92 93has_libboost () 94{ 95 MISSING_SUBLIBS= 96 for sublib in $SUBLIBS 97 do 98 /bin/ls "${1}"/libboost_$sublib.* >/dev/null 2>&1 99 if [ $? -ne 0 ] 100 then 101 MISSING_SUBLIBS="libboost_$sublib $MISSING_SUBLIBS" 102 fi 103 done 104 test -z "$MISSING_SUBLIBS" 105} 106 107 108# Special handling if BOOST is not fully installed... 109if [ -d "$BOOST_HDR_DIR/stage" -a -r "$BOOST_HDR_DIR/stage" -a -d "$BOOST_HDR_DIR/stage/lib" -a -r "$BOOST_HDR_DIR/stage/lib" ] 110then 111 BOOST_LIB_DIR="$BOOST_HDR_DIR/stage/lib" 112else 113 # CHEAP HACK: prefer lib/x86_64-linux-gnu over lib64 over lib 114 # Remember: GMP probably chose 64-bits 115 BOOST_LIB_DIR_DIR="`dirname \"$BOOST_HDR_DIR\"`" 116 for subdir in lib/x86_64-linux-gnu lib64 lib lib/i386-linux-gnu 117 do 118 DIR="$BOOST_LIB_DIR_DIR/$subdir" 119 if [ -d "$DIR" ] 120 then 121 if has_libboost_mt "$DIR" 122 then 123 TAIL="-mt" 124 BOOST_LIB_DIR="$DIR" 125 break 126 fi 127 if has_libboost "$DIR" 128 then 129 TAIL= 130 BOOST_LIB_DIR="$DIR" 131 break 132 fi 133 fi 134 done 135fi 136 137if [ -z "$BOOST_LIB_DIR" ] 138then 139 echo "WARNING: BOOST headers found, but not the required BOOST libs ($SUBLIBS) $SCRIPT_NAME" > /dev/stderr 140 echo > /dev/stderr 141 exit 1 142fi 143 144# Heuristic for recognizing standard installation of BOOST 145BOOST_LIB_DIR_DIR=`dirname "$BOOST_LIB_DIR"` 146if [ "$BOOST_LIB_DIR_DIR" = /usr -o "$BOOST_LIB_DIR_DIR" = /usr/local ] 147then 148 BOOST_IS_STANDARD=yes ## not currently used 149else 150 TAIL="-symlink" 151 for sublib in $SUBLIBS 152 do 153 BOOST_LIB_ORIG=`/bin/ls "$BOOST_LIB_DIR"/libboost_$sublib$THREADED.* | head -1` 154 BOOST_LIB_EXTN=`"$SCRIPT_DIR/extn.sh" "$BOOST_LIB_ORIG"` 155 /bin/ln -s "$BOOST_LIB_ORIG" $COCOA_EXTLIB_DIR/lib/libboost_$sublib-symlink.$BOOST_LIB_EXTN 156 done 157fi 158 159BOOST_LDLIBS= 160for sublib in $SUBLIBS 161do 162 BOOST_LDLIBS="-lboost_$sublib$TAIL $BOOST_LDLIBS" 163done 164echo "BOOST_LIB_DIR=\"$BOOST_LIB_DIR\"" 165echo "BOOST_LDLIBS=\"$BOOST_LDLIBS\"" 166exit 0 167