summaryrefslogtreecommitdiffstats
path: root/generator/generator_pr.ml
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-09-11 09:25:12 +0100
committerRichard Jones <rjones@redhat.com>2010-09-11 12:04:44 +0100
commit04d8209077d2227eb1d42695ba71147f78987050 (patch)
treea2ed4a062f70fe258d0fd9b60020c24f6dc7459c /generator/generator_pr.ml
parent264629b9f0ace1062b453b2d0ae55e48385189d3 (diff)
downloadlibguestfs-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.ml56
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