caam

view bin/caam @ 26:4507ab683a0e

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