Generator Overview¶
The following diagram summarizes Shiboken’s role in the Qt for Python project.
An XML typesystem file is used to specify the types to be exposed to Python and to apply modifications to properly represent and manipulate the types in the Python World. For example, you can remove and add methods to certain types, and also modify the arguments of each method. These actions are inevitable to properly handle the data structures or types.
The final outcome of this process is a set of wrappers written in CPython, which can be used as a module in your Python code.
In a few words, the Generator is a utility that parses a collection of header and typesystem files, generating other files (code, documentation, etc.) as result.
Creating new bindings¶
Each module of the generator system has an specific role.
Provide enough data about the classes and functions.
Generate valid code, with modifications from typesystems and injected codes.
Modify the API to expose the objects in a way that fits you target language best.
Insert customizations where handwritten code is needed.
The newly created binding will run on top of Shiboken which takes care of interfacing Python and the underlying C++ library.
Handwritten inputs¶
Creating new bindings involves creating two pieces of “code”: the typesystem and the inject code.
- typesystem:
XML files that provides the developer with a tool to customize the way that the generators will see the classes and functions. For example, functions can be renamed, have its signature changed and many other actions.
- inject code:
allows the developer to insert handwritten code where the generated code is not suitable or needs some customization.
Command line options¶
Usage¶
shiboken [options] header-file(s) typesystem-file
Options¶
--disable-verbose-error-messages
Disable verbose error messages. Turn the CPython code hard to debug but saves a few kilobytes in the generated binding.
--enable-parent-ctor-heuristic
This flag enable an useful heuristic which can save a lot of work related to object ownership when writing the typesystem. For more info, check Parentship heuristics.
--enable-pyside-extensions
Enable pyside extensions like support for signal/slots. Use this if you are creating a binding based on PySide.
--enable-return-value-heuristic
Enable heuristics to detect parent relationship on return values. For more info, check Return value heuristics.
--avoid-protected-hack
Avoid the use of the ‘#define protected public’ hack.
--use-isnull-as-nb_nonzero
If a class have an isNull() const method, it will be used to compute the value of boolean casts
--api-version=<version>
Specify the supported api version used to generate the bindings.
--documentation-only
Do not generate any code, just the documentation.
--drop-type-entries="<TypeEntry0>[;TypeEntry1;...]"
Semicolon separated list of type system entries (classes, namespaces, global functions and enums) to be dropped from generation. Values are fully qualified Python type names (‘Module.Class’), but the module can be omitted (‘Class’).
--generation-set
Generator set to be used (e.g. qtdoc).
--skip-deprecated
Skip deprecated functions.
--diff
Print a diff of wrapper files.
--dryrun
Dry run, do not generate wrapper files.
--project-file=<file>
Text file containing a description of the binding project. Replaces and overrides command line arguments.
-I<path>, --include-paths=<path>[:<path>:...]
Include paths used by the C++ parser.
… _system-include-paths:
-isystem<path>, --system-include-paths=<path>[:<path>:...]
System include paths used by the C++ parser
-F<path>, --framework-include-paths=<path>[:<path>:...]
Framework include paths used by the C++ parser
--language-level=, -std=<level>
C++ Language level (c++11..c++17, default=c++14)
-T<path>, --typesystem-paths=<path>[:<path>:...]
Paths used when searching for type system files.
--output-directory=[dir]
The directory where the generated files will be written.
--license-file=[license-file]
File used for copyright headers of generated files.
--no-suppress-warnings
Show all warnings.
--silent
Avoid printing any message.
--debug-level=[sparse|medium|full]
Set the debug level.
--help
Display this help and exit.
--version
Output version information and exit.
QtDocGenerator Options¶
--doc-parser=<parser>
The documentation parser used to interpret the documentation input files (qdoc|doxygen).
--documentation-code-snippets-dir=<dir>
Directory used to search code snippets used by the documentation.
--documentation-data-dir=<dir>
Directory with XML files generated by documentation tool.
--documentation-extra-sections-dir=<dir>
Directory used to search for extra documentation sections.
--library-source-dir=<dir>
Directory where library source code is located.
--additional-documentation=<file>
List of additional XML files to be converted to .rst files (for example, tutorials).
Binding Project File¶
Instead of directing the Generator behavior via command line, the binding developer can write a text project file describing the same information, and avoid the hassle of a long stream of command line arguments.
The project file structure¶
Here follows a comprehensive example of a generator project file.
[generator-project] generator-set = path/to/generator/CHOICE_GENERATOR header-file = DIR/global.h" /> typesystem-file = DIR/typesystem_for_your_binding.xml output-directory location="OUTPUTDIR" /> include-path = path/to/library/being/wrapped/headers/1 include-path = path/to/library/being/wrapped/headers/2 typesystem-path = path/to/directory/containing/type/system/files/1 typesystem-path = path/to/directory/containing/type/system/files/2 enable-parent-ctor-heuristic
© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.