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.py78
1 files changed, 75 insertions, 3 deletions
diff --git a/mesonbuild/templates/sampleimpl.py b/mesonbuild/templates/sampleimpl.py
index 4d586b1fe..0d31aa447 100644
--- a/mesonbuild/templates/sampleimpl.py
+++ b/mesonbuild/templates/sampleimpl.py
@@ -13,20 +13,92 @@
# limitations under the License.
from __future__ import annotations
+import abc
+import re
import typing as T
if T.TYPE_CHECKING:
from ..minit import Arguments
-class SampleImpl:
+class SampleImpl(metaclass=abc.ABCMeta):
def __init__(self, args: Arguments):
self.name = args.name
self.version = args.version
+ @abc.abstractmethod
def create_executable(self) -> None:
- raise NotImplementedError('Sample implementation for "executable" not implemented!')
+ pass
+ @abc.abstractmethod
def create_library(self) -> None:
- raise NotImplementedError('Sample implementation for "library" not implemented!')
+ pass
+
+
+class ClassImpl(SampleImpl):
+
+ """For Class based languages, like Java and C#"""
+
+ def __init__(self, args: Arguments):
+ super().__init__(args)
+ self.lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower())
+ self.uppercase_token = self.lowercase_token.upper()
+ self.capitalized_token = self.lowercase_token.capitalize()
+
+ @abc.abstractproperty
+ def exe_template(self) -> str:
+ pass
+
+ @abc.abstractproperty
+ def exe_meson_template(self) -> str:
+ pass
+
+ @abc.abstractproperty
+ def lib_template(self) -> str:
+ pass
+
+ @abc.abstractproperty
+ def lib_test_template(self) -> str:
+ pass
+
+ @abc.abstractproperty
+ def lib_meson_template(self) -> str:
+ pass
+
+ @abc.abstractproperty
+ def source_ext(self) -> str:
+ pass
+
+ def create_executable(self) -> None:
+ source_name = f'{self.capitalized_token}.{self.source_ext}'
+ with open(source_name, 'w', encoding='utf-8') as f:
+ f.write(self.exe_template.format(project_name=self.name,
+ class_name=self.capitalized_token))
+ 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,
+ source_name=source_name,
+ version=self.version))
+
+ 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,
+ }
+ with open(lib_name, 'w', encoding='utf-8') as f:
+ f.write(self.lib_template.format(**kwargs))
+ with open(test_name, 'w', encoding='utf-8') as f:
+ f.write(self.lib_test_template.format(**kwargs))
+ with open('meson.build', 'w', encoding='utf-8') as f:
+ f.write(self.lib_meson_template.format(**kwargs))