1# Copyright 2019 The Meson development team 2 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6 7# http://www.apache.org/licenses/LICENSE-2.0 8 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14from mesonbuild.templates.sampleimpl import SampleImpl 15import re 16 17 18hello_java_template = ''' 19 20public class {class_name} {{ 21 final static String PROJECT_NAME = "{project_name}"; 22 23 public static void main (String args[]) {{ 24 if(args.length != 0) {{ 25 System.out.println(args + " takes no arguments."); 26 System.exit(0); 27 }} 28 System.out.println("This is project " + PROJECT_NAME + "."); 29 System.exit(0); 30 }} 31}} 32 33''' 34 35hello_java_meson_template = '''project('{project_name}', 'java', 36 version : '{version}', 37 default_options : ['warning_level=3']) 38 39exe = jar('{exe_name}', '{source_name}', 40 main_class : '{exe_name}', 41 install : true) 42 43test('basic', exe) 44''' 45 46lib_java_template = ''' 47 48public class {class_name} {{ 49 final static int number = 6; 50 51 public final int get_number() {{ 52 return number; 53 }} 54}} 55 56''' 57 58lib_java_test_template = ''' 59 60public class {class_test} {{ 61 public static void main (String args[]) {{ 62 if(args.length != 0) {{ 63 System.out.println(args + " takes no arguments."); 64 System.exit(1); 65 }} 66 67 {class_name} c = new {class_name}(); 68 Boolean result = true; 69 System.exit(result.compareTo(c.get_number() != 6)); 70 }} 71}} 72 73''' 74 75lib_java_meson_template = '''project('{project_name}', 'java', 76 version : '{version}', 77 default_options : ['warning_level=3']) 78 79jarlib = jar('{class_name}', '{source_file}', 80 main_class : '{class_name}', 81 install : true, 82) 83 84test_jar = jar('{class_test}', '{test_source_file}', 85 main_class : '{class_test}', 86 link_with : jarlib) 87test('{test_name}', test_jar) 88 89# Make this library usable as a Meson subproject. 90{ltoken}_dep = declare_dependency( 91 include_directories: include_directories('.'), 92 link_with : jarlib) 93''' 94 95 96class JavaProject(SampleImpl): 97 def __init__(self, options): 98 super().__init__() 99 self.name = options.name 100 self.version = options.version 101 102 def create_executable(self) -> None: 103 lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower()) 104 uppercase_token = lowercase_token.upper() 105 class_name = uppercase_token[0] + lowercase_token[1:] 106 source_name = uppercase_token[0] + lowercase_token[1:] + '.java' 107 open(source_name, 'w', encoding='utf-8').write( 108 hello_java_template.format(project_name=self.name, 109 class_name=class_name)) 110 open('meson.build', 'w', encoding='utf-8').write( 111 hello_java_meson_template.format(project_name=self.name, 112 exe_name=class_name, 113 source_name=source_name, 114 version=self.version)) 115 116 def create_library(self) -> None: 117 lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower()) 118 uppercase_token = lowercase_token.upper() 119 class_name = uppercase_token[0] + lowercase_token[1:] 120 class_test = uppercase_token[0] + lowercase_token[1:] + '_test' 121 lib_java_name = uppercase_token[0] + lowercase_token[1:] + '.java' 122 test_java_name = uppercase_token[0] + lowercase_token[1:] + '_test.java' 123 kwargs = {'utoken': uppercase_token, 124 'ltoken': lowercase_token, 125 'class_test': class_test, 126 'class_name': class_name, 127 'source_file': lib_java_name, 128 'test_source_file': test_java_name, 129 'project_name': self.name, 130 'lib_name': lowercase_token, 131 'test_name': lowercase_token, 132 'version': self.version, 133 } 134 open(lib_java_name, 'w', encoding='utf-8').write(lib_java_template.format(**kwargs)) 135 open(test_java_name, 'w', encoding='utf-8').write(lib_java_test_template.format(**kwargs)) 136 open('meson.build', 'w', encoding='utf-8').write(lib_java_meson_template.format(**kwargs)) 137