let parse_solver_spec filename =
let (exec, version) = (ref "", ref "") in
begin try
let ic = open_in filename in
while true do
let l = input_line ic in
if String.starts_with l "exec: " then
exec := String.strip (snd (String.split l " "))
else if String.starts_with l "cudf-version: " then
Scanf.sscanf l "cudf-version: %s " (fun s -> version := s);
done;
close_in ic
with
| Sys_error _ -> print_error "cannot parse CUDF solver specification %s" filename
| End_of_file -> ()
| Scanf.Scan_failure err ->
print_error "parse error while reading CUDF solver specification %s: %s"
filename err
end;
if !exec = "" || !version = "" then
print_error "incomplete CUDF solver specification %s" filename;
if not (String.exists !exec "$in" && String.exists !exec "$out"
&& String.exists !exec "$pref") then
print_error
"Incomplete solver specification %s: one or more of $in, $out, $pref is missing in exec line"
filename;
(!exec,!version)