[CMake] Support for multiple components in cpack (reloaded)

Clinton Stimpson clinton at elemtech.com
Sat Aug 21 16:37:41 EDT 2010


On Aug 21, 2010, at 6:21 AM, Eric Noulard wrote:

> 2010/8/21 Eric Noulard <eric.noulard at gmail.com>:
> [...]
>> They change the number and the contents of the generated packages:
>>    3.a) CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE=1
>>          means you want to get a single package whose content
>>          is the merge of all components GROUPS
>> 
>>    3.b) CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE=1
>>           means you want to get a single package whose content
>>           is the merge of all COMPONENTS
>> 
>>     3.c) CPACK_COMPONENTS_IGNORE_GROUPS
>>           means you want to get 1 package per COMPONENT
>>           (the default is 1 package per GROUP)
>> 
> 
> .... argh push ENTER too fast...
> 
> The difference between 3.a) and 3.b) may not be obvious but
> one should know that COMPONENT install will install components
> which are specified in CPACK_COMPONENTS_ALL
> (component which are not specified there won't be installed at all in any case)
> BUT some component may NOT BELONG TO ANY GROUP.
> 
> In this case 3.b will include the "orphan" component whereas 3.a will NOT.
> 
> last but not least there exist a special component "automatically" generated
> by CPack the component is named "Unspecified" and contains all
> INSTALLed file/targets/... which do not specify COMPONENT.
> 
> If "Unspecified" is contained in CPACK_COMPONENTS_ALL then again
> 3.b will include the "Unspecified" component whereas 3.a will NOT.
> 
> 3.c should always include ALL COMPONENTS specified in CPACK_COMPONENTS_ALL.
> 
> Note that there is existing feature of CPack which would just make
> CPack "ignore" the component stuff this is CPACK_MONOLITHIC_INSTALL.
> The CPACK_MONOLITHIC_INSTALL has a different objective because:
> 
> * CPACK_MONOLITHIC_INSTALL is used AT CMake time
>  whereas 3.a, 3.b and 3.c may be used AT CPack time.
>  Thus if you use CPACK_MONOLITHIC_INSTALL all the CPack time
>  component stuff will be ignored.
> 
> * One other difference is the fact that CPack time component control variable
>  may let you package only a chosen portion of the INSTALLed things
>  CPACK_MONOLITHIC_INSTALL cannot do that.
> 
> Any feedback on this stuff is welcomed.
> 
> After that I will go on for RPM and DEB component support which will
> be similar but may be more difficult because it has to support
> inter-component dependencies which is just not handled at all
> for Archive Generators.
> 

I wondered if one would typically use groups if their project contained sub projects, and the sub projects had different conventions for the component names.
Would grouping be a way to overcome that?
It doesn't seem so, because in the wiki, the nsis example shows a hierarchy of components.
Or does one just make a common display name for multiple components?

Clint



More information about the CMake mailing list