- if !order_only then begin
- let module OrdererString =
- struct
- type t = string
- let compare = Pervasives.compare
- end
- in
- let module Topo = HTopoSort.Make (OrdererString) in
- let sorted_ma =
- Topo.topological_sort !ma_topo_keys (Hashtbl.find_all ma_topo) in
- List.iter print_endline sorted_ma
- (*Hashtbl.iter (fun k v -> printf "%s: %s\n" k v) ma_topo*)
- end else
- List.iter (* generate regular .depend output *)
- (fun ma_file ->
- try
- let deps = Hashtbl.find_all include_deps ma_file in
- let deps = List.fast_sort Pervasives.compare deps in
- let deps = HExtlib.list_uniq deps in
- let deps = ma_file :: deps in
- let baseuri = Hashtbl.find baseuri_of ma_file in
- let moo = obj_file_of_baseuri true baseuri in
- printf "%s: %s\n%s: %s\n%s: %s\n%s: %s\n"
- moo (String.concat " " deps)
- (Filename.basename(Pcre.replace ~pat:"ma$" ~templ:"mo" ma_file)) moo
- (Pcre.replace ~pat:"ma$" ~templ:"mo" ma_file) moo
- (Pcre.replace ~pat:"ma$" ~templ:"mo" (short ma_file)) moo
- with Not_found ->
- prerr_endline ("File "^ma_file^" has no baseuri. Use set baseuri");
- exit 1)
- ma_files
+ (* generate regular depend output *)
+ let fix_name f =
+ let f =
+ if Pcre.pmatch ~pat:"^\\./" f then
+ String.sub f 2 (String.length f - 2)
+ else
+ f
+ in
+ HExtlib.normalize_path f
+ in
+ let deps =
+ List.fold_left
+ (fun acc ma_file ->
+ let deps = Hashtbl.find_all include_deps ma_file in
+ let deps = List.fast_sort Pervasives.compare deps in
+ let deps = HExtlib.list_uniq deps in
+ let deps = List.map fix_name deps in
+ (fix_name ma_file, deps) :: acc)
+ [] ma_files
+ in
+ let extern =
+ List.fold_left
+ (fun acc (_,d) ->
+ List.fold_left
+ (fun a x ->
+ if List.exists (fun (t,_) -> x=t) deps then a
+ else x::a)
+ acc d)
+ [] deps
+ in
+ Librarian.write_deps_file (Sys.getcwd())
+ (deps@HExtlib.list_uniq (List.sort Pervasives.compare (List.map (fun x ->
+ x,[]) extern)))
+;;