<div dir="ltr">2017-12-04 20:35 GMT+01:00 DKLind <span dir="ltr"><<a href="mailto:davidklind@gmail.com" target="_blank">davidklind@gmail.com</a>></span>:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Domen Vrankar wrote<br>
<span class="">> I'm a bit confused. Is there something missing in the patch?<br>
> Attached patch only adds per component version override - it doesn't even<br>
> touch the multiple calls to `include(CPack)` and naming of different<br>
> packages (not their components but different package names).<br>
><br>
> Could you please provide a simple example of the intended use for<br>
> packaging<br>
> of multiple packages with multiple sub-packages?<br>
<br>
</span>I have a macro that each sub-project calls. See package macro below.<br>
<br>
Each sub project calls CMake install for it's various pieces (.so, .conf,<br>
init.d, etc.) then:<br>
    For a simple library package:<br>
    package(${PROJECT_NAME}<br>
        ${LIBRARY_VERSION}<br>
        "My library description"<br>
    )<br>
<br>
    For a daemon package:<br>
    package(${PROJECT_NAME}<br>
        ${DAEMONX_VERSION}<br>
        "My daemonx description"<br>
        ${CMAKE_SOURCE_DIR}/daemonx/<wbr>debian/DEBIAN/conffiles;<br>
        ${CMAKE_SOURCE_DIR}/daemonx/<wbr>debian/DEBIAN/postinst;<br>
        ${CMAKE_SOURCE_DIR}/daemonx/<wbr>debian/DEBIAN/postrm;<br>
        ${CMAKE_SOURCE_DIR}/daemonx/<wbr>debian/DEBIAN/prerm<br>
    )<br>
<br>
The last thing the top level CMakeLists.txt does is:<br>
    string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)<br>
    if(${CMAKE_BUILD_TYPE} STREQUAL release)<br>
        set(CPACK_STRIP_FILES TRUE)<br>
    endif()<br>
<br>
    string(REGEX REPLACE "([0-9]+).*$" "\\1" BUILD_MAJOR_VERSION<br>
${BUILD_VERSION})<br>
    string(REGEX REPLACE "[0-9]+\\.([0-9]+).*$" "\\1" BUILD_MINOR_VERSION<br>
${BUILD_VERSION})<br>
    string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*$<wbr>" "\\1"<br>
BUILD_PATCH_VERSION ${BUILD_VERSION})<br>
<br>
    set(CPACK_GENERATOR DEB)<br>
    set(CPACK_PACKAGE_VERSION_<wbr>MAJOR ${BUILD_MAJOR_VERSION})<br>
    set(CPACK_PACKAGE_VERSION_<wbr>MINOR ${BUILD_MINOR_VERSION})<br>
    set(CPACK_PACKAGE_VERSION_<wbr>PATCH ${BUILD_PATCH_VERSION})<br>
    set(CPACK_PACKAGE_VERSION ${BUILD_VERSION})<br>
    set(CPACK_DEBIAN_PACKAGE_<wbr>MAINTAINER "maintainer <<a href="mailto:maintainer@xyx.com">maintainer@xyx.com</a>>")<br>
    set(CPACK_PACKAGE_VENDOR xyz)<br>
<br>
    set(CPACK_PACKAGING_INSTALL_<wbr>PREFIX ${CMAKE_INSTALL_PREFIX})<br>
<br>
    set(CPACK_DEB_COMPONENT_<wbr>INSTALL TRUE)<br>
    set(CPACK_DEB_PACKAGE_<wbr>COMPONENT TRUE)<br>
<br>
<br>
In the macro, CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_VERSION works because of the<br>
patch.<br>
<br>
<br>
macro(package target version description)<br>
    string(TOUPPER ${target} TARGET)<br>
<br>
    string(REGEX REPLACE "([0-9]+).*$" "\\1" BUILD_MAJOR_VERSION ${version})<br>
    string(REGEX REPLACE "[0-9]+\\.([0-9]+).*$" "\\1" BUILD_MINOR_VERSION<br>
${version})<br>
    string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*$<wbr>" "\\1"<br>
BUILD_PATCH_VERSION ${version})<br>
<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_NAME ${target} CACHE STRING "package<br>
${target}")<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_VERSION ${version} CACHE STRING<br>
"package ${target}")<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_SECTION main CACHE STRING "package<br>
${target}")<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_PRIORITY standard CACHE STRING<br>
"package ${target}")<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_ARCHITECTURE<br>
${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "package ${target}")<br>
    set(CPACK_COMPONENT_${TARGET}_<wbr>DESCRIPTION ${description} CACHE STRING<br>
"package ${target}")<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>PACKAGE_CONTROL_EXTRA ${ARGN} CACHE STRING<br>
"package ${target}")<br>
<br>
    set(CPACK_DEBIAN_${TARGET}_<wbr>FILE_NAME<br>
${target}_${version}_${CMAKE_<wbr>PACKAGE_PLATFORM}.deb CACHE STRING "package<br>
${target}")<br>
endmacro()<br></blockquote><div><br></div><div>Try using this on CPackRPM with debuginfo packages or rpm default naming convention enabled (with this second part it's the same with CPackDeb apckages) - these are just two parts that you break that immediately come to mind.</div><div>Now you have to rename every package by hand, require a non standard macro just to set things up, you forfeit instead of gain automation (e.g. auto component deduction from install commands, package naming...). And you still cant override all the variables (e.g. maintainer).<br></div><div><br></div><div>While this might be enough for your use case and CPackDeb it wouldn't play nice with all CPackRPM features so it would cause them to diverge even further.</div><div><br></div><div>I'm still not convinced that it's worth it.</div><div><br></div><div>Regards,</div><div>Domen<br></div></div></div></div>