|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
# Thomas Nagy, 2005-2009
|
|
|
|
|
|
|
|
"""
|
|
|
|
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 ImportError("Waf requires Python >= 2.3")
|
|
|
|
|
|
|
|
if 'PSYCOWAF' in os.environ:
|
|
|
|
try:import psyco;psyco.full()
|
|
|
|
except:pass
|
|
|
|
|
|
|
|
VERSION="1.5.8"
|
|
|
|
REVISION="3e327cd9534c48e6762f56fdb1332663"
|
|
|
|
INSTALL=''
|
|
|
|
C1='#,'
|
|
|
|
C2='#('
|
|
|
|
cwd = os.getcwd()
|
|
|
|
join = os.path.join
|
|
|
|
|
|
|
|
WAF='waf'
|
|
|
|
def b(x):
|
|
|
|
return x
|
|
|
|
|
|
|
|
if sys.hexversion>0x300000f:
|
|
|
|
WAF='waf3'
|
|
|
|
def b(x):
|
|
|
|
return x.encode()
|
|
|
|
|
|
|
|
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 == b('#==>\n'):
|
|
|
|
txt = f.readline()
|
|
|
|
if not txt: err(c % 1)
|
|
|
|
if f.readline()!=b('#<==\n'): err(c % 2)
|
|
|
|
break
|
|
|
|
if not txt: err(c % 3)
|
|
|
|
txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r'))
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
try:
|
|
|
|
t = tarfile.open(tmp)
|
|
|
|
for x in t: t.extract(x)
|
|
|
|
t.close()
|
|
|
|
except:
|
|
|
|
os.chdir(cwd)
|
|
|
|
try: shutil.rmtree(dir)
|
|
|
|
except OSError: pass
|
|
|
|
err("Waf cannot be unpacked, check that bzip2 support is present")
|
|
|
|
|
|
|
|
os.chmod(join('wafadmin','Tools'), 493)
|
|
|
|
|
|
|
|
os.unlink(tmp)
|
|
|
|
|
|
|
|
if sys.hexversion>0x300000f:
|
|
|
|
sys.path = [join(dir, 'wafadmin')] + sys.path
|
|
|
|
import py3kfixes
|
|
|
|
py3kfixes.fixdir(dir)
|
|
|
|
|
|
|
|
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/%s-%s-%s/" % (WAF, VERSION, REVISION)
|
|
|
|
for i in [INSTALL,'/usr','/usr/local','/opt']:
|
|
|
|
w = test(i+dir)
|
|
|
|
if w: return w
|
|
|
|
|
|
|
|
#waf-local
|
|
|
|
s = '.%s-%s-%s'
|
|
|
|
if sys.platform == 'win32': s = s[1:]
|
|
|
|
dir = join(base, s % (WAF, VERSION, REVISION))
|
|
|
|
w = test(dir)
|
|
|
|
if w: return w
|
|
|
|
|
|
|
|
#unpack
|
|
|
|
unpack_wafdir(dir)
|
|
|
|
return dir
|
|
|
|
|
|
|
|
wafdir = find_lib()
|
|
|
|
w = join(wafdir, 'wafadmin')
|
|
|
|
t = join(w, 'Tools')
|
|
|
|
sys.path = [w, t] + sys.path
|
|
|
|
|
|
|
|
import Scripting
|
|
|
|
Scripting.prepare(t, cwd, VERSION, wafdir)
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
#==>
|
|
|
|
#BZh91AY&SY�U���|���� j������������`(#(R�ր�@a�|ݷ� ���W����m��ͬV�^y���fz��^��nXؼ���V*ڶ}ݹn������A���F�J����#,��3�wZ���=���Y�콽�k��Kw�t�����g}���o8#(W����{<�jv����f���� 2� �`�w L_B� .�{���k�=������h:P�7>����uB� 4)�Շ{p#,�U$U � ����EJ�@Tn�jճ�}�%{��:�n��k��z�AQ�|�Gz}�=�'�g7o<g��x����I������U�Ts�M��{�>�\_N�RB����� R�l#, ��#���Q�6�nq�j������K��*@� ��J =��k�66����x�������@ ���i�_��m�rZ���:k}����L��=�G����\Ҫ����=6��w���믮�}������h鷶�g�����^��[�qv�g���������w�{6�=�pu�m��=�����z�6טwy�}}�k����w7R���U}��w��{m����{w�!�uy����u�\��s���:�u�m�ۇ5>��]��2^�#�q�WєR������8�Iޮ�Z�U]��hG�Iu��b�z�)Ns���"����O���w� ������Ϸ�������{g�{y�yڷ�{�Ovw�W�nNM�>��=�(��DE�I�V����y��]x4����OU+9���)��m\������1�n�x=��>�lgv�oy�{��ϋ�U8����u����<��@�����M����v{�����;�[�|���m��[�����(@U:U�^�y�<�A�U�s�+V���n��{���u�קͳA�}=���{=̫��#Cvb<�{����0j'XF���w^��:>�s[Վ��F��>����;�ռݹ{��|>���t�Z��I��/�O������f���i������Ҍ���y◦m��{^�����}��|ɞ7nΦ`l��\����^�e�}��ݸ���Y�`S���������]����ա���=W��$]{���4� @ L1#(& |