From 71ad7e39ef46912e6175436ad866124583f64f70 Mon Sep 17 00:00:00 2001 From: Julien Blond Date: Thu, 1 Jun 2023 09:27:34 +0200 Subject: [PATCH 1/2] Fixed dune lang handling --- src/drom_lib/project.ml | 4 ++-- src/drom_lib/subst.ml | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/drom_lib/project.ml b/src/drom_lib/project.ml index 267744f4..bbfed5af 100644 --- a/src/drom_lib/project.ml +++ b/src/drom_lib/project.ml @@ -588,7 +588,7 @@ let project_of_toml ?file ?default table = p.name ) packages; (* Legacy dune lang version specification *) - let legacy_dune_lang = StringMap.find_opt "dune" p_fields in + let legacy_dune_lang = StringMap.find_opt "dune-lang" p_fields in (* Checking that dune is not in project's dependencies, which has no more meaning than in packages *) if find dependencies then @@ -596,7 +596,7 @@ let project_of_toml ?file ?default table = "Project has a dune dependency which has no meaning. Please remove it \ or move it in [tools]."; (* The valid way of overriding dune version. *) - let dune_tool_spec = List.assoc_opt "dune" dependencies in + let dune_tool_spec = List.assoc_opt "dune" tools in (* Normalizing *) let versions = match (legacy_dune_lang, dune_tool_spec) with diff --git a/src/drom_lib/subst.ml b/src/drom_lib/subst.ml index 35fd730d..b02294f9 100644 --- a/src/drom_lib/subst.ml +++ b/src/drom_lib/subst.ml @@ -268,8 +268,14 @@ let project_brace ({ p; _ } as state ) v = end ) (* for dune *) | "dune-version" -> p.dune_version - | "dune-lang" -> - String.sub p.dune_version 0 (String.rindex p.dune_version '.') + | "dune-lang" -> + (* just parsing basic semver for now. *) + begin + try + Scanf.sscanf p.dune_version "%i.%i" + (fun major minor -> Printf.sprintf "%i.%i" major minor) + with _ -> raise (Failure ("Cannot parse dune-version: " ^ p.dune_version)) + end | "dune-cram" -> if VersionCompare.compare p.dune_version "2.7.0" >= 0 then "(cram enable)" From 9fd69968035240e2604d364755c755790ba82f70 Mon Sep 17 00:00:00 2001 From: Fabrice Le Fessant Date: Wed, 5 Jun 2024 13:26:46 +0200 Subject: [PATCH 2/2] Check drom version before modifying behavior of dune fields --- src/drom_lib/project.ml | 16 ++++++++++------ src/drom_lib/subst.ml | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/drom_lib/project.ml b/src/drom_lib/project.ml index bbfed5af..c671017f 100644 --- a/src/drom_lib/project.ml +++ b/src/drom_lib/project.ml @@ -568,19 +568,21 @@ let project_of_toml ?file ?default table = If no dune version is specified, drom uses the {!Globals.current_dune_version}. *) + + let after_0_9_2 = VersionCompare.compare project_drom_version "0.9.2" >= 0 in + let dune_version = - let find = List.mem_assoc "dune" in (* No dune dependencies in packages tools or dependencies. *) List.iter (fun (p : package) -> - if find p.p_dependencies then + if List.mem_assoc "dune" p.p_dependencies then (* dune is in [p] dependencies which is silly: dune is a tool, not a library. *) Error.raise "Package %s has a dune dependency which has no meaning. Please \ remove it" p.name; - if find p.p_tools then + if List.mem_assoc "dune" p.p_tools then (* dune is in [p] tools which is bad project engineering design. *) Error.raise "Package %s gives dune as a tool dependency. Such dependency \ @@ -588,15 +590,17 @@ let project_of_toml ?file ?default table = p.name ) packages; (* Legacy dune lang version specification *) - let legacy_dune_lang = StringMap.find_opt "dune-lang" p_fields in + let legacy_dune_lang = StringMap.find_opt + (if after_0_9_2 then "dune-lang" else "dune") p_fields in (* Checking that dune is not in project's dependencies, which has no more meaning than in packages *) - if find dependencies then + if List.mem_assoc "dune" dependencies then Error.raise "Project has a dune dependency which has no meaning. Please remove it \ or move it in [tools]."; (* The valid way of overriding dune version. *) - let dune_tool_spec = List.assoc_opt "dune" tools in + let dune_tool_spec = List.assoc_opt "dune" + (if after_0_9_2 then tools else dependencies) in (* Normalizing *) let versions = match (legacy_dune_lang, dune_tool_spec) with diff --git a/src/drom_lib/subst.ml b/src/drom_lib/subst.ml index b02294f9..23c76f31 100644 --- a/src/drom_lib/subst.ml +++ b/src/drom_lib/subst.ml @@ -268,14 +268,16 @@ let project_brace ({ p; _ } as state ) v = end ) (* for dune *) | "dune-version" -> p.dune_version - | "dune-lang" -> - (* just parsing basic semver for now. *) - begin - try - Scanf.sscanf p.dune_version "%i.%i" - (fun major minor -> Printf.sprintf "%i.%i" major minor) - with _ -> raise (Failure ("Cannot parse dune-version: " ^ p.dune_version)) - end + | "dune-lang" -> + if VersionCompare.compare state.share.drom_version "0.9.2" >= 0 then + (* just parsing basic semver for now. *) + try + Scanf.sscanf p.dune_version "%i.%i" + (fun major minor -> Printf.sprintf "%i.%i" major minor) + with _ -> + raise (Failure ("Cannot parse dune-version: " ^ p.dune_version)) + else + String.sub p.dune_version 0 (String.rindex p.dune_version '.') | "dune-cram" -> if VersionCompare.compare p.dune_version "2.7.0" >= 0 then "(cram enable)"