[PATCH v2] algol68: Use correct library file extension on darwin and windows
Jose E. Marchesi
jemarch@gnu.org
Fri Jun 12 12:00:30 GMT 2026
Hello Pietro.
Thanks for the updated patch.
I see all expressed concerns have been addressed.
OK!
> 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 <pietro@sociotechnical.xyz>
> ---
> 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..1d4bacec135 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);
More information about the Algol68
mailing list