aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md231
1 files changed, 226 insertions, 5 deletions
diff --git a/README.md b/README.md
index fe61136b2..35f5a9063 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,230 @@
# Qt For Python
-Qt For Python is the [Python Qt bindings project](http://wiki.qt.io/PySide2), providing
-access to the complete Qt 5.x framework as well as to generator tools for rapidly
-generating bindings for any C++ libraries.
+Qt For Python is the [Python Qt bindings project](https://wiki.qt.io/PySide6),
+providing access to the complete Qt framework as well as to generator tools for
+rapidly generating bindings for any C++ libraries.
-shiboken2 is the generator used to build the bindings.
+Shiboken is the generator used to build the bindings.
-See README.pyside2.md and README.shiboken2.md for details.
+See README.pyside6.md and README.shiboken6.md for details.
+
+## Building
+
+To build both Shiboken and PySide simply execute:
+
+ * `python setup.py build`, or
+ * `python setup.py install`
+
+to build and install into your current Python installation.
+
+The same setup.py script is used to build all the components of the project:
+
+ * shiboken6 (the supporting Python module)
+ * shiboken6-generator (the bindings generation executable)
+ * PySide6
+
+Preferably, a Qt (build) environment should be used to automatically pick up
+the associated `qtpaths6`, but optionally one can specify the location of `qtpaths6`
+and `cmake` if it is not in the current PATH with:
+
+ * `--qtpaths=/path/to/qt/bin/qtpaths6`, and
+ * `--cmake=/path/to/bin/cmake`
+
+respectively.
+
+By default, all of the above is built when no special options are passed to the
+script. You can use the `--build-type` parameter to specify which things should
+be built:
+
+ * `--build-type=shiboken6`, build/package only the python module
+ * `--build-type=shiboken6-generator`, build/package the generator executable
+ * `--build-type=pyside6`, build/package the PySide6 bindings.
+ * `--build-type=all`, the implicit default to build all of the above
+
+When building PySide6, optionally, one can specify the location of the
+shiboken6 cmake config path if it is not on the current PATH with:
+
+ * `--shiboken-config-dir=/path/to/shiboken/cmake/config/dir`
+
+This is useful if you did a cmake installation of shiboken6 into a custom
+location.
+
+For Windows, if OpenSSL support is required, it's necessary to specify the
+directory path that contains the OpenSSL shared libraries `libeay32.dll` and
+`ssleay32.dll`, for example:
+
+* `--openssl=C:\OpenSSL-Win64\bin`
+
+This will make sure that the libraries are copied into the PySide6 package and
+are found by the QtNetwork module.
+
+## Building Additional Options
+
+On Linux and macOS you can use the option `--standalone` to embed Qt libraries
+into the PySide6 package. The option does not affect Windows, because it is
+used implicitly, i.e. all relevant DLLs have to be copied into the PySide6
+package anyway, because there is no proper rpath support on the platform.
+
+You can use the option `--rpath=/path/to/lib/path` to specify which rpath
+values should be embedded into the PySide6 modules and shared libraries. This
+overrides the automatically generated values when the option is not specified.
+
+You can use the option `--qt-conf-prefix` to pass a path relative to the
+PySide6 installed package, which will be embedded into an auto-generated
+`qt.conf` registered in the Qt resource system. This path will serve as the
+PrefixPath for QLibraryInfo, thus allowing to choose where Qt plugins should be
+loaded from. This option overrides the usual prefix chosen by `--standalone`
+option, or when building on Windows.
+
+To temporarily disable registration of the internal `qt.conf` file, a new
+environment variable called PYSIDE_DISABLE_INTERNAL_QT_CONF is introduced.
+
+You should assign the integer "1" to disable the internal `qt.conf`, or "0" (or
+leave empty) to keep using the internal `qt.conf` file.
+
+## Development Options
+
+For development purposes the following options might be of use, when
+using `setup.py build`:
+
+ * `--ignore-git`, will skip the fetching and checkout steps for supermodule
+ and all submodules.
+ * `--limited-api=yes|no`, default yes if applicable. Set or clear the limited
+ API flag. Ignored for Python 2.
+ * `--module-subset`, allows for specifying the Qt modules to be built.
+ A minimal set is: `--module-subset=Core,Gui,Test,Widgets`.
+ * `--package-timestamp`, allows specifying the timestamp that will be used as
+ part of the version number for a snapshot package.
+ For example given `--package-timestamp=1529646276` the package version will
+ be `5.x.y.dev1529646276`.
+ * `--reuse-build`, option allows recompiling only the modified sources and not
+ the whole world, shortening development iteration time.
+ * `--sanitize-address`, will build the project with address sanitizer.
+ * `--skip-cmake`, will reuse the already generated Makefiles (or equivalents),
+ instead of invoking, CMake to update the Makefiles (note, CMake should be
+ ran at least once to generate the files).
+ * `--skip-docs`, skip the documentation generation.
+ * `--skip-make-install`, will not run make install (or equivalent) for each
+ module built.
+ * `--skip-modules`, allows for specifying the Qt modules that will be skipped
+ during the build process.
+ For example: `--skip-modules=WebEngineCore,WebEngineWidgets`
+ * `--skip-packaging`, will skip creation of the python package, enabled (Linux
+ or macOS only).
+ * `--verbose-build`, will output the compiler invocation with command line
+ arguments, etc.
+ * `--disable-pyi`, will suppress the generation of .pyi files. This allows
+ debugging when the project builds but the pyi generator complains.
+
+## Requirements
+
+ * Python 3.9+ is supported (for Qt 6.7+)
+ * CMake: Specify the path to cmake with `--cmake` option or add cmake to the
+ system path.
+ * Qt 6.x is supported. Specify the path to qtpaths with `--qtpaths` option or
+ add `qtpaths6` to the system path.
+
+### Optional
+
+#### OpenSSL:
+
+Specifying the `--openssl` option only affects Windows. It is a no-op for other
+platforms.
+
+Please note that official Windows packages do not ship the OpenSSL libraries
+due to import/export restrictions as described in
+https://doc.qt.io/qt-6/ssl.html#import-and-export-restrictions
+
+You can specify the location of the OpenSSL DLLs with the following option:
+`--openssl=</path/to/openssl/bin-directory>`.
+
+You can download
+[OpenSSL for Windows here](http://slproweb.com/products/Win32OpenSSL.html)
+
+Official Qt packages do not link to the SSL library directly, but rather try to
+find the library at runtime.
+
+On Windows, official Qt builds will try to pick up OpenSSL libraries at
+application path, system registry, or in the PATH environment variable.
+
+On macOS, official Qt builds use SecureTransport (provided by OS) instead of
+OpenSSL.
+
+On Linux, official Qt builds will try to pick up the system OpenSSL library.
+
+> **Note**: this means that Qt packages that directly link to the OpenSSL
+> shared libraries, are not currently compatible with standalone PySide6
+> packages.
+
+#### macOS SDK:
+
+You can specify which macOS SDK should be used for compilation with the option
+`--macos-sysroot=</path/to/sdk>`, for example:
+```
+--macos-sysroot=/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.12.sdk/
+```
+
+#### macOS minimum deployment target:
+
+You can specify a custom macOS minimum deployment target with the option
+`--macos-deployment-target=<value>`, for example:
+```
+--macos-deployment-target=10.10
+```
+
+If the option is not set, the minimum deployment target of the used Qt library
+will be used instead. Thus it is not necessary to use the option without a good
+reason.
+
+If a new value is specified, it has to be higher or equal to both Python's and
+Qt's minimum deployment targets.
+
+Description: macOS allows specifying a minimum OS version on which a binary
+will be able to run. This implies that an application can be built on a machine
+with the latest macOS version installed, with latest Xcode version and SDK
+version and the built application can still run on an older OS version.
+
+
+## CMake super project
+
+For development convenience, a CMake super project is included in the root of
+the repository.
+
+The super project can be built using standalone CMake, or using an IDE's CMake
+integration (Qt Creator for example).
+
+Nevertheless the default build process is done via setup.py, in which case each
+of the sub-projects are built and installed separately, as mentioned, the super
+project is just for development convenience.
+
+## IDE (Qt Creator) case
+
+When using an IDE, just open the root CMakeLists.txt file as a new project, and
+make sure to specify the following things:
+
+ * `LLVM_INSTALL_DIR`, the environment variable should point to your libclang
+ library location
+ * `Qt`, either select a Qt Kit when configuring the project, or make sure that
+ the `qtpaths6` binary is present in the PATH environment variable.
+ * `Python`, the PATH environment variable should also point to the Python
+ interpreter which you wish to use for building the projects (can either be
+ a system interpreter, or a virtualenv one for example)
+
+Once that is done, just re-run CMake, so that it picks up the new environment
+values. If needed, all other cache variables defined by the project files can
+be re-adjusted (for example FORCE_LIMITED_API).
+
+## Command line CMake case
+
+When building using the command line CMake binary, make sure to invoke it in
+a separate build directory, and not in the root source directory.
+
+Make sure you have the correct environment variables set up, as described in
+the previous section.
+
+The invocation would then look like:
+```bash
+mkdir build && cd build
+cmake -DCMAKE_BUILD_TYPE=Release ..
+# make or nmake or msbuild or jom
+```