Templates for frameworks CMake files

Aurélien Gâteau agateau at kde.org
Wed Sep 25 11:39:40 UTC 2013


On Tuesday 24 September 2013 16:58:36 Stephen Kelly wrote:
> Aurélien Gâteau wrote:
> > Hi,
> > 
> > I have been playing around with itemviews CMake files and put together
> > some templates for the top level CMakeLists.txt and *Config.cmake.in. You
> > can find them attached there. Any one against me adding those to the
> > repository?
> > 
> > Aurélien
> > CMakeLists.txt
> > 
> >   cmake_minimum_required(VERSION 2.8.11)
> 
> This template will be out of date whenever we require a new cmake.
> 
> >  project(FooBar)
> >  
> >  find_package(ECM 0.0.8 REQUIRED NO_MODULE)
> 
> The latest ECM is 0.0.9

Just bumped the version number. Interestingly no existing framework requires 
it yet.

> >  set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
> >  
> >  set(REQUIRED_QT_VERSION "5.2.0")
> 
> ECM and Qt version bumps are not as much an issue as the cmake one. The ECM
> and Qt version deps are not as likely to change.

I don't understand why you think specifying the cmake version is an issue: it 
should be easy to update the template when this happens, isn't it?

> >  # Required Qt5 components to build this framework
> >  # For example:
> >  # find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS
> >  # Widgets)
> 
> Simplify by putting NO_MODULE before REQUIRED and removing COMPONENTS:
> 
>  find_package(Qt5 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Widgets)

Done.
> 
> >  if(NOT kdelibs_SOURCE_DIR)
> >  find_package(KF5 5.0.0 REQUIRED MODULE COMPONENTS CMake Compiler
> >  InstallDirs) # Required KF5 frameworks to build this framework
> 
> I still think this stuff is odd. We're building KF5, yet we need to find KF5
> to do so.

This line is only used when building the framework outside of kdelibs, in this 
case we are not building KF5.
> 
> <snip>
> 
> >   FooBarConfigVersion.cmake.in
> >   @PACKAGE_INIT@
> >  
> >  # Required components to use this framework
> >  # For example:
> >  # find_dependency(Qt5Widgets @REQUIRED_QT_VERSION@)
> >  # find_dependency(KCoreAddons ${PACKAGE_VERSION})
> 
> We might want to change this before you template it. Currently,
> 
>  find_package(KAnyTier2Framework)
> 
> will result in finding its dependency with
> 
>  find_package(KDependentTier1Framework)
> 
> ie, the dependency is not found by version unless a version is specified
> when finding KAnyTier2Framework. ie:
> 
>  find_package(KAnyTier2Framework 5.3)
> 
> will call
> 
>  find_package(KDependentTier1Framework 5.3)
> 
> However, it might make sense for even
> 
>  find_package(KAnyTier2Framework)
> 
> to require the same or later version as KAnyTier2Framework.
> 
> That would be another change that would affect your template, and which
> would make
> 
>  find_dependency(KCoreAddons ${PACKAGE_VERSION})
> 
> 'wrong'.
> 
> >  set(FooBar_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@")
> 
> IMO this should be removed from all config files and not added to new ones:
> 
>  http://thread.gmane.org/gmane.comp.kde.devel.frameworks/1194/focus=1318
> 
> It is unused and not useful or needed. ie
> 
>  git grep -l PACKAGE_CMAKE_INSTALL_PREFIX | xargs \
>    sed -i '/PACKAGE_CMAKE_INSTALL_PREFIX/d'
> 
> and remove the CMAKE_INSTALL_PREFIX from the configure_package_config_file
> invocations.
> 
> >  set_and_check(FooBar_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
> >  set(FooBar_INCLUDE_DIRS ${FooBar_INCLUDE_DIR} )
> 
> As the include dirs are encoded into the imported targets, this is
> superfluous. No one needs to use it, and it might contain different/out of
> date information compared to what is encoded in the target.
> 
> If it is decided to remove them, then the INCLUDE_INSTALL_DIR should be
> removed from the configure_package_config_file too.

I removed those from the template as well.

I just filed a review request for the templates, which should make it easier 
to discuss, you can find it here:

https://git.reviewboard.kde.org/r/112928/

Aurélien


More information about the Kde-frameworks-devel mailing list