Scons: add Visual Studio 2013 support.
[scons.git] / scons.py
1 #! /usr/bin/env python
2 #
3 # SCons - a Software Constructor
4 #
5 # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
6 #
7 # Permission is hereby granted, free of charge, to any person obtaining
8 # a copy of this software and associated documentation files (the
9 # "Software"), to deal in the Software without restriction, including
10 # without limitation the rights to use, copy, modify, merge, publish,
11 # distribute, sublicense, and/or sell copies of the Software, and to
12 # permit persons to whom the Software is furnished to do so, subject to
13 # the following conditions:
14 #
15 # The above copyright notice and this permission notice shall be included
16 # in all copies or substantial portions of the Software.
17 #
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
19 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
20 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
26 __revision__ = "src/script/scons.py  2013/03/03 09:48:35 garyo"
27
28 __version__ = "2.3.0"
29
30 __build__ = ""
31
32 __buildsys__ = "reepicheep"
33
34 __date__ = "2013/03/03 09:48:35"
35
36 __developer__ = "garyo"
37
38 import os
39 import sys
40
41 ##############################################################################
42 # BEGIN STANDARD SCons SCRIPT HEADER
43 #
44 # This is the cut-and-paste logic so that a self-contained script can
45 # interoperate correctly with different SCons versions and installation
46 # locations for the engine.  If you modify anything in this section, you
47 # should also change other scripts that use this same header.
48 ##############################################################################
49
50 # Strip the script directory from sys.path() so on case-insensitive
51 # (WIN32) systems Python doesn't think that the "scons" script is the
52 # "SCons" package.  Replace it with our own library directories
53 # (version-specific first, in case they installed by hand there,
54 # followed by generic) so we pick up the right version of the build
55 # engine modules if they're in either directory.
56
57
58 if sys.version_info >= (3,0,0):
59     msg = "scons: *** SCons version %s does not run under Python version %s.\n\
60 Python 3 is not yet supported.\n"
61     sys.stderr.write(msg % (__version__, sys.version.split()[0]))
62     sys.exit(1)
63
64
65 script_dir = sys.path[0]
66
67 if script_dir in sys.path:
68     sys.path.remove(script_dir)
69
70 libs = []
71
72 if "SCONS_LIB_DIR" in os.environ:
73     libs.append(os.environ["SCONS_LIB_DIR"])
74
75 local_version = 'scons-local-' + __version__
76 local = 'scons-local'
77 if script_dir:
78     local_version = os.path.join(script_dir, local_version)
79     local = os.path.join(script_dir, local)
80 libs.append(os.path.abspath(local_version))
81 libs.append(os.path.abspath(local))
82
83 scons_version = 'scons-%s' % __version__
84
85 # preferred order of scons lookup paths
86 prefs = []
87
88 try:
89     import pkg_resources
90 except ImportError:
91     pass
92 else:
93     # when running from an egg add the egg's directory
94     try:
95         d = pkg_resources.get_distribution('scons')
96     except pkg_resources.DistributionNotFound:
97         pass
98     else:
99         prefs.append(d.location)
100
101 if sys.platform == 'win32':
102     # sys.prefix is (likely) C:\Python*;
103     # check only C:\Python*.
104     prefs.append(sys.prefix)
105     prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages'))
106 else:
107     # On other (POSIX) platforms, things are more complicated due to
108     # the variety of path names and library locations.  Try to be smart
109     # about it.
110     if script_dir == 'bin':
111         # script_dir is `pwd`/bin;
112         # check `pwd`/lib/scons*.
113         prefs.append(os.getcwd())
114     else:
115         if script_dir == '.' or script_dir == '':
116             script_dir = os.getcwd()
117         head, tail = os.path.split(script_dir)
118         if tail == "bin":
119             # script_dir is /foo/bin;
120             # check /foo/lib/scons*.
121             prefs.append(head)
122
123     head, tail = os.path.split(sys.prefix)
124     if tail == "usr":
125         # sys.prefix is /foo/usr;
126         # check /foo/usr/lib/scons* first,
127         # then /foo/usr/local/lib/scons*.
128         prefs.append(sys.prefix)
129         prefs.append(os.path.join(sys.prefix, "local"))
130     elif tail == "local":
131         h, t = os.path.split(head)
132         if t == "usr":
133             # sys.prefix is /foo/usr/local;
134             # check /foo/usr/local/lib/scons* first,
135             # then /foo/usr/lib/scons*.
136             prefs.append(sys.prefix)
137             prefs.append(head)
138         else:
139             # sys.prefix is /foo/local;
140             # check only /foo/local/lib/scons*.
141             prefs.append(sys.prefix)
142     else:
143         # sys.prefix is /foo (ends in neither /usr or /local);
144         # check only /foo/lib/scons*.
145         prefs.append(sys.prefix)
146
147     temp = [os.path.join(x, 'lib') for x in prefs]
148     temp.extend([os.path.join(x,
149                                            'lib',
150                                            'python' + sys.version[:3],
151                                            'site-packages') for x in prefs])
152     prefs = temp
153
154     # Add the parent directory of the current python's library to the
155     # preferences.  On SuSE-91/AMD64, for example, this is /usr/lib64,
156     # not /usr/lib.
157     try:
158         libpath = os.__file__
159     except AttributeError:
160         pass
161     else:
162         # Split /usr/libfoo/python*/os.py to /usr/libfoo/python*.
163         libpath, tail = os.path.split(libpath)
164         # Split /usr/libfoo/python* to /usr/libfoo
165         libpath, tail = os.path.split(libpath)
166         # Check /usr/libfoo/scons*.
167         prefs.append(libpath)
168
169 # Look first for 'scons-__version__' in all of our preference libs,
170 # then for 'scons'.
171 libs.extend([os.path.join(x, scons_version) for x in prefs])
172 libs.extend([os.path.join(x, 'scons') for x in prefs])
173
174 sys.path = libs + sys.path
175
176 ##############################################################################
177 # END STANDARD SCons SCRIPT HEADER
178 ##############################################################################
179
180 if __name__ == "__main__":
181     try:
182         import SCons.Script
183     except:
184         ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'engine')
185         if os.path.exists(ROOT):
186             sys.path += [ROOT]
187             print("SCons import failed. Trying to run from source directory")
188         import SCons.Script
189
190     # this does all the work, and calls sys.exit
191     # with the proper exit status when done.
192     SCons.Script.main()
193
194 # Local Variables:
195 # tab-width:4
196 # indent-tabs-mode:nil
197 # End:
198 # vim: set expandtab tabstop=4 shiftwidth=4: