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