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)