Better handling of multiple extensions (foo.d.cmo, foo.p.cmx...)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@7909 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
cddfe88ac6
commit
81cfc29b31
|
@ -43,7 +43,7 @@ type pack_member =
|
||||||
|
|
||||||
let read_member_info pack_path file =
|
let read_member_info pack_path file =
|
||||||
let name =
|
let name =
|
||||||
String.capitalize(Filename.basename(chop_extension_if_any file)) in
|
String.capitalize(Filename.basename(chop_extensions file)) in
|
||||||
let kind =
|
let kind =
|
||||||
if Filename.check_suffix file ".cmx" then begin
|
if Filename.check_suffix file ".cmx" then begin
|
||||||
let (info, crc) = Compilenv.read_unit_info file in
|
let (info, crc) = Compilenv.read_unit_info file in
|
||||||
|
@ -169,9 +169,9 @@ let package_files ppf files targetcmx =
|
||||||
try find_in_path !Config.load_path f
|
try find_in_path !Config.load_path f
|
||||||
with Not_found -> raise(Error(File_not_found f)))
|
with Not_found -> raise(Error(File_not_found f)))
|
||||||
files in
|
files in
|
||||||
let prefix = chop_extension_if_any targetcmx in
|
let prefix = chop_extensions targetcmx in
|
||||||
let targetcmi = prefix ^ ".cmi" in
|
let targetcmi = prefix ^ ".cmi" in
|
||||||
let targetobj = prefix ^ Config.ext_obj in
|
let targetobj = chop_extension_if_any targetcmx ^ Config.ext_obj in
|
||||||
let targetname = String.capitalize(Filename.basename prefix) in
|
let targetname = String.capitalize(Filename.basename prefix) in
|
||||||
(* Set the name of the current "input" *)
|
(* Set the name of the current "input" *)
|
||||||
Location.input_name := targetcmx;
|
Location.input_name := targetcmx;
|
||||||
|
|
|
@ -81,7 +81,7 @@ type pack_member =
|
||||||
|
|
||||||
let read_member_info file =
|
let read_member_info file =
|
||||||
let name =
|
let name =
|
||||||
String.capitalize(Filename.basename(chop_extension_if_any file)) in
|
String.capitalize(Filename.basename(chop_extensions file)) in
|
||||||
let kind =
|
let kind =
|
||||||
if Filename.check_suffix file ".cmo" then begin
|
if Filename.check_suffix file ".cmo" then begin
|
||||||
let ic = open_in_bin file in
|
let ic = open_in_bin file in
|
||||||
|
@ -224,7 +224,7 @@ let package_files files targetfile =
|
||||||
try find_in_path !Config.load_path f
|
try find_in_path !Config.load_path f
|
||||||
with Not_found -> raise(Error(File_not_found f)))
|
with Not_found -> raise(Error(File_not_found f)))
|
||||||
files in
|
files in
|
||||||
let prefix = chop_extension_if_any targetfile in
|
let prefix = chop_extensions targetfile in
|
||||||
let targetcmi = prefix ^ ".cmi" in
|
let targetcmi = prefix ^ ".cmi" in
|
||||||
let targetname = String.capitalize(Filename.basename prefix) in
|
let targetname = String.capitalize(Filename.basename prefix) in
|
||||||
try
|
try
|
||||||
|
|
|
@ -831,7 +831,7 @@ let package_units objfiles cmifile modulename =
|
||||||
let units =
|
let units =
|
||||||
List.map
|
List.map
|
||||||
(fun f ->
|
(fun f ->
|
||||||
let pref = chop_extension_if_any f in
|
let pref = chop_extensions f in
|
||||||
let modname = String.capitalize(Filename.basename pref) in
|
let modname = String.capitalize(Filename.basename pref) in
|
||||||
let sg = Env.read_signature modname (pref ^ ".cmi") in
|
let sg = Env.read_signature modname (pref ^ ".cmi") in
|
||||||
if Filename.check_suffix f ".cmi" &&
|
if Filename.check_suffix f ".cmi" &&
|
||||||
|
|
|
@ -162,6 +162,17 @@ let no_overflow_lsl a = min_int asr 1 <= a && a <= max_int asr 1
|
||||||
let chop_extension_if_any fname =
|
let chop_extension_if_any fname =
|
||||||
try Filename.chop_extension fname with Invalid_argument _ -> fname
|
try Filename.chop_extension fname with Invalid_argument _ -> fname
|
||||||
|
|
||||||
|
let chop_extensions file =
|
||||||
|
let dirname = Filename.dirname file and basename = Filename.basename file in
|
||||||
|
try
|
||||||
|
let pos = String.index basename '.' in
|
||||||
|
let basename = String.sub basename 0 pos in
|
||||||
|
if Filename.is_implicit file && dirname = Filename.current_dir_name then
|
||||||
|
basename
|
||||||
|
else
|
||||||
|
Filename.concat dirname basename
|
||||||
|
with Not_found -> file
|
||||||
|
|
||||||
let search_substring pat str start =
|
let search_substring pat str start =
|
||||||
let rec search i j =
|
let rec search i j =
|
||||||
if j >= String.length pat then i
|
if j >= String.length pat then i
|
||||||
|
|
|
@ -86,6 +86,13 @@ val chop_extension_if_any: string -> string
|
||||||
(* Like Filename.chop_extension but returns the initial file
|
(* Like Filename.chop_extension but returns the initial file
|
||||||
name if it has no extension *)
|
name if it has no extension *)
|
||||||
|
|
||||||
|
val chop_extensions: string -> string
|
||||||
|
(* Return the given file name without its extensions. The extensions
|
||||||
|
is the longest suffix starting with a period and not including
|
||||||
|
a directory separator, [.xyz.uvw] for instance.
|
||||||
|
|
||||||
|
Return the given name if it does not contain an extension. *)
|
||||||
|
|
||||||
val search_substring: string -> string -> int -> int
|
val search_substring: string -> string -> int -> int
|
||||||
(* [search_substring pat str start] returns the position of the first
|
(* [search_substring pat str start] returns the position of the first
|
||||||
occurrence of string [pat] in string [str]. Search starts
|
occurrence of string [pat] in string [str]. Search starts
|
||||||
|
|
Loading…
Reference in New Issue