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);

Reply via email to