https://gcc.gnu.org/g:34195d577f35f9b6c7057714302e727961a2223b
commit r16-9302-g34195d577f35f9b6c7057714302e727961a2223b Author: Pietro Monteiro <[email protected]> Date: Fri Jun 12 08:09:16 2026 -0400 algol68: Use correct library file extension on darwin and windows Changes from v1: - Use TARGET_MACHO and TARGET_PECOFF guards instead of __APPLE__ and _WIN32. -- >8 - 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 those OSes. Search for file with both the lib prefix and without on Windows. gcc/algol68/ChangeLog: * a68-imports.cc (a68_try_suffixes): Use .dylib suffix on Darwin. Use .dll suffix and optional lib prefix on Windows. Signed-off-by: Pietro Monteiro <[email protected]> (cherry picked from commit b155cbf0535aa842ddeadf6475cac9f62d329227) Diff: --- 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 c9385d742db7..f93e3bcd11ed 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 TARGET_MACHO + /* 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 TARGET_PECOFF + /* 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 filename = pfilename->substr (0, basename_pos) + "lib" + basename + ".a"; fd = open (filename.c_str (), O_RDONLY | O_BINARY);
