summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asmcomp/asmlink.ml14
-rw-r--r--bytecomp/bytelink.ml14
2 files changed, 26 insertions, 2 deletions
diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml
index c9282866c..fc2389f31 100644
--- a/asmcomp/asmlink.ml
+++ b/asmcomp/asmlink.ml
@@ -176,6 +176,17 @@ let make_startup_file filename info_list =
Emit.end_assembly();
close_out oc
+let expand_libname name =
+ if String.length name < 2 || String.sub name 0 2 <> "-l"
+ then name
+ else begin
+ let libname = String.sub name 2 (String.length name - 2) ^ ext_lib in
+ try
+ find_in_path !load_path libname
+ with Not_found ->
+ libname
+ end
+
let call_linker file_list startup_file =
let libname =
if !Clflags.gprofile
@@ -197,7 +208,8 @@ let call_linker file_list startup_file =
(String.concat " " (List.rev !Clflags.ccopts))
startup_file
(String.concat " " (List.rev file_list))
- (String.concat " " (List.rev !Clflags.ccobjs))
+ (String.concat " "
+ (List.map expand_libname (List.rev !Clflags.ccobjs)))
runtime_lib
Config.c_libraries
else
diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml
index ff9a8e5da..6031dc59d 100644
--- a/bytecomp/bytelink.ml
+++ b/bytecomp/bytelink.ml
@@ -360,6 +360,17 @@ let rec extract suffix l =
| h::t -> extract suffix t
;;
+let expand_libname name =
+ if String.length name < 2 || String.sub name 0 2 <> "-l"
+ then name
+ else begin
+ let libname = String.sub name 2 (String.length name - 2) ^ ext_lib in
+ try
+ find_in_path !load_path libname
+ with Not_found ->
+ libname
+ end
+
let build_custom_runtime prim_name exec_name =
let libname = "libcamlrun" ^ ext_lib in
let runtime_lib =
@@ -390,7 +401,8 @@ let build_custom_runtime prim_name exec_name =
Config.standard_library
(String.concat " " (List.rev !Clflags.ccopts))
prim_name
- (String.concat " " (List.rev !Clflags.ccobjs))
+ (String.concat " "
+ (List.map expand_libname (List.rev !Clflags.ccobjs)))
runtime_lib
Config.c_libraries)
| "MacOS" ->