[Development] Qt 6 buildsystem support requirements
abbapoh at gmail.com
Sat Jul 21 19:39:49 CEST 2018
What you wrote reminds me how government officials spent budget money for the new cars in my country. They write specific tender documentation that fits only one car, say Chevrolet Tahoe (for example, "the car that fits 9 people, has leather interior and has the power of 200hp»). The argumentation is the same - here’s the requirements, who cares that the only one overpriced car fits in them.
I have several other requirements for the buildsystem.
1. IDE integration. I really need the IDE know the correct CXX flags for each separate file in my project - that is includes, c++ version and so on. Currently i’m using a generated CMake file at my work and the integration with Qt Creator is awful, i’m using IDE just as a simple text editor - syntax highlighting breaks because IDE can’t find some headers (however, goto definition works for them).
2. Support for cross-compilation and deploying Android/iOS. I’ve used a GYP at work for a QML-based app. I spent a whole week porting Qt application for iOS writing those unreadable gyp files. Not sure if CMake will be much easier, AFAIK, neither QBS nor CMake have full support for iOS and Android deployment in Qt Creator (so i can just press «run» and IDE will do everything for me).
However, i don’t see big problems in implementing this with QBS (i made several small patches and i can say that the codebase is neat). However, I won’t be the guy who volunteer to do anything in CMake. Yes, CMake has much more users than QBS, however, how many of them will volunteer to work with CMake’s Qt Creator integration? 5 people? 10?
We will end with a separate team of Qt guys working on CMake’s integration with Qt and it’s tools. So the question is - is it easier to port QBS to be built without Qt or to use CMake with Qt?
I pay my 2 cents for QBS.
> 21 июля 2018 г., в 5:35, Thiago Macieira <thiago.macieira at intel.com> написал(а):
> Having spent far too much time trying to figure out why crappy buildsystems
> cause failures in distros (like TensorFlow or libvpx - see
> https://plus.google.com/+ThiagoMacieira/posts/DqTKdRGfuwR ), I'd like to make
> sure this doesn't happen to Qt 6. For that, I'd like to add the following
> extra requirements to the buildsystem we choose to use. This is in addition to
> the functionality requirements.
> These apply to the buildsystem at the time of Qt's the switch to it.
> 1) Ease of obtention
> a) Must be packaged by all major package managers where Qt 6 is expected to be
> relevant. That is, it must be available as a package in:
> - ArchLinux
> - Debian testing
> - Gentoo
> - Fedora current and previous
> - openSUSE current and previous
> - Ubuntu LTS released more than 6 months prior
> - Homebrew (macOS)
> I'll take care of Clear Linux, but we apply the "two major distros" rule, so I
> won't be first. It would be nice to have it in vcpkg/nuget/whatever MSVC uses
> and FreeBSD ports tree too.
> b) Must be easily compiled from source on a standard system installation. All
> of its dependencies must come from the system's package manager and there must
> be no cyclic dependencies. That is, it cannot require itself to build and it
> must not depend on Qt, either in source form or binary.
> c) Must not require too-recent version in order to compile Qt. The versions
> found in (a) must be sufficient to build Qt 6.0 and this must continue
> throughout Qt 6's lifetime.
> 2) Track record
> a) Must be used by roughly a dozen packages in major distros. I'm not saying
> all of them have to have a dozen, not even that one of them has a dozen. But
> all of the ones listed above must have at least one and there must be a dozen
> distinct packages in total.
> b) At least one package must have been continuously packaged for two years.
> One for an RPM distro and one for a .deb distro.
> c) At least one package of comparable complexity to qtbase, packaged by the
> three of the six Linux distros I listed. I'm looking for:
> - compiling certain files with different compiler flags
> - several third-party dependencies, some required, others optional
> - lots of configure-time options
> - installing several different types of targets (binaries, libraries,
> plugins, arch-dependent files, arch-independent files, documentation,
> translations, etc.)
> - obeying distro-supplied options (compiler & linker flags, compiler
> selection [ccache, icecc, clang], debuginfo split, stripping, etc.)
> 3) Community support
> a) Thriving community to ask for help to, whenever issues happen.
> b) One packager for .deb and one for RPM that will vouch for the buildsystem.
> I don't think I am being unreasonable. I am being strict, though.
> I'll put my money where my mouth is: as soon as the requirements are met, I
> will begin using it and contributing to it, finding out where there may be
> shortcomings and supplying fixes if possible, bug reports if not.
> But until then, I will pretend it doesn't exist and will ignore the branch
> that uses it to build.
> Thiago Macieira - thiago.macieira (AT) intel.com
> Software Architect - Intel Open Source Technology Center
> Development mailing list
> Development at qt-project.org
More information about the Development