# # $Id: compile.in,v 1.39 2004/02/03 22:59:10 jmmv Exp $ # C/C++ code compilation functions. # # buildtool # Copyright (c) 2003, 2004 Julio M. Merino Vidal. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the author nor the names of contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # BT_TARGET_VARS+="BT_FLAGS_CPP BT_FLAGS_CC BT_FLAGS_CXX" btown_compile_parse_args() { local arg= local res= local obj= src= local flags_D= flags_I= flags_O= flags_W= flags_other= flags_unknown= [ -n "${LogFile}" ] && echo "[compile: original call] $*" >> ${LogFile} while [ $# -gt 0 ]; do arg=$(echo ${1} | sed -e 's|"|\\"|g') case ${arg} in -D*) flags_D+=${arg} ;; -I*) arg=$(echo ${arg} | sed -e s/-I//) [ -d ${arg} ] && flags_I="${flags_I} -I$(cd ${arg} && pwd)" ;; -L*|-l*|-Wl*) ;; -O*) flags_O+=${arg} ;; -W*) flags_W+=${arg} ;; -c) ;; -g) flags_other+=${arg} ;; -o) obj=${2}; shift ;; *) if echo ${arg} | grep '^-' >/dev/null; then btcmn_warn "compile: passing unhandled option \`${arg}'" flags_unknown+=${arg} else src=${arg} fi ;; esac shift done if echo ${obj} | grep '.po$' >/dev/null; then flags_other+=${BT_LIB_PIC_COMPILE_PREARGS} fi res="${flags_D} ${flags_I} ${flags_W} ${flags_O} ${flags_other} ${flags_unknown} -o ${obj} -c ${src}" # NOLINT [ -n "${LogFile}" ] && \ echo "[compile: call rewrote as] ${res}" >> ${LogFile} echo ${res} } bt_compile_c() { local cmd [ -z ${BT_PROG_CC} ] && btcmn_err \ "compile: no C compiler available (BT_PROG_CC is not set)" \ " add a call to bt_check_env_c in your config script" cmd="${BT_PROG_CC} $(btown_compile_parse_args $*)" echo "[compile] ${cmd}" ${cmd} || bt_die } bt_compile_cxx() { local cmd [ -z ${BT_PROG_CXX} ] && btcmn_err \ "compile: no C++ compiler available (BT_PROG_CXX is not set)" \ " add a call to bt_check_env_c in your config script" cmd="${BT_PROG_CXX} $(btown_compile_parse_args $*)" echo "[compile] ${cmd}" ${cmd} || bt_die } # Local Variables: *** # mode: shell-script *** # End: *** # vim: syntax=sh