13
13
# limitations under the License.
14
14
from __future__ import annotations
15
15
16
- import os
17
16
import pathlib
18
17
import typing as T
19
18
23
22
from mesonbuild .interpreterbase .decorators import ContainerTypeInfo , FeatureDeprecated , FeatureNew , KwargInfo , typed_pos_args , typed_kwargs
24
23
from mesonbuild .mesonlib import version_compare , MachineChoice
25
24
from . import NewExtensionModule , ModuleReturnValue , ModuleInfo
25
+ from ..interpreter .type_checking import NoneType
26
26
27
27
if T .TYPE_CHECKING :
28
28
from . import ModuleState
@@ -36,68 +36,42 @@ class JavaModule(NewExtensionModule):
36
36
def __init__ (self , interpreter : Interpreter ):
37
37
super ().__init__ ()
38
38
self .methods .update ({
39
- 'generate_native_header' : self .generate_native_header ,
40
39
'generate_native_headers' : self .generate_native_headers ,
40
+ 'native_headers' : self .native_headers ,
41
41
})
42
42
43
43
def __get_java_compiler (self , state : ModuleState ) -> Compiler :
44
44
if 'java' not in state .environment .coredata .compilers [MachineChoice .BUILD ]:
45
45
detect_compiler_for (state .environment , 'java' , MachineChoice .BUILD )
46
46
return state .environment .coredata .compilers [MachineChoice .BUILD ]['java' ]
47
47
48
- @FeatureDeprecated ('java.generate_native_header' , '0.62.0' , 'Use java.generate_native_headers instead' )
49
- @typed_pos_args ('java.generate_native_header' , (str , mesonlib .File ))
50
- @typed_kwargs ('java.generate_native_header' , KwargInfo ('package' , str , default = None ))
51
- def generate_native_header (self , state : ModuleState , args : T .Tuple [T .Union [str , mesonlib .File ]],
52
- kwargs : T .Dict [str , T .Optional [str ]]) -> ModuleReturnValue :
53
- package = kwargs .get ('package' )
54
-
55
- if isinstance (args [0 ], mesonlib .File ):
56
- file = args [0 ]
57
- else :
58
- file = mesonlib .File .from_source_file (state .source_root , state .subdir , args [0 ])
59
-
60
- if package :
61
- header = f'{ package .replace ("." , "_" )} _{ pathlib .Path (file .fname ).stem } .h'
62
- else :
63
- header = f'{ pathlib .Path (file .fname ).stem } .h'
64
-
65
- javac = self .__get_java_compiler (state )
66
-
67
- target = CustomTarget (
68
- os .path .basename (header ),
69
- state .subdir ,
70
- state .subproject ,
71
- state .environment ,
72
- mesonlib .listify ([
73
- javac .exelist ,
74
- '-d' ,
75
- '@PRIVATE_DIR@' ,
76
- '-h' ,
77
- state .subdir ,
78
- '@INPUT@' ,
79
- ]),
80
- [file ],
81
- [header ],
82
- backend = state .backend ,
83
- )
84
- # It is only known that 1.8.0 won't pre-create the directory. 11 and 16
85
- # do not exhibit this behavior.
86
- if version_compare (javac .version , '1.8.0' ):
87
- pathlib .Path (state .backend .get_target_private_dir_abs (target )).mkdir (parents = True , exist_ok = True )
88
-
89
- return ModuleReturnValue (target , [target ])
90
-
91
48
@FeatureNew ('java.generate_native_headers' , '0.62.0' )
49
+ @FeatureDeprecated ('java.generate_native_headers' , '1.0.0' )
92
50
@typed_pos_args (
93
51
'java.generate_native_headers' ,
94
52
varargs = (str , mesonlib .File , Target , CustomTargetIndex , GeneratedList ))
95
53
@typed_kwargs (
96
54
'java.generate_native_headers' ,
97
55
KwargInfo ('classes' , ContainerTypeInfo (list , str ), default = [], listify = True , required = True ),
98
- KwargInfo ('package' , str , default = None ))
56
+ KwargInfo ('package' , ( str , NoneType ) , default = None ))
99
57
def generate_native_headers (self , state : ModuleState , args : T .Tuple [T .List [mesonlib .FileOrString ]],
100
58
kwargs : T .Dict [str , T .Optional [str ]]) -> ModuleReturnValue :
59
+ return self .__native_headers (state , args , kwargs )
60
+
61
+ @FeatureNew ('java.native_headers' , '1.0.0' )
62
+ @typed_pos_args (
63
+ 'java.native_headers' ,
64
+ varargs = (str , mesonlib .File , Target , CustomTargetIndex , GeneratedList ))
65
+ @typed_kwargs (
66
+ 'java.native_headers' ,
67
+ KwargInfo ('classes' , ContainerTypeInfo (list , str ), default = [], listify = True , required = True ),
68
+ KwargInfo ('package' , (str , NoneType ), default = None ))
69
+ def native_headers (self , state : ModuleState , args : T .Tuple [T .List [mesonlib .FileOrString ]],
70
+ kwargs : T .Dict [str , T .Optional [str ]]) -> ModuleReturnValue :
71
+ return self .__native_headers (state , args , kwargs )
72
+
73
+ def __native_headers (self , state : ModuleState , args : T .Tuple [T .List [mesonlib .FileOrString ]],
74
+ kwargs : T .Dict [str , T .Optional [str ]]) -> ModuleReturnValue :
101
75
classes = T .cast ('T.List[str]' , kwargs .get ('classes' ))
102
76
package = kwargs .get ('package' )
103
77
0 commit comments