[Development] syncqt.pl in C++

Egor Pugin egor.pugin at gmail.com
Thu Mar 9 21:19:51 CET 2017


Hello again,

Pretty long discussion is moved to build systems.
Here are some my general notes and brief presentation of my project.

1. For those who may be interested - my simple implementation of
syncqt.pl in C++ available here [1]. Works for me, tested and compiled
core, gui, widgets, prepared all other headers. Feel free to use it
for any purpose and contact me if you need.

2. Build systems. Obvious BS candidate for many projects is cmake. We
see that it can handle big projects well (LLVM). Don't know much about
Qbs, but if will be (is) productive and extensible enough it may be
useful. Some other less spread build systems introduce heavy
dependencies (like python).

3.
> The general idea is kind of following that of the Gradle wrapper, where any project that uses the Gradle build system also can include a standard wrapper script which obtains and bootstraps the build system itself before building your project, allowing ANY project based on that build system to be "zero dependencies". git clone & go, the system figures out the rest as much as it can.

I'm developing similar system that is based on CMake named C++ Archive
Network [2]. That's why I asked the original question.
Cppan uses simple declarative (YAML) syntax plus custom cmake
insertions. Cppan in some sences is similar to npm, cocoapods and some
other language package managers.
You point your dependencies to CPPAN and it downloads and bootstraps
them for you in any config you requested. You can pass any option or
link flags to all deps. They are able to inherit everything if you
want to. Static/shared/mt/md/32/64/different MSVCs/compilers/cmake
generators (including ninja - WIP)/build caching and much more
included. As a result we get simple crosscompiling. CPPAN is
crossplatform, handles package versions, dependencies, namespaces.
You can register there and add your package.

As PoC I've added tons of c/c++ world libraries and now it's Qt time
[3,4]. qt.base.core, gui and widgets are added and working. I'm very
close to single-shot (one command) building of simple widget apps (QML
is just a question of time - few weeks). One-shotting of projects
(building, installing, testing, your fav workflow here) is the main
goal.
Almost all of those packages are in 'pvt.cppan.demo' namespace. For
official purposes org.* com.* could be used. E.g. org.qtproject.qt.*,
org.boost.*, com.intel.* etc. They are similar to Java, C#?
namespaces.

More info you can find on the site. Good doc is still in progress.
As not a toy project CPPAN is currently used to build tesseract-OCR on
Windows [5].
Also cppan is already self-hosted today.

[1] https://github.com/egorpugin/syncqt/blob/master/syncqt.cpp
[2] https://cppan.org/
[3] https://cppan.org/projects/pvt.cppan.demo.qtproject
[4] https://cppan.org/pvt.cppan.demo.qtproject.qt.base.core
[5] https://github.com/tesseract-ocr/tesseract

-- 
Egor Pugin

On 9 March 2017 at 22:07, Adam Treat <adam.treat at qt.io> wrote:
>
>
> On 03/07/2017 03:54 PM, Thiago Macieira wrote:
>>
>> Same here, though I have also to concede that breaking the status quo (to
>> quote Jake's tweet) is sometimes a good idea. Teambuilder -- to name
>> another
>> Trolltech project that had nothing to do with qt -- was a couple of orders
>> of
>> magnitude better than the tools that existed at the time (distcc).
>> Icecream/
>> icecc came about only because TB wasn't open source, but every now and
>> then I
>> miss TB2 features that icecc doesn't have. TB3 would have been even
>> better.
>>
>> Maybe qbs will be another such leapfrog. I can't fault TQtC for trying.
>
>
> Speaking of distributed compilers... if QBS had built-in
> icecream/TeamBuilder like functionality I would *love* this. It could even
> bundle the tarball itself since it has the complete recipe for all the tools
> necessary, the translation unit and everything in addition to create the
> object file.
>
> That'd be one compelling feature for me.
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development



-- 
Egor Pugin



More information about the Development mailing list