Build system for KDE4
Vladimir Prus
ghost at cs.msu.su
Tue Jun 14 08:58:54 BST 2005
Chris Lee wrote:
>> > - manual hints for dependency resolution
>>
>> In another email it was said that something like:
>>
>> foo.cpp: fooui.ui
>>
>> is needed. So far, uic support works without manual dependencies.
>
> Also good, but in certain cases we might need to specify
> something that the build system doesn't automatically pick up.
> A fallback is necessary in those cases.
Point taken, though each specific case must be examined.
>> Supported.
>>
>> > - non-recursive (flat) builds
>>
>> Not sure what it means. One can build in any directory, and only targets
>> in that directory will be updated (together with all dependencies).
>
> Basically, it means that you don't spawn a sub-process for each
> subdirectory you enter.
No, no subprocesses are spawn (except to compiler and linker ;-)
> See the paper at:
> http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
Yea, I've seen it.
>> > - --enable-final
>>
>> What's this?
>
> KDE builds support a configure option called '--enable-final'
> which concatenates all .cpp files (in one dir) into one
> foo_all.cpp file and compiles that instead of compiling each .cpp
> file on its own. It used to provide a significant compile-time
> speedup (not sure if it still does); it's not complicated to
> support, and it's a useful feature to make sure that we're doing
> header guards properly. Since we've supported it since ... well,
> forever, as far as I know, it's something we need in a replacement
> build system.
Point taken. Should be easy to implement. Should this behaviour be
also supported for Windows? After all, the de-facto compiler there is faster
than gcc.
>> > - simple to the point of being learnable within 5 minutes
>>
>> It's subjective, but a minimal file in a directory can contains just:
>>
>> lib whatever : whatever.cpp ;
>>
>> > - kdeinit support (?)
>>
>> What's that?
>
> Oh, boy. See http://www.suse.de/~bastian/Export/linking.txt -
> basically, kdeinit is a workaround for the fact that on most UNIX ..
Well, I know that much ;-) But how does this affect build system?
>> > - pkg-config support
>>
>> Not supported, but should be possible.
>
> We'll need that. Lots of the other things we depend on have been
> moving to pkg-config; even the X server is going that way soon.
Point taken.
>> > - easily integrated into KDevelop
>>
>> Good question. I intent to try this.
>
> Well, this just means basically that we need a fairly limited,
> well-defined syntax for the build system instructions. Something
> like scons is a little hairier than something with a well-defined
> format that the KDevelop devs can build a separate parser for.
Well, Boost.Build files also use a fairly complete programming language, but
of course a small parsable subset can be defined. I'll need kdevelop
integration for a project of mine anyway, so I'll try to do something.
>> > - 'admin' needs to be shipped in KDE instead of in src of each app
>> > (if we keep the 'admin' dir, that is)
>>
>> Should be doable. I'd expect that kde support will be just an single
>> module for Boost.Build, and placing it in any location where Boost.Build
>> can find it should be enough.
>
> Yeah, shouldn't be hard as long as the build system is somewhat
> extensible and not completely static.
That's the case. Every project can do "import kde ;" and Boost.Build will
look for a module called "kde" in its search path.
>> On the downsides, Boost.Build does not have any support for config
>> checks, but I believe I can add them.
>
> That would be very helpful.
>
>> I clearly understand that no build system can work for KDE right of the
>> box, and will require tuning and optimisation, but Boost.Build might be a
>> good basic. Comments are appreciated!
>
> Well, if worst comes to worst, we may just continue along the
> path of unsermake and replace whatever other parts we need to.
> It'd be much cooler if some $BUILD_SYSTEM_TEAM wanted to write
> the perfect KDE build system for us instead.
This is only possible with extensive feedback. What I can try alone is
building some small KDE subset (like kdevelop) with Boost.Build.
- Volodya
More information about the kde-core-devel
mailing list