~ubuntu-branches/ubuntu/trusty/blender/trusty-proposed

« back to all changes in this revision

Viewing changes to scons/scons-local/SCons/Warnings.py

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2013-08-14 10:43:49 UTC
  • mfrom: (14.2.19 sid)
  • Revision ID: package-import@ubuntu.com-20130814104349-t1d5mtwkphp12dyj
Tags: 2.68a-3
* Upload to unstable
* debian/: python3.3 Depends simplified
  - debian/control: python3.3 Depends dropped
    for blender-data package
  - 0001-blender_thumbnailer.patch refreshed
* debian/control: libavcodec b-dep versioning dropped

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
 
3
#
 
4
# Permission is hereby granted, free of charge, to any person obtaining
 
5
# a copy of this software and associated documentation files (the
 
6
# "Software"), to deal in the Software without restriction, including
 
7
# without limitation the rights to use, copy, modify, merge, publish,
 
8
# distribute, sublicense, and/or sell copies of the Software, and to
 
9
# permit persons to whom the Software is furnished to do so, subject to
 
10
# the following conditions:
 
11
#
 
12
# The above copyright notice and this permission notice shall be included
 
13
# in all copies or substantial portions of the Software.
 
14
#
 
15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
 
16
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 
17
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
18
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 
19
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 
20
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 
21
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
22
#
 
23
 
 
24
"""SCons.Warnings
 
25
 
 
26
This file implements the warnings framework for SCons.
 
27
 
 
28
"""
 
29
 
 
30
__revision__ = "src/engine/SCons/Warnings.py  2013/03/03 09:48:35 garyo"
 
31
 
 
32
import sys
 
33
 
 
34
import SCons.Errors
 
35
 
 
36
class Warning(SCons.Errors.UserError):
 
37
    pass
 
38
 
 
39
class WarningOnByDefault(Warning):
 
40
    pass
 
41
 
 
42
 
 
43
# NOTE:  If you add a new warning class, add it to the man page, too!
 
44
 
 
45
class CacheWriteErrorWarning(Warning):
 
46
    pass
 
47
 
 
48
class CorruptSConsignWarning(WarningOnByDefault):
 
49
    pass
 
50
 
 
51
class DependencyWarning(Warning):
 
52
    pass
 
53
 
 
54
class DuplicateEnvironmentWarning(WarningOnByDefault):
 
55
    pass
 
56
 
 
57
class FutureReservedVariableWarning(WarningOnByDefault):
 
58
    pass
 
59
 
 
60
class LinkWarning(WarningOnByDefault):
 
61
    pass
 
62
 
 
63
class MisleadingKeywordsWarning(WarningOnByDefault):
 
64
    pass
 
65
 
 
66
class MissingSConscriptWarning(WarningOnByDefault):
 
67
    pass
 
68
 
 
69
class NoMD5ModuleWarning(WarningOnByDefault):
 
70
    pass
 
71
 
 
72
class NoMetaclassSupportWarning(WarningOnByDefault):
 
73
    pass
 
74
 
 
75
class NoObjectCountWarning(WarningOnByDefault):
 
76
    pass
 
77
 
 
78
class NoParallelSupportWarning(WarningOnByDefault):
 
79
    pass
 
80
 
 
81
class ReservedVariableWarning(WarningOnByDefault):
 
82
    pass
 
83
 
 
84
class StackSizeWarning(WarningOnByDefault):
 
85
    pass
 
86
 
 
87
class VisualCMissingWarning(WarningOnByDefault):
 
88
    pass
 
89
 
 
90
# Used when MSVC_VERSION and MSVS_VERSION do not point to the
 
91
# same version (MSVS_VERSION is deprecated)
 
92
class VisualVersionMismatch(WarningOnByDefault):
 
93
    pass
 
94
 
 
95
class VisualStudioMissingWarning(Warning):
 
96
    pass
 
97
 
 
98
class FortranCxxMixWarning(LinkWarning):
 
99
    pass
 
100
 
 
101
 
 
102
# Deprecation warnings
 
103
 
 
104
class FutureDeprecatedWarning(Warning):
 
105
    pass
 
106
 
 
107
class DeprecatedWarning(Warning):
 
108
    pass
 
109
 
 
110
class MandatoryDeprecatedWarning(DeprecatedWarning):
 
111
    pass
 
112
 
 
113
 
 
114
# Special case; base always stays DeprecatedWarning
 
115
class PythonVersionWarning(DeprecatedWarning):
 
116
    pass
 
117
 
 
118
class DeprecatedSourceCodeWarning(FutureDeprecatedWarning):
 
119
    pass
 
120
 
 
121
class DeprecatedBuildDirWarning(DeprecatedWarning):
 
122
    pass
 
123
 
 
124
class TaskmasterNeedsExecuteWarning(DeprecatedWarning):
 
125
    pass
 
126
 
 
127
class DeprecatedCopyWarning(MandatoryDeprecatedWarning):
 
128
    pass
 
129
 
 
130
class DeprecatedOptionsWarning(MandatoryDeprecatedWarning):
 
131
    pass
 
132
 
 
133
class DeprecatedSourceSignaturesWarning(MandatoryDeprecatedWarning):
 
134
    pass
 
135
 
 
136
class DeprecatedTargetSignaturesWarning(MandatoryDeprecatedWarning):
 
137
    pass
 
138
 
 
139
class DeprecatedDebugOptionsWarning(MandatoryDeprecatedWarning):
 
140
    pass
 
141
 
 
142
class DeprecatedSigModuleWarning(MandatoryDeprecatedWarning):
 
143
    pass
 
144
 
 
145
class DeprecatedBuilderKeywordsWarning(MandatoryDeprecatedWarning):
 
146
    pass
 
147
 
 
148
 
 
149
# The below is a list of 2-tuples.  The first element is a class object.
 
150
# The second element is true if that class is enabled, false if it is disabled.
 
151
_enabled = []
 
152
 
 
153
# If set, raise the warning as an exception
 
154
_warningAsException = 0
 
155
 
 
156
# If not None, a function to call with the warning
 
157
_warningOut = None
 
158
 
 
159
def suppressWarningClass(clazz):
 
160
    """Suppresses all warnings that are of type clazz or
 
161
    derived from clazz."""
 
162
    _enabled.insert(0, (clazz, 0))
 
163
 
 
164
def enableWarningClass(clazz):
 
165
    """Enables all warnings that are of type clazz or
 
166
    derived from clazz."""
 
167
    _enabled.insert(0, (clazz, 1))
 
168
 
 
169
def warningAsException(flag=1):
 
170
    """Turn warnings into exceptions.  Returns the old value of the flag."""
 
171
    global _warningAsException
 
172
    old = _warningAsException
 
173
    _warningAsException = flag
 
174
    return old
 
175
 
 
176
def warn(clazz, *args):
 
177
    global _enabled, _warningAsException, _warningOut
 
178
 
 
179
    warning = clazz(args)
 
180
    for clazz, flag in _enabled:
 
181
        if isinstance(warning, clazz):
 
182
            if flag:
 
183
                if _warningAsException:
 
184
                    raise warning
 
185
 
 
186
                if _warningOut:
 
187
                    _warningOut(warning)
 
188
            break
 
189
 
 
190
def process_warn_strings(arguments):
 
191
    """Process string specifications of enabling/disabling warnings,
 
192
    as passed to the --warn option or the SetOption('warn') function.
 
193
    
 
194
 
 
195
    An argument to this option should be of the form <warning-class>
 
196
    or no-<warning-class>.  The warning class is munged in order
 
197
    to get an actual class name from the classes above, which we
 
198
    need to pass to the {enable,disable}WarningClass() functions.
 
199
    The supplied <warning-class> is split on hyphens, each element
 
200
    is capitalized, then smushed back together.  Then the string
 
201
    "Warning" is appended to get the class name.
 
202
 
 
203
    For example, 'deprecated' will enable the DeprecatedWarning
 
204
    class.  'no-dependency' will disable the DependencyWarning class.
 
205
 
 
206
    As a special case, --warn=all and --warn=no-all will enable or
 
207
    disable (respectively) the base Warning class of all warnings.
 
208
 
 
209
    """
 
210
 
 
211
    def _capitalize(s):
 
212
        if s[:5] == "scons":
 
213
            return "SCons" + s[5:]
 
214
        else:
 
215
            return s.capitalize()
 
216
 
 
217
    for arg in arguments:
 
218
 
 
219
        elems = arg.lower().split('-')
 
220
        enable = 1
 
221
        if elems[0] == 'no':
 
222
            enable = 0
 
223
            del elems[0]
 
224
 
 
225
        if len(elems) == 1 and elems[0] == 'all':
 
226
            class_name = "Warning"
 
227
        else:
 
228
            class_name = ''.join(map(_capitalize, elems)) + "Warning"
 
229
        try:
 
230
            clazz = globals()[class_name]
 
231
        except KeyError:
 
232
            sys.stderr.write("No warning type: '%s'\n" % arg)
 
233
        else:
 
234
            if enable:
 
235
                enableWarningClass(clazz)
 
236
            elif issubclass(clazz, MandatoryDeprecatedWarning):
 
237
                fmt = "Can not disable mandataory warning: '%s'\n"
 
238
                sys.stderr.write(fmt % arg)
 
239
            else:
 
240
                suppressWarningClass(clazz)
 
241
 
 
242
# Local Variables:
 
243
# tab-width:4
 
244
# indent-tabs-mode:nil
 
245
# End:
 
246
# vim: set expandtab tabstop=4 shiftwidth=4: