diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES index 26b32da55..57c0b6084 100644 --- a/docs/C_SOURCE_FILES +++ b/docs/C_SOURCE_FILES @@ -335,6 +335,7 @@ mllib/progress-c.c mllib/statvfs-c.c mllib/uri-c.c mllib/visit-c.c +mllib/xml-c.c ocaml/guestfs-c-actions.c ocaml/guestfs-c-errnos.c ocaml/guestfs-c.c @@ -393,4 +394,3 @@ utils/qemu-boot/qemu-boot.c utils/qemu-speed-test/qemu-speed-test.c v2v/domainxml-c.c v2v/utils-c.c -v2v/xml-c.c diff --git a/mllib/Makefile.am b/mllib/Makefile.am index 78fdf0211..aa5472ade 100644 --- a/mllib/Makefile.am +++ b/mllib/Makefile.am @@ -28,6 +28,8 @@ EXTRA_DIST = \ test-getopt.sh SOURCES_MLI = \ + xml.mli \ + xpath_helpers.mli \ checksums.mli \ common_utils.mli \ curl.mli \ @@ -67,7 +69,9 @@ SOURCES_ML = \ JSON.ml \ curl.ml \ exit.ml \ - checksums.ml + checksums.ml \ + xml.ml \ + xpath_helpers.ml SOURCES_C = \ ../common/visit/visit.c \ @@ -85,7 +89,8 @@ SOURCES_C = \ progress-c.c \ statvfs-c.c \ uri-c.c \ - visit-c.c + visit-c.c \ + xml-c.c if HAVE_OCAML diff --git a/v2v/xml-c.c b/mllib/xml-c.c similarity index 90% rename from v2v/xml-c.c rename to mllib/xml-c.c index 0fcdbedec..d3e893076 100644 --- a/v2v/xml-c.c +++ b/mllib/xml-c.c @@ -1,5 +1,6 @@ -/* virt-v2v +/* Bindings for libxml2 * Copyright (C) 2009-2017 Red Hat Inc. + * Copyright (C) 2017 SUSE 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 @@ -52,7 +53,7 @@ static struct custom_operations docptr_custom_operations = { }; value -v2v_xml_free_docptr (value docv) +mllib_xml_free_docptr (value docv) { CAMLparam1 (docv); xmlDocPtr doc = docptr_val (docv); @@ -74,7 +75,7 @@ static struct custom_operations xpathctxptr_custom_operations = { }; value -v2v_xml_free_xpathctxptr (value xpathctxv) +mllib_xml_free_xpathctxptr (value xpathctxv) { CAMLparam1 (xpathctxv); xmlXPathContextPtr xpathctx = xpathctxptr_val (xpathctxv); @@ -96,7 +97,7 @@ static struct custom_operations xpathobjptr_custom_operations = { }; value -v2v_xml_free_xpathobjptr (value xpathobjv) +mllib_xml_free_xpathobjptr (value xpathobjv) { CAMLparam1 (xpathobjv); xmlXPathObjectPtr xpathobj = xpathobjptr_val (xpathobjv); @@ -106,7 +107,7 @@ v2v_xml_free_xpathobjptr (value xpathobjv) } value -v2v_xml_parse_memory (value xmlv) +mllib_xml_parse_memory (value xmlv) { CAMLparam1 (xmlv); CAMLlocal1 (docv); @@ -128,7 +129,7 @@ v2v_xml_parse_memory (value xmlv) } value -v2v_xml_copy_doc (value docv, value recursivev) +mllib_xml_copy_doc (value docv, value recursivev) { CAMLparam2 (docv, recursivev); CAMLlocal1 (copyv); @@ -147,7 +148,7 @@ v2v_xml_copy_doc (value docv, value recursivev) } value -v2v_xml_to_string (value docv, value formatv) +mllib_xml_to_string (value docv, value formatv) { CAMLparam2 (docv, formatv); CAMLlocal1 (strv); @@ -166,7 +167,7 @@ v2v_xml_to_string (value docv, value formatv) } value -v2v_xml_xpath_new_context (value docv) +mllib_xml_xpath_new_context (value docv) { CAMLparam1 (docv); CAMLlocal1 (xpathctxv); @@ -186,7 +187,7 @@ v2v_xml_xpath_new_context (value docv) } value -v2v_xml_xpathctxptr_register_ns (value xpathctxv, value prefix, value uri) +mllib_xml_xpathctxptr_register_ns (value xpathctxv, value prefix, value uri) { CAMLparam3 (xpathctxv, prefix, uri); xmlXPathContextPtr xpathctx; @@ -203,7 +204,7 @@ v2v_xml_xpathctxptr_register_ns (value xpathctxv, value prefix, value uri) } value -v2v_xml_xpathctxptr_eval_expression (value xpathctxv, value exprv) +mllib_xml_xpathctxptr_eval_expression (value xpathctxv, value exprv) { CAMLparam2 (xpathctxv, exprv); CAMLlocal1 (xpathobjv); @@ -223,7 +224,7 @@ v2v_xml_xpathctxptr_eval_expression (value xpathctxv, value exprv) } value -v2v_xml_xpathobjptr_nr_nodes (value xpathobjv) +mllib_xml_xpathobjptr_nr_nodes (value xpathobjv) { CAMLparam1 (xpathobjv); xmlXPathObjectPtr xpathobj = xpathobjptr_val (xpathobjv); @@ -235,7 +236,7 @@ v2v_xml_xpathobjptr_nr_nodes (value xpathobjv) } value -v2v_xml_xpathobjptr_get_nodeptr (value xpathobjv, value iv) +mllib_xml_xpathobjptr_get_nodeptr (value xpathobjv, value iv) { CAMLparam2 (xpathobjv, iv); xmlXPathObjectPtr xpathobj = xpathobjptr_val (xpathobjv); @@ -256,7 +257,7 @@ v2v_xml_xpathobjptr_get_nodeptr (value xpathobjv, value iv) } value -v2v_xml_xpathctx_set_nodeptr (value xpathctxv, value nodev) +mllib_xml_xpathctx_set_nodeptr (value xpathctxv, value nodev) { CAMLparam2 (xpathctxv, nodev); xmlXPathContextPtr xpathctx = xpathctxptr_val (xpathctxv); @@ -268,7 +269,7 @@ v2v_xml_xpathctx_set_nodeptr (value xpathctxv, value nodev) } value -v2v_xml_nodeptr_name (value nodev) +mllib_xml_nodeptr_name (value nodev) { CAMLparam1 (nodev); xmlNodePtr node = (xmlNodePtr) nodev; @@ -284,7 +285,7 @@ v2v_xml_nodeptr_name (value nodev) } value -v2v_xml_nodeptr_as_string (value docv, value nodev) +mllib_xml_nodeptr_as_string (value docv, value nodev) { CAMLparam2 (docv, nodev); CAMLlocal1 (strv); @@ -316,7 +317,7 @@ v2v_xml_nodeptr_as_string (value docv, value nodev) } value -v2v_xml_nodeptr_set_content (value nodev, value contentv) +mllib_xml_nodeptr_set_content (value nodev, value contentv) { CAMLparam2 (nodev, contentv); xmlNodePtr node = (xmlNodePtr) nodev; @@ -327,7 +328,7 @@ v2v_xml_nodeptr_set_content (value nodev, value contentv) } value -v2v_xml_nodeptr_new_text_child (value nodev, value namev, value contentv) +mllib_xml_nodeptr_new_text_child (value nodev, value namev, value contentv) { CAMLparam3 (nodev, namev, contentv); xmlNodePtr node = (xmlNodePtr) nodev; @@ -339,14 +340,14 @@ v2v_xml_nodeptr_new_text_child (value nodev, value namev, value contentv) if (new_node == NULL) caml_invalid_argument ("nodeptr_new_text_child: failed to create new node"); - /* See comment in v2v_xml_xpathobjptr_get_nodeptr about returning + /* See comment in mllib_xml_xpathobjptr_get_nodeptr about returning * named xmlNodePtr here. */ CAMLreturn ((value) new_node); } value -v2v_xml_nodeptr_set_prop (value nodev, value namev, value valv) +mllib_xml_nodeptr_set_prop (value nodev, value namev, value valv) { CAMLparam3 (nodev, namev, valv); xmlNodePtr node = (xmlNodePtr) nodev; @@ -360,7 +361,7 @@ v2v_xml_nodeptr_set_prop (value nodev, value namev, value valv) } value -v2v_xml_nodeptr_unset_prop (value nodev, value namev) +mllib_xml_nodeptr_unset_prop (value nodev, value namev) { CAMLparam2 (nodev, namev); xmlNodePtr node = (xmlNodePtr) nodev; @@ -372,7 +373,7 @@ v2v_xml_nodeptr_unset_prop (value nodev, value namev) } value -v2v_xml_nodeptr_unlink_node (value nodev) +mllib_xml_nodeptr_unlink_node (value nodev) { CAMLparam1 (nodev); xmlNodePtr node = (xmlNodePtr) nodev; @@ -384,7 +385,7 @@ v2v_xml_nodeptr_unlink_node (value nodev) } value -v2v_xml_doc_get_root_element (value docv) +mllib_xml_doc_get_root_element (value docv) { CAMLparam1 (docv); CAMLlocal1 (v); @@ -402,7 +403,7 @@ v2v_xml_doc_get_root_element (value docv) } value -v2v_xml_parse_uri (value strv) +mllib_xml_parse_uri (value strv) { CAMLparam1 (strv); CAMLlocal3 (rv, sv, ov); diff --git a/v2v/xml.ml b/mllib/xml.ml similarity index 80% rename from v2v/xml.ml rename to mllib/xml.ml index 7ed21cd30..e67245188 100644 --- a/v2v/xml.ml +++ b/mllib/xml.ml @@ -1,5 +1,6 @@ -(* virt-v2v +(* Bindings for libxml2 * Copyright (C) 2009-2017 Red Hat Inc. + * Copyright (C) 2017 SUSE 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 @@ -56,87 +57,87 @@ type node = doc * nodeptr type xpathctx = doc * xpathctxptr type xpathobj = xpathctx * xpathobjptr -external free_docptr : docptr -> unit = "v2v_xml_free_docptr" -external free_xpathctxptr : xpathctxptr -> unit = "v2v_xml_free_xpathctxptr" -external free_xpathobjptr : xpathobjptr -> unit = "v2v_xml_free_xpathobjptr" +external free_docptr : docptr -> unit = "mllib_xml_free_docptr" +external free_xpathctxptr : xpathctxptr -> unit = "mllib_xml_free_xpathctxptr" +external free_xpathobjptr : xpathobjptr -> unit = "mllib_xml_free_xpathobjptr" -external _parse_memory : string -> docptr = "v2v_xml_parse_memory" +external _parse_memory : string -> docptr = "mllib_xml_parse_memory" let parse_memory xml = let docptr = _parse_memory xml in Gc.finalise free_docptr docptr; docptr -external _copy_doc : docptr -> recursive:bool -> docptr = "v2v_xml_copy_doc" +external _copy_doc : docptr -> recursive:bool -> docptr = "mllib_xml_copy_doc" let copy_doc docptr ~recursive = let copy = _copy_doc docptr ~recursive in Gc.finalise free_docptr copy; copy -external to_string : docptr -> format:bool -> string = "v2v_xml_to_string" +external to_string : docptr -> format:bool -> string = "mllib_xml_to_string" external _xpath_new_context : docptr -> xpathctxptr - = "v2v_xml_xpath_new_context" + = "mllib_xml_xpath_new_context" let xpath_new_context docptr = let xpathctxptr = _xpath_new_context docptr in Gc.finalise free_xpathctxptr xpathctxptr; docptr, xpathctxptr external xpathctxptr_register_ns : xpathctxptr -> string -> string -> unit - = "v2v_xml_xpathctxptr_register_ns" + = "mllib_xml_xpathctxptr_register_ns" let xpath_register_ns (_, xpathctxptr) prefix uri = xpathctxptr_register_ns xpathctxptr prefix uri external xpathctxptr_eval_expression : xpathctxptr -> string -> xpathobjptr - = "v2v_xml_xpathctxptr_eval_expression" + = "mllib_xml_xpathctxptr_eval_expression" let xpath_eval_expression ((_, xpathctxptr) as xpathctx) expr = let xpathobjptr = xpathctxptr_eval_expression xpathctxptr expr in Gc.finalise free_xpathobjptr xpathobjptr; xpathctx, xpathobjptr external xpathobjptr_nr_nodes : xpathobjptr -> int - = "v2v_xml_xpathobjptr_nr_nodes" + = "mllib_xml_xpathobjptr_nr_nodes" let xpathobj_nr_nodes (_, xpathobjptr) = xpathobjptr_nr_nodes xpathobjptr external xpathobjptr_get_nodeptr : xpathobjptr -> int -> nodeptr - = "v2v_xml_xpathobjptr_get_nodeptr" + = "mllib_xml_xpathobjptr_get_nodeptr" let xpathobj_node ((docptr, _), xpathobjptr) i = docptr, xpathobjptr_get_nodeptr xpathobjptr i external xpathctxptr_set_nodeptr : xpathctxptr -> nodeptr -> unit - = "v2v_xml_xpathctx_set_nodeptr" + = "mllib_xml_xpathctx_set_nodeptr" let xpathctx_set_current_context (_, xpathctxptr) (_, nodeptr) = xpathctxptr_set_nodeptr xpathctxptr nodeptr -external nodeptr_name : nodeptr -> string = "v2v_xml_nodeptr_name" +external nodeptr_name : nodeptr -> string = "mllib_xml_nodeptr_name" let node_name (_, nodeptr) = nodeptr_name nodeptr external nodeptr_as_string : docptr -> nodeptr -> string - = "v2v_xml_nodeptr_as_string" + = "mllib_xml_nodeptr_as_string" let node_as_string (docptr, nodeptr) = nodeptr_as_string docptr nodeptr external nodeptr_set_content : nodeptr -> string -> unit - = "v2v_xml_nodeptr_set_content" + = "mllib_xml_nodeptr_set_content" let node_set_content (_, nodeptr) = nodeptr_set_content nodeptr external nodeptr_new_text_child : nodeptr -> string -> string -> nodeptr - = "v2v_xml_nodeptr_new_text_child" + = "mllib_xml_nodeptr_new_text_child" let new_text_child (docptr, nodeptr) name content = docptr, nodeptr_new_text_child nodeptr name content external nodeptr_set_prop : nodeptr -> string -> string -> unit - = "v2v_xml_nodeptr_set_prop" + = "mllib_xml_nodeptr_set_prop" let set_prop (_, nodeptr) = nodeptr_set_prop nodeptr external nodeptr_unset_prop : nodeptr -> string -> bool - = "v2v_xml_nodeptr_unset_prop" + = "mllib_xml_nodeptr_unset_prop" let unset_prop (_, nodeptr) = nodeptr_unset_prop nodeptr -external nodeptr_unlink_node : nodeptr -> unit = "v2v_xml_nodeptr_unlink_node" +external nodeptr_unlink_node : nodeptr -> unit = "mllib_xml_nodeptr_unlink_node" let unlink_node (_, nodeptr) = nodeptr_unlink_node nodeptr external _doc_get_root_element : docptr -> nodeptr option - = "v2v_xml_doc_get_root_element" + = "mllib_xml_doc_get_root_element" let doc_get_root_element docptr = match _doc_get_root_element docptr with | None -> None @@ -154,4 +155,4 @@ type uri = { uri_query_raw : string option; } -external parse_uri : string -> uri = "v2v_xml_parse_uri" +external parse_uri : string -> uri = "mllib_xml_parse_uri" diff --git a/v2v/xml.mli b/mllib/xml.mli similarity index 100% rename from v2v/xml.mli rename to mllib/xml.mli diff --git a/v2v/xpath_helpers.ml b/mllib/xpath_helpers.ml similarity index 100% rename from v2v/xpath_helpers.ml rename to mllib/xpath_helpers.ml diff --git a/v2v/xpath_helpers.mli b/mllib/xpath_helpers.mli similarity index 100% rename from v2v/xpath_helpers.mli rename to mllib/xpath_helpers.mli diff --git a/v2v/Makefile.am b/v2v/Makefile.am index d5ca4cdb4..ffd514426 100644 --- a/v2v/Makefile.am +++ b/v2v/Makefile.am @@ -58,14 +58,10 @@ SOURCES_MLI = \ utils.mli \ vCenter.mli \ windows.mli \ - windows_virtio.mli \ - xml.mli \ - xpath_helpers.mli + windows_virtio.mli SOURCES_ML = \ types.ml \ - xml.ml \ - xpath_helpers.ml \ uefi.ml \ utils.ml \ name_from_disk.ml \ @@ -103,8 +99,7 @@ SOURCES_ML = \ SOURCES_C = \ domainxml-c.c \ - utils-c.c \ - xml-c.c + utils-c.c if HAVE_OCAML @@ -119,7 +114,6 @@ virt_v2v_CPPFLAGS = \ -I$(top_srcdir)/lib virt_v2v_CFLAGS = \ $(WARN_CFLAGS) $(WERROR_CFLAGS) \ - $(LIBXML2_CFLAGS) \ $(LIBVIRT_CFLAGS) BOBJECTS = \ @@ -168,8 +162,7 @@ virt_v2v_LINK = \ virt_v2v_copy_to_local_SOURCES = \ domainxml-c.c \ - utils-c.c \ - xml-c.c + utils-c.c virt_v2v_copy_to_local_CPPFLAGS = \ -I. \ -I$(top_builddir) \ @@ -178,12 +171,9 @@ virt_v2v_copy_to_local_CPPFLAGS = \ -I$(top_srcdir)/lib virt_v2v_copy_to_local_CFLAGS = \ $(WARN_CFLAGS) $(WERROR_CFLAGS) \ - $(LIBXML2_CFLAGS) \ $(LIBVIRT_CFLAGS) COPY_TO_LOCAL_BOBJECTS = \ - xml.cmo \ - xpath_helpers.cmo \ uefi.cmo \ utils.cmo \ vCenter.cmo \ @@ -403,7 +393,6 @@ endif v2v_unit_tests_BOBJECTS = \ types.cmo \ - xml.cmo \ uefi.cmo \ utils.cmo \ DOM.cmo \ diff --git a/v2v/test-harness/Makefile.am b/v2v/test-harness/Makefile.am index 1395e662c..8ce441222 100644 --- a/v2v/test-harness/Makefile.am +++ b/v2v/test-harness/Makefile.am @@ -48,7 +48,6 @@ OCAMLPACKAGES = \ OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) BOBJECTS = \ - $(top_builddir)/v2v/xml.cmo \ $(SOURCES_ML:.ml=.cmo) \ $(libv2vth_a_OBJECTS) XOBJECTS = $(BOBJECTS:.cmo=.cmx) @@ -82,7 +81,7 @@ libv2vth_a_CFLAGS = \ -fPIC libv2vth_a_SOURCES = \ - ../xml-c.c + dummy.c v2v_test_harness.cmi: $(top_builddir)/ocaml/guestfs.cmi diff --git a/v2v/test-harness/dummy.c b/v2v/test-harness/dummy.c new file mode 100644 index 000000000..ebab6198c --- /dev/null +++ b/v2v/test-harness/dummy.c @@ -0,0 +1,2 @@ +/* Dummy source, to be used for OCaml-based tools with no C sources. */ +enum { foo = 1 };