aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-04-20 13:58:20 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2014-04-20 13:58:20 +0300
commitc7e7d1a4c354b21fe9308dd872a99ec4bc7356be (patch)
tree894ff3c672fdf0389d44951a75fd0e58986ce43a
parentc21637a01db7f6958c816bfe2a8b0383b96e8f68 (diff)
downloadmeson-c7e7d1a4c354b21fe9308dd872a99ec4bc7356be.zip
meson-c7e7d1a4c354b21fe9308dd872a99ec4bc7356be.tar.gz
meson-c7e7d1a4c354b21fe9308dd872a99ec4bc7356be.tar.bz2
Can execute found programs with run_command.
-rw-r--r--dependencies.py8
-rw-r--r--interpreter.py17
-rwxr-xr-xrun_tests.py3
-rw-r--r--test cases/common/55 file grabber/meson.build7
-rw-r--r--test cases/common/55 file grabber/subdir/meson.build5
-rw-r--r--test cases/common/55 file grabber/subdir/suba.c1
-rw-r--r--test cases/common/55 file grabber/subdir/subb.c1
-rw-r--r--test cases/common/55 file grabber/subdir/subc.c1
-rw-r--r--test cases/common/55 file grabber/subdir/subprog.c7
9 files changed, 44 insertions, 6 deletions
diff --git a/dependencies.py b/dependencies.py
index 13fdcd3..eabdb71 100644
--- a/dependencies.py
+++ b/dependencies.py
@@ -127,17 +127,21 @@ class PkgConfigDependency(Dependency):
return self.is_found
class ExternalProgram():
- def __init__(self, name, fullpath=None, silent=False):
+ def __init__(self, name, fullpath=None, silent=False, search_dir=None):
self.name = name
if fullpath is not None:
self.fullpath = fullpath
else:
self.fullpath = shutil.which(name)
+ if self.fullpath is None and search_dir is not None:
+ trial = os.path.join(search_dir, name)
+ if os.access(trial, os.X_OK):
+ self.fullpath = trial
if not silent:
if self.found():
mlog.log('Program', mlog.bold(name), 'found:', mlog.green('YES'), '(%s)' % self.fullpath)
else:
- mlog.log('Program', mlog.bold(name), 'found:,', mlog.red('NO'))
+ mlog.log('Program', mlog.bold(name), 'found:', mlog.red('NO'))
def found(self):
return self.fullpath is not None
diff --git a/interpreter.py b/interpreter.py
index 7328cba..7940c94 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -754,9 +754,18 @@ class Interpreter():
raise InvalidArguments('Incorrect argument type.')
def func_run_command(self, node, args, kwargs):
- for i in args:
+ if len(args) < 1:
+ raise InterpreterException('Not enough arguments')
+ cmd = args[0]
+ cargs = args[1:]
+ if isinstance(cmd, ExternalProgramHolder):
+ cmd = cmd.get_command()
+ elif not isinstance(cmd, str):
+ raise InterpreterException('First argument is of incorrect type.')
+ for i in cargs:
if not isinstance(i, str):
- raise InterpreterObject('Run_command arguments must be strings.')
+ raise InterpreterException('Run_command arguments must be strings.')
+ args = [cmd] + cargs
return RunProcess(args, self.environment.source_dir, self.environment.build_dir, self.subdir)
def func_gettext(self, nodes, args, kwargs):
@@ -931,7 +940,9 @@ class Interpreter():
if exename in self.coredata.ext_progs and\
self.coredata.ext_progs[exename].found():
return ExternalProgramHolder(self.coredata.ext_progs[exename])
- extprog = dependencies.ExternalProgram(exename)
+ # Search for scripts relative to current subdir.
+ search_dir = os.path.join(self.environment.get_source_dir(), self.subdir)
+ extprog = dependencies.ExternalProgram(exename, search_dir=search_dir)
progobj = ExternalProgramHolder(extprog)
self.coredata.ext_progs[exename] = extprog
if required and not progobj.found():
diff --git a/run_tests.py b/run_tests.py
index 4ca0659..83c79bb 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -25,7 +25,8 @@ test_build_dir = 'work area'
install_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], 'install dir')
meson_command = './meson.py'
-unity_flags = ['--unity']
+#unity_flags = ['--unity']
+unity_flags = []
msbuild_exe = shutil.which('msbuild')
if msbuild_exe is not None:
diff --git a/test cases/common/55 file grabber/meson.build b/test cases/common/55 file grabber/meson.build
index c0c11b9..88e5861 100644
--- a/test cases/common/55 file grabber/meson.build
+++ b/test cases/common/55 file grabber/meson.build
@@ -11,10 +11,14 @@ project('grabber', 'c')
if build.name() == 'windows'
c = run_command('grabber.bat')
+ grabber = find_program('grabber')
else
c = run_command('grabber.sh')
+ grabber = find_program('grabber.sh')
endif
+
+# First test running command explicitly.
if c.returncode() != 0
error('Executing script failed.')
endif
@@ -26,3 +30,6 @@ sources = c.stdout().strip().split(newline)
e = executable('prog', sources)
test('grabtest', e)
+
+# Then test using program with find_program
+subdir('subdir')
diff --git a/test cases/common/55 file grabber/subdir/meson.build b/test cases/common/55 file grabber/subdir/meson.build
new file mode 100644
index 0000000..230d6f7
--- /dev/null
+++ b/test cases/common/55 file grabber/subdir/meson.build
@@ -0,0 +1,5 @@
+sc = run_command(grabber)
+subsources = sc.stdout().strip().split(newline)
+
+se = executable('subprog', subsources)
+test('subgrabtest', se)
diff --git a/test cases/common/55 file grabber/subdir/suba.c b/test cases/common/55 file grabber/subdir/suba.c
new file mode 100644
index 0000000..bee8ad7
--- /dev/null
+++ b/test cases/common/55 file grabber/subdir/suba.c
@@ -0,0 +1 @@
+int funca() { return 0; }
diff --git a/test cases/common/55 file grabber/subdir/subb.c b/test cases/common/55 file grabber/subdir/subb.c
new file mode 100644
index 0000000..0fdd162
--- /dev/null
+++ b/test cases/common/55 file grabber/subdir/subb.c
@@ -0,0 +1 @@
+int funcb() { return 0; }
diff --git a/test cases/common/55 file grabber/subdir/subc.c b/test cases/common/55 file grabber/subdir/subc.c
new file mode 100644
index 0000000..63f951c
--- /dev/null
+++ b/test cases/common/55 file grabber/subdir/subc.c
@@ -0,0 +1 @@
+int funcc() { return 0; }
diff --git a/test cases/common/55 file grabber/subdir/subprog.c b/test cases/common/55 file grabber/subdir/subprog.c
new file mode 100644
index 0000000..3524f60
--- /dev/null
+++ b/test cases/common/55 file grabber/subdir/subprog.c
@@ -0,0 +1,7 @@
+int funca();
+int funcb();
+int funcc();
+
+int main(int argc, char **argv) {
+ return funca() + funcb() + funcc();
+}