diff --git a/src/dune_pkg/opam_solver.ml b/src/dune_pkg/opam_solver.ml index 5e1af660873..f0e2c62eb2a 100644 --- a/src/dune_pkg/opam_solver.ml +++ b/src/dune_pkg/opam_solver.ml @@ -384,23 +384,27 @@ let simplify_filter solver_env = | _ -> None) ;; -let filter_needed = function - | None -> true - | Some f -> OpamFilter.eval_to_bool ~default:true (Fun.const None) f +let partial_eval_filter = function + | None -> `Filter None + | Some f -> + let env = Fun.const None in + (match OpamFilter.eval_to_bool env f with + | exception Failure _ -> `Filter (Some f) + | b -> if b then `Filter None else `Skip) ;; let opam_commands_to_actions solver_env loc package (commands : OpamTypes.command list) = List.filter_map commands ~f:(fun (args, filter) -> let filter = Option.map filter ~f:(simplify_filter solver_env) in - match filter_needed filter with - | false -> None - | true -> + match partial_eval_filter filter with + | `Skip -> None + | `Filter filter -> let terms = List.filter_map args ~f:(fun (simple_arg, filter) -> let filter = Option.map filter ~f:(simplify_filter solver_env) in - match filter_needed filter with - | false -> None - | true -> + match partial_eval_filter filter with + | `Skip -> None + | `Filter filter -> let slang = let slang = match simple_arg with diff --git a/test/blackbox-tests/test-cases/pkg/convert-opam-commands.t b/test/blackbox-tests/test-cases/pkg/convert-opam-commands.t index 52f59b44930..52af047f1b2 100644 --- a/test/blackbox-tests/test-cases/pkg/convert-opam-commands.t +++ b/test/blackbox-tests/test-cases/pkg/convert-opam-commands.t @@ -179,12 +179,8 @@ Package which has boolean where string was expected. This should be caught while (when (< %{pkg-self:version} 1.0) (run echo g)) - (when - true - (run echo i)) - (when - true - (run echo j)) + (run echo i) + (run echo j) (when %{pkg:foo:installed} (run echo k))