Dear Nikos, Thank you for concrete suggestion!
Nikos Chantziaras wrote: > Is there a reason why you can't generate your .pc file from a .pc.in > file using the configure_file() function? Yes, that's what I'm doing now :-) https://github.com/mpsuzuki/poppler/compare/5e7aef9d...52ec0ec8#diff-af3b638bc2a3e6c650974192a53c7291 > Requires: @PKGCONF_REQ_PUB@ > Requires.private: @PKGCONF_REQ_PRIV@ > Libs.private: -L"${libdir}" -lmylibrary @PKGCONF_LIBS_PRIV@ Here here. The functions I'm looking for is the helper functions to construct @PKGCONF_REQ_PUB@, @PKGCONF_REQ_PRIV@, and @PKGCONF_LIBS_PRIV@. > You then set the PKGCONF_* variables in your cmake file. This is what I > use in a project of mine. You can use it as an example: > > https://github.com/realnc/SDL_audiolib/blob/master/CMakeLists.txt Also thanks for concrete example. It seems that you have already spot the appropriate pkg-config module name to be written in pc file (so you could hardcode the name of the module). My problem is that sometimes the appropriate pkg-config module name is unclear, because some package finders in cmake do not invoke pkg-config at all, or, even if pkg-config is invoked, some package finders do not return the names of found modules. -- Reading other (kind) suggestions to me, it seems that the majority of cmake users think "retrieving the info from pkg-config is still practical in some cases, but providing the info to pkg-config is not practical anymore". that's ok, it answers my question "why I cannot find these functions?", the answer was simple "because few people wanted such". Sincerely I thank to everybody answered to my question. Regards, mpsuzuki > On 27/03/18 19:10, suzuki toshiya wrote: >> Dear Craig, >> >> Thank you for prompt reply. But all 3 functions; pkg_get_variable(), >> pkg_check_modules(), pkg_search_module() are different from my purpose. >> >> in my impression, these functions are designed to retrieve the infos >> from/via pkg-config, not to generate the infos to be written in pkg- >> config's pc files. >> >> for the function 1 (lookup an available module from a list), >> pkg_check_modules() and pkg_search_module() are candidate, but >> they are not the straight solutions. >> >> taking a case that trying to find available module from libjpeg, >> libjpeg8, libjpeg8-turbo, libjpeg9, libjpeg62, how pkg_check_modules() >> or pkg_search_module() could be used? it would be something like... >> >> pkg_check_modules(_pc libjpeg libjpeg8 libjpeg8-turbo libjpeg9 libjpeg62) >> foreach(mod IN LISTS "libjpeg;libjpeg8;libjpeg8-turbo;libjpeg9;libjpeg62") >> if (NOT ("${_pc_${mod}_VERSION}" STREQUAL "")) >> set(FOUND_MOD "${mod}") >> endif() >> endforeach(mod) >> message("${FOUND_MOD} is first available module") >> >> I think it's slightly troublesome, because I have to write single >> list at 2 places, in different syntax. >> >> -- >> >> Also, yet I'm not sure how IMPORTED_TARGET could be used to make >> "-L/xxx -lyyy" from "/xxx/libyyy.so". According to >> https://cmake.org/cmake/help/latest/command/target_link_libraries.html >> , the contents of the imported target are the full pathnames of >> the libraries, or, the plain library name ("bar" of "libbar.so"), >> or other linker flag. The function I'm looking for is a conversion >> *from* the full pathname *to* linker flag + plain library name. >> I cannot find if imported target has a conversion feature from one >> to another - am I overlooking something important? >> >> Regards, >> mpsuzuki >> >> Craig Scott wrote: >>> You most likely want to use the >>> FindPkgConfig<https://cmake.org/cmake/help/latest/module/FindPkgConfig.html> >>> module and also use the IMPORTED_TARGET option with the commands provided >>> therein. >>> >>> On Tue, Mar 27, 2018 at 11:19 PM, suzuki toshiya >>> <[email protected]<mailto:[email protected]>> wrote: >>> Hi all, >>> >>> I'm looking for 2 features to generate pkg-config pc files. >>> I already wrote something, but some experts advised that there >>> would be many people trying to do such, and there might be existing >>> solution. If such functions are already included in cmake's >>> official modules, please let me know. Of course, combination >>> of existing functions would be OK. >>> >>> function 1) >>> ----------- >>> >>> ...is trying to find an available pkg-config module name from a >>> list of several candidates. the typical usecase would be a >>> search of libjpeg by pkg-config (libjpeg? libjpeg8? libjpeg8-turbo? >>> libjpeg9? libjpeg62? ...). getting a name of module is important >>> to write "Require" variable of pc file. >>> >>> there is already pkg_search_module() searching an available module >>> from a list, but it does not return the name of found module. >>> thus it cannot help to write "Require" variable. >>> >>> what I wrote is something like this. >>> >>> # >>> # PKG_SEARCH_AVAILABLE_MODULE([var-name-of-found-module] [modules]) >>> # >>> # there is pkg_search_module(), but it does not clarify >>> # which module was found. >>> # >>> # this function does not set xxx_CFLAGS xxx_LIBS etc. >>> # >>> # use like: >>> # PKG_SEARCH_AVAILABLE_MODULE(PC_LIBJPEG >>> "libjpeg;libjpeg8-turbo;libjpeg8;libjpeg9;libjpeg62") >>> # >>> function(PKG_SEARCH_AVAILABLE_MODULE _found_pkg pkg_list) >>> set(_PKG_FOUND FALSE) >>> foreach(_pkg IN LISTS pkg_list) >>> pkg_check_modules(_PKG "${_pkg}") >>> if (_PKG_FOUND) >>> set("${_found_pkg}_FOUND" TRUE PARENT_SCOPE) >>> set("${_found_pkg}_MODULE_NAME" "${_pkg}" PARENT_SCOPE) >>> return() >>> endif() >>> endforeach(_pkg) >>> endfunction(PKG_SEARCH_AVAILABLE_MODULE) >>> >>> function 2) >>> ----------- >>> ...makes something like LDFLAGS + LIBS from the pathnames of libraries. >>> some library finders of cmake do not return "-L/xxx -lyyy" values >>> but returns "/xxx/libyyy.so". pkg-config has some difficulties >>> to hold such raw pathnames of the libraries (e.g. pkg-config >>> use "Libs" variable for both of static and shared linking, >>> thus having "libxxx.a" or "libxxx.so" explicitly is not good), >>> so, the translation from "/xxx/libyyy.so" to "-L/xxx -lyyy". >>> >>> what I wrote is something like this: >>> >>> # >>> # MAKE_LDFLAGS_FROM_LIBPATH([var-ldflags+libs] [libpath]) >>> # >>> function(MAKE_LDFLAGS_FROM_LIBPATHS _ldflags _libpaths) >>> foreach(_libpath IN LISTS _libpaths) >>> string(REGEX REPLACE "/[^/]*$" "" _libdir "${_libpath}") >>> >>> string(REGEX REPLACE "^.*/" "" _lib "${_libpath}") >>> string(REGEX REPLACE >>> "(\\${CMAKE_STATIC_LIBRARY_SUFFIX}|\\${CMAKE_SHARED_LIBRARY_SUFFIX})$" "" >>> _lib >>> "${_lib}") >>> string(REGEX REPLACE "^lib" "" _lib "${_lib}") >>> >>> set(__ldflags "${__ldflags} ${CMAKE_LIBRARY_PATH_FLAG}${_libdir} >>> ${CMAKE_LINK_LIBRARY_FLAG}${_lib}") >>> endforeach(_libpath) >>> set("${_ldflags}" "${__ldflags}" PARENT_SCOPE) >>> endfunction(MAKE_LDFLAGS_FROM_LIBPATH) >>> >>> Regards, >>> mpsuzuki >>> >>> -- >>> >>> Powered by www.kitware.com<http://www.kitware.com> >>> >>> Please keep messages on-topic and check the CMake FAQ at: >>> http://www.cmake.org/Wiki/CMake_FAQ >>> >>> Kitware offers various services to support the CMake community. For more >>> information on each offering, please visit: >>> >>> CMake Support: http://cmake.org/cmake/help/support.html >>> CMake Consulting: http://cmake.org/cmake/help/consulting.html >>> CMake Training Courses: http://cmake.org/cmake/help/training.html >>> >>> Visit other Kitware open-source projects at >>> http://www.kitware.com/opensource/opensource.html >>> >>> Follow this link to subscribe/unsubscribe: >>> https://cmake.org/mailman/listinfo/cmake >>> >>> >>> >>> -- >>> Craig Scott >>> Melbourne, Australia >>> https://crascit.com >>> > > -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake
