let make
?(at:(('c->string) option)=None)
?(it:(('a->string) option)=None)
~(ot:(string->'b))
?(script=false)
(cmd:command)
?(opt="")
?(args:('c option)=None) ?(input:('a option)=None) () =
let cmd = if script then envelop cmd else cmd in
let perform_treat t x = match (t,x) with
| ((Some f), (Some x)) -> (f x)
| ( _ , None) -> ""
| ( None , (Some x)) -> failwith "Wrapper.make: argument provided without a treatment" in
let args = perform_treat at args in
let input = perform_treat it input in
(cmd^" "^opt^" "^args^"\n") => ((Unix.shell ~trace:false ~input) || ot )