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