The pyxpidl tool suite has been built to replace the older xpidl tool which, in the past, was used to turn XPIDL files into C++ headers and XPCOM typelibs (XPT files). The newer utility has the advantage of not needing any code to be compiled in order to use it, and let us remove a bunch of old code from the tree.
pyxpidl has been in use for a while, but replaced xpidl in the Gecko SDK starting in Gecko 9.0.
Using pyxpidl
pyxpidl is in the SDK in the sdkdir/sdk/bin/
directory. Unlike xpidl, which combined all the functions into a single utility, pyxpidl is comprised of two utilities: header.py
, which generates C++ headers from IDL, and typelib.py
, which generates XPT files.
pyxpidl requires a directory to cache certain information in. You can use a temporary directory or the current directory or whatever works best for you.
Generating C++ headers
To generate C++ headers, use the header.py
utility:
sdkdir/sdk/bin/header.py --cachedir=<path> -o <outputfilename.h> <filename.idl>
Generating typelibs
Generating typelib files is done using the typelib.py
utility:
sdkdir/sdk/bin/typelib.py --cachedir=<path> -o <outputfilename.xpt> <filename.idl>
Comparing pyxpidl to xpidl
This table provides a mapping of old xpidl
options to pyxpidl.
xpidl option | Description | pyxpidl equivalent |
-a |
Emit annotations to typelib | n/a (feature removed) |
-w |
Turn on warnings | n/a (this is now the default and can't be turned off) |
-v |
Verbose mode (NYI) | n/a (feature removed) |
-t |
Creates a typelib of a specific version number | n/a (feature removed, and probably never actually worked) |
-I |
Add an entry to start of include path for #include "nsIFoo.idl" |
-I (unchanged) |
-o |
Specify the base name for output (-o /tmp/nsIFoo for example) |
-o outputfile (this isn't just the base name, but needs to include the extension; for example -o /tmp/nsIFoo.idl ) |
-e |
Specify an explicit output file name (-e /tmp/nsIFoo.idl for example) |
n/a (this is subsumed by -o now) |
-d |
Write dependencies (requires -e) | -d (unchanged) |
-m |
Specify output mode | n/a (feature removed; use header.py or typelib.py specifically) |
It's worth noting that the old output mode options for generating documentation and Java interfaces (-m doc
and -m java
) have no equivalents in pyxpidl.