let rec resource_has_changed r =
let cache_entry = get r in
match cache_entry.changed with
| Yes -> true
| No -> false
| Unknown ->
let res =
match cache_entry.built with
| Bbuilt -> false
| Bsuspension _ -> assert false
| Bcannot_be_built -> false
| Bnot_built_yet -> not (prod_is_up_to_date r) in
let () = cache_entry.changed <- if res then Yes else No in res