caam
annotate bin/caam @ 19:f1fbe8d7cfcf
Add "LD" and "AS" to variable list to be saved
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 16 May 2016 14:55:58 +0859 |
parents | 9002e9289581 |
children | 5a9e8f182e32 |
rev | line source |
---|---|
yuuji@0 | 1 #!/bin/sh |
yuuji@0 | 2 # caam - Configure And And Make |
yuuji@18 | 3 # (C)2008-2015 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@0 | 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@0 | 46 (cd ..; pwd -P) |
yuuji@0 | 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@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@14 | 68 -j[0-9]*) CAAM_MKOPT="$CAAM_MKOPT${CAAM_MKOPT:+ }$1";; |
yuuji@0 | 69 -j) shift; CAAM_MKOPT="$MKOPT${MKOPT:+ }-j $1";; |
yuuji@14 | 70 -k) CAAM_MKOPT="$CAAM_MKOPT${CAAM_MKOPT:+ }-k";; |
yuuji@0 | 71 # -CC) setcc=1 ;; |
yuuji@0 | 72 -c) DO="echo done";; |
yuuji@0 | 73 -g) CAAM_MAKE=gmake ;; |
yuuji@14 | 74 -s) shift; SUSPEND="dosleep $1" ;; |
yuuji@10 | 75 -S) SUSPEND=suspend ;; |
yuuji@0 | 76 -d) debug=1 ;; |
yuuji@14 | 77 -h) shift; HOOK="$1" ;; |
yuuji@14 | 78 -l) LIBTOOLHACK=1 ;; |
yuuji@0 | 79 *) break ;; |
yuuji@0 | 80 esac |
yuuji@0 | 81 shift |
yuuji@0 | 82 done |
yuuji@0 | 83 POSTDO=${TGT2:+" && ${CAAM_MAKE} $TGT2"} |
yuuji@0 | 84 DO=${DO:-"${CAAM_MAKE} ${CAAM_MKOPT} $MKTGT$POSTDO"} |
yuuji@0 | 85 |
yuuji@0 | 86 # Add extra path |
yuuji@0 | 87 for p in $ca; do |
yuuji@0 | 88 case "$p" in |
yuuji@0 | 89 /*) PATH=${p}/bin:$PATH ;; |
yuuji@0 | 90 *) PATH=$PROOT/${p}/bin:$PATH ;; |
yuuji@0 | 91 esac |
yuuji@0 | 92 done |
yuuji@0 | 93 |
yuuji@0 | 94 defprefix="gnu graphics xc X11-contrib Xclient" |
yuuji@0 | 95 [ -f $DPF ] && defprefix=`grep -v '^#' $DPF` |
yuuji@0 | 96 dpx=${cpx:-$defprefix} |
yuuji@0 | 97 |
yuuji@0 | 98 # extract pkg-config path's |
yuuji@0 | 99 pcp=$PKG_CONFIG_PATH |
yuuji@0 | 100 |
yuuji@0 | 101 [ $debug ] && echo ca=$ca |
yuuji@0 | 102 for e in $ca '' $dpx; do |
yuuji@0 | 103 case "$e" in |
yuuji@0 | 104 /*) pfx=$e ;; |
yuuji@0 | 105 *) pfx=$PROOT/$e ;; |
yuuji@0 | 106 esac |
yuuji@0 | 107 [ $debug ] && echo checking $pfx |
yuuji@0 | 108 [ -d $pfx ] || continue |
yuuji@0 | 109 cf="$cf -I${pfx}${e:+/}include" |
yuuji@17 | 110 lf="$lf -L${pfx}${e:+/}lib -Wl,-rpath=${pfx}${e:+/}lib" |
yuuji@0 | 111 lp="$lp${lp:+:}${pfx}${e:+/}lib" |
yuuji@0 | 112 [ -d $pfx/lib/pkgconfig ] && pcp=$pcp${pcp:+:}$pfx${e:+/}lib/pkgconfig |
yuuji@0 | 113 done |
yuuji@0 | 114 |
yuuji@0 | 115 # Save old variable |
yuuji@1 | 116 acvars=`env|grep '^ac_'|cut -d= -f 1` |
yuuji@3 | 117 otvars=`env|egrep '(_CFLAGS|_LIBS?|_INCLUDES?)='|cut -d= -f 1` |
yuuji@0 | 118 for e in PATH LD_LIBRARY_PATH LD_RUN_PATH PERL RUBY PYTHON M4 \ |
yuuji@9 | 119 LIBTOOL SED INSTALL MAKE MSGFMT \ |
yuuji@19 | 120 CC CFLAGS CPPFLAGS LDFLAGS LIBS CXX CXXFLAGS \ |
yuuji@19 | 121 LD AS \ |
yuuji@15 | 122 CONFIG_SHELL DESTDIR \ |
yuuji@18 | 123 PKG_CONFIG PKG_CONFIG_PATH \ |
yuuji@18 | 124 CAAM_PREFIXES CAAM_ADD CFG MAKE MKOPT \ |
yuuji@1 | 125 $acvars $otvars; do |
yuuji@0 | 126 eval "v=\$$e" |
yuuji@0 | 127 if [ x"$v" != x"" ]; then |
yuuji@0 | 128 eval "old_${e}=\"$v\"" |
yuuji@0 | 129 kept_env="$kept_env $e" |
yuuji@0 | 130 fi |
yuuji@0 | 131 done |
yuuji@0 | 132 |
yuuji@0 | 133 CFLAGS=`echo $CFLAGS $cf` |
yuuji@0 | 134 CPPFLAGS=`echo $CFLAGS $cf` |
yuuji@0 | 135 LDFLAGS=`echo $LDFLAGS $lf` |
yuuji@0 | 136 export LD_RUN_PATH |
yuuji@0 | 137 LD_RUN_PATH="$lp" |
yuuji@0 | 138 PKG_CONFIG_PATH=$pcp |
yuuji@0 | 139 export PKG_CONFIG_PATH |
yuuji@0 | 140 |
yuuji@0 | 141 # Setup gcc wrapper environment |
yuuji@0 | 142 # point to gcc wrapper |
yuuji@0 | 143 if [ -d $WRAPDIR ]; then |
yuuji@0 | 144 PATH=$WRAPDIR:$PATH |
yuuji@0 | 145 ldf='' |
yuuji@0 | 146 if [ x"$LD_RUN_PATH" != x"" ]; then |
yuuji@0 | 147 oifs=$IFS |
yuuji@0 | 148 IFS=: |
yuuji@0 | 149 for d in $LD_RUN_PATH; do |
yuuji@17 | 150 ldf=$ldf${ldf:+\ }"-Wl,-rpath=$d -L$d" |
yuuji@0 | 151 done |
yuuji@0 | 152 IFS=$oifs |
yuuji@0 | 153 fi |
yuuji@0 | 154 CAAM_LDF=$ldf; export CAAM_LDF |
yuuji@0 | 155 fi |
yuuji@0 | 156 |
yuuji@14 | 157 dosleep() { |
yuuji@14 | 158 cat<<_EOF_ |
yuuji@14 | 159 ---------------------------------------------------------------------- |
yuuji@14 | 160 Configure done. Sleeping $1 seconds. |
yuuji@14 | 161 ---------------------------------------------------------------------- |
yuuji@14 | 162 _EOF_ |
yuuji@14 | 163 sleep $1 |
yuuji@14 | 164 } |
yuuji@14 | 165 |
yuuji@10 | 166 suspend() { |
yuuji@12 | 167 cat<<_EOF_ |
yuuji@12 | 168 ====================================================================== |
yuuji@12 | 169 Suspending caam. Type 'fg' to make caam work again. |
yuuji@12 | 170 ====================================================================== |
yuuji@12 | 171 _EOF_ |
yuuji@10 | 172 kill -STOP $$ |
yuuji@12 | 173 : |
yuuji@10 | 174 } |
yuuji@14 | 175 libtoolhack() { |
yuuji@14 | 176 rm libtool && ln -s `which libtool` . |
yuuji@14 | 177 } |
yuuji@14 | 178 |
yuuji@14 | 179 hook() { |
yuuji@14 | 180 [ "$LIBTOOLHACK" ] && libtoolhack |
yuuji@14 | 181 [ "$HOOK" ] || return 0 |
yuuji@14 | 182 [ -f "$HOOK" ] || return 0 |
yuuji@14 | 183 if [ -x "$HOOK" ]; then |
yuuji@14 | 184 ls -l $HOOK |
yuuji@14 | 185 $HOOK |
yuuji@14 | 186 else |
yuuji@14 | 187 $SHELL $HOOK |
yuuji@14 | 188 fi |
yuuji@14 | 189 } |
yuuji@10 | 190 |
yuuji@0 | 191 successlog() { |
yuuji@0 | 192 status=$? |
yuuji@0 | 193 (PWD=`pwd` # for compatibility |
yuuji@5 | 194 uname=`uname -sm 2>/dev/null` |
yuuji@0 | 195 logfile=../`basename $PWD`.caam |
yuuji@0 | 196 [ -s $logfile ] || echo "### $logfile started at `date`" > $logfile |
yuuji@0 | 197 (echo 1i |
yuuji@5 | 198 echo "# ** $uname ** - $myname succeeded at `date`" |
yuuji@7 | 199 cat <<EOF |
yuuji@7 | 200 if [ x"\`uname -sm\`" = x"$uname" ]; then |
yuuji@7 | 201 if [ x"\$1" = x"-n" ]; then |
yuuji@8 | 202 sed -n -e '1,/#[:]BEGIN/d' -e '/^ exit\$/q' -e p \$0 \\ |
yuuji@8 | 203 | sed -e 's/^ *//' -e 's/ "\$@"//' \\ |
yuuji@8 | 204 | sed "s,\$PATH,\\\$PATH,"|sed '/PATH="\\\$PATH" /d' |
yuuji@8 | 205 exit 0 |
yuuji@7 | 206 fi |
yuuji@8 | 207 #:BEGIN |
yuuji@7 | 208 EOF |
yuuji@0 | 209 for e in $kept_env; do |
yuuji@0 | 210 eval v="\$old_$e" |
yuuji@7 | 211 echo " "$e=\"$v\" \\ |
yuuji@0 | 212 done |
yuuji@7 | 213 echo " $myname" $myargs '"$@"' |
yuuji@7 | 214 echo " exit" |
yuuji@5 | 215 echo "fi" |
yuuji@5 | 216 echo "#### ** $uname Success log ends here." |
yuuji@0 | 217 echo .; echo w; echo q) | ed $logfile 2> /dev/null |
yuuji@7 | 218 |
yuuji@7 | 219 echo "Saved caam log in $logfile." |
yuuji@7 | 220 echo "To build again with same parameters: sh $logfile" |
yuuji@7 | 221 echo "To see successfull caam arguments: sh $logfile -n" |
yuuji@0 | 222 ) |
yuuji@0 | 223 exit $status |
yuuji@0 | 224 } |
yuuji@0 | 225 |
yuuji@0 | 226 # if [ $setcc ]; then |
yuuji@0 | 227 # # CC="$CAAM_GCC $CFLAGS $LDFLAGS"; export CC |
yuuji@0 | 228 # DO="$DO CC='$CAAM_GCC $CFLAGS $LDFLAGS'" |
yuuji@0 | 229 # fi |
yuuji@0 | 230 |
yuuji@0 | 231 echo CFLAGS=\"$CFLAGS\" \ |
yuuji@0 | 232 CPPFLAGS=\"$CFLAGS\" \ |
yuuji@0 | 233 LDFLAGS=\"$LDFLAGS\" \ |
yuuji@0 | 234 LD_LIBRARY_PATH="$lp" \ |
yuuji@0 | 235 PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH\" \ |
yuuji@0 | 236 GCC=\"$CAAM_GCC\" \ |
yuuji@13 | 237 CXX=\"$CAAM_CXX\" \ |
yuuji@0 | 238 sh -c "$CAAM_CFG $* && $DO" |
yuuji@0 | 239 |
yuuji@0 | 240 PATH=$PATH \ |
yuuji@0 | 241 CFLAGS="$CFLAGS" \ |
yuuji@0 | 242 CPPFLAGS="$CFLAGS" \ |
yuuji@0 | 243 LDFLAGS="$LDFLAGS" \ |
yuuji@0 | 244 LD_LIBRARY_PATH="$lp" \ |
yuuji@0 | 245 CAAM_GCC=$CAAM_GCC \ |
yuuji@13 | 246 CAAM_CXX=$CAAM_CXX |
yuuji@13 | 247 export PATH CFLAGS CPPFLAGS LDFLAGS LD_LIBRARY_PATH LD_RUN_PATH |
yuuji@13 | 248 export CAAM_GCC CAAM_CXX |
yuuji@12 | 249 sh -c "$CAAM_CFG $*" && |
yuuji@14 | 250 hook && $SUSPEND && sh -c "$DO" && successlog |