1#!/usr/bin/env python3 2# encoding: latin-1 3# Thomas Nagy, 2005-2018 4# 5""" 6Redistribution and use in source and binary forms, with or without 7modification, are permitted provided that the following conditions 8are met: 9 101. Redistributions of source code must retain the above copyright 11 notice, this list of conditions and the following disclaimer. 12 132. Redistributions in binary form must reproduce the above copyright 14 notice, this list of conditions and the following disclaimer in the 15 documentation and/or other materials provided with the distribution. 16 173. The name of the author may not be used to endorse or promote products 18 derived from this software without specific prior written permission. 19 20THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR 21IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 24INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 28STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30POSSIBILITY OF SUCH DAMAGE. 31""" 32 33import os, sys, inspect 34 35VERSION="2.0.18" 36REVISION="x" 37GIT="x" 38INSTALL="x" 39C1='x' 40C2='x' 41C3='x' 42cwd = os.getcwd() 43join = os.path.join 44 45if sys.hexversion<0x206000f: 46 raise ImportError('Python >= 2.6 is required to create the waf file') 47 48WAF='waf' 49def b(x): 50 return x 51if sys.hexversion>0x300000f: 52 WAF='waf3' 53 def b(x): 54 return x.encode() 55 56def err(m): 57 print(('\033[91mError: %s\033[0m' % m)) 58 sys.exit(1) 59 60def unpack_wafdir(dir, src): 61 f = open(src,'rb') 62 c = 'corrupt archive (%d)' 63 while 1: 64 line = f.readline() 65 if not line: err('run waf-light from a folder containing waflib') 66 if line == b('#==>\n'): 67 txt = f.readline() 68 if not txt: err(c % 1) 69 if f.readline() != b('#<==\n'): err(c % 2) 70 break 71 if not txt: err(c % 3) 72 txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) 73 74 import shutil, tarfile 75 try: shutil.rmtree(dir) 76 except OSError: pass 77 try: 78 for x in ('Tools', 'extras'): 79 os.makedirs(join(dir, 'waflib', x)) 80 except OSError: 81 err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) 82 83 os.chdir(dir) 84 tmp = 't.bz2' 85 t = open(tmp,'wb') 86 try: t.write(txt) 87 finally: t.close() 88 89 try: 90 t = tarfile.open(tmp) 91 except: 92 try: 93 os.system('bunzip2 t.bz2') 94 t = tarfile.open('t') 95 tmp = 't' 96 except: 97 os.chdir(cwd) 98 try: shutil.rmtree(dir) 99 except OSError: pass 100 err("Waf cannot be unpacked, check that bzip2 support is present") 101 102 try: 103 for x in t: t.extract(x) 104 finally: 105 t.close() 106 107 for x in ('Tools', 'extras'): 108 os.chmod(join('waflib',x), 493) 109 110 if sys.hexversion<0x300000f: 111 sys.path = [join(dir, 'waflib')] + sys.path 112 import fixpy2 113 fixpy2.fixdir(dir) 114 115 os.remove(tmp) 116 os.chdir(cwd) 117 118 try: dir = unicode(dir, 'mbcs') 119 except: pass 120 try: 121 from ctypes import windll 122 windll.kernel32.SetFileAttributesW(dir, 2) 123 except: 124 pass 125 126def test(dir): 127 try: 128 os.stat(join(dir, 'waflib')) 129 return os.path.abspath(dir) 130 except OSError: 131 pass 132 133def find_lib(): 134 path = '../../third_party/waf' 135 paths = [path, path+'/waflib'] 136 return [os.path.abspath(os.path.join(os.path.dirname(__file__), x)) for x in paths] 137 138wafdir = find_lib() 139for p in wafdir: 140 sys.path.insert(0, p) 141 142if __name__ == '__main__': 143 #import extras.compat15#PRELUDE 144 import sys 145 146 from waflib.Tools import ccroot, c, ar, compiler_c, gcc 147 sys.modules['cc'] = c 148 sys.modules['ccroot'] = ccroot 149 sys.modules['ar'] = ar 150 sys.modules['compiler_cc'] = compiler_c 151 sys.modules['gcc'] = gcc 152 153 from waflib import Options 154 Options.lockfile = os.environ.get('WAFLOCK', '.lock-wscript') 155 if os.path.isfile(Options.lockfile) and os.stat(Options.lockfile).st_size == 0: 156 os.environ['NOCLIMB'] = "1" 157 # there is a single top-level, but libraries must build independently 158 os.environ['NO_LOCK_IN_TOP'] = "1" 159 160 from waflib import Task 161 class o(object): 162 display = None 163 Task.classes['cc_link'] = o 164 165 from waflib import Scripting 166 Scripting.waf_entry_point(cwd, VERSION, wafdir[0]) 167 168