VERSION: bump to 0.4
[pd-aubio.git] / waf
1 #!/usr/bin/env python
2 # encoding: ISO8859-1
3 # Thomas Nagy, 2005-2012
4
5 """
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions
8 are met:
9
10 1. Redistributions of source code must retain the above copyright
11    notice, this list of conditions and the following disclaimer.
12
13 2. 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
17 3. 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
20 THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
21 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
24 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31 """
32
33 import os, sys
34
35 VERSION="1.7.13"
36 REVISION="5a064c2686fe54de4e11018d22148cfc"
37 INSTALL=''
38 C1='#('
39 C2='#$'
40 cwd = os.getcwd()
41 join = os.path.join
42
43
44 WAF='waf'
45 def b(x):
46         return x
47 if sys.hexversion>0x300000f:
48         WAF='waf3'
49         def b(x):
50                 return x.encode()
51
52 def err(m):
53         print(('\033[91mError: %s\033[0m' % m))
54         sys.exit(1)
55
56 def unpack_wafdir(dir):
57         f = open(sys.argv[0],'rb')
58         c = 'corrupt archive (%d)'
59         while 1:
60                 line = f.readline()
61                 if not line: err('run waf-light from a folder containing waflib')
62                 if line == b('#==>\n'):
63                         txt = f.readline()
64                         if not txt: err(c % 1)
65                         if f.readline() != b('#<==\n'): err(c % 2)
66                         break
67         if not txt: err(c % 3)
68         txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r'))
69
70         import shutil, tarfile
71         try: shutil.rmtree(dir)
72         except OSError: pass
73         try:
74                 for x in ['Tools', 'extras']:
75                         os.makedirs(join(dir, 'waflib', x))
76         except OSError:
77                 err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir)
78
79         os.chdir(dir)
80         tmp = 't.bz2'
81         t = open(tmp,'wb')
82         try: t.write(txt)
83         finally: t.close()
84
85         try:
86                 t = tarfile.open(tmp)
87         except:
88                 try:
89                         os.system('bunzip2 t.bz2')
90                         t = tarfile.open('t')
91                         tmp = 't'
92                 except:
93                         os.chdir(cwd)
94                         try: shutil.rmtree(dir)
95                         except OSError: pass
96                         err("Waf cannot be unpacked, check that bzip2 support is present")
97
98         try:
99                 for x in t: t.extract(x)
100         finally:
101                 t.close()
102
103         for x in ['Tools', 'extras']:
104                 os.chmod(join('waflib',x), 493)
105
106         if sys.hexversion<0x300000f:
107                 sys.path = [join(dir, 'waflib')] + sys.path
108                 import fixpy2
109                 fixpy2.fixdir(dir)
110
111         os.remove(tmp)
112         os.chdir(cwd)
113
114         try: dir = unicode(dir, 'mbcs')
115         except: pass
116         try:
117                 from ctypes import windll
118                 windll.kernel32.SetFileAttributesW(dir, 2)
119         except:
120                 pass
121
122 def test(dir):
123         try:
124                 os.stat(join(dir, 'waflib'))
125                 return os.path.abspath(dir)
126         except OSError:
127                 pass
128
129 def find_lib():
130         name = sys.argv[0]
131         base = os.path.dirname(os.path.abspath(name))
132
133         #devs use $WAFDIR
134         w=test(os.environ.get('WAFDIR', ''))
135         if w: return w
136
137         #waf-light
138         if name.endswith('waf-light'):
139                 w = test(base)
140                 if w: return w
141                 err('waf-light requires waflib -> export WAFDIR=/folder')
142
143         dirname = '%s-%s-%s' % (WAF, VERSION, REVISION)
144         for i in [INSTALL,'/usr','/usr/local','/opt']:
145                 w = test(i + '/lib/' + dirname)
146                 if w: return w
147
148         #waf-local
149         dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname)
150         w = test(dir)
151         if w: return w
152
153         #unpack
154         unpack_wafdir(dir)
155         return dir
156
157 wafdir = find_lib()
158 sys.path.insert(0, wafdir)
159
160 if __name__ == '__main__':
161
162         from waflib import Scripting
163         Scripting.waf_entry_point(cwd, VERSION, wafdir)
164