[llvm] r231017 - lit: Add 'cd' support to the internal shell and port some tests

Kuperstein, Michael M michael.m.kuperstein at intel.com
Tue Mar 3 07:27:19 PST 2015


Hi Reid,

test/Object/archive-format.test is broken on MSVC builds builds following this.

20>  CHECK-NEXT: 0123456789abcde/{{................................}}4         `
20>  
20>              ^
20>  
20>  <stdin>:4:1: note: scanning from here
20>  
20>  0123456789abcde/1425395566  9999  9999  177777  5        

I assume it has always been broken, and requiring shell just masked the bug, but, meanwhile, we still ended up with a broken test. 

Michael

-----Original Message-----
From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Reid Kleckner
Sent: Monday, March 02, 2015 23:33
To: llvm-commits at cs.uiuc.edu
Subject: [llvm] r231017 - lit: Add 'cd' support to the internal shell and port some tests

Author: rnk
Date: Mon Mar  2 15:33:18 2015
New Revision: 231017

URL: http://llvm.org/viewvc/llvm-project?rev=231017&view=rev
Log:
lit: Add 'cd' support to the internal shell and port some tests

The internal shell was already threading around a 'cwd' parameter. We just have to make it mutable so that we can update it as the test script executes.

If the shell ever grows support for environment variable substitution, we could also implement support for export.

Modified:
    llvm/trunk/test/Linker/targettriple.ll
    llvm/trunk/test/Object/archive-delete.test
    llvm/trunk/test/Object/archive-extract-dir.test
    llvm/trunk/test/Object/archive-format.test
    llvm/trunk/test/Object/archive-move.test
    llvm/trunk/test/Object/archive-update.test
    llvm/trunk/test/Object/extract.ll
    llvm/trunk/test/Object/nm-trivial-object.test
    llvm/trunk/test/tools/llvm-cov/llvm-cov.test
    llvm/trunk/utils/lit/lit/TestRunner.py

Modified: llvm/trunk/test/Linker/targettriple.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/targettriple.ll?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Linker/targettriple.ll (original)
+++ llvm/trunk/test/Linker/targettriple.ll Mon Mar  2 15:33:18 2015
@@ -1,4 +1,3 @@
-; REQUIRES: shell
 ; RUN: llvm-link %s %S/Inputs/targettriple-a.ll -S -o - 2>%t.a.err | FileCheck %s  ; RUN: cat %t.a.err | FileCheck --check-prefix=WARN-A %s --allow-empty
 

Modified: llvm/trunk/test/Object/archive-delete.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-delete.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-delete.test (original)
+++ llvm/trunk/test/Object/archive-delete.test Mon Mar  2 15:33:18 2015
@@ -1,7 +1,5 @@
 Test the 'd' operation in llvm-ar
 
-REQUIRES: shell
-
 RUN: cd %T
 
 RUN: rm -f %t.a

Modified: llvm/trunk/test/Object/archive-extract-dir.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-extract-dir.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-extract-dir.test (original)
+++ llvm/trunk/test/Object/archive-extract-dir.test Mon Mar  2 15:33:18 
+++ 2015
@@ -1,5 +1,3 @@
-REQUIRES: shell
-
 RUN: mkdir -p %t
 RUN: cd %t
 RUN: rm -rf foo
@@ -10,4 +8,4 @@ RUN: rm foo
 RUN: mkdir foo
 RUN: not llvm-ar x test.a foo 2>&1 | FileCheck %s
 
-CHECK: foo: Is a directory
+CHECK: foo: {{[Ii]}}s a directory

Modified: llvm/trunk/test/Object/archive-format.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-format.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-format.test (original)
+++ llvm/trunk/test/Object/archive-format.test Mon Mar  2 15:33:18 2015
@@ -1,8 +1,6 @@
 Test the exact archive format. In particular, test which file names use the  string table or not.
 
-REQUIRES: shell
-
 RUN: mkdir -p %t
 RUN: cd %t
 

Modified: llvm/trunk/test/Object/archive-move.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-move.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-move.test (original)
+++ llvm/trunk/test/Object/archive-move.test Mon Mar  2 15:33:18 2015
@@ -1,7 +1,5 @@
 Test the 'm' operation in llvm-ar
 
-REQUIRES: shell
-
 RUN: cd %T
 
 RUN: rm -f %t.a

Modified: llvm/trunk/test/Object/archive-update.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-update.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-update.test (original)
+++ llvm/trunk/test/Object/archive-update.test Mon Mar  2 15:33:18 2015
@@ -1,7 +1,5 @@
 Test the 'u' option of llvm-ar
 
-REQUIRES: shell
-
 RUN: cd %T
 RUN: rm -f %t.a
 

Modified: llvm/trunk/test/Object/extract.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/extract.ll?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/extract.ll (original)
+++ llvm/trunk/test/Object/extract.ll Mon Mar  2 15:33:18 2015
@@ -3,8 +3,6 @@
 ; This test just makes sure that llvm-ar can extract bytecode members  ; from various style archives.
 
-; REQUIRES: shell
-
 ; RUN: cd %T
 
 ; RUN: rm -f very_long_bytecode_file_name.bc

Modified: llvm/trunk/test/Object/nm-trivial-object.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/nm-trivial-object.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/Object/nm-trivial-object.test (original)
+++ llvm/trunk/test/Object/nm-trivial-object.test Mon Mar  2 15:33:18 
+++ 2015
@@ -46,7 +46,6 @@ RUN: mkdir -p %t
 RUN: cd %t
 RUN: cp %p/Inputs/trivial-object-test.macho-i386 a.out
 RUN: llvm-nm | FileCheck %s -check-prefix A-OUT
-REQUIRES: shell
 
 
 COFF: 00000000 {{.*}} d .data

Modified: llvm/trunk/test/tools/llvm-cov/llvm-cov.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/llvm-cov.test?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/llvm-cov.test (original)
+++ llvm/trunk/test/tools/llvm-cov/llvm-cov.test Mon Mar  2 15:33:18 
+++ 2015
@@ -1,7 +1,8 @@
 # Tests for compatibility between llvm-cov and gcov. These work by  # comparing llvm-cov against reference outputs generated by gcov 4.2.
 
-# "cd" and globbing are unsupported in lit internal runner.
+# Test fails on Windows where internal shell is used due to path 
+separator # mismatches.
 REQUIRES: shell
 
 RUN: rm -rf %t

Modified: llvm/trunk/utils/lit/lit/TestRunner.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/TestRunner.py?rev=231017&r1=231016&r2=231017&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/TestRunner.py (original)
+++ llvm/trunk/utils/lit/lit/TestRunner.py Mon Mar  2 15:33:18 2015
@@ -22,33 +22,56 @@ kUseCloseFDs = not kIsWindows  # Use temporary files to replace /dev/null on Windows.
 kAvoidDevNull = kIsWindows
 
-def executeShCmd(cmd, cfg, cwd, results):
+class ShellEnvironment(object):
+
+    """Mutable shell environment containing things like CWD and env vars.
+
+    Environment variables are not implemented, but cwd tracking is.
+    """
+
+    def __init__(self, cwd, env):
+        self.cwd = cwd
+        self.env = env
+
+def executeShCmd(cmd, shenv, results):
     if isinstance(cmd, ShUtil.Seq):
         if cmd.op == ';':
-            res = executeShCmd(cmd.lhs, cfg, cwd, results)
-            return executeShCmd(cmd.rhs, cfg, cwd, results)
+            res = executeShCmd(cmd.lhs, shenv, results)
+            return executeShCmd(cmd.rhs, shenv, results)
 
         if cmd.op == '&':
             raise InternalShellError(cmd,"unsupported shell operator: '&'")
 
         if cmd.op == '||':
-            res = executeShCmd(cmd.lhs, cfg, cwd, results)
+            res = executeShCmd(cmd.lhs, shenv, results)
             if res != 0:
-                res = executeShCmd(cmd.rhs, cfg, cwd, results)
+                res = executeShCmd(cmd.rhs, shenv, results)
             return res
 
         if cmd.op == '&&':
-            res = executeShCmd(cmd.lhs, cfg, cwd, results)
+            res = executeShCmd(cmd.lhs, shenv, results)
             if res is None:
                 return res
 
             if res == 0:
-                res = executeShCmd(cmd.rhs, cfg, cwd, results)
+                res = executeShCmd(cmd.rhs, shenv, results)
             return res
 
         raise ValueError('Unknown shell command: %r' % cmd.op)
-
     assert isinstance(cmd, ShUtil.Pipeline)
+
+    # Handle shell builtins first.
+    if cmd.commands[0].args[0] == 'cd':
+        # Update the cwd in the environment.
+        if len(cmd.commands[0].args) != 2:
+            raise ValueError('cd supports only one argument')
+        newdir = cmd.commands[0].args[1]
+        if os.path.isabs(newdir):
+            shenv.cwd = newdir
+        else:
+            shenv.cwd = os.path.join(shenv.cwd, newdir)
+        return 0
+
     procs = []
     input = subprocess.PIPE
     stderrTempFiles = []
@@ -102,7 +125,9 @@ def executeShCmd(cmd, cfg, cwd, results)
                     if kAvoidDevNull and r[0] == '/dev/null':
                         r[2] = tempfile.TemporaryFile(mode=r[1])
                     else:
-                        r[2] = open(r[0], r[1])
+                        # Make sure relative paths are relative to the cwd.
+                        redir_filename = os.path.join(shenv.cwd, r[0])
+                        r[2] = open(redir_filename, r[1])
                     # Workaround a Win32 and/or subprocess bug when appending.
                     #
                     # FIXME: Actually, this is probably an instance of PR6753.
@@ -132,7 +157,7 @@ def executeShCmd(cmd, cfg, cwd, results)
 
         # Resolve the executable path ourselves.
         args = list(j.args)
-        executable = lit.util.which(args[0], cfg.environment['PATH'])
+        executable = lit.util.which(args[0], shenv.env['PATH'])
         if not executable:
             raise InternalShellError(j, '%r: command not found' % j.args[0])
 
@@ -146,12 +171,12 @@ def executeShCmd(cmd, cfg, cwd, results)
                     args[i] = f.name
 
         try:
-            procs.append(subprocess.Popen(args, cwd=cwd,
+            procs.append(subprocess.Popen(args, cwd=shenv.cwd,
                                           executable = executable,
                                           stdin = stdin,
                                           stdout = stdout,
                                           stderr = stderr,
-                                          env = cfg.environment,
+                                          env = shenv.env,
                                           close_fds = kUseCloseFDs))
         except OSError as e:
             raise InternalShellError(j, 'Could not create process due to {}'.format(e)) @@ -257,7 +282,8 @@ def executeScriptInternal(test, litConfi
 
     results = []
     try:
-        exitCode = executeShCmd(cmd, test.config, cwd, results)
+        shenv = ShellEnvironment(cwd, test.config.environment)
+        exitCode = executeShCmd(cmd, shenv, results)
     except InternalShellError:
         e = sys.exc_info()[1]
         exitCode = 127


_______________________________________________
llvm-commits mailing list
llvm-commits at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.





More information about the llvm-commits mailing list