aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-03-10 22:49:29 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2014-03-10 22:49:29 +0200
commit11f21062280cb5267a3a9c4054a62ff5a2898101 (patch)
treeb418dcb2ce70287617bdecdfe40eee7aec75a24d
parente321345f41d554a52d055f14f79992bac46161b3 (diff)
downloadmeson-11f21062280cb5267a3a9c4054a62ff5a2898101.zip
meson-11f21062280cb5267a3a9c4054a62ff5a2898101.tar.gz
meson-11f21062280cb5267a3a9c4054a62ff5a2898101.tar.bz2
Now can detect Java compiler.
-rw-r--r--build.py2
-rw-r--r--environment.py32
-rw-r--r--interpreter.py4
3 files changed, 26 insertions, 12 deletions
diff --git a/build.py b/build.py
index d56fa42..991938d 100644
--- a/build.py
+++ b/build.py
@@ -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())