2008-07-11 20:38:17 +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-07-11 22:20:05 +00:00
|
|
|
VERSION="1.4.2"
|
|
|
|
REVISION="6fc051971db49c83aab5565673e789bc"
|
2008-07-11 20:38:17 +00:00
|
|
|
INSTALL=sys.platform=='win32' and 'c:/temp' or '/usr/local'
|
|
|
|
cwd = os.getcwd()
|
|
|
|
join = os.path.join
|
|
|
|
|
2008-07-11 22:20:05 +00:00
|
|
|
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])
|
|
|
|
|
2008-07-11 20:38:17 +00:00
|
|
|
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)
|
2008-07-11 22:20:05 +00:00
|
|
|
try: txt = decode(txt[1:-1].replace('z', '!!!!!'))
|
|
|
|
except: err(c % 4)
|
2008-07-11 20:38:17 +00:00
|
|
|
|
|
|
|
import shutil, tarfile
|
|
|
|
try: shutil.rmtree(dir)
|
|
|
|
except OSError: pass
|
|
|
|
try: os.makedirs(join(dir, 'wafadmin', 'Tools'))
|
|
|
|
except OSError: err("Cannot unpack waf lib into %s\nMove waf into a writeable directory" % dir)
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
os.chmod(join('wafadmin','Tools'), 0755)
|
|
|
|
|
|
|
|
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()
|
2008-07-11 22:20:05 +00:00
|
|
|
if "-vv" in sys.argv: print "wafdir is %s" % wafdir
|
|
|
|
|
2008-07-11 20:38:17 +00:00
|
|
|
w = join(wafdir, 'wafadmin')
|
|
|
|
t = join(w, 'Tools')
|
|
|
|
sys.path = [w, t] + sys.path
|
|
|
|
|
2008-07-11 22:20:05 +00:00
|
|
|
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-07-11 20:38:17 +00:00
|
|
|
|
|
|
|
#==>
|
2008-07-11 22:20:05 +00:00
|
|
|
#6<\%_0gSqh;ct1=O)>%tZ2ak(p?^f=s8W-!s8W-!s8W+L:rj=c!%e2,!e:h)!"gVg2Epj&mBE=`zz!!N?&z!!!!P^@b03ZX6pT^"i>J%OF3-G&qY/Cp4'/.n)3n+r$P:='*$pj:,k4H>[ijFgkm>_.DDuQW_&Z.%p=4g"uJ[HbIb>B4$)AY;^W$X*N;7n!*^g*R?C@!f$O@p1ISfJF>tk&0O<Rad=MDTW'>2TJ8Xc](b)gqfdJU5&U8Gf4e-5/Rj->4(;E%YH8A!:_<<%AI2G56`h_aDP=KeU4Gl;R_hIV4kp'ZBOur^miC?9F4YR#8P'VXm>C%`oP0Fjo0k$DH[D@Ofk,c1Q#2[FbI;i2GQCUBp'hknVq]u,plG`G;PT_jH+n^po6YkX4I!=72un7F!!#1Iq5qHbWU!%ZDiOpDT5gF0Z%D_q]l.32YT)53RV;D_YBOq\_!(NsXg,;LXGp94E419#"Jc?#$D<I\'EXn$!>f?d?-B[L6b+9#F4oAr^@-_sC[3;$.bbN5$J)"&YJ!(?_oAm$QX+a;V_*%.II)"G[b^Y'qp+W<jkT03m^LL\p?m+j\pa=n:JZ*'l1\fJqsRk_,bt[4]=2996n"aV`f525mgrJ#W:E+BqYT]'k/fL_UV:)PgtYcIGMd3#^#+1kfulWrf2VW`pYFYpkj6$cg%X+4`Og=tpRAkb]AI6[^=V,kIHur8\Q&EPZb=LC=Z3hHn%AMSFPhM[lMKE3],Ng]lR"^F^AGCOmt\X7(L$pO[Zt^<"1jq>FuJ-NeaJN(laOF9\o[64]rZD>kM=I.4F8-HlJD+kLA,u]hT@1TH^V&23aK73Be8mpC>S<mS9G@Q\_Yj22m'a[EpL>0Q.r^Rm+iYYfp/nHG3I>SkJu)-X\X-9Hd1&aBg$1u@Cb4+Ze_5#pXo5npP\IsGYUHWg$OQf%nBC_]5ZN:Fl'LmeQa+f71E8NpGb5$mqs*3>Ma/E%qf:^!MI`qG4]*R.Re.STWUe)D#mWO6UOcEcL,i0->2,jY4nI<'?:g`*VK!L[iI!UGk[ZHVqg,OY:mSYaG<N-e`X@":T[$bn#rFeH?/B%Y2c^1hT>g#m=51DH'u;2p<Mor\EhuVD5HU1mLO9K!k['tLKhrGA_&mL]+80X2QPMr]@D,,]rmX&H/0ZD:G%`[p>bT_V;GSKiq`-:^%E7[om-!+FK-%A[p*+HIF#*sq2IQ]]L1/3WJ:/I2]BTB>AXU1NQ$)8AiZFJS^n^sB3VsEp3-1J55+F=H%t_SDZOZ,Y3LGKeNQ>d5RKjT@HiA#qq^G1IIDUN%aA)3S3i28FgfZ]ds9S)[pBj("Go*Ume1hq^%XVSg;"8cb%T<0PT,f9Ni6i4bpLqWMn<V3m]<_k[I:RXZZ\F<B(Om77-Cn#Rq9&4SEg?fIJ8*.NjU,BCdNY0MP+\W:?K@JK''c605GEC0^EmY!@=1(Q<C3UVG6dKfsG9!")X]K\_:fNcj%$Qp@i0*]C0gERl=VWXtJT!j.iUh%V7Ef43d.mDGAb)hQ+,Qmbm)YB)?:(CY=J<-[_pjYA?IUluusA*FQ"A>_r%b95b_+pUST+p)?)1i!6p@3k`eDMGpPFjpg(tmoPO1Hf"%s&?bIWbqA*8p;I@(D`:,/A.<)6<!m\1mX*c3bIO9QF0?%VD=OaOhR5;4j],(to[MRc:KrRB&-N+:!!E@:!!4&=-CH[s4U@NlO$HK4l=:*f#)8(&.A0!5-@l<@"9cf86n.M!;e7k^7,(S5As3hl%5skmz&d]-O'-N\CRS9<:5s7prVJ/iQPLCuGBJb$p)b*cU#0?sA!!!!"$:I/[Ji-Kr$'S&>Wd@_DWgT+E9f.<ul0=j76'+<1*htt*VuQhE!!!S+VM*#(#\buOR\uuH7RiY-aJPQ(BOkgOPL=bVr25.8T;m?>ocC!!!;.G6A9sXD"4Rru+p\HJ,<ues#T=i4'@JXHdnH3/C3l=^BPe:_5QCcajo60tO7rXW)+?r#qEfjL6R=DB$JHu'3eFnq6kLZf)(QmR.M)Rk-XWiM![;5>h[d?XpoaW1]/bflicg!d_9>$bX"KXIEiPl(E2p/X#d&SZYftn"#l)AhB+7JHTWEa8JRA7>?D-SDRISG?""H)4N%(JW19.:2[eE.2>o'FsOVaH1mVqoELUeU@Q.r7R.hP7[]Jnb!`37EK.]i:Ui@9sB/nL%E\V'&gX^DX:,SCpr:k=;"dm+'[5W";F!=UqYPQ?r33=$<O5Z#fA"U\.X)BfP6J\dE@#%duk"D\,[!$AW`+6ejhHm-&R<WL(65lXF]5V(<]#0UI0+^g]G6cfNNAHOCsU7+E3OlJ,&W^POA5iMeX;6`A#HAK0EMKlu>'EYBD3(Si>J0mU]@3U<a+<]*g,m0gDnG_f9Po<X0Amg1`H6XkjR$/Zmc'[^h8n\Q4MBYY*MC'`$R%e8]C8.)g(b/RbV.cNrJuNI]+=`,'!f@=5.Z+k%-DlTn.Z$K\U6LC7-"WaH+IS@RO==QeR@oEe.]++0."Z%ZJI:Y%2,$oe&Kjb8d1ej.<'`3,'Z<BO'a,/f:lnT&'U:IC!A[YT!CY!c6;nU1cp:S5;,%Zi:m=<M&1n#Od*rau;Ul3'7)VM_<?s,\'b*M5;bYFIOVKTIM'/Tm0bm&I,Z7ID5n_ZMP!fF@:rG4G;U[p3&L951aNP2i&Aq%8'a,5I:fNZU;A>4WeO5*[;Fs.W71t_/1rVm@0hDr,;DAV<,u#)<2%rYT9%??qbZ,5i<)?F`&P3]L"Ur0[9S$//'FbaMeJ1L^$PYuB&lg4\<09!O&OeE/5sZ/A<CK8@',:OE;aa&J_+N-L^f7WC5t+3F'Ttj]'K$U<;$7P$'hpP?78X(Z_$'uc&JC0u9hYp+,Y/MF&5a_s'i<:S8OPuM;SZ!q.6s.Q<&><-#s_<$'Wf4adnj!XPYj7k2&$c/<A_q9.6p^-9a*j`0eF)*/Hle%ZR!@Z<5:jH&eIAreIb2B"Ve:/1GDNj<=o[="Va@''-n9S;&'KO,XkEZ5YP)[;P@&E!DQBY`>&qQ6qp(u&HomH7*JRs1(_rsck-sg'bN`/$p[5m9goab'iP]%;[eimeJ)"L<=i(t,S7nIZOp%X!(.DR;_Ud?9e8\s91;5_&I]C"9LD*F'[RLN6pQtk&Ks_:7"i_2&5Ynt0apnm6pif<PtX_B,g?u+,ZHKp7+,%*d8EP&<<3`;&LA/i73P&46I=1\JKtgV9+Ws;77=rm&5tqA7$CN&"X;;i'Hn)g6q'eVOTcmo6I5m9"$mPW5sWpTKe#;@_FB6ZTjeRb&qGjS8m3@+#*a]HV.?;+RS"EqJk;X_+J>*9Lk2FZTU;IRLo>!=#UZO.8gp\XAu_g7P%GmFRL#:B,-#/k7@C0M+c*.s.Ol:8+JrbF$Atg^M2A/S67=%G#UlR=MB\dkTdYMMTTG"D-n#FsA>E[d$9B%ojQe>$>&#=[81:..8>ZZ]BHeX0#pNcV+IO@OAni4iBPC'e$>>6PAg.R[)1j#LKG[BO;KS?^LoHK%RYdu,,g%;SMF_D0$5t1A#`tI3.$A8;UoG9#@O`iSBaKY8.$uDTJ;/l:U*?;(W+^a>Ul%_jM?6=`-&@)%U+.FUM@q2-,%r<[$:8J7BrYVd#q/7mU)B>M-n7cDU0+@'"KDc]VMU+`JsI_i.#8Ll;BQ8O:&gjbnZ@`]&0qo:mU-nA,cj6C:e_SO5g6JgaUj[[;St:^9WSAm'Mq'q5p8lW"][fUbfl7O&etR,`D%%E`.\jU6q!9`V*bARb:#dn6k(S"%#n7Q%$X/Z$kZH<,tt-I<D\p2;'_sd;Nuk<dg]2$&QJtQ;Zr=Q'MqU\%*DJ2KL0m5EY)DB.28Qr&YuG'$498$Une^#Bi7oe.2%5'W2Y@mRNdWP8=H8"RL1JLAdKSNBV9(&,,#nV,QJu#BptcnL*.leJgD\(J;AqP#uZG@PVNlh)CQp667PMKJg$5?LmfGW#YH#.@"nq5J>/nI.>"F3Wi6X;&AaN[R3FsA+sN2(PaI'$MO96VQmACM,q'+6Ul#LnTSA:GU7).@$7LKE)QFu"(o`@gVM^b8J1+"qJ>OHG!eRBhMJ.[!M?obJ2$"7#0ha8e%4+E]"=1(e":.g;,YJe=
|
2008-07-11 20:38:17 +00:00
|
|
|
#<==
|