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

Reply via email to