open Unix;;
  
  let rec mkpath path perm =
    try
      let st = stat path in
      if st.st_kind <> S_DIR then raise (Unix_error (ENOTDIR"mkpath"path));
    with Unix_error (ENOENT__) ->
      let parent = Filename.dirname path in
      if parent <> path then mkpath parent perm;
      mkdir path perm;;