[PATCH] Port from UsePkgConfig to PkgConfig in kdelibs/cmake/modules

Alexander Neundorf neundorf at kde.org
Wed Apr 28 21:45:36 CEST 2010


On Wednesday 28 April 2010, Friedrich W. H. Kossebau wrote:
> Mardi, le 27 avril 2010, à 21:30, Alexander Neundorf a écrit:
> > On Monday 19 April 2010, Friedrich W. H. Kossebau wrote:
> > > Jeudi, le 15 avril 2010, à 22:33, Alexander Neundorf a écrit:
> >
> > ...
> >
> > > > This should be changed.
> > > > If pkg-config is there and brings a good result, this good result
> > > > should be preferred.
> > > > If pkg-config does not exist or pkg-config doesn't find what we are
> > > > looking for, we should still try to find it outselves.
> > >
> > > Preferred as in "used in HINTS" or chosen? I decided for the later,
> > > because if we use pkg-config we should also trust it's results, no?
> >
> > No :-)
> > We should just use it as a prefered hint.
>
> So what then do with those checks where also the version is considered,
> like pkg_check_modules(PC_KEXIV2 QUIET libkexiv2>=${KEXIV2_MIN_VERSION}) ?
> The old versions also relied on the result of pkg-config, if existing, and
> did not do a check of their own, like by grepping for some version string
> or compiling.
>
> > > There is just the problem with the(/our?) cmake library handling that
> > > we use find_library to get the full path to the library, which
> > > pkg-config does not seem to offer, just data about the library suited
> > > as flags for compiler and linker.
> >
> > Exactly, and this is the big issue why I don't really like pkg-config.
>
> Hm, what about filing a request for that to the pkg-config people? :)

Feel free :-)

> > > Any idea how to improve the library stuff to directly take up what
> > > pkg-config delivers?
> >
> > Just use ${PC_LibGLIB2_LIBDIR} as a HINT for FIND_LIBRARY().
> >
> > Another option would be to add native .pc-file parsing to cmake, so cmake
> > can evaluate the pc-files itself, it could also check e.g. in
> > CMAKE_PREFIX_PATH/lib/pkg-config/ for the files, etc.
>
> That might be even better. Should then be filed as request to the cmake
> people

Yes.

> > > So the general pattern (looks like a candidate for a macro) is this, by
> > > the example of glib-2.0:
> > > --- 8< ---
> > > if (NOT WIN32)
> > >
> > >    find_package(PkgConfig)
> > >    if (PKG_CONFIG_FOUND)
> > >
> > >      pkg_check_modules(PC_LibGLIB2 QUIET glib-2.0)
> > >
> > >    endif (PKG_CONFIG_FOUND)
> > >
> > > endif(NOT WIN32)
> > >
> > > if (PC_LibGLIB2_INCLUDEDIR)
> > >
> > >     set(GLIB2_MAIN_INCLUDE_DIR ${PC_LibGLIB2_INCLUDEDIR})
> > >
> > > else (PC_LibGLIB2_INCLUDEDIR)
> > >
> > >     find_path(GLIB2_MAIN_INCLUDE_DIR  NAMES glib.h PATH_SUFFIXES
> > >     glib-2.0)
> > >
> > > endif (PC_LibGLIB2_INCLUDEDIR)
> > >
> > > find_library(GLIB2_LIBRARIES
> > >
> > >              NAMES glib-2.0
> > >              HINTS ${PC_LibGLIB2_LIBDIR}
> > >
> > > )
> > > --- 8< ---
> >
> > I think most of the if()'s are not necessary. pkg_check_modules() simply
> > does nothing if pkg-config has not been found.
>
> Should be noted in the FindPkgConfig.cmake, then. Attached patch okay?

Yes :-)
Or maybe "will silently do nothing" or something like this.

> > Also, even for the case
> > that pkg-config reported something, let's better double check.
> > Additionally, this way the GLIB2_MAIN_INCLUDE_DIR also ends up in the
> > cache, which is good. So I'd prefer something like the following:
> >
> > find_package(PkgConfig)
> > pkg_check_modules(PC_LibGLIB2 QUIET glib-2.0)
> >
> > find_path(GLIB2_MAIN_INCLUDE_DIR  NAMES glib.h
> >                                   HINTS ${PC_LibGLIB2_INCLUDEDIR}
> >                                   PATH_SUFFIXES glib-2.0)
> > find_library(GLIB2_LIBRARIES
> >              NAMES glib-2.0
> >              HINTS ${PC_LibGLIB2_LIBDIR} )
> >
> > Now that I copied it here... the variable above shouldn't be named
> > GLIB2_LIBRARIES (plural), but only GLIB2_LIBRARY or GLIB2_GLIB_LIBRARY,
> > since it is only one library.
> > At the end, GLIB2_LIBRARIES should be set to all libs which are needed
> > when linking against GLIB2 (even if it is only one then).
>
> Okay. Integrated your comments into FindGLIB2.cmake FindPopplerQt4.cmake
> and finally commited the changes for these two cmake files.
>
> But what do you think should be done for those with an additional version
> check?

Not sure. Can pkg-config also be told to just print the version of the package 
it has found ?

Alex


More information about the Kde-buildsystem mailing list