aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoakin <joaquin@chimeces.com>2024-04-03 14:03:56 +0200
committerjoakin <joaquin@chimeces.com>2024-04-19 13:35:53 +0200
commit60ef4fda4dd71e5474bb2598c4e0d18c58924e99 (patch)
tree1c9e603ad15a67d236a1ae607b0f1f56edd50159 /src
parent1b143b9fa3d0302cda639abf72c7b5db1b7c1c41 (diff)
Recognize dynamic library names like libraylib.so.5.0.0
Diffstat (limited to 'src')
-rw-r--r--src/linker.cpp2
-rw-r--r--src/parser.cpp2
-rw-r--r--src/string.cpp19
3 files changed, 21 insertions, 2 deletions
diff --git a/src/linker.cpp b/src/linker.cpp
index 498a96c5f..245275bd3 100644
--- a/src/linker.cpp
+++ b/src/linker.cpp
@@ -432,7 +432,7 @@ gb_internal i32 linker_stage(LinkerData *gen) {
if (string_ends_with(lib, str_lit(".a")) || string_ends_with(lib, str_lit(".o"))) {
// static libs and object files, absolute full path relative to the file in which the lib was imported from
lib_str = gb_string_append_fmt(lib_str, " -l:\"%.*s\" ", LIT(lib));
- } else if (string_ends_with(lib, str_lit(".so"))) {
+ } else if (string_ends_with(lib, str_lit(".so")) || string_contains_string(lib, str_lit(".so."))) {
// dynamic lib, relative path to executable
// NOTE(vassvik): it is the user's responsibility to make sure the shared library files are visible
// at runtime to the executable
diff --git a/src/parser.cpp b/src/parser.cpp
index f4d3dc48d..2bf25c768 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -5710,7 +5710,7 @@ gb_internal bool determine_path_from_string(BlockingMutex *file_mutex, Ast *node
// working directory of the exe to the library search paths.
// Static libraries can be linked directly with the full pathname
//
- if (node->kind == Ast_ForeignImportDecl && string_ends_with(file_str, str_lit(".so"))) {
+ if (node->kind == Ast_ForeignImportDecl && (string_ends_with(file_str, str_lit(".so")) || string_contains_string(file_str, str_lit(".so.")))) {
*path = file_str;
return true;
}
diff --git a/src/string.cpp b/src/string.cpp
index 3747f4564..a68cf315f 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -323,6 +323,25 @@ gb_internal bool string_contains_char(String const &s, u8 c) {
return false;
}
+gb_internal bool string_contains_string(String const &haystack, String const &needle) {
+ if (needle.len == 0) return true;
+ if (needle.len > haystack.len) return false;
+
+ for (isize i = 0; i <= haystack.len - needle.len; i++) {
+ bool found = true;
+ for (isize j = 0; j < needle.len; j++) {
+ if (haystack[i + j] != needle[j]) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ return true;
+ }
+ }
+ return false;
+}
+
gb_internal String filename_from_path(String s) {
isize i = string_extension_position(s);
if (i >= 0) {