aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-11-08 11:50:12 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2016-11-09 02:37:56 +0530
commite90f21ae598cf8f7c11ec01a730895e74d2326eb (patch)
tree2ef9370e2e02eced840aedfff07f41277d5baa16
parent87f07cdf3db9923b41ac23d27d8e017c8c57ecc3 (diff)
downloadmeson-e90f21ae598cf8f7c11ec01a730895e74d2326eb.zip
meson-e90f21ae598cf8f7c11ec01a730895e74d2326eb.tar.gz
meson-e90f21ae598cf8f7c11ec01a730895e74d2326eb.tar.bz2
javac: Fail gracefully if there's no JVM
Without this, we error out with an exception if `javac` is found but `java` isn't: [...] File "mesonbuild/interpreter.py", line 1759, in detect_compilers comp.sanity_check(self.environment.get_scratch_dir(), self.environment) File "mesonbuild/compilers.py", line 1279, in sanity_check pe = subprocess.Popen(cmdlist, cwd=work_dir) File "/usr/lib64/python3.5/subprocess.py", line 947, in __init__ restore_signals, start_new_session) File "/usr/lib64/python3.5/subprocess.py", line 1551, in _execute_child raise child_exception_type(errno_num, err_msg) FileNotFoundError: [Errno 2] No such file or directory: 'java'
-rw-r--r--mesonbuild/compilers.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 94e8a54..454cdba 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import shutil
import contextlib
import subprocess, os.path
import tempfile
@@ -1274,11 +1275,20 @@ class JavaCompiler(Compiler):
pc.wait()
if pc.returncode != 0:
raise EnvironmentException('Java compiler %s can not compile programs.' % self.name_string())
- cmdlist = [self.javarunner, obj]
- pe = subprocess.Popen(cmdlist, cwd=work_dir)
- pe.wait()
- if pe.returncode != 0:
- raise EnvironmentException('Executables created by Java compiler %s are not runnable.' % self.name_string())
+ runner = shutil.which(self.javarunner)
+ if runner:
+ cmdlist = [runner, obj]
+ pe = subprocess.Popen(cmdlist, cwd=work_dir)
+ pe.wait()
+ if pe.returncode != 0:
+ raise EnvironmentException('Executables created by Java compiler %s are not runnable.' % self.name_string())
+ else:
+ m = "Java Virtual Machine wasn't found, but it's needed by Meson. " \
+ "Please install a JRE.\nIf you have specific needs where this " \
+ "requirement doesn't make sense, please open a bug at " \
+ "https://github.com/mesonbuild/meson/issues/new and tell us " \
+ "all about it."
+ raise EnvironmentException(m)
def needs_static_linker(self):
return False