2008-05-31 09:55:54 +00:00
|
|
|
#! /usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
# Thomas Nagy, 2005-2008
|
|
|
|
|
|
|
|
"""
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
modification, are permitted provided that the following conditions
|
|
|
|
are met:
|
|
|
|
|
|
|
|
1. Redistributions of source code must retain the above copyright
|
|
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
|
|
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
notice, this list of conditions and the following disclaimer in the
|
|
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
|
|
|
|
3. The name of the author may not be used to endorse or promote products
|
|
|
|
derived from this software without specific prior written permission.
|
|
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
|
|
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
|
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
|
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
"""
|
|
|
|
|
|
|
|
import os, sys
|
|
|
|
if sys.hexversion<0x203000f: raise "Waf requires Python >= 2.3"
|
|
|
|
|
|
|
|
if 'PSYCOWAF' in os.environ:
|
|
|
|
try:import psyco;psyco.full()
|
|
|
|
except:pass
|
|
|
|
|
2008-08-27 16:18:16 +00:00
|
|
|
VERSION="1.4.4"
|
|
|
|
REVISION="8fadb97cd069d800c8aee7b24c9ec1ea"
|
2008-05-31 09:55:54 +00:00
|
|
|
INSTALL=sys.platform=='win32' and 'c:/temp' or '/usr/local'
|
|
|
|
cwd = os.getcwd()
|
|
|
|
join = os.path.join
|
|
|
|
|
|
|
|
def decode(s):
|
|
|
|
p1 = len(s)
|
|
|
|
s += '!!!!!'
|
|
|
|
w1 = [256**(3-u) for u in xrange(4)]
|
|
|
|
w2 = [(u, 85**(4-u)) for u in xrange(5)]
|
|
|
|
tot = [sum([(ord(s[i+m])-33) * n for (m, n) in w2]) for i in xrange(0, p1, 5)]
|
|
|
|
return ''.join([chr((y/x) & 255) for y in tot for x in w1])
|
|
|
|
|
|
|
|
def err(m):
|
|
|
|
print '\033[91mError: %s\033[0m' % m
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
def unpack_wafdir(dir):
|
|
|
|
f = open(sys.argv[0],'rb')
|
|
|
|
c = "corrupted waf (%d)"
|
|
|
|
while 1:
|
|
|
|
line = f.readline()
|
|
|
|
if not line: err("run waf-light from a folder containing wafadmin")
|
|
|
|
if line == '#==>\n':
|
|
|
|
txt = f.readline()
|
|
|
|
if not txt: err(c % 1)
|
|
|
|
if f.readline()!='#<==\n': err(c % 2)
|
|
|
|
break
|
|
|
|
if not txt: err(c % 3)
|
|
|
|
try: txt = decode(txt[1:-1].replace('z', '!!!!!'))
|
|
|
|
except: err(c % 4)
|
|
|
|
|
|
|
|
import shutil, tarfile
|
|
|
|
try: shutil.rmtree(dir)
|
|
|
|
except OSError: pass
|
|
|
|
try: os.makedirs(join(dir, 'wafadmin', 'Tools'))
|
2008-06-03 21:10:46 +00:00
|
|
|
except OSError: err("Cannot unpack waf lib into %s\nMove waf into a writeable directory" % dir)
|
2008-05-31 09:55:54 +00:00
|
|
|
|
|
|
|
os.chdir(dir)
|
|
|
|
tmp = 't.tbz2'
|
|
|
|
t = open(tmp,'wb')
|
|
|
|
t.write(txt)
|
|
|
|
t.close()
|
|
|
|
|
|
|
|
t = tarfile.open(tmp)
|
|
|
|
for x in t: t.extract(x)
|
|
|
|
t.close()
|
|
|
|
|
2008-06-03 21:10:46 +00:00
|
|
|
os.chmod(join('wafadmin','Tools'), 0755)
|
|
|
|
|
2008-05-31 09:55:54 +00:00
|
|
|
os.unlink(tmp)
|
|
|
|
os.chdir(cwd)
|
|
|
|
|
|
|
|
def test(dir):
|
|
|
|
try: os.stat(join(dir, 'wafadmin')); return os.path.abspath(dir)
|
|
|
|
except OSError: pass
|
|
|
|
|
|
|
|
def find_lib():
|
|
|
|
name = sys.argv[0]
|
|
|
|
base = os.path.dirname(os.path.abspath(name))
|
|
|
|
|
|
|
|
#devs use $WAFDIR
|
|
|
|
w=test(os.environ.get('WAFDIR', ''))
|
|
|
|
if w: return w
|
|
|
|
|
|
|
|
#waf-light
|
|
|
|
if name.endswith('waf-light'):
|
|
|
|
w = test(base)
|
|
|
|
if w: return w
|
|
|
|
err("waf-light requires wafadmin -> export WAFDIR=/folder")
|
|
|
|
|
|
|
|
dir = "/lib/waf-%s-%s/" % (VERSION, REVISION)
|
|
|
|
for i in [INSTALL,'/usr','/usr/local','/opt']:
|
|
|
|
w = test(i+dir)
|
|
|
|
if w: return w
|
|
|
|
|
|
|
|
#waf-local
|
|
|
|
s = '.waf-%s-%s'
|
|
|
|
if sys.platform == 'win32': s = s[1:]
|
|
|
|
dir = join(base, s % (VERSION, REVISION))
|
|
|
|
w = test(dir)
|
|
|
|
if w: return w
|
|
|
|
|
|
|
|
#unpack
|
|
|
|
unpack_wafdir(dir)
|
|
|
|
return dir
|
|
|
|
|
|
|
|
wafdir = find_lib()
|
|
|
|
if "-vv" in sys.argv: print "wafdir is %s" % wafdir
|
|
|
|
|
|
|
|
w = join(wafdir, 'wafadmin')
|
|
|
|
t = join(w, 'Tools')
|
|
|
|
sys.path = [w, t] + sys.path
|
|
|
|
|
|
|
|
import Scripting, Params
|
|
|
|
Params.g_tooldir = [t]
|
|
|
|
Params.g_cwd_launch = cwd
|
|
|
|
|
|
|
|
if Params.g_version != VERSION:
|
|
|
|
err('Version mismatch: waf %s <> wafadmin %s (wafdir %s)' % (VERSION, Params.g_version, wafdir))
|
|
|
|
Scripting.prepare()
|
|
|
|
|
|
|
|
#==>
|
2008-08-27 16:18:16 +00:00
|
|
|
#6<\%_0gSqh;cuBF%-dns@/p9,[6S."s8W-!s8W-!s8W*t+Ge-?!_@;3+;+]@!(k7?YMSs0D&\!*zzz!!!!TiiDBkbMR1`ordX<iHo305.%l.nJFZrS$nC_[7@CoGIq.(mTl;8[rlLU+'&KA=[dbP)EONJCVH:]HO-Gn]=Ui5/F55CeSaP&D0GWeh]:a$gXg)AQetO#EN\&uJ4'C<8)<X"bj3I.Dl*c5PhYZ?\,c@*!'RPLo:r)fcqn*OoA"K^!K`s%B%aM6"*4GOD0oLU^>TuYfG&Zm_a]ju>0@].'h"c%:nSOg;Q3It=Hlf2OVN$s!VK/-\$pC]2\cZ2fLp.&e_AF[c!"&[qm>\HB!8?(mqLP%F-rfm^"r,4p>%m5hflKamY6e77%2.`]fP]=G4!nP46spoICHM4"&F85bUH&!Ppc`NT_EZBJ34td.LW7b#IYW]#[Qh83^HRd8U4jF?%L/k[V)_hQLd$oPE"mZp$WolkDR'Tf%.+!l_qKuS_`1MLrXOhh8J.ehXFdSXc$kr?1`&N/adc%*qQ8:]=V<u8:#XNkG9bW]'+@hHe+X2hEIFAUU0":kERpm4.YhaUHMcRqE7?$2KcG!g[!J*PO>OH<r2.L\'n>!F"V1r[p)R6DEcpT]5XsNNpJetUt;13DYlW14lQ(FfrNuA]k>'cl"o)1]oD@?IEP]5lfII$GBNMgq>eUrnhV:XHI'$s!PVod2gP/3fA"$l4E\hQDn2,=]`[*_jT,]b"Y5PWRPnkOf'^*'Nf:Bcg?K(#lgJ:S>i0h'52URL"*I=UG(=Jgn$$)KgJolSUnuO+&8qBU_gUh,ldo>-mlYd[]=,dD>;CN9I>fOrpUp&ZVg[<'VoNYlC7F*JAk^CEF;i_\ms!RYjkS`nh<WPQh?XQpZ!B<;Y1]6_jE,N?DR=`YOaL?VpU?j^gYLaL:K!d4@%-u[IJ#\YY?Pp.*3GqtpU]!?4QE8FB\3N+61&KBDd2G.264C;+n/"8Jlg9uom>&4Ada$lc`;3=[Gm=J%R;kbm7q@hQDXPalWrp:>LPaHo=k+Va&D'5pc9GKPIo-/H^4);pV'c%]s[RM6g2sZ7p0l%heo?!I*]NF[n\u:h=m<Cn_q!YSG1UKqZ=72ocPd@Z:,f%CXC4ZZPZbF^%Qd1qIm@J%#"biHeZ(!Rp6EYVYbGo;2+-#C$2spLR5AG]T$Yuk]GmJ`k\S]B5OM^]\N0<lTFu(l7H\$Fe7'1hR_;1?MHXqHa1&-hV(mc/DdttclOLe?/L'qgm=(GSuoihmb_r2`B238IHT5=W@GPC<s_S4J-5k&$(q;SBG#ePBEBq-BIVpTfhI_%Rnst'VLrG!'G?i;&HpH'9Tpet$(rUPGpr;r4K%I0BK\T\BE/,W1]RLW5p?k+1lWiL#SS@:+DQA&;p#QJ))Mju5h"4nBP87`!!!!%SuG9qaf1GpeNZJ-W70672"^i^%0-A.zz#Z=&;5`GaFA.91tg*T:C5?./%m$TVDGuOA\oalSN*fp@+L4B7(&L8Ja#QXrD!="`5?qj@plAo\+;oLmqeJTE)%jV,T!!!!>?iR>$'EVP>Z]d__.nu:VPQM=41o9]qX/htf&o;=(69$0hR3F*IO?i]WmPibhf@k.UcgK%>ih39-X;*4%ii_;&4t=s8Lkg2CFRlBVq2]^J`!Y-5P(5t5eNc@OTGjN@;$=a5&i<K#SXhi#[B\C)G2^U#jLZ[,#TdI_.E-?>dqUA,8UIL,WS+*JMtLT2^k!p[8c^D0Ll4m!fL?K%"Ud['.C(q-^O-$:pHg=>ZAo9Qf*L<-+29@3\:G2^O<!e"c*)ID,(OliC:0GN8nLaT7SomJ"!WT#R?ism:t&$1bn;0WMO5\=9p)4gg17$<@B$PB,r$<t14VuRQD1*W0M7(-b!]B,6"J(e;O4\'=WfIk&g0(OA3q2:9+bWFMb?S`B!%N(OdUsGAKsm<'3QeZRV4TNM^HGs1;mi=BqSV1VO<9PM^D.AL6dH'd/f4rD'?.3N@)M?P)3!N,X@)RP/,=QMF_Q>ctH+@/8^J8ZO&<p0r0\;8Rl:p<+o1Z9-\0uAHF/MAg<+u:-J;J$"d1eTOEOL-FT&i(aID&QMIfMa>gM2]Op;F*jHPbs:H%0g?/2&VXOU83ueM6Tb.agEFo%8%t,PS>q]PXNTU<7YImN>8\=/6LR_7Z=%.`agL+-'N([@7#s40r8KF_MFG9->@/@9WAF;7*A9BO[U_(5r),9bf8#,>9l&&V(*0NP$(23PRP?XBG+I3))Per$):&/AJ((Bfc)\%P-#mDRp_F(KVTkA`\O;E6tDZf7&a$TN?F>u$)'(FZ3cn7PSjT1/;@]BaT4f^(pk%rUag&G"I2NW6W5lM9[L&()Ds:'XW&OT@()K.Bi?HWA?mYI`Y+^PNO"j[9edr_.MF.CCGTB&'2_15'Tj)ob\SWY75PpGfd*<p8[Y!8Zr%[kBp35)Adtueb%SeY8I![AXbt(qCafZ0'U3AZZ*aU0AC`J(A8,d.P"h[u[K<EdU6\t4;+hW:R'ec.0[!1QP8%.+8jTj>7*UQ8Ylcc$,q2M'8>\e=6pWL0BSaSqN<tbE`XJ)_C0P<(b`FS_QrsR.R=q;f&CHT&6<_edN7??j,T1;OC1sjj+Ia_!@g/#%P\N5-9bLK-@l0X/WY!8e(to?8V.?r:P9QH".V`Y9UpO*hRBSNk)(c1LR)r6B.)m\Kaf%+PKTs]h8J5b``iPT(=_+t,;^%TaD%ZlVC5FdK`mQA+0q-aG,$C(nZpgrDB$ja]7CAN0R8o4^W7u">`nM=;d>CX`>A]P/)-"[G9T:5eAdk'H`f5qNZYEMbdUjdKC6GE]/ZVTH(1;kJ=H+b$W7s*d<AQEHVP.jc<#1rHV("uJV50)b;eWC9;e7f8Y\%>X6'6^q8o;"/;@Ps,/8^kJ.*r6f9c6M\MMt_9N)IUC9[Sb47&IqRNK&Q>Cll_qULRie`DNjS,W8=6/?'o<-*gL<)Hi;!P/s%6B[nkP[5?<*d7?udUs]QHW/ZJ=1,)o>P"_ZS1n%=]Ysuj0Ag9kuei$6q[*$<VTf%A=K-OL<`mW$EUt(lDaY9BR.$8'lZ"+Om%?jaHMThp%Of]R;7'^POC,.!dBeiYW,=GQW7R;dNXVdoN&<aIp6Hg8pXICQdRbJ]<Z8TraZ"k\F_N?,r1eSNbUa"IDab_l#$rCWD))@J9`0mqLUD8c!M(,l38fK=Y1/^Bj7T)g4Lo,#[;-BSY9fA6X,[+oZBggC4C.an(.U&(4KXAf-U5CXj94h[-gLAi7D1i!jP+sN_82;K%.nU)7V$.Gu6u%TRN*tA]VMs#XQ7Ba;.9P.G.?l[2Z;HQ<;BnkOBTf+3Mc$5a6)g8E2R6Np23P>!'269b.BprAMMQr:@gun@->OM;-E@>-.>)IU@9P@R2N)%k=sB3[/X]YE=P8C-a_%p0[BW^MV281jVH/m-)_/+m2(<6r[6_,V[3jC+VT;rg;&ZPOX!t(pPqta'OD7E#8S49_NLEh8;b!Q=/>gZJ;Dp"&,0\\sAOOBm0ZI9g1h@rVZ>?>jRT>TGW(fb7B!nJDPpn8]Be(@7AMhL[bfm@s;Ft\\M6UOE+sLm2V(,Z5e<[%3<D?T;YZAu(2GCt:2PQqn,6ZRUUl%]Ef.pm0P8c8c,nuL<*e!^(qrQCWID:b"nXcT.%CUbp2+5@]8,O_1?&gldn65fq#a_PHb^8AG3SI:#]'oJ3%HeW&>MVNE1,W=OgY84d>?\G^$^0t&rYAfK%`u()Qk.(kgCZ\f1]5AogI:e*fUgk?Xd(Qf-kpGjQbR>DrXBo$,*pZ_&,iIL+NU$6mE8i#s&+u_'^]Xu]U!DT\"09%25<!>J5k%#*.HX>N,c]:5!C/jJD%hIm1!*bhH*X>'(9LgVF"q9SbA1*AVW7s>i]A\b[B1=9q^6^X*M3`b<Bgs'4NjH.RXtj`Nn3j,U!4aloJ6380S"Ol/OTY3?pm.T8?kKJJ/7>?fV/rrdH(d1VO_]Q5h7V#jqYs^HKmglJVm_*:So=coB8Eb&W:7AlD6"FGWk3b;oH>L#dEQjBT`jO\F7ETZEe0G%4-5l.Io_njDirWf/hor;Vp0O->4a13Og"']L15Wn;/PRbeS
|
2008-05-31 09:55:54 +00:00
|
|
|
#<==
|