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
|
yuuji@27
|
37 chasemytop () (
|
yuuji@0
|
38 me=$0; cd $mydir
|
yuuji@0
|
39 while [ -L $me ]; do
|
yuuji@0
|
40 me=`ls -l $me|awk '{print $NF}'`
|
yuuji@0
|
41 d=`dirname $me`
|
yuuji@0
|
42 me=`basename $me`
|
yuuji@0
|
43 cd $d
|
yuuji@0
|
44 done
|
yuuji@27
|
45 cd ..; pwd -P
|
yuuji@27
|
46 )
|
yuuji@0
|
47
|
yuuji@0
|
48 mytop=`chasemytop`
|
yuuji@0
|
49
|
yuuji@0
|
50 PROOT=$top
|
yuuji@0
|
51 CONFDIR=${CAAM_CONFDIR:-$mydir}
|
yuuji@0
|
52 DPF="$CONFDIR/caam.dirs"
|
yuuji@0
|
53 WRAPDIR=$mytop/wrap
|
yuuji@0
|
54 [ "$CAAM_DEBUG" ] && echo wrapdir=$WRAPDIR
|
yuuji@10
|
55 SUSPEND=:
|
yuuji@26
|
56 CAAM_LOG=true
|
yuuji@28
|
57 logsuffix=${CAAM_LOGSUFFIX:-$myname}
|
yuuji@28
|
58 if [ -w .. ]; then
|
yuuji@28
|
59 logfile=../`basename $PWD`.$logsuffix
|
yuuji@28
|
60 else
|
yuuji@28
|
61 logdir=/tmp/caamLogBy-`logname` # No need to care race condition
|
yuuji@28
|
62 [ -d $logdir ] || mkdir $logdir
|
yuuji@28
|
63 logfile=$logdir/`basename $PWD`.$logsuffix
|
yuuji@28
|
64 fi
|
yuuji@0
|
65
|
yuuji@28
|
66 usage() {
|
yuuji@28
|
67 cat<<-EOF
|
yuuji@28
|
68 $myname: Configure And And Make helper
|
yuuji@28
|
69 Usage: $myname [caam-options] [configure-options]
|
yuuji@28
|
70 Available caam-options:
|
yuuji@28
|
71 -m Do make only, not calling configure
|
yuuji@28
|
72 -c Do configure only, not calling make
|
yuuji@28
|
73 -g Call "gmake" instead of default "make"
|
yuuji@28
|
74 -mai, -gmai "make all install", "gmake all install"
|
yuuji@28
|
75 -maic, -gmaic "make all install clean", ditto for gmake
|
yuuji@28
|
76 -t TGT Set TGT as "make" target instead of "all"
|
yuuji@28
|
77 -k MKOPT Call make with option MKOPT
|
yuuji@28
|
78 -jN, -j N Make job concurrency set to N
|
yuuji@28
|
79 -s SEC Sleep SEC seconds between configure and make
|
yuuji@28
|
80 -S Suspend execution of $myname before calling make
|
yuuji@28
|
81 -h HOOK Call HOOK script between configure and make
|
yuuji@28
|
82 -l Replace ./libtool to that of the system
|
yuuji@28
|
83 -o LOG Output log to LOG (default: $logfile)
|
yuuji@28
|
84 -d Debug information
|
yuuji@28
|
85
|
yuuji@28
|
86 Available environment variables:
|
yuuji@28
|
87 CAAM_PREFIXES Reset default prefix
|
yuuji@28
|
88 CAAM_ADD Colon delimited additional prefixes
|
yuuji@28
|
89 CAAM_LOGSUFFIX Logfile's suffix w/o dot (default: $myname)
|
yuuji@28
|
90 CC, CFLAGS, CXX, LDFLAGS, CPPFLAGS and ac_cv_* for many compiler
|
yuuji@28
|
91 systems are also passed to them
|
yuuji@28
|
92 Examples:
|
yuuji@28
|
93 $myname -j5
|
yuuji@28
|
94 --> ./configure && make -j5
|
yuuji@28
|
95
|
yuuji@28
|
96 $myname -gmai --prefix=/usr/local/foo
|
yuuji@28
|
97 --> ./configure --prefix=/usr/local/foo && gmake all install
|
yuuji@28
|
98
|
yuuji@28
|
99 CAAM_ADD=gtk2:/usr/X11R7 $myname -maic --prefix=/usr/local/bar
|
yuuji@28
|
100 --> Add -I$top/gtk2/include and -I/usr/X11R7/include
|
yuuji@28
|
101 to CFLAGS, add
|
yuuji@28
|
102 -L$top/gtk2/lib -R$top/gtk2/lib
|
yuuji@28
|
103 -L/usr/X11R7/lib -R/usr/X11R7/lib
|
yuuji@28
|
104 to LDFLAGS, then call
|
yuuji@28
|
105 ./configure --preifx=/usr/local/bar && make all install clean
|
yuuji@28
|
106 EOF
|
yuuji@28
|
107 exit 0
|
yuuji@28
|
108 }
|
yuuji@0
|
109 # Parse my own arguments
|
yuuji@0
|
110 while [ x"" != x"$1" ]; do
|
yuuji@0
|
111 case "$1" in
|
yuuji@0
|
112 --) break;;
|
yuuji@28
|
113 -help|--help) usage ;;
|
yuuji@0
|
114 -gmaic) TGT2="install clean"; CAAM_MAKE=gmake;;
|
yuuji@0
|
115 -maic) TGT2="install clean";;
|
yuuji@0
|
116 -gmai) TGT2="install"; CAAM_MAKE=gmake;;
|
yuuji@0
|
117 -mai) TGT2="install";;
|
yuuji@26
|
118 -nolog) CAAM_LOG=false ;;
|
yuuji@0
|
119 -m) CAAM_CFG="echo configure done";;
|
yuuji@0
|
120 -t) shift; MKTGT=${MKTGT:+"all "}"$1" ;;
|
yuuji@14
|
121 -j[0-9]*) CAAM_MKOPT="$CAAM_MKOPT${CAAM_MKOPT:+ }$1";;
|
yuuji@0
|
122 -j) shift; CAAM_MKOPT="$MKOPT${MKOPT:+ }-j $1";;
|
yuuji@14
|
123 -k) CAAM_MKOPT="$CAAM_MKOPT${CAAM_MKOPT:+ }-k";;
|
yuuji@0
|
124 # -CC) setcc=1 ;;
|
yuuji@0
|
125 -c) DO="echo done";;
|
yuuji@0
|
126 -g) CAAM_MAKE=gmake ;;
|
yuuji@14
|
127 -s) shift; SUSPEND="dosleep $1" ;;
|
yuuji@10
|
128 -S) SUSPEND=suspend ;;
|
yuuji@0
|
129 -d) debug=1 ;;
|
yuuji@14
|
130 -h) shift; HOOK="$1" ;;
|
yuuji@14
|
131 -l) LIBTOOLHACK=1 ;;
|
yuuji@0
|
132 *) break ;;
|
yuuji@0
|
133 esac
|
yuuji@0
|
134 shift
|
yuuji@0
|
135 done
|
yuuji@0
|
136 POSTDO=${TGT2:+" && ${CAAM_MAKE} $TGT2"}
|
yuuji@0
|
137 DO=${DO:-"${CAAM_MAKE} ${CAAM_MKOPT} $MKTGT$POSTDO"}
|
yuuji@0
|
138
|
yuuji@0
|
139 # Add extra path
|
yuuji@0
|
140 for p in $ca; do
|
yuuji@0
|
141 case "$p" in
|
yuuji@0
|
142 /*) PATH=${p}/bin:$PATH ;;
|
yuuji@0
|
143 *) PATH=$PROOT/${p}/bin:$PATH ;;
|
yuuji@0
|
144 esac
|
yuuji@0
|
145 done
|
yuuji@0
|
146
|
yuuji@0
|
147 defprefix="gnu graphics xc X11-contrib Xclient"
|
yuuji@0
|
148 [ -f $DPF ] && defprefix=`grep -v '^#' $DPF`
|
yuuji@0
|
149 dpx=${cpx:-$defprefix}
|
yuuji@0
|
150
|
yuuji@0
|
151 # extract pkg-config path's
|
yuuji@0
|
152 pcp=$PKG_CONFIG_PATH
|
yuuji@0
|
153
|
yuuji@28
|
154 [ $debug ] && { echo d=$dir, top=$top, ca=$ca; }
|
yuuji@0
|
155 for e in $ca '' $dpx; do
|
yuuji@0
|
156 case "$e" in
|
yuuji@0
|
157 /*) pfx=$e ;;
|
yuuji@0
|
158 *) pfx=$PROOT/$e ;;
|
yuuji@0
|
159 esac
|
yuuji@0
|
160 [ $debug ] && echo checking $pfx
|
yuuji@0
|
161 [ -d $pfx ] || continue
|
yuuji@0
|
162 cf="$cf -I${pfx}${e:+/}include"
|
yuuji@17
|
163 lf="$lf -L${pfx}${e:+/}lib -Wl,-rpath=${pfx}${e:+/}lib"
|
yuuji@0
|
164 lp="$lp${lp:+:}${pfx}${e:+/}lib"
|
yuuji@0
|
165 [ -d $pfx/lib/pkgconfig ] && pcp=$pcp${pcp:+:}$pfx${e:+/}lib/pkgconfig
|
yuuji@0
|
166 done
|
yuuji@0
|
167
|
yuuji@0
|
168 # Save old variable
|
yuuji@1
|
169 acvars=`env|grep '^ac_'|cut -d= -f 1`
|
yuuji@3
|
170 otvars=`env|egrep '(_CFLAGS|_LIBS?|_INCLUDES?)='|cut -d= -f 1`
|
yuuji@0
|
171 for e in PATH LD_LIBRARY_PATH LD_RUN_PATH PERL RUBY PYTHON M4 \
|
yuuji@25
|
172 LIBTOOL SED INSTALL MAKE MSGFMT MKDIR \
|
yuuji@19
|
173 CC CFLAGS CPPFLAGS LDFLAGS LIBS CXX CXXFLAGS \
|
yuuji@19
|
174 LD AS \
|
yuuji@15
|
175 CONFIG_SHELL DESTDIR \
|
yuuji@18
|
176 PKG_CONFIG PKG_CONFIG_PATH \
|
yuuji@18
|
177 CAAM_PREFIXES CAAM_ADD CFG MAKE MKOPT \
|
yuuji@1
|
178 $acvars $otvars; do
|
yuuji@0
|
179 eval "v=\$$e"
|
yuuji@0
|
180 if [ x"$v" != x"" ]; then
|
yuuji@0
|
181 eval "old_${e}=\"$v\""
|
yuuji@0
|
182 kept_env="$kept_env $e"
|
yuuji@0
|
183 fi
|
yuuji@0
|
184 done
|
yuuji@0
|
185
|
yuuji@0
|
186 CFLAGS=`echo $CFLAGS $cf`
|
yuuji@0
|
187 CPPFLAGS=`echo $CFLAGS $cf`
|
yuuji@0
|
188 LDFLAGS=`echo $LDFLAGS $lf`
|
yuuji@0
|
189 export LD_RUN_PATH
|
yuuji@0
|
190 LD_RUN_PATH="$lp"
|
yuuji@0
|
191 PKG_CONFIG_PATH=$pcp
|
yuuji@0
|
192 export PKG_CONFIG_PATH
|
yuuji@0
|
193
|
yuuji@0
|
194 # Setup gcc wrapper environment
|
yuuji@0
|
195 # point to gcc wrapper
|
yuuji@0
|
196 if [ -d $WRAPDIR ]; then
|
yuuji@0
|
197 PATH=$WRAPDIR:$PATH
|
yuuji@0
|
198 ldf=''
|
yuuji@0
|
199 if [ x"$LD_RUN_PATH" != x"" ]; then
|
yuuji@0
|
200 oifs=$IFS
|
yuuji@0
|
201 IFS=:
|
yuuji@0
|
202 for d in $LD_RUN_PATH; do
|
yuuji@17
|
203 ldf=$ldf${ldf:+\ }"-Wl,-rpath=$d -L$d"
|
yuuji@0
|
204 done
|
yuuji@0
|
205 IFS=$oifs
|
yuuji@0
|
206 fi
|
yuuji@0
|
207 CAAM_LDF=$ldf; export CAAM_LDF
|
yuuji@0
|
208 fi
|
yuuji@0
|
209
|
yuuji@14
|
210 dosleep() {
|
yuuji@14
|
211 cat<<_EOF_
|
yuuji@14
|
212 ----------------------------------------------------------------------
|
yuuji@14
|
213 Configure done. Sleeping $1 seconds.
|
yuuji@14
|
214 ----------------------------------------------------------------------
|
yuuji@14
|
215 _EOF_
|
yuuji@14
|
216 sleep $1
|
yuuji@14
|
217 }
|
yuuji@14
|
218
|
yuuji@10
|
219 suspend() {
|
yuuji@12
|
220 cat<<_EOF_
|
yuuji@12
|
221 ======================================================================
|
yuuji@12
|
222 Suspending caam. Type 'fg' to make caam work again.
|
yuuji@12
|
223 ======================================================================
|
yuuji@12
|
224 _EOF_
|
yuuji@10
|
225 kill -STOP $$
|
yuuji@12
|
226 :
|
yuuji@10
|
227 }
|
yuuji@14
|
228 libtoolhack() {
|
yuuji@14
|
229 rm libtool && ln -s `which libtool` .
|
yuuji@14
|
230 }
|
yuuji@14
|
231
|
yuuji@14
|
232 hook() {
|
yuuji@14
|
233 [ "$LIBTOOLHACK" ] && libtoolhack
|
yuuji@14
|
234 [ "$HOOK" ] || return 0
|
yuuji@14
|
235 [ -f "$HOOK" ] || return 0
|
yuuji@14
|
236 if [ -x "$HOOK" ]; then
|
yuuji@14
|
237 ls -l $HOOK
|
yuuji@14
|
238 $HOOK
|
yuuji@14
|
239 else
|
yuuji@14
|
240 $SHELL $HOOK
|
yuuji@14
|
241 fi
|
yuuji@14
|
242 }
|
yuuji@10
|
243
|
yuuji@26
|
244 successlog() (
|
yuuji@0
|
245 status=$?
|
yuuji@28
|
246 $CAAM_LOG || return
|
yuuji@28
|
247 if touch $logfile 2>/dev/null; then
|
yuuji@26
|
248 PWD=`pwd` # for compatibility
|
yuuji@26
|
249 uname=`uname -sm 2>/dev/null`
|
yuuji@26
|
250 [ -s $logfile ] || echo "### $logfile started at `date`" > $logfile
|
yuuji@26
|
251 (echo 1i
|
yuuji@26
|
252 echo "# ** $uname ** - $myname succeeded at `date`"
|
yuuji@26
|
253 cat <<EOF
|
yuuji@7
|
254 if [ x"\`uname -sm\`" = x"$uname" ]; then
|
yuuji@7
|
255 if [ x"\$1" = x"-n" ]; then
|
yuuji@8
|
256 sed -n -e '1,/#[:]BEGIN/d' -e '/^ exit\$/q' -e p \$0 \\
|
yuuji@8
|
257 | sed -e 's/^ *//' -e 's/ "\$@"//' \\
|
yuuji@8
|
258 | sed "s,\$PATH,\\\$PATH,"|sed '/PATH="\\\$PATH" /d'
|
yuuji@8
|
259 exit 0
|
yuuji@7
|
260 fi
|
yuuji@8
|
261 #:BEGIN
|
yuuji@7
|
262 EOF
|
yuuji@26
|
263 for e in $kept_env; do
|
yuuji@26
|
264 eval v="\$old_$e"
|
yuuji@26
|
265 echo " "$e=\"$v\" \\
|
yuuji@26
|
266 done
|
yuuji@26
|
267 echo " $myname" $myargs '"$@"'
|
yuuji@26
|
268 echo " exit"
|
yuuji@26
|
269 echo "fi"
|
yuuji@26
|
270 echo "#### ** $uname Success log ends here."
|
yuuji@26
|
271 echo .; echo w; echo q) | ed $logfile 2> /dev/null
|
yuuji@7
|
272
|
yuuji@7
|
273 echo "Saved caam log in $logfile."
|
yuuji@7
|
274 echo "To build again with same parameters: sh $logfile"
|
yuuji@7
|
275 echo "To see successfull caam arguments: sh $logfile -n"
|
yuuji@28
|
276 else
|
yuuji@28
|
277 echo "Cannot output log to [$logfile]" >&2
|
yuuji@26
|
278 fi
|
yuuji@26
|
279 exit $status
|
yuuji@26
|
280 )
|
yuuji@0
|
281
|
yuuji@0
|
282 # if [ $setcc ]; then
|
yuuji@0
|
283 # # CC="$CAAM_GCC $CFLAGS $LDFLAGS"; export CC
|
yuuji@0
|
284 # DO="$DO CC='$CAAM_GCC $CFLAGS $LDFLAGS'"
|
yuuji@0
|
285 # fi
|
yuuji@0
|
286
|
yuuji@0
|
287 echo CFLAGS=\"$CFLAGS\" \
|
yuuji@0
|
288 CPPFLAGS=\"$CFLAGS\" \
|
yuuji@0
|
289 LDFLAGS=\"$LDFLAGS\" \
|
yuuji@0
|
290 LD_LIBRARY_PATH="$lp" \
|
yuuji@0
|
291 PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH\" \
|
yuuji@0
|
292 GCC=\"$CAAM_GCC\" \
|
yuuji@13
|
293 CXX=\"$CAAM_CXX\" \
|
yuuji@0
|
294 sh -c "$CAAM_CFG $* && $DO"
|
yuuji@0
|
295
|
yuuji@0
|
296 PATH=$PATH \
|
yuuji@0
|
297 CFLAGS="$CFLAGS" \
|
yuuji@0
|
298 CPPFLAGS="$CFLAGS" \
|
yuuji@0
|
299 LDFLAGS="$LDFLAGS" \
|
yuuji@0
|
300 LD_LIBRARY_PATH="$lp" \
|
yuuji@0
|
301 CAAM_GCC=$CAAM_GCC \
|
yuuji@13
|
302 CAAM_CXX=$CAAM_CXX
|
yuuji@13
|
303 export PATH CFLAGS CPPFLAGS LDFLAGS LD_LIBRARY_PATH LD_RUN_PATH
|
yuuji@13
|
304 export CAAM_GCC CAAM_CXX
|
yuuji@12
|
305 sh -c "$CAAM_CFG $*" &&
|
yuuji@14
|
306 hook && $SUSPEND && sh -c "$DO" && successlog
|