> On 8 Jun 2026, at 15:46, Pietro Monteiro <[email protected]> wrote:
> 
> On Mon, Jun 8, 2026, at 9:44 AM, Iain Sandoe wrote:
>>> On 8 Jun 2026, at 14:27, Andrew Pinski <[email protected]> wrote:
>>> 
>>> 
>>> 
>>> On Mon, Jun 8, 2026, 6:09 AM Pietro Monteiro <[email protected]> 
>>> wrote:
>>> Darwin uses .dylib as extension for libraries.  Windows uses .dll, and
>>> sometimes doesn't prefix the library filename with "lib".
>>> 
>>> Use those extensions when opening library files to search for imports
>>> on thoses OSes.  Search for file with both the lib prefix and withouti
>>> on Windows.
>>> 
>>> gcc/algol68/ChangeLog:
>>> 
>>>        * a68-imports.cc (a68_try_suffixes): Use .dylib suffix on Darwin.
>>>        Use .ddl suffix and optional lib prefix on Windows.
>>> 
>>> Signed-off-by: Pietro Monteiro <[email protected]>
>>> ---
>>> gcc/algol68/a68-imports.cc | 30 ++++++++++++++++++++++++++++++
>>> 1 file changed, 30 insertions(+)
>>> 
>>> diff --git a/gcc/algol68/a68-imports.cc b/gcc/algol68/a68-imports.cc
>>> index 8b77bbf0b76..e0fe87368e5 100644
>>> --- a/gcc/algol68/a68-imports.cc
>>> +++ b/gcc/algol68/a68-imports.cc
>>> @@ -365,6 +365,35 @@ a68_try_suffixes (std::string *pfilename)
>>> 
>>>   const char* basename = lbasename (pfilename->c_str());
>>>   size_t basename_pos = basename - pfilename->c_str ();
>>> +
>>> +#if defined (__APPLE__)
>>> +  /* Macos uses .dylib as extension for libraries.  */
>>> +  filename = pfilename->substr (0, basename_pos) + "lib" + basename + 
>>> ".dylib";
>>> +  fd = open (filename.c_str (), O_RDONLY | O_BINARY);
>>> +  if (fd >= 0)
>>> +    {
>>> +      *pfilename = filename;
>>> +      return fd;
>>> +    }
>>> +#elif defined (_WIN32)
>>> +  /* Windows uses .dll.  Maybe prefixed with lib.  */
>>> +  filename = pfilename->substr (0, basename_pos) + "lib" + basename + 
>>> ".dll";
>>> +  fd = open (filename.c_str (), O_RDONLY | O_BINARY);
>>> +  if (fd >= 0)
>>> +    {
>>> +      *pfilename = filename;
>>> +      return fd;
>>> +    }
>>> +  /* Maybe not prefixed with lib.  */
>>> +  filename = pfilename->substr (0, basename_pos) + basename + ".dll";
>>> +  fd = open (filename.c_str (), O_RDONLY | O_BINARY);
>>> +  if (fd >= 0)
>>> +    {
>>> +      *pfilename = filename;
>>> +      return fd;
>>> +    }
>>> +#else
>>> +  /* Other supported systems use .so.  */
>>>   filename = pfilename->substr (0, basename_pos) + "lib" + basename + ".so";
>>>   fd = open (filename.c_str (), O_RDONLY | O_BINARY);
>>>   if (fd >= 0)
>>> @@ -372,6 +401,7 @@ a68_try_suffixes (std::string *pfilename)
>>>       *pfilename = filename;
>>>       return fd;
>>>     }
>>> +#endif
>>> 
>>> 
>>> Hmm, i think this is wrong. I assume this for the target libraries that is 
>>> being loaded up and not the host library.
>>> The (__APPLE__)/_WIN32 defines here are for the host rather than the 
>>> target.While that would work for a native compiler cross compilers from or 
>>> to those targets would be wrong.
>> 
>> I seems you have target.h included - so could use OBJECT_FORMAT_MACHO?
> 
> AFAIK only Darwin uses Mach-O so that would work.
> 
> Is the right way to identify windows as the target to use
> TARGET_PECOFF?
> 
> There's a OBJECT_FORMAT_COFF, but the only mention of OBJECT_FORMAT_PE
> is in a comment on gcc/varasm.cc.
> 
> I guess I could use TARGET_MACHO/TARGET_PECOFF to keep the symmetry.

NOTE: if you use TARGET_MACHO, it will not be sufficient to use #if defined 
(TARGET_MACHO) because, for
archs with multiple sub-ports, TARGET_MACHO can be defined to 0 or 1 
(presumably, similar would aply to 
TARGET_PECOFF)

Iain

>> Iain
>> 
>>> 
>>> 
>>>   filename = pfilename->substr (0, basename_pos) + "lib" + basename + ".a";
>>>   fd = open (filename.c_str (), O_RDONLY | O_BINARY);
>>> -- 
>>> 2.43.0


Reply via email to