let make_relative path_base path_path =
let rec make_relative_aux lst_base lst_path =
match (lst_base, lst_path) with
x :: tl_base, a :: tl_path when x = a ->
make_relative_aux tl_base tl_path
| _, _ ->
let back_to_base = List.rev_map
(fun x -> ParentDir)
lst_base
in
back_to_base @ lst_path
in
if is_relative path_base then
raise FilePathBaseFilenameRelative
else if is_relative path_path then
reduce path_path
else
make_relative_aux (reduce path_base) (reduce path_path)