caam

view bin/caam @ 25:5a9e8f182e32

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