Newer
Older
caam / bin / caam
@HIROSE Yuuji HIROSE Yuuji on 10 Jun 2013 5 KB merged
#!/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