Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/41599 )
Change subject: python,scons: Move readCommand and compareVersions into
site_scons.
......................................................................
python,scons: Move readCommand and compareVersions into site_scons.
These functions are only used by scons, so it makes sense to move them
to site_scons/gem5_scons/util.py.
Change-Id: If2b3995f208cb71adf3c59aac4eabe378c47f94f
---
M SConstruct
M ext/libelf/SConscript
M site_scons/gem5_scons/util.py
M site_scons/site_tools/git.py
M src/SConscript
M src/proto/SConsopts
M src/python/m5/util/__init__.py
M src/systemc/dt/int/SConscript
8 files changed, 64 insertions(+), 68 deletions(-)
diff --git a/SConstruct b/SConstruct
index adb7f0c..4308b72 100755
--- a/SConstruct
+++ b/SConstruct
@@ -90,8 +90,6 @@
import SCons.Node
import SCons.Node.FS
-from m5.util import compareVersions, readCommand
-
########################################################################
#
@@ -131,6 +129,7 @@
from gem5_scons import TempFileSpawn, EnvDefaults, MakeAction,
MakeActionTool
import gem5_scons
from gem5_scons.builders import ConfigFile, AddLocalRPATH, SwitchingHeaders
+from gem5_scons.util import compareVersions, readCommand
Export('MakeAction')
diff --git a/ext/libelf/SConscript b/ext/libelf/SConscript
index e2cc847..f3dbe6a 100644
--- a/ext/libelf/SConscript
+++ b/ext/libelf/SConscript
@@ -32,8 +32,6 @@
Import('main')
-from m5.util import compareVersions
-
elf_files = []
def ElfFile(filename):
elf_files.append(File(filename))
diff --git a/site_scons/gem5_scons/util.py b/site_scons/gem5_scons/util.py
index 1a196c2..b62cc01 100644
--- a/site_scons/gem5_scons/util.py
+++ b/site_scons/gem5_scons/util.py
@@ -38,6 +38,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import itertools
+import re
import sys
import SCons.Script
@@ -50,3 +52,60 @@
def get_termcap():
return
m5.util.terminal.get_termcap(SCons.Script.GetOption('use_colors'))
+
+def readCommand(cmd, **kwargs):
+ """
+ run the command cmd, read the results and return them
+ this is sorta like `cmd` in shell
+
+ :param cmd: command to run with Popen
+ :type cmd: string, list
+ :returns: command stdout
+ :rtype: string
+ """
+ from subprocess import Popen, PIPE, STDOUT
+
+ if isinstance(cmd, str):
+ cmd = cmd.split()
+
+ no_exception = 'exception' in kwargs
+ exception = kwargs.pop('exception', None)
+
+ kwargs.setdefault('shell', False)
+ kwargs.setdefault('stdout', PIPE)
+ kwargs.setdefault('stderr', STDOUT)
+ kwargs.setdefault('close_fds', True)
+ try:
+ subp = Popen(cmd, **kwargs)
+ except Exception as e:
+ if no_exception:
+ return -1, exception
+ raise
+
+ output = subp.communicate()[0].decode('utf-8')
+ return output
+
+def compareVersions(v1, v2):
+ """helper function: compare arrays or strings of version numbers.
+ E.g., compare_version((1,3,25), (1,4,1)')
+ returns -1, 0, 1 if v1 is <, ==, > v2
+ """
+ def make_version_list(v):
+ if isinstance(v, (list,tuple)):
+ return v
+ elif isinstance(v, str):
+ return list(map(lambda x: int(re.match('\d+', x).group()),
+ v.split('.')))
+ else:
+ raise TypeError()
+
+ v1 = make_version_list(v1)
+ v2 = make_version_list(v2)
+
+ # Compare corresponding elements of lists
+ # The shorter list is filled with 0 till the lists have the same length
+ for n1,n2 in itertools.zip_longest(v1, v2, fillvalue=0):
+ if n1 < n2: return -1
+ if n1 > n2: return 1
+
+ return 0
diff --git a/site_scons/site_tools/git.py b/site_scons/site_tools/git.py
index a77cffb..3a71c9f 100644
--- a/site_scons/site_tools/git.py
+++ b/site_scons/site_tools/git.py
@@ -42,7 +42,6 @@
import sys
import gem5_scons.util
-from m5.util import readCommand
git_style_message = """
You're missing the gem5 style or commit message hook. These hooks help
@@ -52,7 +51,7 @@
def install_style_hooks(env):
try:
- gitdir = env.Dir(readCommand(
+ gitdir = env.Dir(gem5_scons.util.readCommand(
["git", "rev-parse", "--git-dir"]).strip("\n"))
except Exception as e:
print("Warning: Failed to find git repo directory: %s" % e)
diff --git a/src/SConscript b/src/SConscript
index 5fe0ab2..dc07279 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -63,7 +63,7 @@
build_env = [(opt, env[opt]) for opt in export_vars]
-from m5.util import code_formatter, compareVersions, readCommand
+from m5.util import code_formatter
########################################################################
# Code for adding source files of various types
diff --git a/src/proto/SConsopts b/src/proto/SConsopts
index a7cb86f..ea8b9bd 100644
--- a/src/proto/SConsopts
+++ b/src/proto/SConsopts
@@ -26,7 +26,7 @@
Import('*')
from gem5_scons import warning
-from m5.util import readCommand, compareVersions
+from gem5_scons.util import readCommand, compareVersions
import gem5_scons
diff --git a/src/python/m5/util/__init__.py b/src/python/m5/util/__init__.py
index a0fe63d..3f9d76e 100644
--- a/src/python/m5/util/__init__.py
+++ b/src/python/m5/util/__init__.py
@@ -41,8 +41,6 @@
import re
import sys
-from itertools import zip_longest
-
from . import convert
from . import jobfile
@@ -112,31 +110,6 @@
else:
return [applyMethod(o, meth, *args, **kwargs) for o in objOrSeq]
-def compareVersions(v1, v2):
- """helper function: compare arrays or strings of version numbers.
- E.g., compare_version((1,3,25), (1,4,1)')
- returns -1, 0, 1 if v1 is <, ==, > v2
- """
- def make_version_list(v):
- if isinstance(v, (list,tuple)):
- return v
- elif isinstance(v, str):
- return list(map(lambda x: int(re.match('\d+', x).group()),
- v.split('.')))
- else:
- raise TypeError()
-
- v1 = make_version_list(v1)
- v2 = make_version_list(v2)
-
- # Compare corresponding elements of lists
- # The shorter list is filled with 0 till the lists have the same length
- for n1,n2 in zip_longest(v1, v2, fillvalue=0):
- if n1 < n2: return -1
- if n1 > n2: return 1
-
- return 0
-
def crossproduct(items):
if len(items) == 1:
for i in items[0]:
@@ -173,38 +146,6 @@
line += item
print(line)
-def readCommand(cmd, **kwargs):
- """
- run the command cmd, read the results and return them
- this is sorta like `cmd` in shell
-
- :param cmd: command to run with Popen
- :type cmd: string, list
- :returns: command stdout
- :rtype: string
- """
- from subprocess import Popen, PIPE, STDOUT
-
- if isinstance(cmd, str):
- cmd = cmd.split()
-
- no_exception = 'exception' in kwargs
- exception = kwargs.pop('exception', None)
-
- kwargs.setdefault('shell', False)
- kwargs.setdefault('stdout', PIPE)
- kwargs.setdefault('stderr', STDOUT)
- kwargs.setdefault('close_fds', True)
- try:
- subp = Popen(cmd, **kwargs)
- except Exception as e:
- if no_exception:
- return -1, exception
- raise
-
- output = subp.communicate()[0].decode('utf-8')
- return output
-
def makeDir(path):
"""Make a directory if it doesn't exist. If the path does exist,
ensure that it is a directory"""
diff --git a/src/systemc/dt/int/SConscript b/src/systemc/dt/int/SConscript
index b052f04..159eb6f 100644
--- a/src/systemc/dt/int/SConscript
+++ b/src/systemc/dt/int/SConscript
@@ -25,7 +25,7 @@
Import('*')
-from m5.util import compareVersions
+from gem5_scons.util import compareVersions
if env['USE_SYSTEMC']:
if main['GCC'] and compareVersions(main['CXXVERSION'], '10.0') >= 0:
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/41599
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: If2b3995f208cb71adf3c59aac4eabe378c47f94f
Gerrit-Change-Number: 41599
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s