diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-10 22:49:29 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-10 22:49:29 +0200 |
commit | 11f21062280cb5267a3a9c4054a62ff5a2898101 (patch) | |
tree | b418dcb2ce70287617bdecdfe40eee7aec75a24d | |
parent | e321345f41d554a52d055f14f79992bac46161b3 (diff) | |
download | meson-11f21062280cb5267a3a9c4054a62ff5a2898101.zip meson-11f21062280cb5267a3a9c4054a62ff5a2898101.tar.gz meson-11f21062280cb5267a3a9c4054a62ff5a2898101.tar.bz2 |
Now can detect Java compiler.
-rw-r--r-- | build.py | 2 | ||||
-rw-r--r-- | environment.py | 32 | ||||
-rw-r--r-- | interpreter.py | 4 |
3 files changed, 26 insertions, 12 deletions
@@ -50,7 +50,7 @@ class Build: return False def add_compiler(self, compiler): - if len(self.compilers) == 0: + if self.static_linker is None and compiler.get_language() != 'java': self.static_linker = self.environment.detect_static_linker(compiler) if self.has_language(compiler.get_language()): return diff --git a/environment.py b/environment.py index ed98da2..90cfad3 100644 --- a/environment.py +++ b/environment.py @@ -387,7 +387,7 @@ class ObjCPPCompiler(CPPCompiler): raise EnvironmentException('Executables created by ObjC++ compiler %s are not runnable.' % self.name_string()) class JavaCompiler(): - def __init__(self, exelist, version, is_cross, exe_wrapper=None): + def __init__(self, exelist, version): if type(exelist) == type(''): self.exelist = [exelist] elif type(exelist) == type([]): @@ -398,11 +398,6 @@ class JavaCompiler(): self.language = 'java' self.default_suffix = 'java' self.id = 'unknown' - self.is_cross = is_cross - if isinstance(exe_wrapper, str): - self.exe_wrapper = [exe_wrapper] - else: - self.exe_wrapper = exe_wrapper self.javarunner = 'java' def get_always_flags(self): @@ -426,9 +421,6 @@ class JavaCompiler(): def get_dependency_gen_flags(self, outtarget, outfile): return [] - def get_depfile_suffix(self): - return 'd' - def get_language(self): return self.language @@ -488,12 +480,12 @@ class JavaCompiler(): def sanity_check(self, work_dir): src = 'SanityCheck.java' - obj = 'SanityCheck.class' + obj = 'SanityCheck' source_name = os.path.join(work_dir, src) ofile = open(source_name, 'w') ofile.write('''class SanityCheck { public static void main(String[] args) { - System.out.println("Java is working."); + int i; } } ''') @@ -1192,6 +1184,24 @@ class Environment(): return GnuObjCPPCompiler(exelist, version, is_cross, exe_wrap) raise EnvironmentException('Unknown compiler "' + ' '.join(exelist) + '"') + def detect_java_compiler(self): + exelist = ['javac'] + try: + p = subprocess.Popen(exelist + ['-version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError: + raise EnvironmentException('Could not execute Java compiler "%s"' % ' '.join(exelist)) + (out, err) = p.communicate() + out = out.decode() + err = err.decode() + vmatch = re.search(Environment.version_regex, err) + if vmatch: + version = vmatch.group(0) + else: + version = 'unknown version' + if 'javac' in err: + return JavaCompiler(exelist, version) + raise EnvironmentException('Unknown compiler "' + ' '.join(exelist) + '"') + def detect_static_linker(self, compiler): if compiler.is_cross: linker = self.cross_info['ar'] diff --git a/interpreter.py b/interpreter.py index b03faf8..6070c80 100644 --- a/interpreter.py +++ b/interpreter.py @@ -895,6 +895,10 @@ class Interpreter(): comp = self.environment.detect_objcpp_compiler(False) if is_cross: cross_comp = self.environment.detect_objcpp_compiler(True) + elif lang.lower() == 'java': + comp = self.environment.detect_java_compiler() + if is_cross: + cross_comp = comp # Java is platform independent. else: raise InvalidCode('Tried to use unknown language "%s".' % lang) comp.sanity_check(self.environment.get_scratch_dir()) |