summaryrefslogtreecommitdiff
path: root/libcxx/utils
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2019-10-25 09:46:35 -0700
committerLouis Dionne <ldionne@apple.com>2019-10-25 09:47:46 -0700
commitfd667b860e9d0fc3714980e26e8c0ed719c19677 (patch)
tree78ca196ffe645c2f6541e3088845e8ae1fc95268 /libcxx/utils
parentb74d7e5cccb5eedb8675442a981a76f3873faf43 (diff)
downloadllvm-fd667b860e9d0fc3714980e26e8c0ed719c19677.tar.gz
[libcxx] [test] Run `chmod +x` on executables when testing via SSH
When running libc++ tests on a remote machine via SSH, we can encounter a 'Permission denied' error. Fix this with plain old 'chmod +x <executable>'. Thanks to Sergej Jaskiewicz for the patch. Differential Revision: https://reviews.llvm.org/D69170
Diffstat (limited to 'libcxx/utils')
-rw-r--r--libcxx/utils/libcxx/test/executor.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/libcxx/utils/libcxx/test/executor.py b/libcxx/utils/libcxx/test/executor.py
index 5bb5525d047c..4581ce7a19be 100644
--- a/libcxx/utils/libcxx/test/executor.py
+++ b/libcxx/utils/libcxx/test/executor.py
@@ -135,10 +135,18 @@ class RemoteExecutor(Executor):
srcs.extend(file_deps)
dsts.extend(dev_paths)
self.copy_in(srcs, dsts)
+
+ # When testing executables that were cross-compiled on Windows for
+ # Linux, we may need to explicitly set the execution permission to
+ # avoid the 'Permission denied' error:
+ chmod_cmd = ['chmod', '+x', target_exe_path]
+
# TODO(jroelofs): capture the copy_in and delete_remote commands,
# and conjugate them with '&&'s around the first tuple element
# returned here:
- return self._execute_command_remote(cmd, target_cwd, env)
+ return self._execute_command_remote(chmod_cmd + ['&&'] + cmd,
+ target_cwd,
+ env)
finally:
if target_cwd:
self.delete_remote(target_cwd)
@@ -187,10 +195,14 @@ class SSHExecutor(RemoteExecutor):
remote = self.user_prefix + self.host
ssh_cmd = [self.ssh_command, '-oBatchMode=yes', remote]
if env:
- env_cmd = ['env'] + ['%s="%s"' % (k, v) for k, v in env.items()]
+ export_cmd = \
+ ['export'] + ['"%s"="%s"' % (k, v) for k, v in env.items()]
else:
- env_cmd = []
- remote_cmd = ' '.join(env_cmd + cmd)
+ export_cmd = []
+
+ remote_cmd = ' '.join(cmd)
+ if export_cmd:
+ remote_cmd = ' '.join(export_cmd) + ' && ' + remote_cmd
if remote_work_dir != '.':
remote_cmd = 'cd ' + remote_work_dir + ' && ' + remote_cmd
out, err, rc = self.local_run(ssh_cmd + [remote_cmd])