changes to how kdepimlibs and kdebase/workspace are installed and found

Brad King brad.king at kitware.com
Fri Dec 19 19:40:43 CET 2008


Maciej Mrozowski wrote:
> On Thursday 18 of December 2008 20:31:42 Brad King wrote:
> 
>> Perhaps we can split it into
>> multiple INSTALL(EXPORT) files.  Then use a customized
>> KDE4WorkspaceConfig.cmake file that loads multiple export files.  The
>> config file can check for each export file and provide it if it is
>> available.  Some boolean variables can be set to indicate what was found.
[snip]
> results with:
> CMake Error: INSTALL(EXPORT "libnepomukqueryclient" ...) includes target 
> "nepomukqueryclient" which requires target "nepomukquery"that is not in the 
> export set.
> 
> How to handle such cases properly?

Oops, in my proposal I didn't realize the libraries were interdependent. 
    For some reason I was thinking they were all separate modules 
sharing a namespace.  Currently there is no way to do this unless the 
builds are separated too (where each library exports itself for import 
by its dependents).  The design of the automatic export file generation 
and installation was greatly simplified by enforcing the dependencies 
instead of having some mechanism for interdependent exports.  I 
currently have no plans to support inter-dependent exports but it could 
be done in the future.

Here are some other ideas:

1.) Write the export files by hand since they are for packages that 
always install to a specific location and always provide the same thing. 
  This is not very maintainable though.

2.) Post-process the export file to divide up the import rules.  I 
cannot guarantee the exact layout of these files will remain the same in 
future CMake versions though.

3.) Hack the export file to put if(EXISTS) around each import rule to 
check that the imported file exists.  Perhaps in the future CMake could 
generate this automatically.  I didn't consider it since the import rule 
is put in an export file that gets installed along with the target.  In 
your case you have a packaging mechanism that splits the install tree up 
with more granularity than CMake knows.

4.) Keep the single export file but teach KDE4WorkspaceConfig.cmake to 
detect by some other means (existence of a mark file that comes with 
each package) whether each target is really available.  Then set boolean 
variables or properties on the imported targets to indicate availability.

Note that the import files are split into two parts.  One part creates 
the imported targets and then loads the other part.  The other part 
actually imports targets under a given configuration.  #3 would be 
applied to the latter part.  #4 can work because the former part always 
creates all the targets.

-Brad


More information about the Kde-buildsystem mailing list