caam

view bin/caam @ 3:5099ad83cb56

Allow singular form
author yuuji@gentei.org
date Sun, 08 May 2011 16:10:03 +0900
parents 4e6762b4b0cb
children b52b20364a25
line source
1 #!/bin/sh
2 # caam - Configure And And Make
3 # (C)2008-2011 by HIROSE, Yuuji [yuuji/at/gentei.org]
4 # Last modified Wed Sep 23 06:16:25 2009 on firestorm
5 # Update count: 14
6 # http://www.gentei.org/~yuuji/software/caam/
8 ca=`echo $CAAM_ADD|tr : ' '`
9 cpx=`echo $CAAM_PREFIXES|tr : ' '`
10 CAAM_GCC=${GCC:-`which gcc`}
11 CAAM_CXX=${GCC:-`which c++`}
12 if [ -x /usr/xpg4/bin/sh ]; then
13 CAAM_SH=/usr/xpg4/bin/sh
14 else
15 CAAM_SH=`which sh`
16 fi
17 CONFIG_SHELL=${CONFIG_SHELL:-${CAAM_SH}}
18 export CONFIG_SHELL
20 # setup final callee
21 ####DO=${DO:-${MAKE:-make}}
22 CAAM_MAKE=${CAAM_MAKE:-${MAKE:-make}}
23 CAAM_CFG=${CFG:-"$CONFIG_SHELL ./configure"}
24 MKTGT=''
25 CAAM_MKOPT=${MKOPT:-""}
26 TGT2=''
28 myname=`basename $0`
29 mydir=`dirname $0`
30 mydir=`(cd $mydir; pwd -P)`
31 myargs=$*
32 dir=`dirname $mydir`
33 case "$dir" in
34 */caam*) top=`dirname $dir` ;;
35 *) top="$dir" ;;
36 esac
37 echo d=$dir, top=$top
39 chasemytop () {(
40 me=$0; cd $mydir
41 while [ -L $me ]; do
42 me=`ls -l $me|awk '{print $NF}'`
43 d=`dirname $me`
44 me=`basename $me`
45 cd $d
46 done
47 (cd ..; pwd -P)
48 )}
50 mytop=`chasemytop`
52 PROOT=$top
53 CONFDIR=${CAAM_CONFDIR:-$mydir}
54 DPF="$CONFDIR/caam.dirs"
55 WRAPDIR=$mytop/wrap
56 [ "$CAAM_DEBUG" ] && echo wrapdir=$WRAPDIR
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="$MKOPT${MKOPT:+ }$1";;
69 -j) shift; CAAM_MKOPT="$MKOPT${MKOPT:+ }-j $1";;
70 -k) CAAM_MKOPT="$MKOPT${MKOPT:+ }-k";;
71 # -CC) setcc=1 ;;
72 -c) DO="echo done";;
73 -g) CAAM_MAKE=gmake ;;
74 -s) shift; CAAM_MAKE="sleep $1; $CAAM_MAKE" ;;
75 -d) debug=1 ;;
76 *) break ;;
77 esac
78 shift
79 done
80 POSTDO=${TGT2:+" && ${CAAM_MAKE} $TGT2"}
81 DO=${DO:-"${CAAM_MAKE} ${CAAM_MKOPT} $MKTGT$POSTDO"}
83 # Add extra path
84 for p in $ca; do
85 case "$p" in
86 /*) PATH=${p}/bin:$PATH ;;
87 *) PATH=$PROOT/${p}/bin:$PATH ;;
88 esac
89 done
91 defprefix="gnu graphics xc X11-contrib Xclient"
92 [ -f $DPF ] && defprefix=`grep -v '^#' $DPF`
93 dpx=${cpx:-$defprefix}
95 # extract pkg-config path's
96 pcp=$PKG_CONFIG_PATH
98 [ $debug ] && echo ca=$ca
99 for e in $ca '' $dpx; do
100 case "$e" in
101 /*) pfx=$e ;;
102 *) pfx=$PROOT/$e ;;
103 esac
104 [ $debug ] && echo checking $pfx
105 [ -d $pfx ] || continue
106 cf="$cf -I${pfx}${e:+/}include"
107 lf="$lf -L${pfx}${e:+/}lib -R${pfx}${e:+/}lib"
108 lp="$lp${lp:+:}${pfx}${e:+/}lib"
109 [ -d $pfx/lib/pkgconfig ] && pcp=$pcp${pcp:+:}$pfx${e:+/}lib/pkgconfig
110 done
112 # Save old variable
113 acvars=`env|grep '^ac_'|cut -d= -f 1`
114 otvars=`env|egrep '(_CFLAGS|_LIBS?|_INCLUDES?)='|cut -d= -f 1`
115 for e in PATH LD_LIBRARY_PATH LD_RUN_PATH PERL RUBY PYTHON M4 \
116 CC CFLAGS LDFLAGS LIBS CXX CXXFLAGS \
117 CONFIG_SHELL \
118 PKG_CONFIG_PATH CAAM_PREFIXES CAAM_ADD CFG MAKE MKOPT \
119 $acvars $otvars; do
120 eval "v=\$$e"
121 if [ x"$v" != x"" ]; then
122 eval "old_${e}=\"$v\""
123 kept_env="$kept_env $e"
124 fi
125 done
127 CFLAGS=`echo $CFLAGS $cf`
128 CPPFLAGS=`echo $CFLAGS $cf`
129 LDFLAGS=`echo $LDFLAGS $lf`
130 export LD_RUN_PATH
131 LD_RUN_PATH="$lp"
132 PKG_CONFIG_PATH=$pcp
133 export PKG_CONFIG_PATH
135 # Setup gcc wrapper environment
136 # point to gcc wrapper
137 if [ -d $WRAPDIR ]; then
138 PATH=$WRAPDIR:$PATH
139 ldf=''
140 if [ x"$LD_RUN_PATH" != x"" ]; then
141 oifs=$IFS
142 IFS=:
143 for d in $LD_RUN_PATH; do
144 ldf=$ldf${ldf:+\ }"-R $d -L $d"
145 done
146 IFS=$oifs
147 fi
148 CAAM_LDF=$ldf; export CAAM_LDF
149 fi
151 successlog() {
152 status=$?
153 (PWD=`pwd` # for compatibility
154 logfile=../`basename $PWD`.caam
155 [ -s $logfile ] || echo "### $logfile started at `date`" > $logfile
156 (echo 1i
157 echo "# $myname succeeded at `date`"
158 for e in $kept_env; do
159 eval v="\$old_$e"
160 echo $e=\"$v\" \\
161 done
162 echo $myname $myargs
163 echo exit
164 echo .; echo w; echo q) | ed $logfile 2> /dev/null
165 )
166 exit $status
167 }
169 # if [ $setcc ]; then
170 # # CC="$CAAM_GCC $CFLAGS $LDFLAGS"; export CC
171 # DO="$DO CC='$CAAM_GCC $CFLAGS $LDFLAGS'"
172 # fi
174 echo CFLAGS=\"$CFLAGS\" \
175 CPPFLAGS=\"$CFLAGS\" \
176 LDFLAGS=\"$LDFLAGS\" \
177 LD_LIBRARY_PATH="$lp" \
178 PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH\" \
179 GCC=\"$CAAM_GCC\" \
180 sh -c "$CAAM_CFG $* && $DO"
182 PATH=$PATH \
183 CFLAGS="$CFLAGS" \
184 CPPFLAGS="$CFLAGS" \
185 LDFLAGS="$LDFLAGS" \
186 LD_LIBRARY_PATH="$lp" \
187 CAAM_GCC=$CAAM_GCC \
188 CAAM_CXX=$CAAM_CXX \
189 sh -c "$CAAM_CFG $* && $DO" && successlog