To allow other pieces of code to process XML files easily, move the
xml.ml* and xpath_helpers.ml* from v2v to mllib.
---
docs/C_SOURCE_FILES | 2 +-
mllib/Makefile.am | 9 ++++++--
{v2v => mllib}/xml-c.c | 47 +++++++++++++++++++-------------------
{v2v => mllib}/xml.ml | 49 ++++++++++++++++++++++------------------
{v2v => mllib}/xml.mli | 3 +++
{v2v => mllib}/xpath_helpers.ml | 0
{v2v => mllib}/xpath_helpers.mli | 0
v2v/Makefile.am | 17 +++-----------
8 files changed, 65 insertions(+), 62 deletions(-)
rename {v2v => mllib}/xml-c.c (90%)
rename {v2v => mllib}/xml.ml (79%)
rename {v2v => mllib}/xml.mli (97%)
rename {v2v => mllib}/xpath_helpers.ml (100%)
rename {v2v => mllib}/xpath_helpers.mli (100%)
diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES
index 286723b73..73039c927 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
@@ -392,4 +393,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 79%
rename from v2v/xml.ml
rename to mllib/xml.ml
index 7ed21cd30..78e75b8f2 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,91 @@ 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"
+let parse_file file =
+ let xml = Common_utils.read_whole_file file in
+ parse_memory xml
+
+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 +159,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 97%
rename from v2v/xml.mli
rename to mllib/xml.mli
index 9b2bc5c18..92d4977a2 100644
--- a/v2v/xml.mli
+++ b/mllib/xml.mli
@@ -33,6 +33,9 @@ val parse_memory : string -> doc
For security reasons it actually calls xmlReadMemory with the
[XML_PARSE_NONET] option set. *)
+val parse_file : string -> doc
+(** [parse_file path] parses the file pointed by [path].*)
+
val copy_doc : doc -> recursive:bool -> doc
(**
http://xmlsoft.org/html/libxml-tree.html#xmlCopyDoc *)
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 d62ac477e..7b8d5d1ca 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 \
@@ -398,7 +388,6 @@ endif
v2v_unit_tests_BOBJECTS = \
types.cmo \
- xml.cmo \
uefi.cmo \
utils.cmo \
DOM.cmo \
--
2.11.0