From d405b74caf700df2c39da75691e8df1ca25f7e10 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Mon, 5 Nov 2018 15:12:08 -0800 Subject: java: javac 9+ print their version to stdout not stderr Fixes: #2569 --- mesonbuild/environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index f45f91b..2a6f750 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -803,8 +803,8 @@ class Environment: p, out, err = Popen_safe(exelist + ['-version']) except OSError: raise EnvironmentException('Could not execute Java compiler "%s"' % ' '.join(exelist)) - version = search_version(err) if 'javac' in out or 'javac' in err: + version = search_version(err if 'javac' in err else out) return JavaCompiler(exelist, version) raise EnvironmentException('Unknown compiler "' + ' '.join(exelist) + '"') -- cgit v1.1 From 62e1735828753012b3cf80f94ab4e176b015d17d Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 6 Nov 2018 15:57:43 -0800 Subject: tests/java: force latency in generation to exercise race Because we are racing here. In reality *all* of the java in that target may rely on the generated file, so we need to block all of them, like we would for headers in C/C++. --- test cases/java/8 codegen custom target/com/mesonbuild/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test cases/java/8 codegen custom target/com/mesonbuild/meson.build b/test cases/java/8 codegen custom target/com/mesonbuild/meson.build index 67b98a4..0309941 100644 --- a/test cases/java/8 codegen custom target/com/mesonbuild/meson.build +++ b/test cases/java/8 codegen custom target/com/mesonbuild/meson.build @@ -4,5 +4,5 @@ config_file = custom_target('confgen', input : 'Config.java.in', output : 'Config.java', command : [python, '-c', - 'import shutil; import sys; shutil.copy(sys.argv[1], sys.argv[2])', + 'import shutil, sys, time; time.sleep(1); shutil.copy(sys.argv[1], sys.argv[2])', '@INPUT@', '@OUTPUT@']) -- cgit v1.1 From 9294fd23be8d691ccbf41dbef1b39772e03c1eda Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 6 Nov 2018 16:10:03 -0800 Subject: backends/ninja: all files in a java target should depend on generated sources Because java files are both headers and source it's very probably that generation and compilation will race otherwise. --- mesonbuild/backend/ninjabackend.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 9e76c5b..5606c41 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -877,6 +877,10 @@ int dummy; def generate_single_java_compile(self, src, target, compiler, outfile): deps = [os.path.join(self.get_target_dir(l), l.get_filename()) for l in target.link_targets] + generated_sources = self.get_target_generated_sources(target) + for rel_src, gensrc in generated_sources.items(): + if rel_src.endswith('.java'): + deps.append(rel_src) args = [] args += compiler.get_buildtype_args(self.get_option_for_target('buildtype', target)) args += self.build.get_global_args(compiler, target.is_cross) -- cgit v1.1