Summary: | напрасно ищет статические зависимости при динамической линковке | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Michael Shigorin <mike> |
Component: | cmake | Assignee: | 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
Это же Requires.private, требуется только для статики, зачем переносить? openbabel при сборке ругался, пока не подобавлял руками: Package 'xdamage', required by 'egl', not found Поскольку в сборочной среде требуется наличие пакетов и для компиляции, и для линковки -- видимо, всё-таки придётся прописывать содержимое Requires.private в порождаемые pkgconfig()-зависимости lib*-devel (или в эквиваленте). *** Bug 29997 has been marked as a duplicate of this bug. *** *** Bug 29998 has been marked as a duplicate of this bug. *** *** Bug 29999 has been marked as a duplicate of this bug. *** Нужно сказать, что проблема связана с особенностями поиска в 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 не нужен для сборки. (В ответ на комментарий №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, который, напротив, будет заполнять только статические переменные. (В ответ на комментарий №2) > openbabel при сборке ругался, пока не подобавлял руками: > Package 'xdamage', required by 'egl', not found Но главное, что это просто выводится cmake при поиске пакета, а на сборку не влияет. Если шум при сборке не мешает, можно ничего не делать, но я завёл issue на эту тему: https://gitlab.kitware.com/cmake/cmake/issues/18158 |