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-05-04 22:43:18 +01:00
|
|
|
VERSION="1.4.1"
|
|
|
|
|
REVISION="92c5652afa5cd9bc5029a09cb37c5ec7"
|
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
|
|
|
|
2008-05-04 22:43:18 +01:00
|
|
|
os.chmod(join('wafadmin','Tools'), 0755)
|
|
|
|
|
|
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
|
|
|
|
2008-05-04 22:43:18 +01:00
|
|
|
import Scripting, Params
|
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-05-04 22:43:18 +01:00
|
|
|
#6<\%_0gSqh;d!98+VFjF@=S%O[fB$Ms8W-!s8W-!s8W*bKE)XL!&:/]#/C9`#[s?QpO-q8zzzz4pn'uSPe4ukkY;Vg5ei41iFrp$E/eH;GD#9Vq\B3A'Sl?[a+$-:Du:+Bb^a7OJD%&c?28U:R'VGY-gliX=,^a=4VS2lb6\RdJ!=)07%(XgNB_PZiNfn]_$Dr'gB=k8#&c4\mPWeoDftVk[+>*g4f51!&)(HY@&4J(Md->@?EeYEVF+;dZ0X2ChmV_I0Pr#=Ki,V84<lZ<M7Eu<!Cq&M%Cleh5sQT/+(Tj/%oj8mF0B:[EH5&WQ=bTX4!R5h4a;HK>,$;S^lV#pXuu[B@Aao3S/G*l1'2q=l4H5lMCA?/_m6Of(RdtI0BW8n4ek+fsC`nCl.K#]ECZ%V.gCp:(Vb]p)&-5pU`E-U$N4dQ):R\+S)\)2dQ+7n%8%4Xm\DEhM(^]EO#2]\9saBWcl_&[dEe?DVXPrCYnd;DnXJ"^+[1_G;d'S[dD\OiP+ca:UIjJ[N)m2bO5+F!@h#rLI'[1>.ul+Fe&9r5$E6qg%QM-%V@dVMj*UTkq>*RB@a8)54a?Z\%_/i]9d`u;9uq(m_$7AOh4r4DWPfClc-6dIG;pAN@jS/>Gn!4iUsO0>OC9[hdbp%[qF1W[qrP-f'?XK]B(X=h^AT`qk"7[1"W/s*SYF]?[(CS4r[en^4GTibH>B,gAlm,W$s2ohRekIej@i6h<T7)<GgbKFS2]jgUlo3e(h;kH^j7tGS7<Y;Z#:`ZC/[EIH>d"!-h9*"(-7Xluhctm!QK^4,gAHGC*-gPHT<"Epoote(cN-qH]?\9YS6SGJ0\M"FG'"UeeP2Ha[e3hgG0H_ku&$2)8-!n#*k^/Ih=<qepmqG>aJ@e7i.!m>9\HT50;8D*@Ia&&#UCpU^+UXhEQ$j5$[0*r5OoH``k$HgGUE1[+,&EV9jM8$8Hmf:1pD@%R8aHWOMIVlT+O^;g$;k0DF;l(+-3"#@9R[;"@;lJ#@OLHEn-?Yt(2mMTe%FnYOl03I+Ze_S;Ph<B78c[khWefLH1?SJ@UlZP<1B6OiRh7Yb]^22Z>"1gP#DE)LRG<=c1ghDb^g!Bu!HelIh*=W4sGItGuT/YBY4gp8V&lgfhf"O0Hq?@HncL-*eNt^tFpRc*4EU)ucHG+4,%&?YBUTqo)'iAUd8Z1HomkF.@n%BZ8qej)QKAQ1e]pe\:45=bb0!DI%Fn!tf=\R]4NnS>5?#]6#U[$Xt^A5Y?Z5_Kc4eI&\?YA7<HdA/,WEqd*;b.H#!!iQI"Muo#VLW53N(cN3VBUt0cm*38%07oN5nG/(RUcI$1,PFq8=n2"RRumC"&/uMBJe'<+92D'8H]S1'./6!P9WttWd[l$.JZmcVkXh+C',i_l5l]i&.F;D!(lI?OTM,2TP4OG;q_rU9JgGgWTn/CJYPJ@#(Q[R!!!!)OV2D:V?0H@oM7_HU(m*l0U!sQ;tL[!RV4ELVs'<U!U9XbdnMtk&jc^$J.U'm.?-2'9c?a*qP='eN7<EVW#5S],9Qsq!#bA-qHrR>Wa%9._GRkP[kj`SD,fjI;I:AC.cNeB[\4!:'LX2I:ci+l*lHt16b]S6R+n7anlbi2Y%I)RnFh]\<PC2H>cVsA(*XJ\kE#!fpdsHL!I4qR5og(1rtp9(&.%/Na$cVC`*:2i?6ZOiagmS++_)A!X*JaHPS-Wi.effl!Bu;YfUrgI0NtHV8l]_fX_?;?I:^R<Z3r$;;M7F?.+2Q1!UYIEI]095Kc1\5<'d0B5)h@N#R"!K6nq+hZPK8XJ^gDD$t0/m-!4_,;DNfXM6tL6M-+Jg)\O;OMO5SdA8*AKR&)]LWNp"[0cH$,J4iSd'bb8s.Pibi+tSJ."d2GTPguNqb^dWo+:<[&&;F;l)D`ip/Kfa)XP0a#.>Gg+NA><Baf.14UtI(GRi2j]&YM^l!mP=kOY!c5aeU2N=q!Zh!nbbn2ADoX;GrBe!lTm3A7S=8/WqkV9N[*ER4CfOWJ"Zt@Zi'+=OK`*>8e40M54oTbeT'5P=-`AOX25GMFI\'1eSu=:s`%6'M,#l+tR;YN(PXi(rVC_$:PS+7T;[K1*FaS8lCWf,a<,`fU5qje<+R%as@u\BGq)t,%O6DXNYKodAhpf=L#/HLs74_aU0Mb`Mp+s(nqkr=er9r'TFGOdA!%F;DOK`bp5_6@Y#fDM3Mi`QH9RbBhF'cRSb:V":u"D9/9uk@S15])7%AI(r[\r)+dkj[S("%M@u&*KSct$N?j4B9/RVT6:;S&6=WStKZl?9,S26JAh>GS,$7=-d)nbUZU.Bje=gJj$'l>Tg+>&mZttn+9%,U6fZKKd/2JT2,r?iWel-0;dh6KEYaHi(ZSi@l2&&nb8J+Nf`ks;@,+8s4Cm%YH8ZO88dSZbXbqa,M-512Nd[Dmg;F.])>8kmkgEhOs,,191fcsBaZkX?N@h_s5QGcfq2&_Wh?n.@>;U)NWMMY#1P`09eV3-rU=U>XVL1\AeYlc.Z&sP0UN6%/r+IE3e6t.@[KZPW31/\>+f#lQSJMS.aZ3c.>#t5+CA0d8&e;@`n/<ECXdU^kT@Osf'9p5UPAn;]uOqQ5X+du,!D+<(faV>Z"(,AobP9QH".&NgXB%X(=1;l#m))NbY@jO^NUDV(<9gNH+8PI<<OgI]>=Nr&7-+'tG$)hI`+;Tr5RVaddNG,+dD28fNR?XOW2+^_)MT]!8ef+pbD&,%^f$UN:Z%09?9n9X[9$""Z67POS,_feT(tbTn-u@V'Ju$UaKs`8N10[qJX=V1E=KlL39h*g#fsYL)/P;>]`Be4D)H)fcC2-JMWG'XZ;T`^Q@*GjD%#bON@9#`QK$u/"<c'+W5U'brAMS*@N*7(?ZGb1Ud>\]0=KiCBYQfuJ)'iu52GK-G((H*0P>H!nP%BhnPpSt'R$pYlAdsWp9eAtRP;H/e)O"]C7\V^cZ&sXjCl&Kf8S#,m/WC\q%)Q]t,h,sS"\c9kCaRRIOCW)V'p`OU9!^ELP6qMgKOZHBN?Fl[Z"b.FVGc'f[YnlgdSrW5aGS/4R8Rj\LtX(C6%tM+0pl()P.")hZN^jRP@WC1XbeW?>;W4:Be3j1N0L]s/7QRA)TAMjRZ[k*(1Atcg-h<$).G04OsHpXRUNME@jXa$atf,R-n1W`'NS&W;U)$`Ou1X%1nn-=AW3U';N_Zi5[+hZ,pflPVH$'jVV;@lUs4k*aX"rmOK),M)*tMp6u@iNK2t]'fa03E_Efr^W[=.2R5RYlL>*n/`l95mP8-QCeHX7?;/7N*ZWOUXaJ"u!8o-Cn(*XDp6oBjbAYR'fXe`oC6*2&6=uI%1D2U\nfhF6..b6*h,]/O?P0I^?[^!9\WFB_LW_66#_e#kad2J7V`77/[.p>ZGZV?OiU;U6B>1um*9h`ou,T;ieQ>(/)Bi8Y>'d8uW<7<<c.>jA.=dCD"'/?g%AYd>)Um[NCPabTDdVN+oW2a"#d^GDi/>O^F+gkl<bqh.)/ZC#(6q#\4D35Dgg/=1oZ<Eqr<Ae7q1H)Q`%?iK'Gj<[k,[tU/Ul:DejdDLg&raVf1e<*dT>%JCXLi-+lh_=-VDkQYcr[,p]""/HlsK!`hJMQQFap.Wq%5NO1,gB;b.9G7O7U*0]/:6/q>XniTsnOdrB7#lj0#/.`p5A([_M9LG;4--6>:uM5-W_K,7rRAo?[@D.,T^?_<g.[Hda]&c6sMeZgH<JT;f*7^nnE>KE"V)#$*O_c<B2N,@4)a<+,Z8a2Xu3%`?UQeU-+l+f7t]47p2;Z:h0G5?O1bCbcFXL\aK@9Ok=sAV1n)Gq:aM/['d"?@=ol>N3=E/W"<!hDeP!hlF1Rf[TSMgC:+d]fCt/@,CAtDlYg1Zi.Z2DjkK_7YWW^BlBgl@+sfAg]--KBr6!*Bp(r%i0kP@rV^icmnF/9,V20C*AIgXZ-bX:UrB2O%??c>IPA@(.6&+mdS`>mR[$],NCB''NA1ik*(=**2^m"YD6ZP`'7r0Pq4aS5_8::C2%lCr`A4k@-d,_&!TSsH#_OL_OPJseQL"NV^Y\RhL%+E-HZ5_ae)DL&4tZq(m_N*151+[YP@FlcL%K*2DL8GM4\@neh;3XZ
|
2007-12-09 14:39:07 +00:00
|
|
|
#<==
|