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.

> 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