Dear Paul Fultz, Great, I will take a look. I'm glad to hear that you're also working on this issue!
Regards, mpsuzuki On 3/30/2018 9:08 AM, P F wrote:
The BCM(boost cmake modules) has `bcm_auto_pkgconfig` which will generate the pkgconfig file from a target, including the “Require” variable: http://bcm.readthedocs.io/en/latest/src/BCMPkgConfig.html#bcm-auto-pkgconfig It utilizes the `INTERFACE_PKG_CONFIG_NAME` property to generate the pkgconfig names for the dependent targets: http://bcm.readthedocs.io/en/latest/src/BCMProperties.html#interface-pkg-config-name Currently, it doesn't coordinate with FindPkgConfig’s imported targets yet, so you will need to manually inject the name. However, when using `bcm_auto_export` it will export the property, so that when users finds the dependency with `find_package`, it knows the corresponding pkgconfig module. On Mar 27, 2018, at 7:19 AM, suzuki toshiya <mpsuz...@hiroshima-u.ac.jp<mailto:mpsuz...@hiroshima-u.ac.jp>> 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
-- 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