Bug 30001

Summary: напрасно ищет статические зависимости при динамической линковке
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: cmakeAssignee: Vitaly Lipatov <lav>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: at, lav, ldv, shrek, zerg
Version: unstable   
Hardware: all   
OS: Linux   

Description Michael Shigorin 2014-04-14 13:30:33 MSK
libfreetype-devel-2.5.3-alt2 не требует pkgconfig(harfbuzz), при этом:

Requires.private: zlib, libpng, harfbuzz >= 0.9.19

PS: похоже, это хозяйство придётся как-то доавтоматизировать -- не переносить же всё из private руками...
Comment 1 Dmitry V. Levin 2014-04-14 13:50:33 MSK
Это же Requires.private, требуется только для статики, зачем переносить?
Comment 2 Michael Shigorin 2014-04-14 23:53:26 MSK
openbabel при сборке ругался, пока не подобавлял руками:
Package 'xdamage', required by 'egl', not found
Comment 3 Michael Shigorin 2014-04-16 02:19:09 MSK
Поскольку в сборочной среде требуется наличие пакетов и для компиляции, и для линковки -- видимо, всё-таки придётся прописывать содержимое Requires.private в порождаемые pkgconfig()-зависимости lib*-devel (или в эквиваленте).
Comment 4 Michael Shigorin 2014-04-16 02:19:19 MSK
*** Bug 29997 has been marked as a duplicate of this bug. ***
Comment 5 Michael Shigorin 2014-04-16 02:19:27 MSK
*** Bug 29998 has been marked as a duplicate of this bug. ***
Comment 6 Michael Shigorin 2014-04-16 02:19:32 MSK
*** Bug 29999 has been marked as a duplicate of this bug. ***
Comment 7 Vitaly Lipatov 2018-07-07 14:12:51 MSK
Нужно сказать, что проблема связана с особенностями поиска в cmake. Наблюдать её можно в openbabel и scribus, они собираются cmake.

Например, от простейшего CMakeLists.txt
include(FindPkgConfig)
pkg_search_module(CAIRO REQUIRED cairo>=1.14.0)

можно увидеть
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2") 
-- Checking for one of the modules 'cairo>=1.14.0'
Package pixman-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `pixman-1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'pixman-1', required by 'cairo', not found
Package pixman-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `pixman-1.pc'
to the PKG_CONFIG_PATH environment variable

при том, что, конечно же, pixman-1 не нужен для сборки.
Comment 8 Vitaly Lipatov 2018-07-07 15:03:05 MSK
(В ответ на комментарий №7)
> Нужно сказать, что проблема связана с особенностями поиска в cmake. Наблюдать
> её можно в openbabel и scribus, они собираются cmake.
> 
> Например, от простейшего CMakeLists.txt
> include(FindPkgConfig)
> pkg_search_module(CAIRO REQUIRED cairo>=1.14.0)
> 
> можно увидеть
> -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2") 
> -- Checking for one of the modules 'cairo>=1.14.0'
> Package pixman-1 was not found in the pkg-config search path.
> Perhaps you should add the directory containing `pixman-1.pc'
> to the PKG_CONFIG_PATH environment variable
> Package 'pixman-1', required by 'cairo', not found
> Package pixman-1 was not found in the pkg-config search path.
> Perhaps you should add the directory containing `pixman-1.pc'
> to the PKG_CONFIG_PATH environment variable
> 
> при том, что, конечно же, pixman-1 не нужен для сборки.
Причина в том, что FindPkgConfig создаёт два набора переменных — для динамической и для статической линковки.

Вот этот код:
# Invokes pkgconfig two times; once without '--static' and once with
# '--static'
macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp)
  _pkgconfig_invoke("${_pkglist}" ${_prefix}        ${_varname} "${cleanup_regexp}" ${ARGN})
  _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static  ${ARGN})
endmacro()


Предлагаю убрать у него поиск библиотек для статической линковки.
Если и найдётся один проект, которому это потребуется, можно положить FindPkgConfigStatic, который, напротив, будет заполнять только статические переменные.
Comment 9 Vitaly Lipatov 2018-07-07 15:27:54 MSK
(В ответ на комментарий №2)
> openbabel при сборке ругался, пока не подобавлял руками:
> Package 'xdamage', required by 'egl', not found
Но главное, что это просто выводится cmake при поиске пакета, а на сборку не влияет.

Если шум при сборке не мешает, можно ничего не делать, но я завёл issue на эту тему:
https://gitlab.kitware.com/cmake/cmake/issues/18158