diff options
| -rw-r--r-- | docs/yaml/functions/shared_library.yaml | 6 | ||||
| -rw-r--r-- | mesonbuild/build.py | 14 | ||||
| -rw-r--r-- | mesonbuild/interpreter/type_checking.py | 6 | ||||
| -rw-r--r-- | mesonbuild/modules/rust.py | 2 |
4 files changed, 22 insertions, 6 deletions
diff --git a/docs/yaml/functions/shared_library.yaml b/docs/yaml/functions/shared_library.yaml index eeae3ce8c..c3ea77a7d 100644 --- a/docs/yaml/functions/shared_library.yaml +++ b/docs/yaml/functions/shared_library.yaml @@ -54,3 +54,9 @@ kwargs: Set the specific ABI to compile (when compiling rust). - 'rust' (default): Create a "dylib" crate. - 'c': Create a "cdylib" crate. + + shortname: + type: str + since: 1.10.0 + description: | + A string specifying a DLL name fitting to 8.3 limit on OS/2 of this shared library. 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] |
