[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: dh_ocaml.ml [Was: Re: Deb scripts idempotency]



On Wed, Dec 26, 2001 at 07:17:14PM +0100, Stefano Zacchiroli wrote:
> Here you are: a small OCaml script that add or remove entries from

grrrrr ... I forget to attach the script.

Cheers.

-- 
Stefano "Zack" Zacchiroli <zack@cs.unibo.it> ICQ# 33538863
Home Page: http://www.cs.unibo.it/~zacchiro
Undergraduate student of Computer Science @ University of Bologna, Italy
                 - Information wants to be Open -
#!/usr/bin/ocamlrun /usr/bin/ocaml

(*
  Add or remove path entries to the standard path that ocaml use to find
  dynamic loadable extension. That path is kept in a path file, usually
  "/usr/lib/ocaml/ld.conf".

  Distributed freely under the term of the GNU General Public License.

  Author: Stefano "Zack" Zacchiroli <zack@debian.org>
  Wed Dec 26 19:21:20 CET 2001
*)

let pathfile = "/usr/lib/ocaml/ld.conf";;
let tmppathfile = pathfile ^ ".debian.tmp";;

type action = Add | Remove | NoAct;;
let path = ref "";;
let action = ref NoAct;;

let help_string = "
Usage: dh_ocaml.ml -a <path>
       dh_ocaml.ml -r <path>
"

let input_list inchan =
  let llist = ref [] in
  begin try
    while true do
      let line = input_line inchan in llist := line :: !llist
    done with End_of_file -> llist := List.rev !llist
  end;
  !llist;;
let output_list outchan = List.iter (fun s -> output_string outchan (s ^ "\n"));;

let addpath entry path = if List.mem entry path then path else path @ [entry];;
let removepath entry = List.filter (fun x -> x <> entry);;

let _ = Arg.parse
  [ "-a", Arg.String (fun s -> path := s; action := Add),
      "add given path to the dynamic loading standard path";
    "-r", Arg.String (fun s -> path := s; action := Remove),
      "remove the given path from the dynamic loading standard path" ]
  (fun _ -> print_endline help_string; exit 1)
  help_string;;

let (pfile, newpfile) = (open_in pathfile, open_out tmppathfile) in
let oldpath = input_list pfile in
let newpath = match !action with
  | Add -> addpath !path oldpath
  | Remove -> removepath !path oldpath
  | NoAct -> failwith "Huh? What I have to do? (try --help)"
in
output_list newpfile newpath;
close_in pfile;
close_out newpfile;
Sys.rename tmppathfile pathfile

Attachment: pgpByAlT0EJWu.pgp
Description: PGP signature


Reply to: