From ff587e1f4c2186e30daaa18874dd053e0e472263 Mon Sep 17 00:00:00 2001 From: Marek Kubica Date: Thu, 13 Mar 2025 11:26:32 +0100 Subject: [PATCH 1/5] WIP --- bin/dune_init.ml | 1 - src/dune_lang/dune_lang.ml | 1 + src/dune_lang/loaded_package.ml | 13 +++++++++++++ src/dune_lang/loaded_package.mli | 10 ++++++++++ src/dune_lang/package.ml | 33 +++++++++++++++++--------------- src/dune_lang/package.mli | 6 +++--- src/dune_pkg/local_package.ml | 8 ++++++++ src/dune_pkg/opam_file.ml | 1 - src/dune_rules/dune_load.ml | 32 +++++++++++++++++++++++++------ src/dune_rules/dune_load.mli | 1 + src/dune_rules/dune_project.ml | 21 +++++++++++++------- src/dune_rules/install_rules.ml | 10 ++++++---- 12 files changed, 100 insertions(+), 37 deletions(-) create mode 100644 src/dune_lang/loaded_package.ml create mode 100644 src/dune_lang/loaded_package.mli diff --git a/bin/dune_init.ml b/bin/dune_init.ml index 3210c4f2a0f..73302dadb97 100644 --- a/bin/dune_init.ml +++ b/bin/dune_init.ml @@ -404,7 +404,6 @@ module Component = struct ~sites:Site.Map.empty ~allow_empty:false ~deprecated_package_names:Package.Name.Map.empty - ~has_opam_file:(Exists false) ~original_opam_file:None ~dir ~synopsis:(Some "A short synopsis") diff --git a/src/dune_lang/dune_lang.ml b/src/dune_lang/dune_lang.ml index 5e113e02c04..fd61dbb0db0 100644 --- a/src/dune_lang/dune_lang.ml +++ b/src/dune_lang/dune_lang.ml @@ -19,6 +19,7 @@ module Package_version = Package_version module Package_variable_name = Package_variable_name module Lib_kind = Lib_kind module Lib_dep = Lib_dep +module Loaded_package = Loaded_package module Pkg = Pkg module Ordered_set_lang = Ordered_set_lang module Format_config = Format_config diff --git a/src/dune_lang/loaded_package.ml b/src/dune_lang/loaded_package.ml new file mode 100644 index 00000000000..935531d9dd6 --- /dev/null +++ b/src/dune_lang/loaded_package.ml @@ -0,0 +1,13 @@ +type opam_file = + | Exists of bool + | Generated + +type t = { + package : Package.t; + has_opam_file : opam_file; +} + +let package t = t.package +let has_opam_file t = t.has_opam_file + +let create ~package ~has_opam_file = { package; has_opam_file } diff --git a/src/dune_lang/loaded_package.mli b/src/dune_lang/loaded_package.mli new file mode 100644 index 00000000000..6ee10cdecb8 --- /dev/null +++ b/src/dune_lang/loaded_package.mli @@ -0,0 +1,10 @@ +type t + +type opam_file = + | Exists of bool + | Generated + +val has_opam_file : t -> opam_file +val package : t -> Package.t + +val create : package:Package.t -> has_opam_file:opam_file -> t diff --git a/src/dune_lang/package.ml b/src/dune_lang/package.ml index 0491f0bedc1..86adb2af31c 100644 --- a/src/dune_lang/package.ml +++ b/src/dune_lang/package.ml @@ -52,7 +52,7 @@ type t = ; depopts : Package_dependency.t list ; info : Package_info.t ; version : Package_version.t option - ; has_opam_file : opam_file + (* ; has_opam_file : opam_file *) ; tags : string list ; deprecated_package_names : Loc.t Name.Map.t ; sites : Section.t Site.Map.t @@ -60,6 +60,8 @@ type t = ; original_opam_file : original_opam_file option } + + (* Package name are globally unique, so we can reasonably expect that there will always be only a single value of type [t] with a given name in memory. That's why we only hash the name. *) @@ -68,7 +70,7 @@ let name t = t.id.name let dir t = t.id.dir let loc t = t.loc let deprecated_package_names t = t.deprecated_package_names -let set_has_opam_file t has_opam_file = { t with has_opam_file } +(* let set_has_opam_file t has_opam_file = { t with has_opam_file } *) let version t = t.version let depends t = t.depends let conflicts t = t.conflicts @@ -86,7 +88,7 @@ let encode (name : Name.t) { id = _ ; loc = _ - ; has_opam_file = _ + (* ; has_opam_file = _ *) ; synopsis ; description ; depends @@ -179,6 +181,7 @@ let decode = let allow_empty = lang_version < (3, 0) || allow_empty in let id = { Id.name; dir } in let opam_file = Name.file id.name ~dir:id.dir in + Printf.eprintf "Sets to Exists false\n"; { id ; loc ; synopsis @@ -188,7 +191,7 @@ let decode = ; depopts ; info ; version - ; has_opam_file = Exists false + (* ; has_opam_file = Exists false *) ; tags ; deprecated_package_names ; sites @@ -198,12 +201,12 @@ let decode = } ;; -let dyn_of_opam_file = - let open Dyn in - function - | Exists b -> variant "Exists" [ bool b ] - | Generated -> variant "Generated" [] -;; +(* let dyn_of_opam_file = *) +(* let open Dyn in *) +(* function *) +(* | Exists b -> variant "Exists" [ bool b ] *) +(* | Generated -> variant "Generated" [] *) +(* ;; *) let to_dyn { id @@ -214,7 +217,7 @@ let to_dyn ; conflicts ; depopts ; info - ; has_opam_file + (* ; has_opam_file *) ; tags ; loc = _ ; deprecated_package_names @@ -233,7 +236,7 @@ let to_dyn ; "conflicts", list Package_dependency.to_dyn conflicts ; "depopts", list Package_dependency.to_dyn depopts ; "info", Package_info.to_dyn info - ; "has_opam_file", dyn_of_opam_file has_opam_file + (* ; "has_opam_file", dyn_of_opam_file has_opam_file *) ; "tags", list string tags ; "version", option Package_version.to_dyn version ; "deprecated_package_names", Name.Map.to_dyn Loc.to_dyn_hum deprecated_package_names @@ -244,7 +247,7 @@ let to_dyn let opam_file t = t.opam_file let sites t = t.sites -let has_opam_file t = t.has_opam_file +(* let has_opam_file t = t.has_opam_file *) let allow_empty t = t.allow_empty let map_depends t ~f = { t with depends = f t.depends } @@ -256,7 +259,7 @@ let create ~depends ~depopts ~info - ~has_opam_file + (* ~has_opam_file *) ~dir ~sites ~allow_empty @@ -276,7 +279,7 @@ let create ; conflicts ; info ; depopts - ; has_opam_file + (* ; has_opam_file *) ; tags ; deprecated_package_names ; sites diff --git a/src/dune_lang/package.mli b/src/dune_lang/package.mli index 3207f83c5e4..6c062486900 100644 --- a/src/dune_lang/package.mli +++ b/src/dune_lang/package.mli @@ -33,7 +33,7 @@ val decode : dir:Path.Source.t -> t Dune_sexp.Decoder.t val opam_file : t -> Path.Source.t val to_dyn : t -> Dyn.t val hash : t -> int -val set_has_opam_file : t -> opam_file -> t +(* val set_has_opam_file : t -> opam_file -> t *) val version : t -> Package_version.t option val depends : t -> Package_dependency.t list val conflicts : t -> Package_dependency.t list @@ -50,7 +50,7 @@ val set_version_and_info -> info:Package_info.t -> t -val has_opam_file : t -> opam_file +(* val has_opam_file : t -> opam_file *) val allow_empty : t -> bool val map_depends : t -> f:(Package_dependency.t list -> Package_dependency.t list) -> t @@ -67,7 +67,7 @@ val create -> depends:Package_dependency.t list -> depopts:Package_dependency.t list -> info:Package_info.t - -> has_opam_file:opam_file + (* -> has_opam_file:opam_file *) -> dir:Path.Source.t -> sites:Section.t Site.Map.t -> allow_empty:bool diff --git a/src/dune_pkg/local_package.ml b/src/dune_pkg/local_package.ml index dea27f7ef24..78a817b8b93 100644 --- a/src/dune_pkg/local_package.ml +++ b/src/dune_pkg/local_package.ml @@ -139,8 +139,15 @@ let of_package (t : Dune_lang.Package.t) = let loc = Package.loc t in let version = Package.version t in let name = Package.name t in + (* let hof = match Package.has_opam_file t with *) + (* | Generated -> "Generated" *) + (* | Exists true -> "Exists" *) + (* | Exists false -> "Doesnot exist" *) + (* in *) + Printf.eprintf "Attempting to load of_package: %s\n" (Package.Name.to_string name); match Package.original_opam_file t with | None -> + Printf.eprintf "No original opam file\n"; let dependencies = t |> Package.depends |> Dependency_formula.of_dependencies in { name ; version @@ -153,6 +160,7 @@ let of_package (t : Dune_lang.Package.t) = ; command_source = Assume_defaults } | Some { file; contents = opam_file_string } -> + Printf.eprintf "Yes original opam file\n"; let opam_file = Opam_file.read_from_string_exn ~contents:opam_file_string (Path.source file) in diff --git a/src/dune_pkg/opam_file.ml b/src/dune_pkg/opam_file.ml index 90e1d2df476..034485398da 100644 --- a/src/dune_pkg/opam_file.ml +++ b/src/dune_pkg/opam_file.ml @@ -285,7 +285,6 @@ let load_opam_file_with_contents ~contents:opam_file_string file name = ~info ~synopsis:(get_one "synopsis") ~description:(get_one "description") - ~has_opam_file:(Exists true) ~tags:(Option.value (get_many "tags") ~default:[]) ~deprecated_package_names:Package_name.Map.empty ~sites:Dune_lang.Site.Map.empty diff --git a/src/dune_rules/dune_load.ml b/src/dune_rules/dune_load.ml index c495d8c3b5d..49dccda10b8 100644 --- a/src/dune_rules/dune_load.ml +++ b/src/dune_rules/dune_load.ml @@ -18,6 +18,7 @@ end type t = { dune_files : Dune_file.t list Per_context.t ; packages : Package.t Package.Name.Map.t + ; loaded_packages : Dune_lang.Loaded_package.t Package.Name.Map.t ; projects : Dune_project.t list ; projects_by_root : Dune_project.t Path.Source.Map.t ; dune_file_by_dir : Dune_file_db.t Per_context.t @@ -69,32 +70,45 @@ let load () = ~f in let projects = Appendable_list.to_list_rev projects in - let packages, vendored_packages = + let loaded_packages, vendored_packages = List.fold_left projects ~init:(Package.Name.Map.empty, Package.Name.Set.empty) ~f:(fun (acc_packages, vendored) (status, (project : Dune_project.t)) -> let packages = Dune_project.including_hidden_packages project in + let loaded_packages = Dune_lang.Package_name.Map.map packages ~f:(fun package -> + let has_opam_file = match Dune_project.generate_opam_files project with + (* TODO fix up this shit by checking for opam files *) + | true -> Dune_lang.Loaded_package.Generated + | false -> Dune_lang.Loaded_package.Exists false + in + Dune_lang.Loaded_package.create ~package ~has_opam_file + ) + in let vendored = match status with | `Regular -> vendored | `Vendored -> - Package.Name.Set.of_keys packages |> Package.Name.Set.union vendored + Package.Name.Set.of_keys loaded_packages |> Package.Name.Set.union vendored in let acc_packages = - Package.Name.Map.union acc_packages packages ~f:(fun name a b -> + Package.Name.Map.union acc_packages loaded_packages ~f:(fun name a b -> User_error.raise [ Pp.textf "The package %S is defined more than once:" (Package.Name.to_string name) - ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc a)) - ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc b)) + ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc (Dune_lang.Loaded_package.package a))) + ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc (Dune_lang.Loaded_package.package b))) ]) in acc_packages, vendored) in + let packages = Dune_lang.Package_name.Map.map loaded_packages ~f:Dune_lang.Loaded_package.package in let mask = Only_packages.mask packages ~vendored:vendored_packages in - let packages = Only_packages.filter_packages mask packages in + let selected_packages = Only_packages.filter_packages mask packages in + let loaded_packages = Dune_lang.Package_name.Map.filteri loaded_packages ~f:(fun name _lpkg -> + Dune_lang.Package_name.Map.mem selected_packages name) + in let projects = List.rev_map projects ~f:snd in let dune_files = let without_ctx = @@ -112,6 +126,7 @@ let load () = ; mask ; dune_file_by_dir ; packages + ; loaded_packages ; projects ; projects_by_root = Path.Source.Map.of_list_map_exn projects ~f:(fun project -> @@ -152,6 +167,11 @@ let packages () = packages ;; +let loaded_packages () = + let+ { loaded_packages; _ } = load () in + loaded_packages +;; + let dune_files context = let* t = load () in t.dune_files context diff --git a/src/dune_rules/dune_load.mli b/src/dune_rules/dune_load.mli index db50bd30cdb..af1dbc04e92 100644 --- a/src/dune_rules/dune_load.mli +++ b/src/dune_rules/dune_load.mli @@ -11,4 +11,5 @@ val find_project : dir:Path.Build.t -> Dune_project.t Memo.t val stanzas_in_dir : Path.Build.t -> Dune_file.t option Memo.t val mask : unit -> Only_packages.t Memo.t val packages : unit -> Package.t Package.Name.Map.t Memo.t +val loaded_packages : unit -> Dune_lang.Loaded_package.t Package.Name.Map.t Memo.t val projects : unit -> Dune_project.t list Memo.t diff --git a/src/dune_rules/dune_project.ml b/src/dune_rules/dune_project.ml index 3dd0d6ee575..375b99a5359 100644 --- a/src/dune_rules/dune_project.ml +++ b/src/dune_rules/dune_project.ml @@ -643,7 +643,7 @@ let including_hidden_packages t = t.including_hidden_packages let make_packages ~opam_packages ~dir - ~generate_opam_files + ~generate_opam_files:_ ~opam_file_location packages name @@ -699,9 +699,10 @@ let make_packages ] | Ok packages -> let generated_opam_file = - if generate_opam_files - then fun p -> Package.set_has_opam_file p Package.Generated - else Fun.id + (* if generate_opam_files *) + (* then fun p -> Package.set_has_opam_file p Package.Generated *) + (* else *) + Fun.id in (match opam_file_location with | `Inside_opam_directory -> @@ -715,7 +716,7 @@ let make_packages | None, None -> assert false | Some p, None -> Some (generated_opam_file p) | Some p, Some _ -> - let p = Package.set_has_opam_file p (Exists true) in + (* let p = Package.set_has_opam_file p (Exists true) in *) Some (generated_opam_file p) | None, Some (loc, _) -> User_error.raise @@ -968,16 +969,22 @@ let load_dune_project ~read ~dir opam_packages : t Memo.t = let+ contents = read file in Lexbuf.from_string contents ~fname:(Path.Source.to_string file) in - parse_contents lexbuf ~f:(fun lang -> parse ~dir ~lang ~file) opam_packages + parse_contents lexbuf ~f:(fun lang -> + Printf.eprintf "Parsing again with lang\n"; + parse ~dir ~lang ~file) opam_packages ;; let gen_load ~read ~dir ~files ~infer_from_opam_files : t option Memo.t = let open Memo.O in let opam_packages = Filename.Set.fold files ~init:[] ~f:(fun fn acc -> + Printf.eprintf "Folding over %s\n" fn; match Package.Name.of_opam_file_basename fn with - | None -> acc + | None -> + Printf.eprintf "No, it wasn't loaded\n"; + acc | Some name -> + Printf.eprintf "loaded %s\n" (Dune_lang.Package_name.to_string name); let opam_file = Path.Source.relative dir fn in let loc = Loc.in_file (Path.source opam_file) in let pkg = diff --git a/src/dune_rules/install_rules.ml b/src/dune_rules/install_rules.ml index 6189e951a01..85488c78915 100644 --- a/src/dune_rules/install_rules.ml +++ b/src/dune_rules/install_rules.ml @@ -9,10 +9,11 @@ let install_file ~(package : Package.Name.t) ~findlib_toolchain = ;; module Package_paths = struct - let opam_file (ctx : Build_context.t) (pkg : Package.t) = + let opam_file (ctx : Build_context.t) (lpkg : Dune_lang.Loaded_package.t) = + let pkg = Dune_lang.Loaded_package.package lpkg in let opam_file = Package.opam_file pkg in let exists = - match Package.has_opam_file pkg with + match Dune_lang.Loaded_package.has_opam_file lpkg with | Exists b -> b | Generated -> true in @@ -507,10 +508,11 @@ end = struct let stanzas_to_entries sctx = let ctx = Context.build_context (Super_context.context sctx) in let* stanzas = Dune_load.dune_files ctx.name in - let* packages = Dune_load.packages () in + let* loaded_packages = Dune_load.loaded_packages () in let+ init = - Package_map_traversals.parallel_map packages ~f:(fun _name (pkg : Package.t) -> + Package_map_traversals.parallel_map loaded_packages ~f:(fun _name (pkg : Dune_lang.Loaded_package.t) -> let opam_file = Package_paths.opam_file ctx pkg in + let pkg = Dune_lang.Loaded_package.package pkg in let init = let file section local_file dst = Install.Entry.make section local_file ~kind:`File ~dst From 719721bc8fc4ef10c2f7ea8f4d1ede0cdedf31aa Mon Sep 17 00:00:00 2001 From: Marek Kubica Date: Fri, 14 Mar 2025 14:52:17 +0100 Subject: [PATCH 2/5] WIP --- bin/describe/describe_opam_files.ml | 31 +-- bin/dune_init.ml | 5 +- boot/libs.ml | 2 +- src/dune_lang/dune_lang.ml | 1 + src/dune_lang/dune_package.ml | 279 +++++++++++++++++++++ src/dune_lang/dune_package.mli | 80 ++++++ src/dune_lang/loaded_package.ml | 9 +- src/dune_lang/loaded_package.mli | 1 - src/dune_lang/package.ml | 367 ++++++++-------------------- src/dune_lang/package.mli | 92 ++----- src/dune_pkg/local_package.ml | 8 + src/dune_pkg/opam_file.ml | 11 +- src/dune_rules/dune_load.ml | 36 ++- src/dune_rules/dune_project.ml | 21 +- src/dune_rules/install_rules.ml | 93 +++---- src/dune_rules/opam_create.ml | 62 +++-- src/dune_rules/opam_create.mli | 6 +- 17 files changed, 652 insertions(+), 452 deletions(-) create mode 100644 src/dune_lang/dune_package.ml create mode 100644 src/dune_lang/dune_package.mli diff --git a/bin/describe/describe_opam_files.ml b/bin/describe/describe_opam_files.ml index 271b55d41ff..23d7abbb544 100644 --- a/bin/describe/describe_opam_files.ml +++ b/bin/describe/describe_opam_files.ml @@ -13,20 +13,23 @@ let term = let+ project = Source_tree.root () >>| Source_tree.Dir.project in let packages = Dune_project.packages project |> Package.Name.Map.values in let opam_file_to_dyn pkg = - let opam_file = Path.source (Package.opam_file pkg) in - let contents = - if Dune_project.generate_opam_files project - then ( - let template_file = Dune_rules.Opam_create.template_file opam_file in - let template = - if Path.exists template_file - then Some (template_file, Io.read_file template_file) - else None - in - Dune_rules.Opam_create.generate project pkg ~template) - else Io.read_file opam_file - in - Dyn.Tuple [ String (Path.to_string opam_file); String contents ] + match Package.dune_package pkg with + | Some pkg -> + let opam_file = Path.source (Dune_lang.Dune_package.opam_file pkg) in + let contents = + if Dune_project.generate_opam_files project + then ( + let template_file = Dune_rules.Opam_create.template_file opam_file in + let template = + if Path.exists template_file + then Some (template_file, Io.read_file template_file) + else None + in + Dune_rules.Opam_create.generate project pkg ~template) + else Io.read_file opam_file + in + Dyn.Tuple [ String (Path.to_string opam_file); String contents ] + | None -> Dyn.string "No opam file generated from opam file" in packages |> Dyn.list opam_file_to_dyn |> Describe_format.print_dyn format ;; diff --git a/bin/dune_init.ml b/bin/dune_init.ml index 73302dadb97..c27b193478d 100644 --- a/bin/dune_init.ml +++ b/bin/dune_init.ml @@ -394,7 +394,7 @@ module Component = struct = let cst = let package = - Package.create + Dune_lang.Dune_package.create ~name:(Options.Common.package_name common) ~loc:Loc.none ~version:None @@ -404,7 +404,7 @@ module Component = struct ~sites:Site.Map.empty ~allow_empty:false ~deprecated_package_names:Package.Name.Map.empty - ~original_opam_file:None + (* ~original_opam_file:None *) ~dir ~synopsis:(Some "A short synopsis") ~description:(Some "A longer description") @@ -415,6 +415,7 @@ module Component = struct } ] in + let package = Dune_lang.Package.of_dune_package package in let packages = Package.Name.Map.singleton (Package.name package) package in let info = Package_info.example diff --git a/boot/libs.ml b/boot/libs.ml index ef1c797eb54..a1600b501fd 100644 --- a/boot/libs.ml +++ b/boot/libs.ml @@ -1,4 +1,4 @@ -let external_libraries = [ "unix"; "threads" ] +let external_libraries = [ "threads.posix" ] let local_libraries = [ ("otherlibs/ordering", Some "Ordering", false, None) diff --git a/src/dune_lang/dune_lang.ml b/src/dune_lang/dune_lang.ml index fd61dbb0db0..d62677c81db 100644 --- a/src/dune_lang/dune_lang.ml +++ b/src/dune_lang/dune_lang.ml @@ -8,6 +8,7 @@ module String_with_vars = String_with_vars module Pform = Pform module Action = Action module Dune_file_script = Dune_file_script +module Dune_package = Dune_package module Path = Path module Value = Value module Blang = Blang diff --git a/src/dune_lang/dune_package.ml b/src/dune_lang/dune_package.ml new file mode 100644 index 00000000000..1b2cde3d81b --- /dev/null +++ b/src/dune_lang/dune_package.ml @@ -0,0 +1,279 @@ +open Stdune +open Dune_sexp +module Name = Package_name + +module Id = struct + module T = struct + type t = + { name : Name.t + ; dir : Path.Source.t + } + + let compare { name; dir } pkg = + match Name.compare name pkg.name with + | Eq -> Path.Source.compare dir pkg.dir + | e -> e + ;; + + let to_dyn { dir; name } = + Dyn.record [ "name", Name.to_dyn name; "dir", Path.Source.to_dyn dir ] + ;; + end + + include T + + let hash { name; dir } = Tuple.T2.hash Name.hash Path.Source.hash (name, dir) + let name t = t.name + + module C = Comparable.Make (T) + module Set = C.Set + module Map = C.Map +end + +type opam_file = + | Exists of bool + | Generated + +(* we need the original opam file when passing it [$ dune pkg lock] we want to + to allow the opam library interpret the opam file directly. *) +type original_opam_file = + { file : Path.Source.t + ; contents : string + } + +type t = + { id : Id.t + ; opam_file : Path.Source.t + ; loc : Loc.t + ; synopsis : string option + ; description : string option + ; depends : Package_dependency.t list + ; conflicts : Package_dependency.t list + ; depopts : Package_dependency.t list + ; info : Package_info.t + ; version : Package_version.t option (* ; has_opam_file : opam_file *) + ; tags : string list + ; deprecated_package_names : Loc.t Name.Map.t + ; sites : Section.t Site.Map.t + ; allow_empty : bool + } + +(* Package name are globally unique, so we can reasonably expect that there will + always be only a single value of type [t] with a given name in memory. That's + why we only hash the name. *) +let hash t = Id.hash t.id +let name t = t.id.name +let dir t = t.id.dir +let loc t = t.loc +let deprecated_package_names t = t.deprecated_package_names + +(* let set_has_opam_file t has_opam_file = { t with has_opam_file } *) +let version t = t.version +let depends t = t.depends +let conflicts t = t.conflicts +let depopts t = t.depopts +let tags t = t.tags +let synopsis t = t.synopsis +let info t = t.info +let description t = t.description +let id t = t.id +let set_inside_opam_dir t ~dir = { t with opam_file = Name.file t.id.name ~dir } +let set_version_and_info t ~version ~info = { t with version; info } + +let encode + (name : Name.t) + { id = _ + ; loc = _ + ; synopsis + ; description + ; depends + ; conflicts + ; depopts + ; info + ; version + ; tags + ; deprecated_package_names + ; sites + ; allow_empty + ; opam_file = _ + } + = + let open Encoder in + let fields = + Package_info.encode_fields info + @ record_fields + [ field "name" Name.encode name + ; field_o "synopsis" string synopsis + ; field_o "description" string description + ; field_l "depends" Package_dependency.encode depends + ; field_l "conflicts" Package_dependency.encode conflicts + ; field_l "depopts" Package_dependency.encode depopts + ; field_o "version" Package_version.encode version + ; field "tags" (list string) ~default:[] tags + ; field_l + "deprecated_package_names" + Name.encode + (Name.Map.keys deprecated_package_names) + ; field_l "sites" (pair Site.encode Section.encode) (Site.Map.to_list sites) + ; field_b "allow_empty" allow_empty + ] + in + list sexp (string "package" :: fields) +;; + +let decode_name ~version = + if version >= (3, 11) then Name.decode_opam_compatible else Name.decode +;; + +let decode = + let open Decoder in + let name_map syntax of_list_map to_string name decode print_value error_msg = + let+ names = field ~default:[] name (syntax >>> repeat decode) in + match of_list_map names ~f:(fun (loc, s) -> s, loc) with + | Ok x -> x + | Error (name, (loc1, _), (loc2, _)) -> + User_error.raise + [ Pp.textf "%s %s is declared twice:" error_msg (to_string name) + ; Pp.textf "- %s" (print_value loc1) + ; Pp.textf "- %s" (print_value loc2) + ] + in + fun ~dir -> + fields + @@ let* version = Syntax.get_exn Stanza.syntax in + let+ loc = loc + and+ name = field "name" (decode_name ~version) + and+ synopsis = field_o "synopsis" string + and+ description = field_o "description" string + and+ version = + field_o "version" (Syntax.since Stanza.syntax (2, 5) >>> Package_version.decode) + and+ depends = field ~default:[] "depends" (repeat Package_dependency.decode) + and+ conflicts = field ~default:[] "conflicts" (repeat Package_dependency.decode) + and+ depopts = field ~default:[] "depopts" (repeat Package_dependency.decode) + and+ info = Package_info.decode ~since:(2, 0) () + and+ tags = field "tags" (enter (repeat string)) ~default:[] + and+ deprecated_package_names = + name_map + (Syntax.since Stanza.syntax (2, 0)) + Name.Map.of_list_map + Name.to_string + "deprecated_package_names" + (located Name.decode) + Loc.to_file_colon_line + "Deprecated package name" + and+ sites = + name_map + (Syntax.since Stanza.syntax (2, 8)) + Site.Map.of_list_map + Site.to_string + "sites" + (pair Section.decode Site.decode) + Section.to_string + "Site location name" + and+ allow_empty = field_b "allow_empty" ~check:(Syntax.since Stanza.syntax (3, 0)) + and+ lang_version = Syntax.get_exn Stanza.syntax in + let allow_empty = lang_version < (3, 0) || allow_empty in + let id = { Id.name; dir } in + let opam_file = Name.file id.name ~dir:id.dir in + Printf.eprintf "Sets to Exists false\n"; + { id + ; loc + ; synopsis + ; description + ; depends + ; conflicts + ; depopts + ; info + ; version + ; tags + ; deprecated_package_names + ; sites + ; allow_empty + ; opam_file + } +;; + +(* let dyn_of_opam_file = *) +(* let open Dyn in *) +(* function *) +(* | Exists b -> variant "Exists" [ bool b ] *) +(* | Generated -> variant "Generated" [] *) +(* ;; *) + +let to_dyn + { id + ; version + ; synopsis + ; description + ; depends + ; conflicts + ; depopts + ; info (* ; has_opam_file *) + ; tags + ; loc = _ + ; deprecated_package_names + ; sites + ; allow_empty + ; opam_file = _ (* ; original_opam_file = _ *) + } + = + let open Dyn in + record + [ "id", Id.to_dyn id + ; "synopsis", option string synopsis + ; "description", option string description + ; "depends", list Package_dependency.to_dyn depends + ; "conflicts", list Package_dependency.to_dyn conflicts + ; "depopts", list Package_dependency.to_dyn depopts + ; "info", Package_info.to_dyn info + (* ; "has_opam_file", dyn_of_opam_file has_opam_file *) + ; "tags", list string tags + ; "version", option Package_version.to_dyn version + ; "deprecated_package_names", Name.Map.to_dyn Loc.to_dyn_hum deprecated_package_names + ; "sites", Site.Map.to_dyn Section.to_dyn sites + ; "allow_empty", Bool allow_empty + ] +;; + +let opam_file t = t.opam_file +let sites t = t.sites + +(* let has_opam_file t = t.has_opam_file *) +let allow_empty t = t.allow_empty +let map_depends t ~f = { t with depends = f t.depends } + +let create + ~name + ~loc + ~version + ~conflicts + ~depends + ~depopts + ~info + (* ~has_opam_file *) + ~dir + ~sites + ~allow_empty + ~synopsis + ~description + ~tags + (* ~original_opam_file *) + ~deprecated_package_names + = + let id = { Id.name; dir } in + { id + ; loc + ; version + ; synopsis + ; description + ; depends + ; conflicts + ; info + ; depopts (* ; has_opam_file *) + ; tags + ; deprecated_package_names + ; sites + ; allow_empty + ; opam_file = Name.file name ~dir (* ; original_opam_file *) + } +;; diff --git a/src/dune_lang/dune_package.mli b/src/dune_lang/dune_package.mli new file mode 100644 index 00000000000..20512cad2e4 --- /dev/null +++ b/src/dune_lang/dune_package.mli @@ -0,0 +1,80 @@ +(** Information about a package defined in the workspace *) + +open Stdune + +module Name : sig + type t = Package_name.t + + include module type of Package_name with type t := t +end + +module Id : sig + type t + + val name : t -> Name.t + + include Comparable_intf.S with type key := t +end + +type opam_file = + | Exists of bool + | Generated + +type t + +val loc : t -> Loc.t +val deprecated_package_names : t -> Loc.t Name.Map.t +val sites : t -> Section.t Site.Map.t +val name : t -> Name.t +val dir : t -> Path.Source.t +val set_inside_opam_dir : t -> dir:Path.Source.t -> t +val encode : Name.t -> t Dune_sexp.Encoder.t +val decode : dir:Path.Source.t -> t Dune_sexp.Decoder.t +val opam_file : t -> Path.Source.t +val to_dyn : t -> Dyn.t +val hash : t -> int + +(* val set_has_opam_file : t -> opam_file -> t *) +val version : t -> Package_version.t option +val depends : t -> Package_dependency.t list +val conflicts : t -> Package_dependency.t list +val depopts : t -> Package_dependency.t list +val tags : t -> string list +val synopsis : t -> string option +val info : t -> Package_info.t +val description : t -> string option +val id : t -> Id.t + +val set_version_and_info + : t + -> version:Package_version.t option + -> info:Package_info.t + -> t + +(* val has_opam_file : t -> opam_file *) +val allow_empty : t -> bool +val map_depends : t -> f:(Package_dependency.t list -> Package_dependency.t list) -> t + +type original_opam_file = + { file : Path.Source.t + ; contents : string + } + +val create + : name:Name.t + -> loc:Loc.t + -> version:Package_version.t option + -> conflicts:Package_dependency.t list + -> depends:Package_dependency.t list + -> depopts:Package_dependency.t list + -> info:Package_info.t (* -> has_opam_file:opam_file *) + -> dir:Path.Source.t + -> sites:Section.t Site.Map.t + -> allow_empty:bool + -> synopsis:string option + -> description:string option + -> tags:string list (* -> original_opam_file:original_opam_file option *) + -> deprecated_package_names:Loc.t Name.Map.t + -> t + +(* val original_opam_file : t -> original_opam_file option *) diff --git a/src/dune_lang/loaded_package.ml b/src/dune_lang/loaded_package.ml index 935531d9dd6..9b68425532e 100644 --- a/src/dune_lang/loaded_package.ml +++ b/src/dune_lang/loaded_package.ml @@ -2,12 +2,11 @@ type opam_file = | Exists of bool | Generated -type t = { - package : Package.t; - has_opam_file : opam_file; -} +type t = + { package : Package.t + ; has_opam_file : opam_file + } let package t = t.package let has_opam_file t = t.has_opam_file - let create ~package ~has_opam_file = { package; has_opam_file } diff --git a/src/dune_lang/loaded_package.mli b/src/dune_lang/loaded_package.mli index 6ee10cdecb8..0bb406f26c3 100644 --- a/src/dune_lang/loaded_package.mli +++ b/src/dune_lang/loaded_package.mli @@ -6,5 +6,4 @@ type opam_file = val has_opam_file : t -> opam_file val package : t -> Package.t - val create : package:Package.t -> has_opam_file:opam_file -> t diff --git a/src/dune_lang/package.ml b/src/dune_lang/package.ml index 86adb2af31c..b071fed3499 100644 --- a/src/dune_lang/package.ml +++ b/src/dune_lang/package.ml @@ -1,290 +1,123 @@ open Stdune -open Dune_sexp module Name = Package_name -module Id = struct - module T = struct - type t = - { name : Name.t - ; dir : Path.Source.t - } - - let compare { name; dir } pkg = - match Name.compare name pkg.name with - | Eq -> Path.Source.compare dir pkg.dir - | e -> e - ;; - - let to_dyn { dir; name } = - Dyn.record [ "name", Name.to_dyn name; "dir", Path.Source.to_dyn dir ] - ;; - end - - include T +module Opam_package = struct + type t = + { name : Package_name.t + ; dir : Path.Source.t + ; opam_file : Path.Source.t + ; loc : Loc.t + ; synopsis : string option + ; description : string option + ; depends : OpamTypes.filtered_formula + ; conflicts : Package_dependency.t list + ; depopts : Package_dependency.t list + ; info : Package_info.t + ; version : Package_version.t option + ; tags : string list + } + + let create + ~name + ~loc + ~version + ~conflicts + ~depends + ~depopts + ~info + ~dir + ~synopsis + ~description + ~tags + = + (* TODO fix *) + let opam_file = dir in + { name + ; dir + ; opam_file + ; loc + ; synopsis + ; description + ; depends + ; conflicts + ; depopts + ; info + ; version + ; tags + } + ;; + + let to_dyn _t = Dyn.string "TODO" +end - let hash { name; dir } = Tuple.T2.hash Name.hash Path.Source.hash (name, dir) - let name t = t.name +type t = + | Dune_package of Dune_package.t + | Opam_package of Opam_package.t - module C = Comparable.Make (T) - module Set = C.Set - module Map = C.Map -end +let of_dune_package pkg = Dune_package pkg +let of_opam_package pkg = Opam_package pkg -type opam_file = - | Exists of bool - | Generated +let name = function + | Dune_package t -> Dune_package.name t + | Opam_package t -> t.name +;; -(* we need the original opam file when passing it [$ dune pkg lock] we want to - to allow the opam library interpret the opam file directly. *) -type original_opam_file = - { file : Path.Source.t - ; contents : string - } +let info = function + | Dune_package t -> Dune_package.info t + | Opam_package t -> t.info +;; -type t = - { id : Id.t - ; opam_file : Path.Source.t - ; loc : Loc.t - ; synopsis : string option - ; description : string option - ; depends : Package_dependency.t list - ; conflicts : Package_dependency.t list - ; depopts : Package_dependency.t list - ; info : Package_info.t - ; version : Package_version.t option - (* ; has_opam_file : opam_file *) - ; tags : string list - ; deprecated_package_names : Loc.t Name.Map.t - ; sites : Section.t Site.Map.t - ; allow_empty : bool - ; original_opam_file : original_opam_file option - } +let version = function + | Dune_package t -> Dune_package.version t + | Opam_package t -> t.version +;; +let opam_file = function + | Dune_package t -> Dune_package.opam_file t + | Opam_package t -> t.opam_file +;; +let tags = function + | Dune_package t -> Dune_package.tags t + | Opam_package t -> t.tags +;; -(* Package name are globally unique, so we can reasonably expect that there will - always be only a single value of type [t] with a given name in memory. That's - why we only hash the name. *) -let hash t = Id.hash t.id -let name t = t.id.name -let dir t = t.id.dir -let loc t = t.loc -let deprecated_package_names t = t.deprecated_package_names -(* let set_has_opam_file t has_opam_file = { t with has_opam_file } *) -let version t = t.version -let depends t = t.depends -let conflicts t = t.conflicts -let depopts t = t.depopts -let tags t = t.tags -let synopsis t = t.synopsis -let info t = t.info -let description t = t.description -let id t = t.id -let original_opam_file t = t.original_opam_file -let set_inside_opam_dir t ~dir = { t with opam_file = Name.file t.id.name ~dir } -let set_version_and_info t ~version ~info = { t with version; info } +let sites = function + | Dune_package t -> Dune_package.sites t + | Opam_package _ -> Site.Map.empty +;; -let encode - (name : Name.t) - { id = _ - ; loc = _ - (* ; has_opam_file = _ *) - ; synopsis - ; description - ; depends - ; conflicts - ; depopts - ; info - ; version - ; tags - ; deprecated_package_names - ; sites - ; allow_empty - ; opam_file = _ - ; original_opam_file = _ - } - = - let open Encoder in - let fields = - Package_info.encode_fields info - @ record_fields - [ field "name" Name.encode name - ; field_o "synopsis" string synopsis - ; field_o "description" string description - ; field_l "depends" Package_dependency.encode depends - ; field_l "conflicts" Package_dependency.encode conflicts - ; field_l "depopts" Package_dependency.encode depopts - ; field_o "version" Package_version.encode version - ; field "tags" (list string) ~default:[] tags - ; field_l - "deprecated_package_names" - Name.encode - (Name.Map.keys deprecated_package_names) - ; field_l "sites" (pair Site.encode Section.encode) (Site.Map.to_list sites) - ; field_b "allow_empty" allow_empty - ] - in - list sexp (string "package" :: fields) +let deprecated_package_names = function + | Dune_package t -> Dune_package.deprecated_package_names t + | Opam_package _ -> Name.Map.empty ;; -let decode_name ~version = - if version >= (3, 11) then Name.decode_opam_compatible else Name.decode +let loc = function + | Dune_package t -> Dune_package.loc t + | Opam_package t -> t.loc ;; -let decode = - let open Decoder in - let name_map syntax of_list_map to_string name decode print_value error_msg = - let+ names = field ~default:[] name (syntax >>> repeat decode) in - match of_list_map names ~f:(fun (loc, s) -> s, loc) with - | Ok x -> x - | Error (name, (loc1, _), (loc2, _)) -> - User_error.raise - [ Pp.textf "%s %s is declared twice:" error_msg (to_string name) - ; Pp.textf "- %s" (print_value loc1) - ; Pp.textf "- %s" (print_value loc2) - ] - in - fun ~dir -> - fields - @@ let* version = Syntax.get_exn Stanza.syntax in - let+ loc = loc - and+ name = field "name" (decode_name ~version) - and+ synopsis = field_o "synopsis" string - and+ description = field_o "description" string - and+ version = - field_o "version" (Syntax.since Stanza.syntax (2, 5) >>> Package_version.decode) - and+ depends = field ~default:[] "depends" (repeat Package_dependency.decode) - and+ conflicts = field ~default:[] "conflicts" (repeat Package_dependency.decode) - and+ depopts = field ~default:[] "depopts" (repeat Package_dependency.decode) - and+ info = Package_info.decode ~since:(2, 0) () - and+ tags = field "tags" (enter (repeat string)) ~default:[] - and+ deprecated_package_names = - name_map - (Syntax.since Stanza.syntax (2, 0)) - Name.Map.of_list_map - Name.to_string - "deprecated_package_names" - (located Name.decode) - Loc.to_file_colon_line - "Deprecated package name" - and+ sites = - name_map - (Syntax.since Stanza.syntax (2, 8)) - Site.Map.of_list_map - Site.to_string - "sites" - (pair Section.decode Site.decode) - Section.to_string - "Site location name" - and+ allow_empty = field_b "allow_empty" ~check:(Syntax.since Stanza.syntax (3, 0)) - and+ lang_version = Syntax.get_exn Stanza.syntax in - let allow_empty = lang_version < (3, 0) || allow_empty in - let id = { Id.name; dir } in - let opam_file = Name.file id.name ~dir:id.dir in - Printf.eprintf "Sets to Exists false\n"; - { id - ; loc - ; synopsis - ; description - ; depends - ; conflicts - ; depopts - ; info - ; version - (* ; has_opam_file = Exists false *) - ; tags - ; deprecated_package_names - ; sites - ; allow_empty - ; opam_file - ; original_opam_file = None - } +let dir = function + | Dune_package t -> Dune_package.dir t + | Opam_package t -> t.dir ;; -(* let dyn_of_opam_file = *) -(* let open Dyn in *) -(* function *) -(* | Exists b -> variant "Exists" [ bool b ] *) -(* | Generated -> variant "Generated" [] *) -(* ;; *) +let synopsis = function + | Dune_package t -> Dune_package.synopsis t + | Opam_package t -> t.synopsis +;; -let to_dyn - { id - ; version - ; synopsis - ; description - ; depends - ; conflicts - ; depopts - ; info - (* ; has_opam_file *) - ; tags - ; loc = _ - ; deprecated_package_names - ; sites - ; allow_empty - ; opam_file = _ - ; original_opam_file = _ - } - = - let open Dyn in - record - [ "id", Id.to_dyn id - ; "synopsis", option string synopsis - ; "description", option string description - ; "depends", list Package_dependency.to_dyn depends - ; "conflicts", list Package_dependency.to_dyn conflicts - ; "depopts", list Package_dependency.to_dyn depopts - ; "info", Package_info.to_dyn info - (* ; "has_opam_file", dyn_of_opam_file has_opam_file *) - ; "tags", list string tags - ; "version", option Package_version.to_dyn version - ; "deprecated_package_names", Name.Map.to_dyn Loc.to_dyn_hum deprecated_package_names - ; "sites", Site.Map.to_dyn Section.to_dyn sites - ; "allow_empty", Bool allow_empty - ] +let description = function + | Dune_package t -> Dune_package.description t + | Opam_package t -> t.description ;; -let opam_file t = t.opam_file -let sites t = t.sites -(* let has_opam_file t = t.has_opam_file *) -let allow_empty t = t.allow_empty -let map_depends t ~f = { t with depends = f t.depends } +let dune_package = function + | Dune_package t -> Some t + | Opam_package _ -> None +;; -let create - ~name - ~loc - ~version - ~conflicts - ~depends - ~depopts - ~info - (* ~has_opam_file *) - ~dir - ~sites - ~allow_empty - ~synopsis - ~description - ~tags - ~original_opam_file - ~deprecated_package_names - = - let id = { Id.name; dir } in - { id - ; loc - ; version - ; synopsis - ; description - ; depends - ; conflicts - ; info - ; depopts - (* ; has_opam_file *) - ; tags - ; deprecated_package_names - ; sites - ; allow_empty - ; opam_file = Name.file name ~dir - ; original_opam_file - } +let to_dyn = function + | Dune_package t -> Dune_package.to_dyn t + | Opam_package t -> Opam_package.to_dyn t ;; diff --git a/src/dune_lang/package.mli b/src/dune_lang/package.mli index 6c062486900..6e28b52f969 100644 --- a/src/dune_lang/package.mli +++ b/src/dune_lang/package.mli @@ -1,81 +1,43 @@ -(** Information about a package defined in the workspace *) - open Stdune +type t + module Name : sig type t = Package_name.t include module type of Package_name with type t := t end -module Id : sig +module Opam_package : sig type t - val name : t -> Name.t - - include Comparable_intf.S with type key := t + val create + : name:Name.t + -> loc:Loc.t + -> version:Package_version.t option + -> conflicts:Package_dependency.t list + -> depends:OpamTypes.filtered_formula + -> depopts:Package_dependency.t list + -> info:Package_info.t + -> dir:Path.Source.t + -> synopsis:string option + -> description:string option + -> tags:string list + -> t end -type opam_file = - | Exists of bool - | Generated - -type t - -val loc : t -> Loc.t -val deprecated_package_names : t -> Loc.t Name.Map.t -val sites : t -> Section.t Site.Map.t -val name : t -> Name.t -val dir : t -> Path.Source.t -val set_inside_opam_dir : t -> dir:Path.Source.t -> t -val encode : Name.t -> t Dune_sexp.Encoder.t -val decode : dir:Path.Source.t -> t Dune_sexp.Decoder.t -val opam_file : t -> Path.Source.t -val to_dyn : t -> Dyn.t -val hash : t -> int -(* val set_has_opam_file : t -> opam_file -> t *) +val of_dune_package : Dune_package.t -> t +val of_opam_package : Opam_package.t -> t +val name : t -> Package_name.t +val info : t -> Package_info.t val version : t -> Package_version.t option -val depends : t -> Package_dependency.t list -val conflicts : t -> Package_dependency.t list -val depopts : t -> Package_dependency.t list +val opam_file : t -> Stdune.Path.Source.t val tags : t -> string list +val sites : t -> Section.t Site.Map.t +val deprecated_package_names : t -> Loc.t Name.Map.t +val loc : t -> Loc.t +val dir : t -> Path.Source.t val synopsis : t -> string option -val info : t -> Package_info.t val description : t -> string option -val id : t -> Id.t - -val set_version_and_info - : t - -> version:Package_version.t option - -> info:Package_info.t - -> t - -(* val has_opam_file : t -> opam_file *) -val allow_empty : t -> bool -val map_depends : t -> f:(Package_dependency.t list -> Package_dependency.t list) -> t - -type original_opam_file = - { file : Path.Source.t - ; contents : string - } - -val create - : name:Name.t - -> loc:Loc.t - -> version:Package_version.t option - -> conflicts:Package_dependency.t list - -> depends:Package_dependency.t list - -> depopts:Package_dependency.t list - -> info:Package_info.t - (* -> has_opam_file:opam_file *) - -> dir:Path.Source.t - -> sites:Section.t Site.Map.t - -> allow_empty:bool - -> synopsis:string option - -> description:string option - -> tags:string list - -> original_opam_file:original_opam_file option - -> deprecated_package_names:Loc.t Name.Map.t - -> t - -val original_opam_file : t -> original_opam_file option +val dune_package : t -> Dune_package.t option +val to_dyn : t -> Dyn.t diff --git a/src/dune_pkg/local_package.ml b/src/dune_pkg/local_package.ml index 78a817b8b93..c7d92c9727a 100644 --- a/src/dune_pkg/local_package.ml +++ b/src/dune_pkg/local_package.ml @@ -145,6 +145,14 @@ let of_package (t : Dune_lang.Package.t) = (* | Exists false -> "Doesnot exist" *) (* in *) Printf.eprintf "Attempting to load of_package: %s\n" (Package.Name.to_string name); + (* match Package.depends t with *) + (* | [] -> *) + (* match Loaded_package.has_opam_file with *) + (* | Missing -> [] *) + (* | Generated -> [] *) + (* | Exists path -> (1* load & parse *1) *) + (* | _ -> *) + (* (1* depends are in dune project *1) *) match Package.original_opam_file t with | None -> Printf.eprintf "No original opam file\n"; diff --git a/src/dune_pkg/opam_file.ml b/src/dune_pkg/opam_file.ml index 034485398da..4aa03416d67 100644 --- a/src/dune_pkg/opam_file.ml +++ b/src/dune_pkg/opam_file.ml @@ -271,7 +271,9 @@ let load_opam_file_with_contents ~contents:opam_file_string file name = (let+ url = get_one "dev-repo" in Dune_lang.Source_kind.Url url) in - Dune_lang.Package.create + let opam_file = read_from_string_exn ~contents:opam_file_string (Path.source file) in + let depends = opam_file |> OpamFile.OPAM.depends in + Dune_lang.Package.Opam_package.create ~name ~dir ~loc @@ -280,14 +282,11 @@ let load_opam_file_with_contents ~contents:opam_file_string file name = |> Option.map ~f:Package_version.of_string_user_error >>| User_error.ok_exn) ~conflicts:[] - ~depends:[] + ~depends ~depopts:[] ~info ~synopsis:(get_one "synopsis") ~description:(get_one "description") ~tags:(Option.value (get_many "tags") ~default:[]) - ~deprecated_package_names:Package_name.Map.empty - ~sites:Dune_lang.Site.Map.empty - ~allow_empty:true - ~original_opam_file:(Some { file; contents = opam_file_string }) + |> Dune_lang.Package.of_opam_package ;; diff --git a/src/dune_rules/dune_load.ml b/src/dune_rules/dune_load.ml index 49dccda10b8..53322fe5d3c 100644 --- a/src/dune_rules/dune_load.ml +++ b/src/dune_rules/dune_load.ml @@ -76,14 +76,15 @@ let load () = ~init:(Package.Name.Map.empty, Package.Name.Set.empty) ~f:(fun (acc_packages, vendored) (status, (project : Dune_project.t)) -> let packages = Dune_project.including_hidden_packages project in - let loaded_packages = Dune_lang.Package_name.Map.map packages ~f:(fun package -> - let has_opam_file = match Dune_project.generate_opam_files project with - (* TODO fix up this shit by checking for opam files *) - | true -> Dune_lang.Loaded_package.Generated - | false -> Dune_lang.Loaded_package.Exists false - in - Dune_lang.Loaded_package.create ~package ~has_opam_file - ) + let loaded_packages = + Dune_lang.Package_name.Map.map packages ~f:(fun package -> + let has_opam_file = + match Dune_project.generate_opam_files project with + (* TODO fix up this shit by checking for opam files *) + | true -> Dune_lang.Loaded_package.Generated + | false -> Dune_lang.Loaded_package.Exists false + in + Dune_lang.Loaded_package.create ~package ~has_opam_file) in let vendored = match status with @@ -97,17 +98,26 @@ let load () = [ Pp.textf "The package %S is defined more than once:" (Package.Name.to_string name) - ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc (Dune_lang.Loaded_package.package a))) - ; Pp.textf "- %s" (Loc.to_file_colon_line (Package.loc (Dune_lang.Loaded_package.package b))) + ; Pp.textf + "- %s" + (Loc.to_file_colon_line + (Package.loc (Dune_lang.Loaded_package.package a))) + ; Pp.textf + "- %s" + (Loc.to_file_colon_line + (Package.loc (Dune_lang.Loaded_package.package b))) ]) in acc_packages, vendored) in - let packages = Dune_lang.Package_name.Map.map loaded_packages ~f:Dune_lang.Loaded_package.package in + let packages = + Dune_lang.Package_name.Map.map loaded_packages ~f:Dune_lang.Loaded_package.package + in let mask = Only_packages.mask packages ~vendored:vendored_packages in let selected_packages = Only_packages.filter_packages mask packages in - let loaded_packages = Dune_lang.Package_name.Map.filteri loaded_packages ~f:(fun name _lpkg -> - Dune_lang.Package_name.Map.mem selected_packages name) + let loaded_packages = + Dune_lang.Package_name.Map.filteri loaded_packages ~f:(fun name _lpkg -> + Dune_lang.Package_name.Map.mem selected_packages name) in let projects = List.rev_map projects ~f:snd in let dune_files = diff --git a/src/dune_rules/dune_project.ml b/src/dune_rules/dune_project.ml index 375b99a5359..6e9ec2e7843 100644 --- a/src/dune_rules/dune_project.ml +++ b/src/dune_rules/dune_project.ml @@ -566,8 +566,10 @@ let encode : t -> Dune_lang.t list = Option.bind format_config ~f:Format_config.encode_opt |> Option.to_list in let packages = - Package.Name.Map.to_list_map packages ~f:(fun name package -> - Package.encode name package) + packages + |> Package.Name.Map.filter_map ~f:Dune_lang.Package.dune_package + |> Package.Name.Map.to_list_map ~f:(fun name package -> + Dune_lang.Dune_package.encode name package) in let subst_config = Option.map subst_config ~f:(fun (_loc, x) -> constr "subst" Subst_config.encode x) @@ -702,7 +704,7 @@ let make_packages (* if generate_opam_files *) (* then fun p -> Package.set_has_opam_file p Package.Generated *) (* else *) - Fun.id + Fun.id in (match opam_file_location with | `Inside_opam_directory -> @@ -969,9 +971,12 @@ let load_dune_project ~read ~dir opam_packages : t Memo.t = let+ contents = read file in Lexbuf.from_string contents ~fname:(Path.Source.to_string file) in - parse_contents lexbuf ~f:(fun lang -> - Printf.eprintf "Parsing again with lang\n"; - parse ~dir ~lang ~file) opam_packages + parse_contents + lexbuf + ~f:(fun lang -> + Printf.eprintf "Parsing again with lang\n"; + parse ~dir ~lang ~file) + opam_packages ;; let gen_load ~read ~dir ~files ~infer_from_opam_files : t option Memo.t = @@ -981,8 +986,8 @@ let gen_load ~read ~dir ~files ~infer_from_opam_files : t option Memo.t = Printf.eprintf "Folding over %s\n" fn; match Package.Name.of_opam_file_basename fn with | None -> - Printf.eprintf "No, it wasn't loaded\n"; - acc + Printf.eprintf "No, it wasn't loaded\n"; + acc | Some name -> Printf.eprintf "loaded %s\n" (Dune_lang.Package_name.to_string name); let opam_file = Path.Source.relative dir fn in diff --git a/src/dune_rules/install_rules.ml b/src/dune_rules/install_rules.ml index 85488c78915..9f14ff7f4e2 100644 --- a/src/dune_rules/install_rules.ml +++ b/src/dune_rules/install_rules.ml @@ -510,52 +510,55 @@ end = struct let* stanzas = Dune_load.dune_files ctx.name in let* loaded_packages = Dune_load.loaded_packages () in let+ init = - Package_map_traversals.parallel_map loaded_packages ~f:(fun _name (pkg : Dune_lang.Loaded_package.t) -> - let opam_file = Package_paths.opam_file ctx pkg in - let pkg = Dune_lang.Loaded_package.package pkg in - let init = - let file section local_file dst = - Install.Entry.make section local_file ~kind:`File ~dst - |> Install.Entry.Sourced.create - in - let deprecated_meta_and_dune_files = - Package.deprecated_package_names pkg - |> Package.Name.Map.to_list - |> List.rev_concat_map ~f:(fun (name, _) -> - let meta_file = Package_paths.deprecated_meta_file ctx pkg name in - let dune_package_file = - Package_paths.deprecated_dune_package_file ctx pkg name - in - let file local_file install_fn = - file Lib_root local_file (Package.Name.to_string name ^ "/" ^ install_fn) - in - [ file meta_file Dune_findlib.Package.meta_fn - ; file dune_package_file Dune_package.fn - ]) + Package_map_traversals.parallel_map + loaded_packages + ~f:(fun _name (pkg : Dune_lang.Loaded_package.t) -> + let opam_file = Package_paths.opam_file ctx pkg in + let pkg = Dune_lang.Loaded_package.package pkg in + let init = + let file section local_file dst = + Install.Entry.make section local_file ~kind:`File ~dst + |> Install.Entry.Sourced.create + in + let deprecated_meta_and_dune_files = + Package.deprecated_package_names pkg + |> Package.Name.Map.to_list + |> List.rev_concat_map ~f:(fun (name, _) -> + let meta_file = Package_paths.deprecated_meta_file ctx pkg name in + let dune_package_file = + Package_paths.deprecated_dune_package_file ctx pkg name + in + let file local_file install_fn = + file Lib_root local_file (Package.Name.to_string name ^ "/" ^ install_fn) + in + [ file meta_file Dune_findlib.Package.meta_fn + ; file dune_package_file Dune_package.fn + ]) + in + let meta_file = Package_paths.meta_file ctx pkg in + let dune_package_file = Package_paths.dune_package_file ctx pkg in + file Lib meta_file Dune_findlib.Package.meta_fn + :: file Lib dune_package_file Dune_package.fn + :: + (match opam_file with + | None -> deprecated_meta_and_dune_files + | Some opam_file -> + file Lib opam_file "opam" :: deprecated_meta_and_dune_files) in - let meta_file = Package_paths.meta_file ctx pkg in - let dune_package_file = Package_paths.dune_package_file ctx pkg in - file Lib meta_file Dune_findlib.Package.meta_fn - :: file Lib dune_package_file Dune_package.fn - :: - (match opam_file with - | None -> deprecated_meta_and_dune_files - | Some opam_file -> file Lib opam_file "opam" :: deprecated_meta_and_dune_files) - in - let pkg_dir = Package.dir pkg in - Source_tree.find_dir pkg_dir - >>| function - | None -> init - | Some dir -> - let pkg_dir = Path.Build.append_source ctx.build_dir pkg_dir in - Source_tree.Dir.filenames dir - |> Filename.Set.fold ~init ~f:(fun fn acc -> - if is_odig_doc_file fn - then ( - let odig_file = Path.Build.relative pkg_dir fn in - let entry = Install.Entry.make Doc ~kind:`File odig_file in - Install.Entry.Sourced.create entry :: acc) - else acc)) + let pkg_dir = Package.dir pkg in + Source_tree.find_dir pkg_dir + >>| function + | None -> init + | Some dir -> + let pkg_dir = Path.Build.append_source ctx.build_dir pkg_dir in + Source_tree.Dir.filenames dir + |> Filename.Set.fold ~init ~f:(fun fn acc -> + if is_odig_doc_file fn + then ( + let odig_file = Path.Build.relative pkg_dir fn in + let entry = Install.Entry.make Doc ~kind:`File odig_file in + Install.Entry.Sourced.create entry :: acc) + else acc)) and+ entries = let* package_db = Package_db.create ctx.name in Dune_file.fold_static_stanzas stanzas ~init:[] ~f:(fun dune_file stanza acc -> diff --git a/src/dune_rules/opam_create.ml b/src/dune_rules/opam_create.ml index 8f9205326fc..4a286e851a9 100644 --- a/src/dune_rules/opam_create.ml +++ b/src/dune_rules/opam_create.ml @@ -111,20 +111,22 @@ let default_build_command = let package_fields package ~project = let open Opam_file.Create in let tags = - let tags = Package.tags package in + let tags = Dune_lang.Dune_package.tags package in if tags = [] then [] else [ "tags", string_list tags ] in let optional = - [ "synopsis", Package.synopsis package; "description", Package.description package ] + [ "synopsis", Dune_lang.Dune_package.synopsis package + ; "description", Dune_lang.Dune_package.description package + ] |> List.filter_map ~f:(fun (k, v) -> match v with | None -> None | Some v -> Some (k, string v)) in let dep_fields = - [ "depends", Package.depends package - ; "conflicts", Package.conflicts package - ; "depopts", Package.depopts package + [ "depends", Dune_lang.Dune_package.depends package + ; "conflicts", Dune_lang.Dune_package.conflicts package + ; "depopts", Dune_lang.Dune_package.depopts package ] |> List.filter_map ~f:(fun (k, v) -> match v with @@ -207,23 +209,24 @@ let maintenance_intent dune_version info = | x -> x) ;; -let opam_fields project (package : Package.t) = +let opam_fields project (package : Dune_lang.Dune_package.t) = let dune_version = Dune_project.dune_version project in - let package_name = Package.name package in + let package_name = Dune_lang.Dune_package.name package in let package = if dune_version < (1, 11) || Package.Name.equal package_name dune_name then package else - Package.map_depends package ~f:(fun depends -> insert_dune_dep depends dune_version) + Dune_lang.Dune_package.map_depends package ~f:(fun depends -> + insert_dune_dep depends dune_version) in let package = if dune_version < (2, 7) || Package.Name.equal package_name odoc_name then package - else Package.map_depends package ~f:insert_odoc_dep + else Dune_lang.Dune_package.map_depends package ~f:insert_odoc_dep in let package_fields = package_fields package ~project in let open Opam_file.Create in - let info = Package.info package in + let info = Dune_lang.Dune_package.info package in let optional_fields = [ "bug-reports", Package_info.bug_reports info ; "homepage", Package_info.homepage info @@ -232,7 +235,8 @@ let opam_fields project (package : Package.t) = , match Package_info.license info with | Some [ x ] -> Some x | _ -> None ) - ; "version", Option.map ~f:Package_version.to_string (Package.version package) + ; ( "version" + , Option.map ~f:Package_version.to_string (Dune_lang.Dune_package.version package) ) ; "dev-repo", Option.map ~f:Source_kind.to_string (Package_info.source info) ] |> List.filter_map ~f:(fun (k, v) -> Option.map v ~f:(fun v -> k, string v)) @@ -270,7 +274,7 @@ let opam_template ~opam_path = ;; let generate project pkg ~template = - let opam_fname = Package.opam_file pkg in + let opam_fname = Dune_lang.Dune_package.opam_file pkg in let filter_fields = match template with | None -> Fun.id @@ -298,7 +302,9 @@ let generate project pkg ~template = let add_alias_rule (ctx : Build_context.t) ~project ~pkg = let build_dir = ctx.build_dir in let dir = Path.Build.append_source build_dir (Dune_project.root project) in - let opam_path = Path.Build.append_source build_dir (Package.opam_file pkg) in + let opam_path = + Path.Build.append_source build_dir (Dune_lang.Dune_package.opam_file pkg) + in let aliases = [ Alias.make Alias0.install ~dir ; Alias.make Alias0.runtest ~dir @@ -315,7 +321,9 @@ let add_alias_rule (ctx : Build_context.t) ~project ~pkg = let add_opam_file_rule sctx ~project ~pkg = let open Action_builder.O in let build_dir = Super_context.context sctx |> Context.build_dir in - let opam_path = Path.Build.append_source build_dir (Package.opam_file pkg) in + let opam_path = + Path.Build.append_source build_dir (Dune_lang.Dune_package.opam_file pkg) + in let opam_rule = (let+ template = opam_template ~opam_path:(Path.build opam_path) in generate project pkg ~template) @@ -331,7 +339,10 @@ let add_opam_file_rules sctx project = let packages = Dune_project.packages project in Memo.parallel_iter_seq (Dune_lang.Package_name.Map.to_seq packages) - ~f:(fun (_name, (pkg : Package.t)) -> add_opam_file_rule sctx ~project ~pkg)) + ~f:(fun (_name, (pkg : Package.t)) -> + match Package.dune_package pkg with + | Some pkg -> add_opam_file_rule sctx ~project ~pkg + | None -> Memo.return ())) ;; let add_rules sctx project = @@ -340,15 +351,18 @@ let add_rules sctx project = Memo.parallel_iter_seq (Dune_lang.Package_name.Map.to_seq packages) ~f:(fun (_name, (pkg : Package.t)) -> - let* () = - add_alias_rule - (Context.build_context (Super_context.context sctx)) - ~project - ~pkg - in - match Dune_project.opam_file_location project with - | `Inside_opam_directory -> Memo.return () - | `Relative_to_project -> add_opam_file_rule sctx ~project ~pkg)) + match Package.dune_package pkg with + | None -> Memo.return () + | Some pkg -> + let* () = + add_alias_rule + (Context.build_context (Super_context.context sctx)) + ~project + ~pkg + in + (match Dune_project.opam_file_location project with + | `Inside_opam_directory -> Memo.return () + | `Relative_to_project -> add_opam_file_rule sctx ~project ~pkg))) ;; module Gen_rules = Build_config.Gen_rules diff --git a/src/dune_rules/opam_create.mli b/src/dune_rules/opam_create.mli index d91edb2c295..1c1e033d580 100644 --- a/src/dune_rules/opam_create.mli +++ b/src/dune_rules/opam_create.mli @@ -7,7 +7,11 @@ val template_file : Path.t -> Path.t (** Generate the contents of an opam file. [template] is the filename and contents of the template file. *) -val generate : Dune_project.t -> Package.t -> template:(Path.t * string) option -> string +val generate + : Dune_project.t + -> Dune_lang.Dune_package.t + -> template:(Path.t * string) option + -> string val gen_rules : Super_context.t Memo.t From 529a54f1937549a998fd709cde8e50011f468496 Mon Sep 17 00:00:00 2001 From: Marek Kubica Date: Fri, 14 Mar 2025 16:59:34 +0100 Subject: [PATCH 3/5] WIP --- src/dune_lang/dune_package.ml | 2 +- src/dune_lang/package.ml | 5 +++++ src/dune_lang/package.mli | 1 + src/dune_pkg/opam_file.ml | 1 - src/dune_pkg/opam_file.mli | 2 +- src/dune_rules/dune_project.ml | 36 ++++++++++++++++++---------------- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/dune_lang/dune_package.ml b/src/dune_lang/dune_package.ml index 1b2cde3d81b..9d262c8c8c6 100644 --- a/src/dune_lang/dune_package.ml +++ b/src/dune_lang/dune_package.ml @@ -51,7 +51,7 @@ type t = ; conflicts : Package_dependency.t list ; depopts : Package_dependency.t list ; info : Package_info.t - ; version : Package_version.t option (* ; has_opam_file : opam_file *) + ; version : Package_version.t option ; tags : string list ; deprecated_package_names : Loc.t Name.Map.t ; sites : Section.t Site.Map.t diff --git a/src/dune_lang/package.ml b/src/dune_lang/package.ml index b071fed3499..59bf1d97f10 100644 --- a/src/dune_lang/package.ml +++ b/src/dune_lang/package.ml @@ -121,3 +121,8 @@ let to_dyn = function | Dune_package t -> Dune_package.to_dyn t | Opam_package t -> Opam_package.to_dyn t ;; + +let set_version_and_info t ~version ~info = + match t with + | Dune_package t -> Dune_package (Dune_package.set_version_and_info t ~version ~info) + | Opam_package t -> Opam_package { t with version; info } diff --git a/src/dune_lang/package.mli b/src/dune_lang/package.mli index 6e28b52f969..518db50b32f 100644 --- a/src/dune_lang/package.mli +++ b/src/dune_lang/package.mli @@ -41,3 +41,4 @@ val synopsis : t -> string option val description : t -> string option val dune_package : t -> Dune_package.t option val to_dyn : t -> Dyn.t +val set_version_and_info : t -> version:Package_version.t option -> info:Package_info.t -> t diff --git a/src/dune_pkg/opam_file.ml b/src/dune_pkg/opam_file.ml index 4aa03416d67..e0e79dff091 100644 --- a/src/dune_pkg/opam_file.ml +++ b/src/dune_pkg/opam_file.ml @@ -288,5 +288,4 @@ let load_opam_file_with_contents ~contents:opam_file_string file name = ~synopsis:(get_one "synopsis") ~description:(get_one "description") ~tags:(Option.value (get_many "tags") ~default:[]) - |> Dune_lang.Package.of_opam_package ;; diff --git a/src/dune_pkg/opam_file.mli b/src/dune_pkg/opam_file.mli index 6667e2ea628..afa75d368a2 100644 --- a/src/dune_pkg/opam_file.mli +++ b/src/dune_pkg/opam_file.mli @@ -37,4 +37,4 @@ val load_opam_file_with_contents : contents:string -> Path.Source.t -> Package_name.t - -> Dune_lang.Package.t + -> Dune_lang.Package.Opam_package.t diff --git a/src/dune_rules/dune_project.ml b/src/dune_rules/dune_project.ml index 6e9ec2e7843..a14324bedc7 100644 --- a/src/dune_rules/dune_project.ml +++ b/src/dune_rules/dune_project.ml @@ -647,15 +647,15 @@ let make_packages ~dir ~generate_opam_files:_ ~opam_file_location - packages + (packages : Dune_lang.Dune_package.t list) name = (match packages, Option.bind ~f:Dune_project_name.name name with | [ p ], Some name -> - if Package.Name.to_string (Package.name p) <> name + if Package.Name.to_string (Dune_lang.Dune_package.name p) <> name then User_error.raise - ~loc:(Package.loc p) + ~loc:(Dune_lang.Dune_package.loc p) [ Pp.textf "when a single package is defined, it must have the same name as the \ project name: %s" @@ -686,18 +686,18 @@ let make_packages in let deprecated_package_names = List.fold_left packages ~init:Package.Name.Map.empty ~f:(fun acc package -> - let deprecated_package_names = Package.deprecated_package_names package in + let deprecated_package_names = Dune_lang.Dune_package.deprecated_package_names package in Package.Name.Map.union acc deprecated_package_names ~f:package_defined_twice) in List.iter packages ~f:(fun p -> - let name = Package.name p in + let name = Dune_lang.Dune_package.name p in Package.Name.Map.find deprecated_package_names name - |> Option.iter ~f:(fun loc -> package_defined_twice name loc (Package.loc p)))); - match Package.Name.Map.of_list_map packages ~f:(fun p -> Package.name p, p) with + |> Option.iter ~f:(fun loc -> package_defined_twice name loc (Dune_lang.Dune_package.loc p)))); + match Package.Name.Map.of_list_map packages ~f:(fun p -> Dune_lang.Dune_package.name p, p) with | Error (_, _, p) -> User_error.raise - ~loc:(Package.loc p) - [ Pp.textf "package %s is already defined" (Package.name p |> Package.Name.to_string) + ~loc:(Dune_lang.Dune_package.loc p) + [ Pp.textf "package %s is already defined" (Dune_lang.Dune_package.name p |> Package.Name.to_string) ] | Ok packages -> let generated_opam_file = @@ -709,17 +709,19 @@ let make_packages (match opam_file_location with | `Inside_opam_directory -> Package.Name.Map.map packages ~f:(fun p -> - let dir = Path.Source.relative dir "opam" in - let p = Package.set_inside_opam_dir p ~dir in - generated_opam_file p) + let dir = Path.Source.relative dir "opam" in + (* TODO move `dir` out out Dune_package, it doesn't make much sense there *) + let p = Dune_lang.Dune_package.set_inside_opam_dir p ~dir in + let p = Dune_lang.Package.of_dune_package p in + generated_opam_file p) | `Relative_to_project -> Package.Name.Map.merge packages opam_packages ~f:(fun _name dune opam -> match dune, opam with | None, None -> assert false - | Some p, None -> Some (generated_opam_file p) + | Some p, None -> Some (Package.of_dune_package (generated_opam_file p)) | Some p, Some _ -> (* let p = Package.set_has_opam_file p (Exists true) in *) - Some (generated_opam_file p) + Some (Package.of_dune_package (generated_opam_file p)) | None, Some (loc, _) -> User_error.raise ~loc @@ -736,7 +738,7 @@ let parse_packages ~info ~dir ~version - packages + (packages : Dune_lang.Dune_package.t list) opam_file_location ~generate_opam_files opam_packages @@ -775,7 +777,7 @@ let parse ~dir ~(lang : Lang.Instance.t) ~file = @@ let+ name = field_o "name" Dune_project_name.decode and+ version = field_o "version" Package_version.decode and+ info = Package_info.decode () - and+ packages = multi_field "package" (Package.decode ~dir) + and+ packages = multi_field "package" (Dune_lang.Dune_package.decode ~dir) and+ pins = Dune_pkg.Pin_stanza.DB.decode ~dir and+ explicit_extensions = multi_field @@ -854,7 +856,7 @@ let parse ~dir ~(lang : Lang.Instance.t) ~file = ~default:Warning.Settings.empty (Dune_lang.Syntax.since Stanza.syntax (3, 11) >>> Warning.Settings.decode) in - fun (opam_packages : (Loc.t * Package.t Memo.t) Package.Name.Map.t) -> + fun (opam_packages : (Loc.t * Package.Opam_package.t Memo.t) Package.Name.Map.t) -> let opam_file_location = Option.value opam_file_location ~default:(opam_file_location_default ~lang) in From 6fcb58096b8814b352b34079f5bab3b3ec89ca2b Mon Sep 17 00:00:00 2001 From: Marek Kubica Date: Thu, 20 Mar 2025 16:13:51 +0100 Subject: [PATCH 4/5] WIP --- src/dune_lang/dune_lang.ml | 1 + src/dune_lang/dune_package.ml | 67 +++++++------------------- src/dune_lang/dune_package.mli | 10 +--- src/dune_lang/package.ml | 32 ++++++++++--- src/dune_lang/package.mli | 15 +++++- src/dune_lang/package_id.ml | 30 ++++++++++++ src/dune_lang/package_id.mli | 12 +++++ src/dune_pkg/local_package.ml | 85 +++++++++++++++------------------ src/dune_rules/dune_project.ml | 35 +++++++++----- src/dune_rules/import.ml | 1 + src/dune_rules/install_rules.ml | 39 ++++++++------- 11 files changed, 183 insertions(+), 144 deletions(-) create mode 100644 src/dune_lang/package_id.ml create mode 100644 src/dune_lang/package_id.mli diff --git a/src/dune_lang/dune_lang.ml b/src/dune_lang/dune_lang.ml index d62677c81db..448d5a1ca88 100644 --- a/src/dune_lang/dune_lang.ml +++ b/src/dune_lang/dune_lang.ml @@ -13,6 +13,7 @@ module Path = Path module Value = Value module Blang = Blang module Binary_kind = Binary_kind +module Package_id = Package_id module Package_constraint = Package_constraint module Package_name = Package_name module Package_dependency = Package_dependency diff --git a/src/dune_lang/dune_package.ml b/src/dune_lang/dune_package.ml index 9d262c8c8c6..f6c038c1be9 100644 --- a/src/dune_lang/dune_package.ml +++ b/src/dune_lang/dune_package.ml @@ -2,34 +2,6 @@ open Stdune open Dune_sexp module Name = Package_name -module Id = struct - module T = struct - type t = - { name : Name.t - ; dir : Path.Source.t - } - - let compare { name; dir } pkg = - match Name.compare name pkg.name with - | Eq -> Path.Source.compare dir pkg.dir - | e -> e - ;; - - let to_dyn { dir; name } = - Dyn.record [ "name", Name.to_dyn name; "dir", Path.Source.to_dyn dir ] - ;; - end - - include T - - let hash { name; dir } = Tuple.T2.hash Name.hash Path.Source.hash (name, dir) - let name t = t.name - - module C = Comparable.Make (T) - module Set = C.Set - module Map = C.Map -end - type opam_file = | Exists of bool | Generated @@ -42,7 +14,7 @@ type original_opam_file = } type t = - { id : Id.t + { id : Package_id.t ; opam_file : Path.Source.t ; loc : Loc.t ; synopsis : string option @@ -61,13 +33,11 @@ type t = (* Package name are globally unique, so we can reasonably expect that there will always be only a single value of type [t] with a given name in memory. That's why we only hash the name. *) -let hash t = Id.hash t.id -let name t = t.id.name -let dir t = t.id.dir +let hash t = Package_id.hash t.id +let name t = Package_id.name t.id +let dir t = Package_id.dir t.id let loc t = t.loc let deprecated_package_names t = t.deprecated_package_names - -(* let set_has_opam_file t has_opam_file = { t with has_opam_file } *) let version t = t.version let depends t = t.depends let conflicts t = t.conflicts @@ -77,7 +47,11 @@ let synopsis t = t.synopsis let info t = t.info let description t = t.description let id t = t.id -let set_inside_opam_dir t ~dir = { t with opam_file = Name.file t.id.name ~dir } + +let set_inside_opam_dir t ~dir = + { t with opam_file = Name.file (Package_id.name t.id) ~dir } +;; + let set_version_and_info t ~version ~info = { t with version; info } let encode @@ -173,8 +147,8 @@ let decode = and+ allow_empty = field_b "allow_empty" ~check:(Syntax.since Stanza.syntax (3, 0)) and+ lang_version = Syntax.get_exn Stanza.syntax in let allow_empty = lang_version < (3, 0) || allow_empty in - let id = { Id.name; dir } in - let opam_file = Name.file id.name ~dir:id.dir in + let id = Package_id.create ~name ~dir in + let opam_file = Name.file (Package_id.name id) ~dir:(Package_id.dir id) in Printf.eprintf "Sets to Exists false\n"; { id ; loc @@ -193,13 +167,6 @@ let decode = } ;; -(* let dyn_of_opam_file = *) -(* let open Dyn in *) -(* function *) -(* | Exists b -> variant "Exists" [ bool b ] *) -(* | Generated -> variant "Generated" [] *) -(* ;; *) - let to_dyn { id ; version @@ -208,18 +175,18 @@ let to_dyn ; depends ; conflicts ; depopts - ; info (* ; has_opam_file *) + ; info ; tags ; loc = _ ; deprecated_package_names ; sites ; allow_empty - ; opam_file = _ (* ; original_opam_file = _ *) + ; opam_file = _ } = let open Dyn in record - [ "id", Id.to_dyn id + [ "id", Package_id.to_dyn id ; "synopsis", option string synopsis ; "description", option string description ; "depends", list Package_dependency.to_dyn depends @@ -260,7 +227,7 @@ let create (* ~original_opam_file *) ~deprecated_package_names = - let id = { Id.name; dir } in + let id = Package_id.create ~name ~dir in { id ; loc ; version @@ -269,11 +236,11 @@ let create ; depends ; conflicts ; info - ; depopts (* ; has_opam_file *) + ; depopts ; tags ; deprecated_package_names ; sites ; allow_empty - ; opam_file = Name.file name ~dir (* ; original_opam_file *) + ; opam_file = Name.file name ~dir } ;; diff --git a/src/dune_lang/dune_package.mli b/src/dune_lang/dune_package.mli index 20512cad2e4..eaaf0342168 100644 --- a/src/dune_lang/dune_package.mli +++ b/src/dune_lang/dune_package.mli @@ -8,14 +8,6 @@ module Name : sig include module type of Package_name with type t := t end -module Id : sig - type t - - val name : t -> Name.t - - include Comparable_intf.S with type key := t -end - type opam_file = | Exists of bool | Generated @@ -43,7 +35,7 @@ val tags : t -> string list val synopsis : t -> string option val info : t -> Package_info.t val description : t -> string option -val id : t -> Id.t +val id : t -> Package_id.t val set_version_and_info : t diff --git a/src/dune_lang/package.ml b/src/dune_lang/package.ml index 59bf1d97f10..e175e82ad7e 100644 --- a/src/dune_lang/package.ml +++ b/src/dune_lang/package.ml @@ -3,8 +3,7 @@ module Name = Package_name module Opam_package = struct type t = - { name : Package_name.t - ; dir : Path.Source.t + { id : Package_id.t ; opam_file : Path.Source.t ; loc : Loc.t ; synopsis : string option @@ -31,9 +30,9 @@ module Opam_package = struct ~tags = (* TODO fix *) + let id = Package_id.create ~name ~dir in let opam_file = dir in - { name - ; dir + { id ; opam_file ; loc ; synopsis @@ -48,6 +47,10 @@ module Opam_package = struct ;; let to_dyn _t = Dyn.string "TODO" + + let depends t = t.depends + let depopts t = t.depopts + let conflicts t = t.conflicts end type t = @@ -59,7 +62,7 @@ let of_opam_package pkg = Opam_package pkg let name = function | Dune_package t -> Dune_package.name t - | Opam_package t -> t.name + | Opam_package t -> Package_id.name t.id ;; let info = function @@ -99,7 +102,7 @@ let loc = function let dir = function | Dune_package t -> Dune_package.dir t - | Opam_package t -> t.dir + | Opam_package t -> Package_id.dir t.id ;; let synopsis = function @@ -126,3 +129,20 @@ let set_version_and_info t ~version ~info = match t with | Dune_package t -> Dune_package (Dune_package.set_version_and_info t ~version ~info) | Opam_package t -> Opam_package { t with version; info } +;; + +let id = function + | Dune_package t -> Dune_package.id t + | Opam_package t -> t.id +;; + +let allow_empty = function + | Dune_package t -> Dune_package.allow_empty t + | Opam_package _ -> false +;; + +let opam_package = function + | Dune_package _ -> None + | Opam_package t -> Some t + +(* let depends v *) diff --git a/src/dune_lang/package.mli b/src/dune_lang/package.mli index 518db50b32f..cb498737fd0 100644 --- a/src/dune_lang/package.mli +++ b/src/dune_lang/package.mli @@ -24,6 +24,10 @@ module Opam_package : sig -> description:string option -> tags:string list -> t + + val depends : t -> OpamTypes.filtered_formula + val depopts : t -> Package_dependency.t list + val conflicts : t -> Package_dependency.t list end val of_dune_package : Dune_package.t -> t @@ -40,5 +44,14 @@ val dir : t -> Path.Source.t val synopsis : t -> string option val description : t -> string option val dune_package : t -> Dune_package.t option +val opam_package : t -> Opam_package.t option val to_dyn : t -> Dyn.t -val set_version_and_info : t -> version:Package_version.t option -> info:Package_info.t -> t + +val set_version_and_info + : t + -> version:Package_version.t option + -> info:Package_info.t + -> t + +val id : t -> Package_id.t +val allow_empty : t -> bool diff --git a/src/dune_lang/package_id.ml b/src/dune_lang/package_id.ml new file mode 100644 index 00000000000..ed228731e81 --- /dev/null +++ b/src/dune_lang/package_id.ml @@ -0,0 +1,30 @@ +open Stdune +module Name = Package_name + +module T = struct + type t = + { name : Name.t + ; dir : Path.Source.t + } + + let compare { name; dir } pkg = + match Name.compare name pkg.name with + | Eq -> Path.Source.compare dir pkg.dir + | e -> e + ;; + + let to_dyn { dir; name } = + Dyn.record [ "name", Name.to_dyn name; "dir", Path.Source.to_dyn dir ] + ;; +end + +include T + +let hash { name; dir } = Tuple.T2.hash Name.hash Path.Source.hash (name, dir) +let name t = t.name +let dir t = t.dir +let create ~name ~dir = { name; dir } + +module C = Comparable.Make (T) +module Set = C.Set +module Map = C.Map diff --git a/src/dune_lang/package_id.mli b/src/dune_lang/package_id.mli new file mode 100644 index 00000000000..7a27a49a06b --- /dev/null +++ b/src/dune_lang/package_id.mli @@ -0,0 +1,12 @@ +open Stdune + +type t + +val name : t -> Package_name.t +val dir : t -> Path.Source.t +val create : name:Package_name.t -> dir:Path.Source.t -> t +val hash : t -> int + +include Comparable_intf.S with type key := t + +val to_dyn : t -> Dyn.t diff --git a/src/dune_pkg/local_package.ml b/src/dune_pkg/local_package.ml index c7d92c9727a..a3525a00a24 100644 --- a/src/dune_pkg/local_package.ml +++ b/src/dune_pkg/local_package.ml @@ -139,75 +139,66 @@ let of_package (t : Dune_lang.Package.t) = let loc = Package.loc t in let version = Package.version t in let name = Package.name t in - (* let hof = match Package.has_opam_file t with *) - (* | Generated -> "Generated" *) - (* | Exists true -> "Exists" *) - (* | Exists false -> "Doesnot exist" *) - (* in *) Printf.eprintf "Attempting to load of_package: %s\n" (Package.Name.to_string name); - (* match Package.depends t with *) - (* | [] -> *) - (* match Loaded_package.has_opam_file with *) - (* | Missing -> [] *) - (* | Generated -> [] *) - (* | Exists path -> (1* load & parse *1) *) - (* | _ -> *) - (* (1* depends are in dune project *1) *) - match Package.original_opam_file t with - | None -> + match (Package.dune_package t, Package.opam_package t) with + | None, None -> assert false + | Some _, Some _ -> assert false + | Some t, None -> Printf.eprintf "No original opam file\n"; - let dependencies = t |> Package.depends |> Dependency_formula.of_dependencies in + let dependencies = t |> Dune_lang.Dune_package.depends |> Dependency_formula.of_dependencies in { name ; version ; dependencies - ; conflicts = Package.conflicts t - ; depopts = Package.depopts t + ; conflicts = Dune_lang.Dune_package.conflicts t + ; depopts = Dune_lang.Dune_package.depopts t ; loc ; conflict_class = [] ; pins = Package_name.Map.empty ; command_source = Assume_defaults } - | Some { file; contents = opam_file_string } -> + | None, Some o -> Printf.eprintf "Yes original opam file\n"; - let opam_file = - Opam_file.read_from_string_exn ~contents:opam_file_string (Path.source file) - in let command_source = - Opam_file - { build = opam_file |> OpamFile.OPAM.build - ; install = opam_file |> OpamFile.OPAM.install - } + (* Opam_file *) + (* { build = opam_file |> OpamFile.OPAM.build *) + (* ; install = opam_file |> OpamFile.OPAM.install *) + (* } *) + Assume_defaults in let dependencies = - opam_file |> OpamFile.OPAM.depends |> Dependency_formula.of_filtered_formula + o |> Dune_lang.Package.Opam_package.depends |> Dependency_formula.of_filtered_formula in let conflicts = - OpamFile.OPAM.conflicts opam_file |> Package_dependency.list_of_opam_disjunction loc + (* OpamFile.OPAM.conflicts opam_file |> Package_dependency.list_of_opam_disjunction loc *) + [] in let depopts = - OpamFile.OPAM.depopts opam_file |> Package_dependency.list_of_opam_disjunction loc + (* OpamFile.OPAM.depopts opam_file |> Package_dependency.list_of_opam_disjunction loc *) + [] in let conflict_class = - OpamFile.OPAM.conflict_class opam_file - |> List.map ~f:Package_name.of_opam_package_name + (* OpamFile.OPAM.conflict_class opam_file *) + (* |> List.map ~f:Package_name.of_opam_package_name *) + [] in let pins = - match - OpamFile.OPAM.pin_depends opam_file - |> List.map ~f:(fun (pkg, url) -> - let name = Package_name.of_opam_package_name (OpamPackage.name pkg) in - let version = - Package_version.of_opam_package_version (OpamPackage.version pkg) - in - let loc = Loc.in_file (Path.source file) in - name, { loc; version; url = loc, url; name; origin = `Opam }) - |> Package_name.Map.of_list - with - | Ok x -> x - | Error (_, pkg, _) -> - User_error.raise - ~loc:pkg.loc - [ Pp.textf "package %s is already pinned" (Package_name.to_string pkg.name) ] + (* match *) + (* OpamFile.OPAM.pin_depends opam_file *) + (* |> List.map ~f:(fun (pkg, url) -> *) + (* let name = Package_name.of_opam_package_name (OpamPackage.name pkg) in *) + (* let version = *) + (* Package_version.of_opam_package_version (OpamPackage.version pkg) *) + (* in *) + (* let loc = Loc.in_file (Path.source file) in *) + (* name, { loc; version; url = loc, url; name; origin = `Opam }) *) + (* |> Package_name.Map.of_list *) + (* with *) + (* | Ok x -> x *) + (* | Error (_, pkg, _) -> *) + (* User_error.raise *) + (* ~loc:pkg.loc *) + (* [ Pp.textf "package %s is already pinned" (Package_name.to_string pkg.name) ] *) + Package_name.Map.empty in { name ; version diff --git a/src/dune_rules/dune_project.ml b/src/dune_rules/dune_project.ml index a14324bedc7..5a6177cafcb 100644 --- a/src/dune_rules/dune_project.ml +++ b/src/dune_rules/dune_project.ml @@ -643,7 +643,7 @@ let filter_packages t ~f = let including_hidden_packages t = t.including_hidden_packages let make_packages - ~opam_packages + ~(opam_packages : (Loc.t * Package.Opam_package.t Memo.t) Package.Name.Set.map) ~dir ~generate_opam_files:_ ~opam_file_location @@ -686,18 +686,25 @@ let make_packages in let deprecated_package_names = List.fold_left packages ~init:Package.Name.Map.empty ~f:(fun acc package -> - let deprecated_package_names = Dune_lang.Dune_package.deprecated_package_names package in + let deprecated_package_names = + Dune_lang.Dune_package.deprecated_package_names package + in Package.Name.Map.union acc deprecated_package_names ~f:package_defined_twice) in List.iter packages ~f:(fun p -> let name = Dune_lang.Dune_package.name p in Package.Name.Map.find deprecated_package_names name - |> Option.iter ~f:(fun loc -> package_defined_twice name loc (Dune_lang.Dune_package.loc p)))); - match Package.Name.Map.of_list_map packages ~f:(fun p -> Dune_lang.Dune_package.name p, p) with + |> Option.iter ~f:(fun loc -> + package_defined_twice name loc (Dune_lang.Dune_package.loc p)))); + match + Package.Name.Map.of_list_map packages ~f:(fun p -> Dune_lang.Dune_package.name p, p) + with | Error (_, _, p) -> User_error.raise ~loc:(Dune_lang.Dune_package.loc p) - [ Pp.textf "package %s is already defined" (Dune_lang.Dune_package.name p |> Package.Name.to_string) + [ Pp.textf + "package %s is already defined" + (Dune_lang.Dune_package.name p |> Package.Name.to_string) ] | Ok packages -> let generated_opam_file = @@ -709,11 +716,11 @@ let make_packages (match opam_file_location with | `Inside_opam_directory -> Package.Name.Map.map packages ~f:(fun p -> - let dir = Path.Source.relative dir "opam" in - (* TODO move `dir` out out Dune_package, it doesn't make much sense there *) - let p = Dune_lang.Dune_package.set_inside_opam_dir p ~dir in - let p = Dune_lang.Package.of_dune_package p in - generated_opam_file p) + let dir = Path.Source.relative dir "opam" in + (* TODO move `dir` out out Dune_package, it doesn't make much sense there *) + let p = Dune_lang.Dune_package.set_inside_opam_dir p ~dir in + let p = Dune_lang.Package.of_dune_package p in + generated_opam_file p) | `Relative_to_project -> Package.Name.Map.merge packages opam_packages ~f:(fun _name dune opam -> match dune, opam with @@ -741,7 +748,7 @@ let parse_packages (packages : Dune_lang.Dune_package.t list) opam_file_location ~generate_opam_files - opam_packages + (opam_packages : (Loc.t * Package.Opam_package.t Memo.t) Package.Name.Set.map) = forbid_opam_files_relative_to_project opam_file_location opam_packages; let open Memo.O in @@ -750,7 +757,7 @@ let parse_packages Package.Name.Map.to_list opam_packages |> Memo.parallel_map ~f:(fun (name, (_loc, pkg)) -> let+ pkg = pkg in - name, pkg) + name, Package.of_opam_package pkg) |> Memo.map ~f:Package.Name.Map.of_list_exn else Memo.return @@ -1007,7 +1014,9 @@ let gen_load ~read ~dir ~files ~infer_from_opam_files : t option Memo.t = then let+ opam_packages = let module Memo_package_name = Memo.Make_parallel_map (Package.Name.Map) in - Memo_package_name.parallel_map opam_packages ~f:(fun _ (_loc, pkg) -> pkg) + Memo_package_name.parallel_map opam_packages ~f:(fun _ (_loc, pkg) -> + let+ pkg = pkg in + Package.of_opam_package pkg) in Some (infer Package_info.empty ~dir opam_packages) else Memo.return None diff --git a/src/dune_rules/import.ml b/src/dune_rules/import.ml index 78bb8da1313..9d1536055a2 100644 --- a/src/dune_rules/import.ml +++ b/src/dune_rules/import.ml @@ -102,6 +102,7 @@ include struct module Dune_project_name = Dune_project_name module Package = Package module Dialect = Dialect + module Package_id = Package_id end include Dune_engine.No_io diff --git a/src/dune_rules/install_rules.ml b/src/dune_rules/install_rules.ml index 9f14ff7f4e2..7ecec8f8420 100644 --- a/src/dune_rules/install_rules.ml +++ b/src/dune_rules/install_rules.ml @@ -1027,14 +1027,14 @@ let packages = >>| List.map ~f:(fun (e : Install.Entry.Sourced.t) -> e.entry.src, Package.id pkg)) in List.rev_concat l - |> Path.Build.Map.of_list_fold ~init:Package.Id.Set.empty ~f:Package.Id.Set.add + |> Path.Build.Map.of_list_fold ~init:Package_id.Set.empty ~f:Package_id.Set.add in let memo = Memo.create "package-map" f ~input:(module Super_context.As_memo_key) - ~cutoff:(Path.Build.Map.equal ~equal:Package.Id.Set.equal) + ~cutoff:(Path.Build.Map.equal ~equal:Package_id.Set.equal) in fun sctx -> Memo.exec memo sctx ;; @@ -1046,11 +1046,11 @@ let packages_file_is_part_of path = Context_name.of_string_opt ctx_name) ~f:Super_context.find >>= function - | None -> Memo.return Package.Id.Set.empty + | None -> Memo.return Package_id.Set.empty | Some sctx -> let open Memo.O in let+ map = packages sctx in - Option.value (Path.Build.Map.find map path) ~default:Package.Id.Set.empty + Option.value (Path.Build.Map.find map path) ~default:Package_id.Set.empty ;; let symlinked_entries sctx package = @@ -1082,16 +1082,16 @@ let symlinked_entries = let package_deps (pkg : Package.t) files = let rec loop rules_seen (fn : Path.Build.t) = let* pkgs = packages_file_is_part_of fn in - if Package.Id.Set.is_empty pkgs || Package.Id.Set.mem pkgs (Package.id pkg) + if Package_id.Set.is_empty pkgs || Package_id.Set.mem pkgs (Package.id pkg) then loop_deps rules_seen fn else Memo.return (pkgs, rules_seen) and loop_deps rules_seen fn = Load_rules.get_rule (Path.build fn) >>= function - | None -> Memo.return (Package.Id.Set.empty, rules_seen) + | None -> Memo.return (Package_id.Set.empty, rules_seen) | Some rule -> if Rule.Set.mem rules_seen rule - then Memo.return (Package.Id.Set.empty, rules_seen) + then Memo.return (Package_id.Set.empty, rules_seen) else ( let rules_seen = Rule.Set.add rules_seen rule in let* res = Dune_engine.Build_system.execute_rule rule in @@ -1105,11 +1105,11 @@ let package_deps (pkg : Package.t) files = List.filter_map ~f:Path.as_in_build_dir)) and loop_files rules_seen files = Memo.List.fold_left - ~init:(Package.Id.Set.empty, rules_seen) + ~init:(Package_id.Set.empty, rules_seen) files ~f:(fun (sets, rules_seen) file -> let+ set, rules_seen = loop rules_seen file in - Package.Id.Set.union set sets, rules_seen) + Package_id.Set.union set sets, rules_seen) in let+ packages, _rules_seen = loop_files Rule.Set.empty files in packages @@ -1215,13 +1215,16 @@ let gen_package_install_file_rules sctx (package : Package.t) = | true -> let missing_deps = let effective_deps = - Package.Id.Set.to_list packages - |> Package.Name.Set.of_list_map ~f:Package.Id.name + Package_id.Set.to_list packages + |> Package.Name.Set.of_list_map ~f:Package_id.name in let specified_deps = - Package.depends package - |> Package.Name.Set.of_list_map ~f:(fun (dep : Package_dependency.t) -> - dep.name) + match Package.dune_package package with + | Some package -> + Dune_lang.Dune_package.depends package + |> Package.Name.Set.of_list_map ~f:(fun (dep : Package_dependency.t) -> + dep.name) + | None -> effective_deps in Package.Name.Set.diff effective_deps specified_deps in @@ -1253,10 +1256,10 @@ let gen_package_install_file_rules sctx (package : Package.t) = (let+ packages = packages and+ () = install_file_deps in ( () - , Package.Id.Set.to_list packages - |> Dep.Set.of_list_map ~f:(fun (pkg : Package.Id.t) -> + , Package_id.Set.to_list packages + |> Dep.Set.of_list_map ~f:(fun (pkg : Package_id.t) -> let pkg = - let name = Package.Id.name pkg in + let name = Package_id.name pkg in Package.Name.Map.find_exn all_packages name in Dep_conf_eval.package_install ~context:build_context ~pkg |> Dep.alias) ))) @@ -1273,7 +1276,7 @@ let gen_package_install_file_rules sctx (package : Package.t) = let+ () = install_file_deps and+ () = if strict_package_deps - then Action_builder.map packages ~f:(fun (_ : Package.Id.Set.t) -> ()) + then Action_builder.map packages ~f:(fun (_ : Package_id.Set.t) -> ()) else Action_builder.return () and+ entries = let+ entries = entries in From 79f62a25e4f4425fa7cb754ac7b149fc10837ff1 Mon Sep 17 00:00:00 2001 From: Marek Kubica Date: Fri, 21 Mar 2025 16:37:29 +0100 Subject: [PATCH 5/5] WIP Remove debug prints --- src/dune_lang/dune_package.ml | 1 - src/dune_lang/package.ml | 1 - src/dune_pkg/local_package.ml | 6 +++--- src/dune_rules/dune_project.ml | 8 ++++---- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/dune_lang/dune_package.ml b/src/dune_lang/dune_package.ml index f6c038c1be9..1080ac2f614 100644 --- a/src/dune_lang/dune_package.ml +++ b/src/dune_lang/dune_package.ml @@ -149,7 +149,6 @@ let decode = let allow_empty = lang_version < (3, 0) || allow_empty in let id = Package_id.create ~name ~dir in let opam_file = Name.file (Package_id.name id) ~dir:(Package_id.dir id) in - Printf.eprintf "Sets to Exists false\n"; { id ; loc ; synopsis diff --git a/src/dune_lang/package.ml b/src/dune_lang/package.ml index e175e82ad7e..bfc7074d1e5 100644 --- a/src/dune_lang/package.ml +++ b/src/dune_lang/package.ml @@ -29,7 +29,6 @@ module Opam_package = struct ~description ~tags = - (* TODO fix *) let id = Package_id.create ~name ~dir in let opam_file = dir in { id diff --git a/src/dune_pkg/local_package.ml b/src/dune_pkg/local_package.ml index a3525a00a24..c800258d704 100644 --- a/src/dune_pkg/local_package.ml +++ b/src/dune_pkg/local_package.ml @@ -139,12 +139,12 @@ let of_package (t : Dune_lang.Package.t) = let loc = Package.loc t in let version = Package.version t in let name = Package.name t in - Printf.eprintf "Attempting to load of_package: %s\n" (Package.Name.to_string name); + (* Printf.eprintf "Attempting to load of_package: %s\n" (Package.Name.to_string name); *) match (Package.dune_package t, Package.opam_package t) with | None, None -> assert false | Some _, Some _ -> assert false | Some t, None -> - Printf.eprintf "No original opam file\n"; + (* Printf.eprintf "No original opam file\n"; *) let dependencies = t |> Dune_lang.Dune_package.depends |> Dependency_formula.of_dependencies in { name ; version @@ -157,7 +157,7 @@ let of_package (t : Dune_lang.Package.t) = ; command_source = Assume_defaults } | None, Some o -> - Printf.eprintf "Yes original opam file\n"; + (* Printf.eprintf "Yes original opam file\n"; *) let command_source = (* Opam_file *) (* { build = opam_file |> OpamFile.OPAM.build *) diff --git a/src/dune_rules/dune_project.ml b/src/dune_rules/dune_project.ml index 5a6177cafcb..c2fda544434 100644 --- a/src/dune_rules/dune_project.ml +++ b/src/dune_rules/dune_project.ml @@ -983,7 +983,7 @@ let load_dune_project ~read ~dir opam_packages : t Memo.t = parse_contents lexbuf ~f:(fun lang -> - Printf.eprintf "Parsing again with lang\n"; + (* Printf.eprintf "Parsing again with lang\n"; *) parse ~dir ~lang ~file) opam_packages ;; @@ -992,13 +992,13 @@ let gen_load ~read ~dir ~files ~infer_from_opam_files : t option Memo.t = let open Memo.O in let opam_packages = Filename.Set.fold files ~init:[] ~f:(fun fn acc -> - Printf.eprintf "Folding over %s\n" fn; + (* Printf.eprintf "Folding over %s\n" fn; *) match Package.Name.of_opam_file_basename fn with | None -> - Printf.eprintf "No, it wasn't loaded\n"; + (* Printf.eprintf "No, it wasn't loaded\n"; *) acc | Some name -> - Printf.eprintf "loaded %s\n" (Dune_lang.Package_name.to_string name); + (* Printf.eprintf "loaded %s\n" (Dune_lang.Package_name.to_string name); *) let opam_file = Path.Source.relative dir fn in let loc = Loc.in_file (Path.source opam_file) in let pkg =