summaryrefslogtreecommitdiff
path: root/mesonbuild/templates/sampleimpl.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/templates/sampleimpl.py')
-rw-r--r--mesonbuild/templates/sampleimpl.py55
1 files changed, 37 insertions, 18 deletions
diff --git a/mesonbuild/templates/sampleimpl.py b/mesonbuild/templates/sampleimpl.py
index d033f3c14..00735c498 100644
--- a/mesonbuild/templates/sampleimpl.py
+++ b/mesonbuild/templates/sampleimpl.py
@@ -3,6 +3,7 @@
# Copyright © 2023-2025 Intel Corporation
from __future__ import annotations
+from pathlib import Path
import abc
import os
@@ -17,6 +18,7 @@ class SampleImpl(metaclass=abc.ABCMeta):
def __init__(self, args: Arguments):
self.name = args.name
+ self.executable_name = args.executable if args.executable else None
self.version = args.version
self.lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower())
self.uppercase_token = self.lowercase_token.upper()
@@ -24,6 +26,7 @@ class SampleImpl(metaclass=abc.ABCMeta):
self.meson_version = '1.0.0'
self.force = args.force
self.dependencies = args.deps.split(',') if args.deps else []
+ self.sources: list[Path] = []
@abc.abstractmethod
def create_executable(self) -> None:
@@ -66,11 +69,18 @@ class SampleImpl(metaclass=abc.ABCMeta):
def _format_dependencies(self) -> str:
return ''.join(f"\n dependency('{d}')," for d in self.dependencies)
+ def _format_sources(self) -> str:
+ return ''.join(f"\n '{x}'," for x in self.sources)
+
class ClassImpl(SampleImpl):
"""For Class based languages, like Java and C#"""
+ def __init__(self, args: Arguments):
+ super().__init__(args)
+ self.sources = args.srcfiles if args.srcfiles else [Path(f'{self.capitalized_token}.{self.source_ext}')]
+
def create_executable(self) -> None:
source_name = f'{self.capitalized_token}.{self.source_ext}'
if not os.path.exists(source_name):
@@ -80,29 +90,32 @@ class ClassImpl(SampleImpl):
if self.force or not os.path.exists('meson.build'):
with open('meson.build', 'w', encoding='utf-8') as f:
f.write(self.exe_meson_template.format(project_name=self.name,
- exe_name=self.name,
+ exe_name=self.executable_name,
source_name=source_name,
version=self.version,
meson_version=self.meson_version,
- dependencies=self._format_dependencies()))
+ dependencies=self._format_dependencies(),
+ source_files=self._format_sources()))
def create_library(self) -> None:
lib_name = f'{self.capitalized_token}.{self.source_ext}'
test_name = f'{self.capitalized_token}_test.{self.source_ext}'
- kwargs = {'utoken': self.uppercase_token,
- 'ltoken': self.lowercase_token,
- 'class_test': f'{self.capitalized_token}_test',
- 'class_name': self.capitalized_token,
- 'source_file': lib_name,
- 'test_source_file': test_name,
- 'test_exe_name': f'{self.lowercase_token}_test',
- 'project_name': self.name,
- 'lib_name': self.lowercase_token,
- 'test_name': self.lowercase_token,
- 'version': self.version,
- 'meson_version': self.meson_version,
- 'dependencies': self._format_dependencies(),
- }
+ kwargs = {
+ 'utoken': self.uppercase_token,
+ 'ltoken': self.lowercase_token,
+ 'class_test': f'{self.capitalized_token}_test',
+ 'class_name': self.capitalized_token,
+ 'source_file': lib_name,
+ 'test_source_file': test_name,
+ 'test_exe_name': f'{self.lowercase_token}_test',
+ 'project_name': self.name,
+ 'lib_name': self.lowercase_token,
+ 'test_name': self.lowercase_token,
+ 'version': self.version,
+ 'meson_version': self.meson_version,
+ 'dependencies': self._format_dependencies(),
+ 'source_files': self._format_sources(),
+ }
if not os.path.exists(lib_name):
with open(lib_name, 'w', encoding='utf-8') as f:
f.write(self.lib_template.format(**kwargs))
@@ -118,6 +131,10 @@ class FileImpl(SampleImpl):
"""File based languages without headers"""
+ def __init__(self, args: Arguments):
+ super().__init__(args)
+ self.sources = args.srcfiles if args.srcfiles else [Path(f'{self.executable_name}.{self.source_ext}')]
+
def create_executable(self) -> None:
source_name = f'{self.lowercase_token}.{self.source_ext}'
if not os.path.exists(source_name):
@@ -126,11 +143,12 @@ class FileImpl(SampleImpl):
if self.force or not os.path.exists('meson.build'):
with open('meson.build', 'w', encoding='utf-8') as f:
f.write(self.exe_meson_template.format(project_name=self.name,
- exe_name=self.name,
+ exe_name=self.executable_name,
source_name=source_name,
version=self.version,
meson_version=self.meson_version,
- dependencies=self._format_dependencies()))
+ dependencies=self._format_dependencies(),
+ source_files=self._format_sources()))
def lib_kwargs(self) -> T.Dict[str, str]:
"""Get Language specific keyword arguments
@@ -153,6 +171,7 @@ class FileImpl(SampleImpl):
'version': self.version,
'meson_version': self.meson_version,
'dependencies': self._format_dependencies(),
+ 'source_files': self._format_sources(),
}
def create_library(self) -> None: