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