There are a number of 3rdparty components in qtbase in src/3rdparty. Having those integrated in qtbase is problematic because:
- It encourages modification of the 3rdparty code which makes it hard to merge changes from upstream. There are components that are customized to a point where the code is really not compatible with upstream anymore.
- It makes it hard to have a formal git remote for upstream, and therefore merging upstream is a manual affair of figuring out the URL where the code came from, downloading, diff, patch, etc. This is error prone and delays important bugfixes in 3rdparty code.
- It encourages using the bundled version for building Qt even if the platform we're building for provides a (usually nicely maintained and SEP) version of the same component.
- Compiling the code directly into Qt makes it impossible to independently update 3rdparty components in order to fix security problems.
However, we still need to provide the code in question as we cannot rely on all of the 3rdparty components we need to be available on all platforms we build for. In order to resolve this, we need to:
- Move the 3rdparty components into their own repositories, one for each component.
- Set upstream remotes on those repositories where applicable. Some of the components don't have an upstream project anymore or the upstream project doesn't use git. In that case a description in a README file or similar should suffice.
- Have the build system detect which of the component are provided by the platform and use those. For the ones we don't find this way, build the components from our repositories as separate libraries before even starting to build Qt. In the end link Qt to whatever version of the component we decided to use.
The same procedure can be applied to other Qt repositories with 3rdparty code. There are some components which cannot be extracted anymore and which have actually become Qt code. This would be for example the YARR code in qtdeclarative or possibly angle in qtbase. Those should in fact not become separate repositories, but instead just move out of src/3rdparty, directly into src, so that it's clear we are assuming ownership of them.