caam
annotate bin/caam @ 8:81966c752db4
Fix -n option.
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Tue, 20 Mar 2012 19:32:00 +0900 |
parents | e0df1e3dbce0 |
children | 8e5c505a624a |
rev | line source |
---|---|
yuuji@0 | 1 #!/bin/sh |
yuuji@0 | 2 # caam - Configure And And Make |
yuuji@8 | 3 # (C)2008-2012 by HIROSE, Yuuji [yuuji/at/gentei.org] |
yuuji@8 | 4 # Last modified Tue Mar 20 17:01:16 2012 on firestorm |
yuuji@8 | 5 # Update count: 39 |
yuuji@0 | 6 # http://www.gentei.org/~yuuji/software/caam/ |
yuuji@0 | 7 |
yuuji@0 | 8 ca=`echo $CAAM_ADD|tr : ' '` |
yuuji@0 | 9 cpx=`echo $CAAM_PREFIXES|tr : ' '` |
yuuji@0 | 10 CAAM_GCC=${GCC:-`which gcc`} |
yuuji@0 | 11 CAAM_CXX=${GCC:-`which c++`} |
yuuji@0 | 12 if [ -x /usr/xpg4/bin/sh ]; then |
yuuji@0 | 13 CAAM_SH=/usr/xpg4/bin/sh |
yuuji@0 | 14 else |
yuuji@0 | 15 CAAM_SH=`which sh` |
yuuji@0 | 16 fi |
yuuji@0 | 17 CONFIG_SHELL=${CONFIG_SHELL:-${CAAM_SH}} |
yuuji@0 | 18 export CONFIG_SHELL |
yuuji@0 | 19 |
yuuji@0 | 20 # setup final callee |
yuuji@0 | 21 ####DO=${DO:-${MAKE:-make}} |
yuuji@1 | 22 CAAM_MAKE=${CAAM_MAKE:-${MAKE:-make}} |
yuuji@0 | 23 CAAM_CFG=${CFG:-"$CONFIG_SHELL ./configure"} |
yuuji@0 | 24 MKTGT='' |
yuuji@0 | 25 CAAM_MKOPT=${MKOPT:-""} |
yuuji@0 | 26 TGT2='' |
yuuji@0 | 27 |
yuuji@0 | 28 myname=`basename $0` |
yuuji@0 | 29 mydir=`dirname $0` |
yuuji@0 | 30 mydir=`(cd $mydir; pwd -P)` |
yuuji@0 | 31 myargs=$* |
yuuji@0 | 32 dir=`dirname $mydir` |
yuuji@0 | 33 case "$dir" in |
yuuji@0 | 34 */caam*) top=`dirname $dir` ;; |
yuuji@0 | 35 *) top="$dir" ;; |
yuuji@0 | 36 esac |
yuuji@0 | 37 echo d=$dir, top=$top |
yuuji@0 | 38 |
yuuji@0 | 39 chasemytop () {( |
yuuji@0 | 40 me=$0; cd $mydir |
yuuji@0 | 41 while [ -L $me ]; do |
yuuji@0 | 42 me=`ls -l $me|awk '{print $NF}'` |
yuuji@0 | 43 d=`dirname $me` |
yuuji@0 | 44 me=`basename $me` |
yuuji@0 | 45 cd $d |
yuuji@0 | 46 done |
yuuji@0 | 47 (cd ..; pwd -P) |
yuuji@0 | 48 )} |
yuuji@0 | 49 |
yuuji@0 | 50 mytop=`chasemytop` |
yuuji@0 | 51 |
yuuji@0 | 52 PROOT=$top |
yuuji@0 | 53 CONFDIR=${CAAM_CONFDIR:-$mydir} |
yuuji@0 | 54 DPF="$CONFDIR/caam.dirs" |
yuuji@0 | 55 WRAPDIR=$mytop/wrap |
yuuji@0 | 56 [ "$CAAM_DEBUG" ] && echo wrapdir=$WRAPDIR |
yuuji@0 | 57 |
yuuji@0 | 58 # Parse my own arguments |
yuuji@0 | 59 while [ x"" != x"$1" ]; do |
yuuji@0 | 60 case "$1" in |
yuuji@0 | 61 --) break;; |
yuuji@0 | 62 -gmaic) TGT2="install clean"; CAAM_MAKE=gmake;; |
yuuji@0 | 63 -maic) TGT2="install clean";; |
yuuji@0 | 64 -gmai) TGT2="install"; CAAM_MAKE=gmake;; |
yuuji@0 | 65 -mai) TGT2="install";; |
yuuji@0 | 66 -m) CAAM_CFG="echo configure done";; |
yuuji@0 | 67 -t) shift; MKTGT=${MKTGT:+"all "}"$1" ;; |
yuuji@0 | 68 -j[0-9]*) CAAM_MKOPT="$MKOPT${MKOPT:+ }$1";; |
yuuji@0 | 69 -j) shift; CAAM_MKOPT="$MKOPT${MKOPT:+ }-j $1";; |
yuuji@0 | 70 -k) CAAM_MKOPT="$MKOPT${MKOPT:+ }-k";; |
yuuji@0 | 71 # -CC) setcc=1 ;; |
yuuji@0 | 72 -c) DO="echo done";; |
yuuji@0 | 73 -g) CAAM_MAKE=gmake ;; |
yuuji@0 | 74 -s) shift; CAAM_MAKE="sleep $1; $CAAM_MAKE" ;; |
yuuji@0 | 75 -d) debug=1 ;; |
yuuji@0 | 76 *) break ;; |
yuuji@0 | 77 esac |
yuuji@0 | 78 shift |
yuuji@0 | 79 done |
yuuji@0 | 80 POSTDO=${TGT2:+" && ${CAAM_MAKE} $TGT2"} |
yuuji@0 | 81 DO=${DO:-"${CAAM_MAKE} ${CAAM_MKOPT} $MKTGT$POSTDO"} |
yuuji@0 | 82 |
yuuji@0 | 83 # Add extra path |
yuuji@0 | 84 for p in $ca; do |
yuuji@0 | 85 case "$p" in |
yuuji@0 | 86 /*) PATH=${p}/bin:$PATH ;; |
yuuji@0 | 87 *) PATH=$PROOT/${p}/bin:$PATH ;; |
yuuji@0 | 88 esac |
yuuji@0 | 89 done |
yuuji@0 | 90 |
yuuji@0 | 91 defprefix="gnu graphics xc X11-contrib Xclient" |
yuuji@0 | 92 [ -f $DPF ] && defprefix=`grep -v '^#' $DPF` |
yuuji@0 | 93 dpx=${cpx:-$defprefix} |
yuuji@0 | 94 |
yuuji@0 | 95 # extract pkg-config path's |
yuuji@0 | 96 pcp=$PKG_CONFIG_PATH |
yuuji@0 | 97 |
yuuji@0 | 98 [ $debug ] && echo ca=$ca |
yuuji@0 | 99 for e in $ca '' $dpx; do |
yuuji@0 | 100 case "$e" in |
yuuji@0 | 101 /*) pfx=$e ;; |
yuuji@0 | 102 *) pfx=$PROOT/$e ;; |
yuuji@0 | 103 esac |
yuuji@0 | 104 [ $debug ] && echo checking $pfx |
yuuji@0 | 105 [ -d $pfx ] || continue |
yuuji@0 | 106 cf="$cf -I${pfx}${e:+/}include" |
yuuji@0 | 107 lf="$lf -L${pfx}${e:+/}lib -R${pfx}${e:+/}lib" |
yuuji@0 | 108 lp="$lp${lp:+:}${pfx}${e:+/}lib" |
yuuji@0 | 109 [ -d $pfx/lib/pkgconfig ] && pcp=$pcp${pcp:+:}$pfx${e:+/}lib/pkgconfig |
yuuji@0 | 110 done |
yuuji@0 | 111 |
yuuji@0 | 112 # Save old variable |
yuuji@1 | 113 acvars=`env|grep '^ac_'|cut -d= -f 1` |
yuuji@3 | 114 otvars=`env|egrep '(_CFLAGS|_LIBS?|_INCLUDES?)='|cut -d= -f 1` |
yuuji@0 | 115 for e in PATH LD_LIBRARY_PATH LD_RUN_PATH PERL RUBY PYTHON M4 \ |
yuuji@4 | 116 LIBTOOL SED INSTALL MAKE \ |
yuuji@0 | 117 CC CFLAGS LDFLAGS LIBS CXX CXXFLAGS \ |
yuuji@0 | 118 CONFIG_SHELL \ |
yuuji@1 | 119 PKG_CONFIG_PATH CAAM_PREFIXES CAAM_ADD CFG MAKE MKOPT \ |
yuuji@1 | 120 $acvars $otvars; do |
yuuji@0 | 121 eval "v=\$$e" |
yuuji@0 | 122 if [ x"$v" != x"" ]; then |
yuuji@0 | 123 eval "old_${e}=\"$v\"" |
yuuji@0 | 124 kept_env="$kept_env $e" |
yuuji@0 | 125 fi |
yuuji@0 | 126 done |
yuuji@0 | 127 |
yuuji@0 | 128 CFLAGS=`echo $CFLAGS $cf` |
yuuji@0 | 129 CPPFLAGS=`echo $CFLAGS $cf` |
yuuji@0 | 130 LDFLAGS=`echo $LDFLAGS $lf` |
yuuji@0 | 131 export LD_RUN_PATH |
yuuji@0 | 132 LD_RUN_PATH="$lp" |
yuuji@0 | 133 PKG_CONFIG_PATH=$pcp |
yuuji@0 | 134 export PKG_CONFIG_PATH |
yuuji@0 | 135 |
yuuji@0 | 136 # Setup gcc wrapper environment |
yuuji@0 | 137 # point to gcc wrapper |
yuuji@0 | 138 if [ -d $WRAPDIR ]; then |
yuuji@0 | 139 PATH=$WRAPDIR:$PATH |
yuuji@0 | 140 ldf='' |
yuuji@0 | 141 if [ x"$LD_RUN_PATH" != x"" ]; then |
yuuji@0 | 142 oifs=$IFS |
yuuji@0 | 143 IFS=: |
yuuji@0 | 144 for d in $LD_RUN_PATH; do |
yuuji@0 | 145 ldf=$ldf${ldf:+\ }"-R $d -L $d" |
yuuji@0 | 146 done |
yuuji@0 | 147 IFS=$oifs |
yuuji@0 | 148 fi |
yuuji@0 | 149 CAAM_LDF=$ldf; export CAAM_LDF |
yuuji@0 | 150 fi |
yuuji@0 | 151 |
yuuji@0 | 152 successlog() { |
yuuji@0 | 153 status=$? |
yuuji@0 | 154 (PWD=`pwd` # for compatibility |
yuuji@5 | 155 uname=`uname -sm 2>/dev/null` |
yuuji@0 | 156 logfile=../`basename $PWD`.caam |
yuuji@0 | 157 [ -s $logfile ] || echo "### $logfile started at `date`" > $logfile |
yuuji@0 | 158 (echo 1i |
yuuji@5 | 159 echo "# ** $uname ** - $myname succeeded at `date`" |
yuuji@7 | 160 cat <<EOF |
yuuji@7 | 161 if [ x"\`uname -sm\`" = x"$uname" ]; then |
yuuji@7 | 162 if [ x"\$1" = x"-n" ]; then |
yuuji@8 | 163 sed -n -e '1,/#[:]BEGIN/d' -e '/^ exit\$/q' -e p \$0 \\ |
yuuji@8 | 164 | sed -e 's/^ *//' -e 's/ "\$@"//' \\ |
yuuji@8 | 165 | sed "s,\$PATH,\\\$PATH,"|sed '/PATH="\\\$PATH" /d' |
yuuji@8 | 166 exit 0 |
yuuji@7 | 167 fi |
yuuji@8 | 168 #:BEGIN |
yuuji@7 | 169 EOF |
yuuji@0 | 170 for e in $kept_env; do |
yuuji@0 | 171 eval v="\$old_$e" |
yuuji@7 | 172 echo " "$e=\"$v\" \\ |
yuuji@0 | 173 done |
yuuji@7 | 174 echo " $myname" $myargs '"$@"' |
yuuji@7 | 175 echo " exit" |
yuuji@5 | 176 echo "fi" |
yuuji@5 | 177 echo "#### ** $uname Success log ends here." |
yuuji@0 | 178 echo .; echo w; echo q) | ed $logfile 2> /dev/null |
yuuji@7 | 179 |
yuuji@7 | 180 echo "Saved caam log in $logfile." |
yuuji@7 | 181 echo "To build again with same parameters: sh $logfile" |
yuuji@7 | 182 echo "To see successfull caam arguments: sh $logfile -n" |
yuuji@0 | 183 ) |
yuuji@0 | 184 exit $status |
yuuji@0 | 185 } |
yuuji@0 | 186 |
yuuji@0 | 187 # if [ $setcc ]; then |
yuuji@0 | 188 # # CC="$CAAM_GCC $CFLAGS $LDFLAGS"; export CC |
yuuji@0 | 189 # DO="$DO CC='$CAAM_GCC $CFLAGS $LDFLAGS'" |
yuuji@0 | 190 # fi |
yuuji@0 | 191 |
yuuji@0 | 192 echo CFLAGS=\"$CFLAGS\" \ |
yuuji@0 | 193 CPPFLAGS=\"$CFLAGS\" \ |
yuuji@0 | 194 LDFLAGS=\"$LDFLAGS\" \ |
yuuji@0 | 195 LD_LIBRARY_PATH="$lp" \ |
yuuji@0 | 196 PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH\" \ |
yuuji@0 | 197 GCC=\"$CAAM_GCC\" \ |
yuuji@0 | 198 sh -c "$CAAM_CFG $* && $DO" |
yuuji@0 | 199 |
yuuji@0 | 200 PATH=$PATH \ |
yuuji@0 | 201 CFLAGS="$CFLAGS" \ |
yuuji@0 | 202 CPPFLAGS="$CFLAGS" \ |
yuuji@0 | 203 LDFLAGS="$LDFLAGS" \ |
yuuji@0 | 204 LD_LIBRARY_PATH="$lp" \ |
yuuji@0 | 205 CAAM_GCC=$CAAM_GCC \ |
yuuji@0 | 206 CAAM_CXX=$CAAM_CXX \ |
yuuji@0 | 207 sh -c "$CAAM_CFG $* && $DO" && successlog |