2007-08-08 21:17:48 +01:00
|
|
|
#! /usr/bin/env python
|
|
|
|
|
# encoding: utf-8
|
2007-12-09 14:39:07 +00:00
|
|
|
# Thomas Nagy, 2005-2008
|
2007-09-27 12:40:01 +01:00
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
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.
|
|
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
2007-09-27 12:40:01 +01:00
|
|
|
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.
|
|
|
|
|
"""
|
2007-08-08 21:17:48 +01:00
|
|
|
|
|
|
|
|
import os, sys
|
2008-02-10 13:19:07 +00:00
|
|
|
if sys.hexversion<0x203000f: raise "Waf requires Python >= 2.3"
|
|
|
|
|
|
2007-08-08 21:17:48 +01:00
|
|
|
if 'PSYCOWAF' in os.environ:
|
2008-02-10 13:19:07 +00:00
|
|
|
try:import psyco;psyco.full()
|
|
|
|
|
except:pass
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
VERSION="1.3.2"
|
|
|
|
|
REVISION="b67d68bfb915473cfa1a2e2290022f98"
|
2007-08-08 21:17:48 +01:00
|
|
|
INSTALL=sys.platform=='win32' and 'c:/temp' or '/usr/local'
|
2008-02-10 13:19:07 +00:00
|
|
|
cwd = os.getcwd()
|
|
|
|
|
join = os.path.join
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
def decode(s):
|
2008-02-10 13:19:07 +00:00
|
|
|
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])
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
def err(m):
|
2008-02-10 13:19:07 +00:00
|
|
|
print '\033[91mError: %s\033[0m' % m
|
|
|
|
|
sys.exit(1)
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
def unpack_wafdir(dir):
|
2008-02-10 13:19:07 +00:00
|
|
|
f = open(sys.argv[0],'rb')
|
|
|
|
|
c = "corrupted waf (%d)"
|
2007-08-08 21:17:48 +01:00
|
|
|
while 1:
|
2008-02-10 13:19:07 +00:00
|
|
|
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)
|
2007-08-08 21:17:48 +01:00
|
|
|
break
|
2008-02-10 13:19:07 +00:00
|
|
|
if not txt: err(c % 3)
|
|
|
|
|
try: txt = decode(txt[1:-1].replace('z', '!!!!!'))
|
|
|
|
|
except: err(c % 4)
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
import shutil, tarfile
|
|
|
|
|
try: shutil.rmtree(dir)
|
2007-08-08 21:17:48 +01:00
|
|
|
except OSError: pass
|
2008-02-10 13:19:07 +00:00
|
|
|
try: os.makedirs(join(dir, 'wafadmin', 'Tools'))
|
|
|
|
|
except OSError: err("Cannot unpack waf-local into %s Install waf system-wide or move waf into a writeable directory"%dir)
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
os.chdir(dir)
|
2008-02-10 13:19:07 +00:00
|
|
|
tmp = 't.tbz2'
|
|
|
|
|
t = open(tmp,'wb')
|
|
|
|
|
t.write(txt)
|
|
|
|
|
t.close()
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
t = tarfile.open(tmp)
|
2007-12-09 14:39:07 +00:00
|
|
|
for x in t: t.extract(x)
|
|
|
|
|
t.close()
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
os.unlink(tmp)
|
2007-08-08 21:17:48 +01:00
|
|
|
os.chdir(cwd)
|
|
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
def test(dir):
|
2008-02-10 13:19:07 +00:00
|
|
|
try: os.stat(join(dir, 'wafadmin')); return os.path.abspath(dir)
|
2007-12-09 14:39:07 +00:00
|
|
|
except OSError: pass
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
def find_lib():
|
2008-02-10 13:19:07 +00:00
|
|
|
name = sys.argv[0]
|
|
|
|
|
base = os.path.dirname(os.path.abspath(name))
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
#devs use $WAFDIR
|
2008-02-10 13:19:07 +00:00
|
|
|
w=test(os.environ.get('WAFDIR', ''))
|
|
|
|
|
if w: return w
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
#waf-light
|
2008-02-10 13:19:07 +00:00
|
|
|
if name.endswith('waf-light'):
|
|
|
|
|
w = test(base)
|
|
|
|
|
if w: return w
|
|
|
|
|
err("waf-light requires wafadmin -> export WAFDIR=/folder")
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
dir = "/lib/waf-%s-%s/" % (VERSION, REVISION)
|
2007-12-09 14:39:07 +00:00
|
|
|
for i in [INSTALL,'/usr','/usr/local','/opt']:
|
2008-02-10 13:19:07 +00:00
|
|
|
w = test(i+dir)
|
|
|
|
|
if w: return w
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
#waf-local
|
2008-02-10 13:19:07 +00:00
|
|
|
s = '.waf-%s-%s'
|
|
|
|
|
if sys.platform == 'win32': s = s[1:]
|
|
|
|
|
dir = join(base, s % (VERSION, REVISION))
|
|
|
|
|
w = test(dir)
|
|
|
|
|
if w: return w
|
2007-09-27 12:40:01 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
#unpack
|
|
|
|
|
unpack_wafdir(dir)
|
|
|
|
|
return dir
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
wafdir = find_lib()
|
|
|
|
|
if "-vv" in sys.argv: print "wafdir is %s" % wafdir
|
2007-09-27 12:40:01 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
w = join(wafdir, 'wafadmin')
|
|
|
|
|
t = join(w, 'Tools')
|
|
|
|
|
sys.path = [w, t] + sys.path
|
2007-09-27 12:40:01 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
import Params, Scripting
|
2008-02-10 13:19:07 +00:00
|
|
|
Params.g_tooldir = [t]
|
|
|
|
|
Params.g_cwd_launch = cwd
|
2007-08-08 21:17:48 +01:00
|
|
|
|
2008-02-10 13:19:07 +00:00
|
|
|
if Params.g_version != VERSION:
|
|
|
|
|
err('Version mismatch: waf %s <> wafadmin %s (wafdir %s)' % (VERSION, Params.g_version, wafdir))
|
2007-12-09 14:39:07 +00:00
|
|
|
Scripting.prepare()
|
2007-09-27 12:40:01 +01:00
|
|
|
|
2007-12-09 14:39:07 +00:00
|
|
|
#==>
|
2008-02-10 13:19:07 +00:00
|
|
|
#6<\%_0gSqh;d";^JW9f88H8_is$0!Ps8W-!s8W-!s8W+L7;-(_BRh'0!YQfBBEX-"U0d/h[ePFSz!!!6hz!!>IeNiugt-F;C:0=M:B'^oq+A@7J6\]NZcDPXB7:%PXQ]<*sFQVO%;mZZA&hS%b5<D]:TnZRAthX;f:^@-L=T*KCrk=p;O"2=Toh-EUQmpC>:lg(RM[QWGAMP=&op3X12RQJ!f^%Fn-m`XAApXh?`[#]"7S[Yq2kBkoggRTO7p0m0`[bA\@mI+2hhWjXfBm\]"03t^SAab$\@YNYt=0eALG'eG))=1S>a?=*^G@PFLIE)-cRV0?Iz)lPCIiR4"HqduI=3Sf7ud.oOO]=m)_l^V?tli9+.h5LiE!8XKEct_t(Nk0cb84X)].R[/@!f8=*-QudQ:4!JLRsTH%PofYaWpSD00$S0(b"]VIh&!E#)1B6Rf=QIamB6?#qs0d=pYF/BIB`V,oke&^kI\Q2[c_kkq<d@mpBTOJi28i<b3[!0,QXV*X'5+d+GDXNkJsXiX1-'l:<pCcn#b@#]usUb)UQ(PLY"udH#r.g]pBf/T(DEVpn.Vj9Bj-rdb)0YgXR`sF1YV:>WmGGL:6gs*O+!UmLLt]cM?pgpWoIUH_D^mmrNX5J7S!&e!i2+<k][rpYF0$X.c4?^AFNW9_rrlY2.t'G:0H'X1!?/I"TqI0YQ$DC5qh3[:E@)SK/6Nar]1UoBUbKb\6n?*nGOR\!t"u0e-7C@oKkgG2#O4e9:S))f']FqY="oDd)%BL#V:0a.BnXgWs_f88i\Y6KOFEW?WO/3r@WSe0K7L"2("&U$Z8;gfm3epRPZ*45MVQTj-i"C7aE*AI\\^G'"ANo0)bNO1p!gF4JF6WS+9Y\E:VOF-^[sc.E9WH-4n_kh8Wem.8(IGJ&(/]R/O`n#]<fJ>K(.:ter,%B$XcaTK_qCGq_Y9Nle7fA?CKhHn!Vn$26rD,[Q\g%@^T^?qZ,S<$@t2PH,,ICII.Hec^0SgVjd[0L&N>oS1*01f-\d`1abhK%\)#[_(Hg!`=FcLS([m-\OKZ1i.r^@+8[5$2_KFH@$F4Rqk*l3@!sqp/9odurBS>nj<P[@XsRGIcc&S*FQ_pB-MAgUf&kpf"'(O.qM<hPdm=N\a<$#3KNgl?r&3!Qe<,gHf"<DT%Jb]5C@HFS+ABA[Xejp?T-P95grcl%MF)OrL['ZYb\2YHI=qY9!/*<:.9/"c9;+]C.q1\U3[DiG<B*.Wo0'D5(%A4)d,TpUYA1mN_&\?[\icQ#QE1O)X_ESaH+-#u(sr"9AKF!)3H\'_%(`1sqDP9iGaaVMCu>5QaNT%oMUT:K-p^eH%+l63mik'+prW;oCL)Ps<eUoV[[GjVe>j)+KT,UC]9'z0T\hY&HOYSR7mTT7Sqi<a\7=SdV5E?A7ug7J9mf[1]RLU!!Jmm8J)"Z-gE$Wg7"F*;r4J&4Z(8811Y]]4\_jTa8cVkB[CId!!!!C8:Z4%!<<cu+<$_@Ls`$C9rQE78pNOsWA^Nubpf:c!!!#l"Ib-u!W\Yi))X7uWh5Jh9U!Qj2*EdOVP347dPTHe1'W^pci=%G!$Ci__#IN:s3^&9IsM,<YKPSrQ!&&OOI4C>8L3cp64LUc?"<"dI%gL/fD7<"s5n*ihM^D$Z%O\\*HhC)Z*GNXPlOqi!:N,Wj8>O,2tl$i(KcEqmFj"8&GIZS<7DS:8NN3<:N^KUCpD2JA+l"[2ED3=WiuJD<I``'3QPCC7#MXZ6pO.#n]s;=LB]bqDIQqCnJK0\X=pp<`c1^IPcAK1b0%uN^5B)YrDY1%:$j>d!0Ns)RNs"UG?'X&B%Wo6ZIYdT19Il4W1pRu2R_jcQEHP$CNaQnW]&84P9lJs'du@='lY@t7#HWm@Y,]eJuN1i/3jOK!?i-^nAS$-X?T`F(+q+.XJ?2T[7ID3,"WD6n4H"sfX2&H>t%0ajor9u:fp!t8HfjuM@C.o.rR:(^&9mTju,hp;_q?R[!*FR@>KK!'J^,lCl,NGG3l#97S0UY$(t_'Pq9@S&S6Pfa^dlH@&.!UC'MW+bXSI=!49pOZ("/89UN)[$>aOt,+pi+8Z&=BW6pfG$NLW)Z:)qdUbjBj>#:BAP*q_q;Djbr:kc@#eq?H4=\9o.Ubs_A8Rl;"9.$><fr3RM1(>`iBdomQN+AnE8W@.(,Z1%%<$arLacfV"AAnt0)GGub19jkSM+'7'd6XNR[$6_S;%3h+OdO%$"P#8<D.4,c@\VO2V(#mm&L1^=M2#S1848DG)_$SA9arqQ6r6QJPS$6U,;Dk(M(pGN(ekZ9P9?TX2'U1WVHJj5,@m%_`)3V)fJQ8u=f..DAg9qOaU8ZuR$B0NYss^ND1WE:,%X\"B#ZTo7:\1nAu&gE+Z.c)K$gD4P#)pO,YCVOTO_eG70Sk%[$8^0R5%>]br1t8Z:p]u)+66BPRRd='$29%8k^eXVTH(gN+?X\66b!ECmMk5[#D:G>7i&;72f.4Ba>=QJga?Fc%_>70T\U>_^NTfbT]k\8@5[W(-u\Edl*#G9aJ%*@iB+iCeBH$!Ck)QPgpJ:9aRWG-%e[l8naqRWJNN31_NM7Ao%aG<)I>K2'j"nCs6`2YfMeq[$"8fP?)0bUn^C0.%)S(.Q0b+9XLLl`l4mp>03_t-AG)`8[N>#)N8L$2Q51te6<8`+tT1H7ZpKCR\Cq52T7"32U'Tc8n2\70f$%k'P[\ARq-'^OI-:_LrRZ#W&>6nOC0I:ae8jCb[YAi.q[MW"AIAb8hqS695SK>1=D9nVSlU`72l;>6<QrJCkPbg<*j:AnmoPA"e[(P#V6)fA>%A&lLD=1.iDqKQIo4i+dd*c7S:e.KOYV!WG/T[Bsqe5D6VBgP0G87=YYN4c&"/`P*DieA4FL@/JCb#d:B,[aK.+c;`9F6BXK"Q;]AWc,;T]b;)8=a,:+d<@^MRr.i"At<FJf][7-!_e7tqaNNooM.4l\Yf#_('Yu+Xq-;d'mBe^Pq"e$mG92es";\9B`WFi6TD,XJs=b\=q2'k`7;79W9,>t7)=p2r`YgY>'9p6KmOf>;p'hW;.<2hAbQr5[K[>LA!MJ-c`@Y$m3,a=RUUtR:kAm$jh)PY/PMSU6BZri-@.Q30CRo!'$2(D03;55!e'-_6c,`Kg/Th>UB-C\j$U;[<d8l1K]NCa8OWK^7V=t1,#5r;^n6DJ6O@T-GYZ<<t@"PP]#0bhL@Cn""l(fi,D`_pY3B\>sT74F-`M'XW,!,\O:UJ5:M@r7sFW?NQ+7a"CUQ:t-)'oNVY->Q"'Z'cl'e5<$?e=$JC`Meu;/MeY'C6HSqJQ"!iP,ONq)[pQu%2k:+AhqB$CEOoTBjiEa`n6FYR&gun[UN)J(,_i>WMZ,J,ZutPM]2t%V$:KWXB#[&UJ/QT`mek3&2d/+)-E=N(5#b`@hb;4TqXHa&lN2I8Xbf:Ca;]S.n3BI#rYC1P>,kO6HQ*=0sWQk=c6\;VU6)pZ;i[qUL^ejTb::,V&MZU5tXa@;_0WP1MjA9@KbF0P#Z&3R&*YKThUmc@b";R_@"Aa6&7#q!2<NHeuW_s`O;i^b!aVi(\6=W$'Q'?P)=!W1p\?nZ*Hir8[P4&,d^MWBX:T;P0p$MRA@3d[OO.,7`Dg4<*M6e,)FZ_-BtgXR?:3UVR.Nr=XqdSV6)7^[:IseUsWXLW_l3J.V2;Q=_J552I\M3CFpK![*=dmQ=cP!2DT)`_DEc3P=uAhAS@gf;IYf#@O)P9`\I2d+1<%MNY&-EG,6[L_*14<Jb=D.oOu*>kPIdCbq`gl2Qj-RgMm0fW]UoH4DtR5/ZKlW1>kV'-R:^KRd3ZV+X4\KEPL;T0+/"=,h9:M\Zbk@bt2+p6V,"d+OA2s,:/IC-[A"DqJC3#NDDWU8o[E%m7q)I5ltp"%k-\6SY_1@nn?]G2F^!=YVInFT1N8S&s't7Tf^B:0Xar\&o'9=ObWNs`+_YQ3hSJhMG#niHpknF)AY(W\+_P>K8V9R)gXCs@PS4PB]1nhBJYXp.3cUVTC5p0Bk?YK7Wu;YED%Y5;.DfGl<I>@]!/%2?E"*dq4GoRo[\p7C8h>,h-JC%,/[dSl2HDa;l`56m^fY8N#c&1(5I2t
|
2007-12-09 14:39:07 +00:00
|
|
|
#<==
|