diff options
author | Richard Jones <rjones@redhat.com> | 2010-09-11 09:25:12 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2010-09-11 12:04:44 +0100 |
commit | 04d8209077d2227eb1d42695ba71147f78987050 (patch) | |
tree | a2ed4a062f70fe258d0fd9b60020c24f6dc7459c /generator/generator_pr.ml | |
parent | 264629b9f0ace1062b453b2d0ae55e48385189d3 (diff) | |
download | libguestfs-04d8209077d2227eb1d42695ba71147f78987050.tar.gz libguestfs-04d8209077d2227eb1d42695ba71147f78987050.tar.xz libguestfs-04d8209077d2227eb1d42695ba71147f78987050.zip |
Split generator into separate source files.
'src/generator.ml' is no more. Instead the generator is logically
split up over many different source files.
Read generator/README for help and tips.
We compile the generator down to bytecode, not native code. This
means it will run more slowly, but is done for maximum portability.
Diffstat (limited to 'generator/generator_pr.ml')
-rw-r--r-- | generator/generator_pr.ml | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/generator/generator_pr.ml b/generator/generator_pr.ml new file mode 100644 index 00000000..eef565e0 --- /dev/null +++ b/generator/generator_pr.ml @@ -0,0 +1,56 @@ +(* libguestfs + * Copyright (C) 2009-2010 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + *) + +(* Please read generator/README first. *) + +open Unix +open Printf + +open Generator_utils + +(* 'pr' prints to the current output file. *) +let chan = ref Pervasives.stdout +let lines = ref 0 +let pr fs = + ksprintf + (fun str -> + let i = count_chars '\n' str in + lines := !lines + i; + output_string !chan str + ) fs + +let output_to filename k = + let filename_new = filename ^ ".new" in + chan := open_out filename_new; + k (); + close_out !chan; + chan := Pervasives.stdout; + + (* Is the new file different from the current file? *) + if Sys.file_exists filename && files_equal filename filename_new then + unlink filename_new (* same, so skip it *) + else ( + (* different, overwrite old one *) + (try chmod filename 0o644 with Unix_error _ -> ()); + rename filename_new filename; + chmod filename 0o444; + printf "written %s\n%!" filename; + ) + +let get_lines_generated () = + !lines |