Skip to content

Commit

Permalink
Rename package with library
Browse files Browse the repository at this point in the history
  • Loading branch information
na4zagin3 committed Sep 6, 2019
1 parent 8326ef8 commit eb83fdc
Show file tree
Hide file tree
Showing 19 changed files with 297 additions and 304 deletions.
108 changes: 54 additions & 54 deletions bin/commandInstall.ml
Expand Up @@ -13,7 +13,7 @@ let transitive_closure map =
| None -> visited
| Some cur ->
match Map.find map cur with
| None -> failwithf "Packages %s is not found\n" cur ();
| None -> failwithf "Library %s is not found\n" cur ();
| Some nexts ->
let visited = StringSet.add visited cur in
let queue = StringSet.union (StringSet.remove queue cur) (StringSet.diff nexts visited) in
Expand All @@ -22,98 +22,98 @@ let transitive_closure map =


(* TODO Install transitive dependencies *)
let get_packages ~reg ~reg_opam ~packages =
let dist_package_dir = SatysfiDirs.satysfi_dist_dir () in
Printf.printf "Reading runtime dist: %s\n" dist_package_dir;
let dist_package = Package.read_dir dist_package_dir in
let user_packages = Registry.list reg
let get_libraries ~reg ~reg_opam ~libraries =
let dist_library_dir = SatysfiDirs.satysfi_dist_dir () in
Printf.printf "Reading runtime dist: %s\n" dist_library_dir;
let dist_library = Library.read_dir dist_library_dir in
let user_libraries = Registry.list reg
|> StringSet.of_list
|> StringSet.to_map ~f:(Registry.directory reg)
in
Printf.printf "Read user packages: %s\n" (user_packages |> Map.keys |> [%sexp_of: string list] |> Sexp.to_string_hum);
let opam_packages = match reg_opam with
Printf.printf "Read user libraries: %s\n" (user_libraries |> Map.keys |> [%sexp_of: string list] |> Sexp.to_string_hum);
let opam_libraries = match reg_opam with
| None -> StringSet.to_map StringSet.empty ~f:ident
| Some reg_opam ->
SatysfiRegistry.list reg_opam
|> StringSet.of_list
|> StringSet.to_map ~f:(SatysfiRegistry.directory reg_opam)
in
Printf.printf "Reading opam packages: %s\n" (opam_packages |> Map.keys |> [%sexp_of: string list] |> Sexp.to_string_hum);
let all_packages =
Map.merge opam_packages user_packages ~f:(fun ~key -> function
| `Left x -> Package.read_dir x |> Some
| `Right x -> Package.read_dir x |> Some
Printf.printf "Reading opam libraries: %s\n" (opam_libraries |> Map.keys |> [%sexp_of: string list] |> Sexp.to_string_hum);
let all_libraries =
Map.merge opam_libraries user_libraries ~f:(fun ~key -> function
| `Left x -> Library.read_dir x |> Some
| `Right x -> Library.read_dir x |> Some
| `Both (_, x) ->
Printf.printf "Package %s is provided by both the user local and opam repositories\n" key;
Package.read_dir x |> Some) in
let required_packages = match packages with
| None -> all_packages
| Some packages -> let package_dependency =
Map.map all_packages ~f:(fun p -> p.Package.dependencies) in
let packages_to_install = transitive_closure package_dependency (StringSet.of_list packages) in
Map.filter_keys all_packages ~f:(StringSet.mem packages_to_install)
Printf.printf "Library %s is provided by both the user local and opam repositories\n" key;
Library.read_dir x |> Some) in
let required_libraries = match libraries with
| None -> all_libraries
| Some libraries -> let library_dependency =
Map.map all_libraries ~f:(fun p -> p.Library.dependencies) in
let libraries_to_install = transitive_closure library_dependency (StringSet.of_list libraries) in
Map.filter_keys all_libraries ~f:(StringSet.mem libraries_to_install)
in
match Map.add required_packages ~key:"dist" ~data:dist_package with
match Map.add required_libraries ~key:"dist" ~data:dist_library with
| `Ok result -> result
| `Duplicate ->
Printf.printf "Overriding dist with user installed one";
required_packages
required_libraries

let install d ~system_font_prefix ~packages ~verbose ~copy () =
let install d ~system_font_prefix ~libraries ~verbose ~copy () =
(* TODO build all *)
Printf.printf "Updating packages\n";
Printf.printf "Updating libraries\n";
begin match Repository.update_all repo with
| Some updated_packages -> begin
Printf.printf "Updated packages: ";
[%derive.show: string list] updated_packages |> print_endline
| Some updated_libraries -> begin
Printf.printf "Updated libraries: ";
[%derive.show: string list] updated_libraries |> print_endline
end
| None ->
Printf.printf "No packages updated\n"
Printf.printf "No libraries updated\n"
end;
Printf.printf "Building updated packages\n";
Printf.printf "Building updated libraries\n";
begin match Registry.update_all reg with
| Some updated_packages -> begin
Printf.printf "Built packages: ";
[%derive.show: string list] updated_packages |> print_endline
| Some updated_libraries -> begin
Printf.printf "Built libraries: ";
[%derive.show: string list] updated_libraries |> print_endline
end
| None ->
Printf.printf "No packages built\n"
Printf.printf "No libraries built\n"
end;
let package_map = get_packages ~reg ~reg_opam ~packages in
let packages = package_map |> Map.data in
Printf.printf "Installing packages: ";
Map.keys package_map |> [%sexp_of: string list] |> Sexp.to_string_hum |> print_endline;
let packages = match system_font_prefix with
| None -> Printf.printf "Not gathering system fonts\n"; packages
let library_map = get_libraries ~reg ~reg_opam ~libraries in
let libraries = library_map |> Map.data in
Printf.printf "Installing libraries: ";
Map.keys library_map |> [%sexp_of: string list] |> Sexp.to_string_hum |> print_endline;
let libraries = match system_font_prefix with
| None -> Printf.printf "Not gathering system fonts\n"; libraries
| Some(prefix) ->
Printf.printf "Gathering system fonts with prefix %s\n" prefix;
let systemFontPackage = SystemFontPackage.get_package prefix () in
List.cons systemFontPackage packages
let systemFontLibrary = SystemFontLibrary.get_library prefix () in
List.cons systemFontLibrary libraries
in
let merged = packages
|> List.fold_left ~f:Package.union ~init:Package.empty
let merged = libraries
|> List.fold_left ~f:Library.union ~init:Library.empty
in
match FileUtil.test FileUtil.Is_dir d, Package.is_managed_dir d with
match FileUtil.test FileUtil.Is_dir d, Library.is_managed_dir d with
| true, false ->
Printf.printf "Directory %s is not managed by Satyrographos.\n" d;
Printf.printf "Please remove %s first.\n" d
| _, _ ->
Printf.printf "Removing destination %s\n" d;
FileUtil.(rm ~force:Force ~recurse:true [d]);
Package.mark_managed_dir d;
Library.mark_managed_dir d;
if verbose
then begin
Printf.printf "Loaded packages\n";
[%sexp_of: Package.t list] packages
Printf.printf "Loaded libraries\n";
[%sexp_of: Library.t list] libraries
|> Sexp.to_string_hum
|> print_endline;
Printf.printf "Installing %s\n" d;
[%sexp_of: Package.t] merged
[%sexp_of: Library.t] merged
|> Sexp.to_string_hum
|> print_endline
end;
Package.write_dir ~symlink:(not copy) d merged;
List.iter ~f:(Printf.printf "WARNING: %s") (Package.validate merged);
Library.write_dir ~symlink:(not copy) d merged;
List.iter ~f:(Printf.printf "WARNING: %s") (Library.validate merged);
Printf.printf "Installation completed!\n"

let install_command =
Expand All @@ -126,14 +126,14 @@ let install_command =
~readme
[%map_open
let system_font_prefix = flag "system-font-prefix" (optional string) ~doc:"FONT_NAME_PREFIX Installing system fonts with names with the given prefix"
and package_list = flag "package" (listed string) ~doc:"PACKAGE Package"
and library_list = flag "library" (listed string) ~doc:"LIBRARY Library"
and target_dir = anon (maybe_with_default default_target_dir ("DIR" %: string))
and verbose = flag "verbose" no_arg ~doc:"Make verbose"
and copy = flag "copy" no_arg ~doc:"Copy files instead of making symlinks"
in
fun () ->
let packages = match package_list with
let libraries = match library_list with
| [] -> None
| xs -> Some xs in
install target_dir ~system_font_prefix ~packages ~verbose ~copy ()
install target_dir ~system_font_prefix ~libraries ~verbose ~copy ()
]
75 changes: 75 additions & 0 deletions bin/commandLibrary.ml
@@ -0,0 +1,75 @@
open Satyrographos
open Core

open Setup


let library_show_command_g p_show =
let open Command.Let_syntax in
Command.basic
~summary:"Show library information (experimental)"
[%map_open
let p = anon ("LIBRARY" %: string)
in
fun () ->
p_show p ()
]
let library_list_command_g p_list =
let open Command.Let_syntax in
Command.basic
~summary:"Show list of libraries installed (experimental)"
[%map_open
let _ = args (* ToDo: Remove this *)
in
fun () ->
p_list ()
]

let library_list () =
Compatibility.optin ();
[%derive.show: string list] (Registry.list reg) |> print_endline
let library_list_command =
library_list_command_g library_list

let library_show p () =
Compatibility.optin ();
Registry.directory reg p
|> Library.read_dir
|> [%sexp_of: Library.t]
|> Sexp.to_string_hum
|> print_endline
let library_show_command =
library_show_command_g library_show

let library_command =
Command.group ~summary:"Install libraries (experimental)"
[ "list", library_list_command; (* ToDo: use this default*)
"show", library_show_command;
]


let library_opam_list () =
Compatibility.optin ();
Option.iter reg_opam ~f:(fun reg_opam ->
[%derive.show: string list] (SatysfiRegistry.list reg_opam) |> print_endline
)
let library_opam_list_command =
library_list_command_g library_opam_list

let library_opam_show p () =
Compatibility.optin ();
Option.iter reg_opam ~f:(fun reg_opam ->
SatysfiRegistry.directory reg_opam p
|> Library.read_dir
|> [%sexp_of: Library.t]
|> Sexp.to_string_hum
|> print_endline
)
let library_opam_show_command =
library_show_command_g library_opam_show

let library_opam_command =
Command.group ~summary:"Inspect libraries installed in the OPAM managed directory (experimental)"
[ "list", library_opam_list_command; (* ToDo: use this default*)
"show", library_opam_show_command;
]
12 changes: 6 additions & 6 deletions bin/commandOpam.ml
Expand Up @@ -4,19 +4,19 @@ open Core

module StringMap = Map.Make(String)

let package_dir prefix buildscript =
let library_dir prefix buildscript =
let libdir = Filename.concat prefix "share/satysfi" in
Filename.concat libdir buildscript.BuildScript.name

let install_opam ~verbose ~prefix ~build_module ~buildscript_path =
let src_dir = Filename.dirname buildscript_path in
let p = BuildScript.read_package ~src_dir build_module in
if verbose then [%sexp_of: Package.t] p |> Sexp.to_string_hum |> Printf.printf "Read package:\n%s\n";
let dir = package_dir prefix build_module in
Package.write_dir ~verbose ~symlink:false dir p
let p = BuildScript.read_library ~src_dir build_module in
if verbose then [%sexp_of: Library.t] p |> Sexp.to_string_hum |> Printf.printf "Read library:\n%s\n";
let dir = library_dir prefix build_module in
Library.write_dir ~verbose ~symlink:false dir p

let uninstall_opam ~verbose:_ ~prefix ~build_module ~buildscript_path:_ =
let dir = package_dir prefix build_module in
let dir = library_dir prefix build_module in
FileUtil.(rm ~force:Force ~recurse:true [dir])

let default_script_path () =
Expand Down
75 changes: 0 additions & 75 deletions bin/commandPackage.ml

This file was deleted.

0 comments on commit eb83fdc

Please sign in to comment.