summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorKO Myung-Hun <komh@chollian.net>2023-10-30 19:15:31 +0900
committerDylan Baker <dylan@pnwbakers.com>2025-11-14 08:16:23 -0800
commitc3275c5a0a19ea70b8227a2c9fb3e604b1d8bb51 (patch)
tree3e564ec4ef47497ec1e59e504238150c636e59e8 /mesonbuild
parent6fc9f10a5ce7fa951df1ee0347fd54c86941b151 (diff)
downloadmeson-c3275c5a0a19ea70b8227a2c9fb3e604b1d8bb51.tar.gz
Add `shortname' kwarg for a short DLL name on OS/2
Give an user opportunities to mangle a custom short name for a DLL on OS/2.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/build.py14
-rw-r--r--mesonbuild/interpreter/type_checking.py6
-rw-r--r--mesonbuild/modules/rust.py2
3 files changed, 16 insertions, 6 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 2b5ec30f0..2a095b022 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -124,6 +124,7 @@ if T.TYPE_CHECKING:
version: str
soversion: str
darwin_versions: T.Tuple[str, str]
+ shortname: str
class StaticLibraryKeywordArguments(BuildTargetKeywordArguments, total=False):
@@ -198,7 +199,7 @@ known_build_target_kwargs = (
swift_kwargs)
known_exe_kwargs = known_build_target_kwargs | {'implib', 'export_dynamic', 'pie', 'vs_module_defs', 'android_exe_type'}
-known_shlib_kwargs = known_build_target_kwargs | {'version', 'soversion', 'vs_module_defs', 'darwin_versions', 'rust_abi'}
+known_shlib_kwargs = known_build_target_kwargs | {'version', 'soversion', 'vs_module_defs', 'darwin_versions', 'rust_abi', 'shortname'}
known_shmod_kwargs = known_build_target_kwargs | {'vs_module_defs', 'rust_abi'}
known_stlib_kwargs = known_build_target_kwargs | {'pic', 'prelink', 'rust_abi'}
known_jar_kwargs = known_exe_kwargs | {'main_class', 'java_resources'}
@@ -2430,6 +2431,7 @@ class SharedLibrary(BuildTarget):
# Max length 2, first element is compatibility_version, second is current_version
self.darwin_versions: T.Optional[T.Tuple[str, str]] = None
self.vs_module_defs = None
+ self.shortname: T.Optional[str] = None
# The import library this target will generate
self.import_filename = None
# The debugging information file this target will generate
@@ -2560,12 +2562,11 @@ class SharedLibrary(BuildTarget):
# Import library is called foo_dll.a
import_suffix = import_suffix if import_suffix is not None else '_dll.a'
import_filename_tpl = '{0.prefix}{0.name}' + import_suffix
+ filename_tpl = '{0.shortname}' if self.shortname else '{0.prefix}{0.name}'
if self.soversion:
# fooX.dll
- filename_tpl = '{0.prefix}{0.name}{0.soversion}.{0.suffix}'
- else:
- # No versioning, foo.dll
- filename_tpl = '{0.prefix}{0.name}.{0.suffix}'
+ filename_tpl += '{0.soversion}'
+ filename_tpl += '.{0.suffix}'
else:
prefix = prefix if prefix is not None else 'lib'
suffix = suffix if suffix is not None else 'so'
@@ -2639,6 +2640,9 @@ class SharedLibrary(BuildTarget):
# Visual Studio module-definitions file
self.process_vs_module_defs_kw(kwargs)
+ # OS/2 uses a 8.3 name for a DLL
+ self.shortname = kwargs.get('shortname')
+
def get_import_filename(self) -> T.Optional[str]:
"""
The name of the import library that will be outputted by the compiler
diff --git a/mesonbuild/interpreter/type_checking.py b/mesonbuild/interpreter/type_checking.py
index b4799f3a7..d0a57f2c9 100644
--- a/mesonbuild/interpreter/type_checking.py
+++ b/mesonbuild/interpreter/type_checking.py
@@ -862,12 +862,18 @@ STATIC_LIB_KWS = [
_JAVA_LANG_KW,
]
+def _shortname_validator(shortname: T.Optional[str]) -> T.Optional[str]:
+ if shortname is not None and len(shortname) > 8:
+ return 'must have a maximum of 8 characters'
+ return None
+
# Arguments exclusive to SharedLibrary. These are separated to make integrating
# them into build_target easier
_EXCLUSIVE_SHARED_LIB_KWS: T.List[KwargInfo] = [
_DARWIN_VERSIONS_KW,
KwargInfo('soversion', (str, int, NoneType), convertor=lambda x: str(x) if x is not None else None),
KwargInfo('version', (str, NoneType), validator=_validate_shlib_version),
+ KwargInfo('shortname', (str, NoneType), since='1.10.0', validator=_shortname_validator),
]
# The total list of arguments used by SharedLibrary
diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py
index 1836ba9c2..094c363e5 100644
--- a/mesonbuild/modules/rust.py
+++ b/mesonbuild/modules/rust.py
@@ -181,7 +181,7 @@ class RustModule(ExtensionModule):
new_target_kwargs = T.cast('ExecutableKeywordArguments', base_target.original_kwargs.copy())
del new_target_kwargs['rust_crate_type']
- for kw in ('pic', 'prelink', 'rust_abi', 'version', 'soversion', 'darwin_versions'):
+ for kw in ('pic', 'prelink', 'rust_abi', 'version', 'soversion', 'darwin_versions', 'shortname'):
if kw in new_target_kwargs:
del new_target_kwargs[kw] # type: ignore[misc]