On Tuesday 14 February 2012, Yury G. Kudryashov wrote: > Alexander Neundorf wrote: > > On Tuesday 14 February 2012, Yury G. Kudryashov wrote: > >> will substitute @PACKAGE_INCLUDE_INSTALL_DIR@ by "../../../include" and > >> @PACKAGE_MYPKGDATA_INSTALL_DIR@ by "../../../share/mypkg" (both > >> transformed to be relative to DESTINATION). > > > > A problem I see here (and which we discussed already before on kde- > > buildsystem) is the handling of the install() command. > > > > I thought a bit about a syntax like this, which I would like: > > > > configure_config_file(BarConfig.cmake.in BarConfig.cmake > > > > INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} > > PATH_VARS INCLUDE_INSTALL_DIR DATA_INSTALL_DIR > > EXPORT_FILE BarExport.cmake) > > Why do you need EXPORT_FILE parameter? How can you use it? Include > automatically? Then you need VERSION_FILE parameter as well. > > > but this can't work, can it ? > > > > In the BarConfig.cmake file there would still be either a > > > > set(BAR_INCLUDE_DIR "@INCLUDE_INSTALL_DIR@") > > which would work for absolute paths, or a > > > > set(BAR_INCLUDE_DIR "${SomePrefix}/@INCLUDE_INSTALL_DIR@") > > which would work only for relative paths, but a simple set() cannot work > > for both cases. Am I missing something ? > > You'll have in BarConfig.cmake.in > set(BAR_INCLUDE_DIR "@PACKAGE_HELPER_INCLUDE_INSTALL_DIR@) > > After configure_config_file() you'll have > # At top > get_filename_component(_PKG_CURRENT_DIR "${CURRENT_LIST_FILE}" PATH)
Just a tip: since 2.8.3 or so there is ${CMAKE_CURRENT_LIST_DIR} > get_filename_component(_PKG_PREFIX_PATH "${_PKG_CURRENT_DIR}/../../.." > ABSOLUTE) The ../../../ will be also calculated by the macro, using RELATIVE_PATH and the DESTINATION parameter, right ? > #in place of your set() > set(BAR_INCLUDE_DIR "${_PKG_PREFIX_PATH}/include") > > > Do you have a working example ? > > Not yet. I think about something like this (not tested). > > foreach(var ${PACAKGE_HELPER_PATH_VARS}) > if(NOT DEFINED ${var}) > message(FATAL_ERROR ...) > else if(IS_ABSOLUTE ${${var}}) > file(RELATIVE_PATH PACKAGE_HELPER_${var} ${CMAKE_INSTALL_PREFIX} > ${${var}}) > else() > set(PACKAGE_HELPER_${var} ${${var}}) > endif() > endforeach() > > It would be nice to make those PACKAGE_HELPER_* vars local to > configure_config_file() function. If it's a function(), they are local automatically. Also still not tested, but now it should have the right prefix: foreach(var ${PACAKGE_HELPER_PATH_VARS}) if(NOT DEFINED ${var}) message(FATAL_ERROR ...) else if(IS_ABSOLUTE ${${var}}) string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${_PKG_PREFIX_PATH}" PACKAGE_HELPER_${var} "${${var}}" else() set(PACKAGE_HELPER_${var} ${${var}}) endif() else() set(PACKAGE_HELPER_${var} "\${_PKG_PREFIX_PATH}/${${var}}") endif() endforeach() A nice feature of my proposed macro was that it additionally checked that the file/directory actually exists. That's a nice thing, because it makes sure that you don't get information out of the Config.cmake file which is wrong (due to bad packaging or whatever). Alex -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers