--- a/src/os_release.ml +++ b/src/os_release.ml @@ -29,6 +29,7 @@ let split sep str = type os_release = { id : string; + id_like : string list; } let data = ref None @@ -52,6 +53,7 @@ and parse () = let lines = List.filter (fun s -> s.[0] <> '#') lines in let id = ref "" in + let id_like = ref [] in List.iter ( fun line -> @@ -65,10 +67,11 @@ and parse () = else value in match field with | "ID" -> id := value + | "ID_LIKE" -> id_like := string_split " " value | _ -> () ) lines; - Some { id = !id; } + Some { id = !id; id_like = !id_like } ) else None @@ -76,3 +79,8 @@ let get_id () = match get_data () with | None -> "" | Some d -> d.id + +let get_id_like () = + match get_data () with + | None -> [] + | Some d -> d.id_like --- a/src/os_release.mli +++ b/src/os_release.mli @@ -24,3 +24,10 @@ val get_id : unit -> string An empty string is returned if the file does not exist or cannot be read. *) + +val get_id_like : unit -> string list +(** Get the value of the "ID_LIKE" field from the /etc/os-release file + on the current system. + + An empty list is returned if the file does not exist, cannot + be read or the ID_LIKE field is not defined. *) --- a/src/ph_rpm.ml +++ b/src/ph_rpm.ml @@ -45,6 +45,7 @@ let opensuse_detect () = Config.zypper <> "no" && (List.mem (Os_release.get_id ()) [ "sled"; "sles" ] || string_prefix "opensuse" (Os_release.get_id ()) || + List.mem "suse" (Os_release.get_id_like ()) || try (stat "/etc/SuSE-release").st_kind = S_REG with Unix_error _ -> false) let mageia_detect () =