diff options
| author | KO Myung-Hun <komh@chollian.net> | 2023-07-03 23:07:31 +0900 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-11-14 08:16:23 -0800 |
| commit | 6fc9f10a5ce7fa951df1ee0347fd54c86941b151 (patch) | |
| tree | 6e5fe6ad6e6addf144f858bfe9d8555fcdd857fb /mesonbuild/backend/ninjabackend.py | |
| parent | 7d118937c4b36650305a0e7da7f5cf642dd30e80 (diff) | |
| download | meson-6fc9f10a5ce7fa951df1ee0347fd54c86941b151.tar.gz | |
Generate a shared library and an import library correctly on OS/2
On OS/2,
1. a shared libary has '.dll' suffix
2. a length of DLL name should not be longer than 8 chars
3. an import library is used to link against a DLL
4. an import library has '_dll.a' suffix.
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
| -rw-r--r-- | mesonbuild/backend/ninjabackend.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 5fe753293..fbf6c42fc 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -2481,6 +2481,13 @@ class NinjaBackend(backends.Backend): args = [] options = {} self.add_rule(NinjaRule(rule, cmdlist, args, description, **options, extra=None)) + if self.environment.machines[for_machine].is_os2() and complist: + rule = 'IMPORTLIB{}'.format(self.get_rule_suffix(for_machine)) + description = 'Generating import library $out' + command = ['emximp'] + args = ['-o', '$out', '$in'] + options = {} + self.add_rule(NinjaRule(rule, command, args, description, **options, extra=None)) args = self.environment.get_build_command() + \ ['--internal', @@ -3415,7 +3422,12 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) return os.path.join(targetdir, target.get_filename() + '.symbols') def generate_shsym(self, target) -> None: - target_file = self.get_target_filename(target) + # On OS/2, an import library is generated after linking a DLL, so + # if a DLL is used as a target, import library is not generated. + if self.environment.machines[target.for_machine].is_os2(): + target_file = self.get_target_filename_for_linking(target) + else: + target_file = self.get_target_filename(target) if isinstance(target, build.SharedLibrary) and target.aix_so_archive: if self.environment.machines[target.for_machine].is_aix(): linker, stdlib_args = target.get_clink_dynamic_linker_and_stdlibs() @@ -3632,6 +3644,11 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) linker_base = linker.get_language() # Fixme. if isinstance(target, build.SharedLibrary): self.generate_shsym(target) + if self.environment.machines[target.for_machine].is_os2(): + target_file = self.get_target_filename(target) + import_name = self.get_import_filename(target) + elem = NinjaBuildElement(self.all_outputs, import_name, 'IMPORTLIB', target_file) + self.add_build(elem) crstr = self.get_rule_suffix(target.for_machine) linker_rule = linker_base + '_LINKER' + crstr # Create an empty commands list, and start adding link arguments from |
