#!/bin/sh # caam - Configure And And Make # (C)2008-2012 by HIROSE, Yuuji [yuuji/at/gentei.org] # Last modified Mon Jul 30 08:09:22 2012 on firestorm # Update count: 40 # http://www.gentei.org/~yuuji/software/caam/ ca=`echo $CAAM_ADD|tr : ' '` cpx=`echo $CAAM_PREFIXES|tr : ' '` CAAM_GCC=${GCC:-`which gcc`} CAAM_CXX=${GCC:-`which c++`} if [ -x /usr/xpg4/bin/sh ]; then CAAM_SH=/usr/xpg4/bin/sh else CAAM_SH=`which sh` fi CONFIG_SHELL=${CONFIG_SHELL:-${CAAM_SH}} export CONFIG_SHELL # setup final callee ####DO=${DO:-${MAKE:-make}} CAAM_MAKE=${CAAM_MAKE:-${MAKE:-make}} CAAM_CFG=${CFG:-"$CONFIG_SHELL ./configure"} MKTGT='' CAAM_MKOPT=${MKOPT:-""} TGT2='' myname=`basename $0` mydir=`dirname $0` mydir=`(cd $mydir; pwd -P)` myargs=$* dir=`dirname $mydir` case "$dir" in */caam*) top=`dirname $dir` ;; *) top="$dir" ;; esac echo d=$dir, top=$top chasemytop () {( me=$0; cd $mydir while [ -L $me ]; do me=`ls -l $me|awk '{print $NF}'` d=`dirname $me` me=`basename $me` cd $d done (cd ..; pwd -P) )} mytop=`chasemytop` PROOT=$top CONFDIR=${CAAM_CONFDIR:-$mydir} DPF="$CONFDIR/caam.dirs" WRAPDIR=$mytop/wrap [ "$CAAM_DEBUG" ] && echo wrapdir=$WRAPDIR SUSPEND=: # Parse my own arguments while [ x"" != x"$1" ]; do case "$1" in --) break;; -gmaic) TGT2="install clean"; CAAM_MAKE=gmake;; -maic) TGT2="install clean";; -gmai) TGT2="install"; CAAM_MAKE=gmake;; -mai) TGT2="install";; -m) CAAM_CFG="echo configure done";; -t) shift; MKTGT=${MKTGT:+"all "}"$1" ;; -j[0-9]*) CAAM_MKOPT="$MKOPT${MKOPT:+ }$1";; -j) shift; CAAM_MKOPT="$MKOPT${MKOPT:+ }-j $1";; -k) CAAM_MKOPT="$MKOPT${MKOPT:+ }-k";; # -CC) setcc=1 ;; -c) DO="echo done";; -g) CAAM_MAKE=gmake ;; -s) shift; CAAM_MAKE="sleep $1; $CAAM_MAKE" ;; -S) SUSPEND=suspend ;; -d) debug=1 ;; *) break ;; esac shift done POSTDO=${TGT2:+" && ${CAAM_MAKE} $TGT2"} DO=${DO:-"${CAAM_MAKE} ${CAAM_MKOPT} $MKTGT$POSTDO"} # Add extra path for p in $ca; do case "$p" in /*) PATH=${p}/bin:$PATH ;; *) PATH=$PROOT/${p}/bin:$PATH ;; esac done defprefix="gnu graphics xc X11-contrib Xclient" [ -f $DPF ] && defprefix=`grep -v '^#' $DPF` dpx=${cpx:-$defprefix} # extract pkg-config path's pcp=$PKG_CONFIG_PATH [ $debug ] && echo ca=$ca for e in $ca '' $dpx; do case "$e" in /*) pfx=$e ;; *) pfx=$PROOT/$e ;; esac [ $debug ] && echo checking $pfx [ -d $pfx ] || continue cf="$cf -I${pfx}${e:+/}include" lf="$lf -L${pfx}${e:+/}lib -R${pfx}${e:+/}lib" lp="$lp${lp:+:}${pfx}${e:+/}lib" [ -d $pfx/lib/pkgconfig ] && pcp=$pcp${pcp:+:}$pfx${e:+/}lib/pkgconfig done # Save old variable acvars=`env|grep '^ac_'|cut -d= -f 1` otvars=`env|egrep '(_CFLAGS|_LIBS?|_INCLUDES?)='|cut -d= -f 1` for e in PATH LD_LIBRARY_PATH LD_RUN_PATH PERL RUBY PYTHON M4 \ LIBTOOL SED INSTALL MAKE MSGFMT \ CC CFLAGS LDFLAGS LIBS CXX CXXFLAGS \ CONFIG_SHELL \ PKG_CONFIG_PATH CAAM_PREFIXES CAAM_ADD CFG MAKE MKOPT \ $acvars $otvars; do eval "v=\$$e" if [ x"$v" != x"" ]; then eval "old_${e}=\"$v\"" kept_env="$kept_env $e" fi done CFLAGS=`echo $CFLAGS $cf` CPPFLAGS=`echo $CFLAGS $cf` LDFLAGS=`echo $LDFLAGS $lf` export LD_RUN_PATH LD_RUN_PATH="$lp" PKG_CONFIG_PATH=$pcp export PKG_CONFIG_PATH # Setup gcc wrapper environment # point to gcc wrapper if [ -d $WRAPDIR ]; then PATH=$WRAPDIR:$PATH ldf='' if [ x"$LD_RUN_PATH" != x"" ]; then oifs=$IFS IFS=: for d in $LD_RUN_PATH; do ldf=$ldf${ldf:+\ }"-R $d -L $d" done IFS=$oifs fi CAAM_LDF=$ldf; export CAAM_LDF fi suspend() { echo "Suspending caam. Type 'fg' to make caam work again." kill -STOP $$ } successlog() { status=$? (PWD=`pwd` # for compatibility uname=`uname -sm 2>/dev/null` logfile=../`basename $PWD`.caam [ -s $logfile ] || echo "### $logfile started at `date`" > $logfile (echo 1i echo "# ** $uname ** - $myname succeeded at `date`" cat <<EOF if [ x"\`uname -sm\`" = x"$uname" ]; then if [ x"\$1" = x"-n" ]; then sed -n -e '1,/#[:]BEGIN/d' -e '/^ exit\$/q' -e p \$0 \\ | sed -e 's/^ *//' -e 's/ "\$@"//' \\ | sed "s,\$PATH,\\\$PATH,"|sed '/PATH="\\\$PATH" /d' exit 0 fi #:BEGIN EOF for e in $kept_env; do eval v="\$old_$e" echo " "$e=\"$v\" \\ done echo " $myname" $myargs '"$@"' echo " exit" echo "fi" echo "#### ** $uname Success log ends here." echo .; echo w; echo q) | ed $logfile 2> /dev/null echo "Saved caam log in $logfile." echo "To build again with same parameters: sh $logfile" echo "To see successfull caam arguments: sh $logfile -n" ) exit $status } # if [ $setcc ]; then # # CC="$CAAM_GCC $CFLAGS $LDFLAGS"; export CC # DO="$DO CC='$CAAM_GCC $CFLAGS $LDFLAGS'" # fi echo CFLAGS=\"$CFLAGS\" \ CPPFLAGS=\"$CFLAGS\" \ LDFLAGS=\"$LDFLAGS\" \ LD_LIBRARY_PATH="$lp" \ PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH\" \ GCC=\"$CAAM_GCC\" \ sh -c "$CAAM_CFG $* && $DO" PATH=$PATH \ CFLAGS="$CFLAGS" \ CPPFLAGS="$CFLAGS" \ LDFLAGS="$LDFLAGS" \ LD_LIBRARY_PATH="$lp" \ CAAM_GCC=$CAAM_GCC \ CAAM_CXX=$CAAM_CXX \ sh -c "$CAAM_CFG $* && $SUSPEND && $DO" && successlog