33# Copyright © 2023-2025 Intel Corporation
44
55from __future__ import annotations
6+ from pathlib import Path
67
78import abc
89import os
@@ -17,13 +18,15 @@ class SampleImpl(metaclass=abc.ABCMeta):
1718
1819 def __init__ (self , args : Arguments ):
1920 self .name = args .name
21+ self .executable_name = args .executable if args .executable else None
2022 self .version = args .version
2123 self .lowercase_token = re .sub (r'[^a-z0-9]' , '_' , self .name .lower ())
2224 self .uppercase_token = self .lowercase_token .upper ()
2325 self .capitalized_token = self .lowercase_token .capitalize ()
2426 self .meson_version = '1.0.0'
2527 self .force = args .force
2628 self .dependencies = args .deps .split (',' ) if args .deps else []
29+ self .sources : list [Path ] = []
2730
2831 @abc .abstractmethod
2932 def create_executable (self ) -> None :
@@ -66,11 +69,18 @@ def source_ext(self) -> str:
6669 def _format_dependencies (self ) -> str :
6770 return '' .join (f"\n dependency('{ d } ')," for d in self .dependencies )
6871
72+ def _format_sources (self ) -> str :
73+ return '' .join (f"\n '{ x } '," for x in self .sources )
74+
6975
7076class ClassImpl (SampleImpl ):
7177
7278 """For Class based languages, like Java and C#"""
7379
80+ def __init__ (self , args : Arguments ):
81+ super ().__init__ (args )
82+ self .sources = args .srcfiles if args .srcfiles else [Path (f'{ self .capitalized_token } .{ self .source_ext } ' )]
83+
7484 def create_executable (self ) -> None :
7585 source_name = f'{ self .capitalized_token } .{ self .source_ext } '
7686 if not os .path .exists (source_name ):
@@ -80,29 +90,32 @@ def create_executable(self) -> None:
8090 if self .force or not os .path .exists ('meson.build' ):
8191 with open ('meson.build' , 'w' , encoding = 'utf-8' ) as f :
8292 f .write (self .exe_meson_template .format (project_name = self .name ,
83- exe_name = self .name ,
93+ exe_name = self .executable_name ,
8494 source_name = source_name ,
8595 version = self .version ,
8696 meson_version = self .meson_version ,
87- dependencies = self ._format_dependencies ()))
97+ dependencies = self ._format_dependencies (),
98+ source_files = self ._format_sources ()))
8899
89100 def create_library (self ) -> None :
90101 lib_name = f'{ self .capitalized_token } .{ self .source_ext } '
91102 test_name = f'{ self .capitalized_token } _test.{ self .source_ext } '
92- kwargs = {'utoken' : self .uppercase_token ,
93- 'ltoken' : self .lowercase_token ,
94- 'class_test' : f'{ self .capitalized_token } _test' ,
95- 'class_name' : self .capitalized_token ,
96- 'source_file' : lib_name ,
97- 'test_source_file' : test_name ,
98- 'test_exe_name' : f'{ self .lowercase_token } _test' ,
99- 'project_name' : self .name ,
100- 'lib_name' : self .lowercase_token ,
101- 'test_name' : self .lowercase_token ,
102- 'version' : self .version ,
103- 'meson_version' : self .meson_version ,
104- 'dependencies' : self ._format_dependencies (),
105- }
103+ kwargs = {
104+ 'utoken' : self .uppercase_token ,
105+ 'ltoken' : self .lowercase_token ,
106+ 'class_test' : f'{ self .capitalized_token } _test' ,
107+ 'class_name' : self .capitalized_token ,
108+ 'source_file' : lib_name ,
109+ 'test_source_file' : test_name ,
110+ 'test_exe_name' : f'{ self .lowercase_token } _test' ,
111+ 'project_name' : self .name ,
112+ 'lib_name' : self .lowercase_token ,
113+ 'test_name' : self .lowercase_token ,
114+ 'version' : self .version ,
115+ 'meson_version' : self .meson_version ,
116+ 'dependencies' : self ._format_dependencies (),
117+ 'source_files' : self ._format_sources (),
118+ }
106119 if not os .path .exists (lib_name ):
107120 with open (lib_name , 'w' , encoding = 'utf-8' ) as f :
108121 f .write (self .lib_template .format (** kwargs ))
@@ -118,6 +131,10 @@ class FileImpl(SampleImpl):
118131
119132 """File based languages without headers"""
120133
134+ def __init__ (self , args : Arguments ):
135+ super ().__init__ (args )
136+ self .sources = args .srcfiles if args .srcfiles else [Path (f'{ self .executable_name } .{ self .source_ext } ' )]
137+
121138 def create_executable (self ) -> None :
122139 source_name = f'{ self .lowercase_token } .{ self .source_ext } '
123140 if not os .path .exists (source_name ):
@@ -126,11 +143,12 @@ def create_executable(self) -> None:
126143 if self .force or not os .path .exists ('meson.build' ):
127144 with open ('meson.build' , 'w' , encoding = 'utf-8' ) as f :
128145 f .write (self .exe_meson_template .format (project_name = self .name ,
129- exe_name = self .name ,
146+ exe_name = self .executable_name ,
130147 source_name = source_name ,
131148 version = self .version ,
132149 meson_version = self .meson_version ,
133- dependencies = self ._format_dependencies ()))
150+ dependencies = self ._format_dependencies (),
151+ source_files = self ._format_sources ()))
134152
135153 def lib_kwargs (self ) -> T .Dict [str , str ]:
136154 """Get Language specific keyword arguments
@@ -153,6 +171,7 @@ def lib_kwargs(self) -> T.Dict[str, str]:
153171 'version' : self .version ,
154172 'meson_version' : self .meson_version ,
155173 'dependencies' : self ._format_dependencies (),
174+ 'source_files' : self ._format_sources (),
156175 }
157176
158177 def create_library (self ) -> None :
0 commit comments