generator: Don't use real uuidgen for UUIDs.
authorRichard Jones <rjones@redhat.com>
Sat, 11 Sep 2010 11:05:03 +0000 (12:05 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 23 Oct 2010 14:51:50 +0000 (15:51 +0100)
This was one reason why capitests/tests.c changed every time the
generator was run.

Cherry picked from commit 451a28349b11fe08cb3f7ca84e58b6e69646707b.

src/generator.ml

index 14e06af..f2cec28 100755 (executable)
@@ -361,18 +361,23 @@ and cmd = string list
  * Apart from that, long descriptions are just perldoc paragraphs.
  *)
 
-(* Generate a random UUID (used in tests). *)
+(* Generate a uuidgen-compatible UUID (used in tests).  However to
+ * avoid having the UUID change every time we rebuild the tests,
+ * generate it as a function of the contents of the
+ * generator.ml file.
+ * 
+ * Originally I thought uuidgen was using RFC 4122, but it doesn't
+ * appear to.
+ *
+ * Note that the format must be 01234567-0123-0123-0123-0123456789ab
+ *)
 let uuidgen () =
-  let chan = open_process_in "uuidgen" in
-  let uuid = input_line chan in
-  (match close_process_in chan with
-   | WEXITED 0 -> ()
-   | WEXITED _ ->
-       failwith "uuidgen: process exited with non-zero status"
-   | WSIGNALED _ | WSTOPPED _ ->
-       failwith "uuidgen: process signalled or stopped by signal"
-  );
-  uuid
+  let s = Digest.to_hex (Digest.file "src/generator.ml") in
+  String.sub s 0 8 ^ "-"
+  ^ String.sub s 8 4 ^ "-"
+  ^ String.sub s 12 4 ^ "-"
+  ^ String.sub s 16 4 ^ "-"
+  ^ String.sub s 20 12
 
 (* These test functions are used in the language binding tests. *)