c505dafeafd87600033392ceff4ed1bf9cea8e0b
1 #! /usr/bin/env python2.7
2 # Copyright (c) 2014, 2016 ARM Limited
5 # The license below extends only to copyright in the software and shall
6 # not be construed as granting a license to any other intellectual
7 # property including but not limited to intellectual property relating
8 # to a hardware implementation of the functionality of the software
9 # licensed hereunder. You may use the software subject to the license
10 # terms below provided that you ensure that this notice is replicated
11 # unmodified and in its entirety in all distributions of the software,
12 # modified or unmodified, in source code or in binary form.
14 # Copyright (c) 2006 The Regents of The University of Michigan
15 # Copyright (c) 2007,2011 The Hewlett-Packard Development Company
16 # Copyright (c) 2016 Advanced Micro Devices, Inc.
17 # All rights reserved.
19 # Redistribution and use in source and binary forms, with or without
20 # modification, are permitted provided that the following conditions are
21 # met: redistributions of source code must retain the above copyright
22 # notice, this list of conditions and the following disclaimer;
23 # redistributions in binary form must reproduce the above copyright
24 # notice, this list of conditions and the following disclaimer in the
25 # documentation and/or other materials provided with the distribution;
26 # neither the name of the copyright holders nor the names of its
27 # contributors may be used to endorse or promote products derived from
28 # this software without specific prior written permission.
30 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 from abc
import ABCMeta
, abstractmethod
50 lead
= re
.compile(r
'^([ \t]+)')
51 trail
= re
.compile(r
'([ \t]+)$')
52 any_control
= re
.compile(r
'\b(if|while|for)([ \t]*)\(')
55 class UserInterface(object):
56 __metaclass__
= ABCMeta
58 def __init__(self
, verbose
=False):
59 self
.verbose
= verbose
61 def prompt(self
, prompt
, results
, default
):
63 result
= self
._prompt
(prompt
, results
, default
)
68 def _prompt(self
, prompt
, results
, default
):
72 def write(self
, string
):
75 class StdioUI(UserInterface
):
76 def _prompt(self
, prompt
, results
, default
):
77 return raw_input(prompt
) or default
79 def write(self
, string
):
80 sys
.stdout
.write(string
)
82 class MercurialUI(UserInterface
):
83 def __init__(self
, ui
, *args
, **kwargs
):
84 super(MercurialUI
, self
).__init
__(*args
, **kwargs
)
87 def _prompt(self
, prompt
, results
, default
):
88 return self
.hg_ui
.prompt(prompt
, default
=default
)
90 def write(self
, string
):
91 self
.hg_ui
.write(string
)
95 """Helper function to create regular expression ignore file
98 rex
= re
.compile(expr
)
100 return rex
.match(fname
)
103 # This list contains a list of functions that are called to determine
104 # if a file should be excluded from the style matching rules or
105 # not. The functions are called with the file name relative to the
106 # repository root (without a leading slash) as their argument. A file
107 # is excluded if any function in the list returns true.
109 # Ignore external projects as they are unlikely to follow the gem5
112 # Ignore test data, as they are not code
113 _re_ignore("^tests/(?:quick|long)/"),
114 # Ignore RISC-V assembly tests as they are maintained in an external
115 # project that does not follow the gem5 coding convention
116 _re_ignore("tests/test-progs/asmtest/src/riscv/"),
117 # Ignore RISC-V assembly dump files
118 _re_ignore("tests/test-progs/asmtest/dump/riscv/")
121 def check_ignores(fname
):
122 """Check if a file name matches any of the ignore rules"""
124 for rule
in style_ignores
:
131 def normalized_len(line
):
132 """Return a normalized line length with expanded tabs"""
137 count
+= tabsize
- count
% tabsize
143 def modified_regions(old
, new
, context
=0):
145 m
= difflib
.SequenceMatcher(a
=old
, b
=new
, autojunk
=False)
146 for group
in m
.get_grouped_opcodes(context
):
150 regions
.extend(Region(first
[3], last
[4] + 1))