generator: List files generated in a separate file.
authorRichard W.M. Jones <rjones@redhat.com>
Sun, 12 Dec 2010 23:18:26 +0000 (23:18 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Sun, 12 Dec 2010 23:19:36 +0000 (23:19 +0000)
.gitignore
generator/Makefile.am
generator/generator_main.ml
generator/generator_pr.ml
generator/generator_pr.mli

index 4083a91..4887c31 100644 (file)
@@ -83,6 +83,7 @@ fuse/guestmount
 fuse/guestmount.1
 fuse/stamp-guestmount.pod
 generator/.pod2text.data*
+generator/files-generated.txt
 generator/generator
 generator/stamp-generator
 guestfish.1
index b9fcfb9..39688c1 100644 (file)
@@ -52,7 +52,7 @@ SOURCES = \
 SOURCES_ML = $(filter %.ml,$(SOURCES))
 OBJECTS = $(SOURCES_ML:.ml=.cmo)
 
-EXTRA_DIST = $(SOURCES)
+EXTRA_DIST = $(SOURCES) files-generated.txt
 
 OCAMLCFLAGS = -warn-error CDEFLMPSUVYZX
 OCAMLCLIBS = unix.cma str.cma
index bf1e8e0..4ef9ba5 100644 (file)
@@ -132,11 +132,15 @@ Run it from the top source directory using the command
   output_to "php/extension/php_guestfs_php.h" generate_php_h;
   output_to "php/extension/guestfs_php.c" generate_php_c;
 
+  (* Generate the list of files generated -- last. *)
+  printf "generated %d lines of code\n" (get_lines_generated ());
+  let files = List.sort compare (get_files_generated ()) in
+  output_to "generator/files-generated.txt"
+    (fun () -> List.iter (pr "%s\n") files);
+
   (* Always generate this file last, and unconditionally.  It's used
    * by the Makefile to know when we must re-run the generator.
    *)
   let chan = open_out "generator/stamp-generator" in
   fprintf chan "1\n";
-  close_out chan;
-
-  printf "generated %d lines of code\n" (get_lines_generated ())
+  close_out chan
index eef565e..221a8eb 100644 (file)
@@ -23,9 +23,18 @@ open Printf
 
 open Generator_utils
 
-(* 'pr' prints to the current output file. *)
+(* Output channel, 'pr' prints to this. *)
 let chan = ref Pervasives.stdout
+
+(* Number of lines generated. *)
 let lines = ref 0
+
+(* Name of each file generated. *)
+let files = ref []
+
+(* Print-to-current-output function, used everywhere.  It has
+ * printf-like semantics.
+ *)
 let pr fs =
   ksprintf
     (fun str ->
@@ -35,6 +44,8 @@ let pr fs =
     ) fs
 
 let output_to filename k =
+  files := filename :: !files;
+
   let filename_new = filename ^ ".new" in
   chan := open_out filename_new;
   k ();
@@ -54,3 +65,6 @@ let output_to filename k =
 
 let get_lines_generated () =
   !lines
+
+let get_files_generated () =
+  List.rev !files
index 2b09e06..f4d658e 100644 (file)
@@ -30,3 +30,6 @@ val output_to : string -> (unit -> unit) -> unit
 
 val get_lines_generated : unit -> int
 (** Return number of lines of code generated. *)
+
+val get_files_generated : unit -> string list
+(** Return names of the files that were generated. *)