Sort the structs when generating code. Since the structs are logically indepedent of each other, this should have no effect except to make generated files list the structs in a different order. However this also fixes the following build problem: File "convert_linux.ml", line 322, characters 43-50: Error: This expression has type G.stat = Guestfs.stat but an expression was expected of type G.dirent = Guestfs.dirent It turns out the OCaml bindings don't like the fact that we have two structs with a common field name (dirent.ino and stat.ino). In OCaml < 4.01, this means that any attempt to reference stat.ino would fail because dirent.ino appears second in the file, overriding stat.ino. In OCaml >= 4.01 the compiler now uses some disambiguation rules based on the known types to resolve this problem. See: http://ocaml.org/releases/4.01.0.html http://www.lexifi.com/blog/type-based-selection-label-and-constructors http://www.lexifi.com/blog/ocaml-extensions-lexifi-overidding-record-labels-... --- generator/structs.ml | 8 ++++++-- gobject/Makefile.inc | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/generator/structs.ml b/generator/structs.ml index 1bc6e08..65c78b2 100644 --- a/generator/structs.ml +++ b/generator/structs.ml @@ -382,6 +382,10 @@ let camel_name_of_struct name = (lookup_struct name).s_camel_name let cols_of_struct name = (lookup_struct name).s_cols -let external_structs = List.filter (fun x -> not x.s_internal) structs +let compare_structs { s_name = n1 } { s_name = n2 } = compare n1 n2 -let internal_structs = List.filter (fun x -> x.s_internal) structs +let external_structs = + List.sort compare_structs (List.filter (fun x -> not x.s_internal) structs) + +let internal_structs = + List.sort compare_structs (List.filter (fun x -> x.s_internal) structs) diff --git a/gobject/Makefile.inc b/gobject/Makefile.inc index 3b567a2..ed1ff3b 100644 --- a/gobject/Makefile.inc +++ b/gobject/Makefile.inc @@ -23,26 +23,26 @@ guestfs_gobject_headers= \ include/guestfs-gobject.h \ include/guestfs-gobject/session.h \ include/guestfs-gobject/tristate.h \ + include/guestfs-gobject/struct-application.h \ + include/guestfs-gobject/struct-application2.h \ + include/guestfs-gobject/struct-btrfssubvolume.h \ + include/guestfs-gobject/struct-dirent.h \ + include/guestfs-gobject/struct-hivex_node.h \ + include/guestfs-gobject/struct-hivex_value.h \ + include/guestfs-gobject/struct-inotify_event.h \ include/guestfs-gobject/struct-int_bool.h \ + include/guestfs-gobject/struct-isoinfo.h \ + include/guestfs-gobject/struct-lvm_lv.h \ include/guestfs-gobject/struct-lvm_pv.h \ include/guestfs-gobject/struct-lvm_vg.h \ - include/guestfs-gobject/struct-lvm_lv.h \ + include/guestfs-gobject/struct-mdstat.h \ + include/guestfs-gobject/struct-partition.h \ include/guestfs-gobject/struct-stat.h \ include/guestfs-gobject/struct-statvfs.h \ - include/guestfs-gobject/struct-dirent.h \ + include/guestfs-gobject/struct-utsname.h \ include/guestfs-gobject/struct-version.h \ include/guestfs-gobject/struct-xattr.h \ - include/guestfs-gobject/struct-inotify_event.h \ - include/guestfs-gobject/struct-partition.h \ - include/guestfs-gobject/struct-application.h \ - include/guestfs-gobject/struct-application2.h \ - include/guestfs-gobject/struct-isoinfo.h \ - include/guestfs-gobject/struct-mdstat.h \ - include/guestfs-gobject/struct-btrfssubvolume.h \ include/guestfs-gobject/struct-xfsinfo.h \ - include/guestfs-gobject/struct-utsname.h \ - include/guestfs-gobject/struct-hivex_node.h \ - include/guestfs-gobject/struct-hivex_value.h \ include/guestfs-gobject/optargs-add_domain.h \ include/guestfs-gobject/optargs-add_drive.h \ include/guestfs-gobject/optargs-add_drive_scratch.h \ @@ -100,26 +100,26 @@ guestfs_gobject_headers= \ guestfs_gobject_sources= \ src/session.c \ src/tristate.c \ + src/struct-application.c \ + src/struct-application2.c \ + src/struct-btrfssubvolume.c \ + src/struct-dirent.c \ + src/struct-hivex_node.c \ + src/struct-hivex_value.c \ + src/struct-inotify_event.c \ src/struct-int_bool.c \ + src/struct-isoinfo.c \ + src/struct-lvm_lv.c \ src/struct-lvm_pv.c \ src/struct-lvm_vg.c \ - src/struct-lvm_lv.c \ + src/struct-mdstat.c \ + src/struct-partition.c \ src/struct-stat.c \ src/struct-statvfs.c \ - src/struct-dirent.c \ + src/struct-utsname.c \ src/struct-version.c \ src/struct-xattr.c \ - src/struct-inotify_event.c \ - src/struct-partition.c \ - src/struct-application.c \ - src/struct-application2.c \ - src/struct-isoinfo.c \ - src/struct-mdstat.c \ - src/struct-btrfssubvolume.c \ src/struct-xfsinfo.c \ - src/struct-utsname.c \ - src/struct-hivex_node.c \ - src/struct-hivex_value.c \ src/optargs-add_domain.c \ src/optargs-add_drive.c \ src/optargs-add_drive_scratch.c \ -- 1.9.0