If you want to hack on virt-v2v or virt-p2v, you've come to the right
place ...

First a little history.  Virt-v2v has been through at least two
complete rewrites, so this is probably about the third version (but we
don't intend to rewrite it again).  The previous version was written
in Perl and can be found here:
https://git.fedorahosted.org/git/virt-v2v.git

The current version started out as almost a line-for-line rewrite of
the Perl code in OCaml + C, and it still has a fairly similar
structure.  Therefore if there are details of this code that you don't
understand (especially in the details of guest conversion), checking
the Perl code may help.

The files to start with when reading this code are:

 - types.mli
 - v2v.ml

'types.mli' defines all the structures used and passed around when
communicating between different bits of the program.  'v2v.ml'
controls how the program runs in stages.

After studying those files, you may want to branch out into the input
modules ('input_*'), the output modules ('output_*') or the conversion
modules ('convert_*').  The input and output modules define -i and -o
options (see the manual).  The conversion modules define what guest
types we can handle and the detailed steps involved in converting
them.

Every other file in this directory is a support module / library of
some sort.  Some code is written in C, especially where we want to use
an external C library such as libxml2.

Virt-p2v is a front end on virt-v2v.  ie. All it does is act as a GUI
front end, and it calls out to virt-v2v to perform the actual
conversion.  Therefore most of the C code in the p2v/ subdirectory is
Gtk (GUI) code, or supporting code for talking to the remote
conversion server.  There is no special support for physical machines
in virt-v2v.  They are converted in the same way as foreign VMs.
