[CMake] still having a problem with PackageMaker, and now DEB

Chris Wolf cw10025 at gmail.com
Sat Aug 7 14:17:17 EDT 2010



On 8/7/10 12:13 PM, David Cole wrote:
> On Sat, Aug 7, 2010 at 11:55 AM, Chris Wolf <cw10025 at gmail.com> wrote:
> 
>>
>>
>> On 8/7/10 11:22 AM, David Cole wrote:
>>> On Sat, Aug 7, 2010 at 11:02 AM, Chris Wolf <cw10025 at gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On 8/7/10 9:44 AM, David Cole wrote:
>>>>> On Sat, Aug 7, 2010 at 9:26 AM, Chris Wolf <cw10025 at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On 8/7/10 7:14 AM, Eric Noulard wrote:
>>>>>>> 2010/8/7 Chris Wolf <cw10025 at gmail.com>:
>>>>>>>> On 8/6/10 8:55 PM, Eric Noulard wrote:
>>>>>>>>>
>>>>>>>>> Did you try the command line?
>>>>>>>>>
>>>>>>>>> cpack -D CPACK_PACKAGING_INSTALL_PREFIX="/opt" -G DEB
>>>>>>>>>
>>>>>>>>> it works for me.
>>>>>>>>>
>>>>>>>>> if it works for you may be
>>>>>>>>> CPACK_PACKAGING_INSTALL_PREFIX is set to late
>>>>>>>>> in the CMakeLists.txt?
>>>>>>>>>
>>>>>>>>
>>>>>>>> Yes, I tried that about 8 hours ago:
>>>>>> http://www.cmake.org/pipermail/cmake/2010-August/038785.html
>>>>>>>>
>>>>>>>> I have to say NOW it's working.  Sorry - I suppose I was changing
>> too
>>>>>> many things at one back then
>>>>>>>> and I was missing something.
>>>>>>>>
>>>>>>>> Ok, this issue is resolved, thank you.
>>>>>>>
>>>>>>> Good to know.
>>>>>>>
>>>>>>> [...]
>>>>>>>>
>>>>>>>> Sorry to beat a "deadhorse", since I see this has already been
>>>>>> discussed:
>>>>>>>>
>>>>>>>> http://www.mail-archive.com/cmake@cmake.org/msg16180.html
>>>>>>>>
>>>>>>>> I think that guy had a good proposal - being able to control path
>>>>>> prefixes
>>>>>>>> at a per/generator level.  I guess for now, I can just run cpack
>>>>>> multiple
>>>>>>>> times with path/generator options on the command line.
>>>>>>>
>>>>>>> I think you are right, command line is the current best way to go.
>>>>>>> Now having a Generator Specific
>>>>>>> CPACK_<GEN>_PACKAGING_INSTALL_PREFIX
>>>>>>> wouldn't be that difficult to implement.
>>>>>>>
>>>>>>> Now when enough [wo]man power will be given in
>>>>>>> http://public.kitware.com/Bug/view.php?id=7000
>>>>>>> this can be discussed.
>>>>>>>
>>>>>>> Re-read the bug comments and may be add your ideas there.
>>>>>>>
>>>>>>> And I do not think the horse is dead, we are merely waiting
>>>>>>> for a jockey for ridding bug #7000 :-)
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> Ok, I added a note to this bug with an example proposed code change.
>>  If
>>>> it
>>>>>> looks good, I can try it myself and if it works I can submit patches.
>>>>>>
>>>>>> Let me know, thanks,
>>>>>>
>>>>>>
>>>>> You can already do what you propose with that change today: in a
>>>>> CPACK_PROJECT_CONFIG_FILE
>>>>> file. (Without making any C++ changes and without waiting for
>> resolution
>>>> of
>>>>> issue #7000...).
>>>>>
>>>>> Inside that file, you can inspect the value of CPACK_GENERATOR and
>>>>> set/override other CPACK_* variables. In this case, you would have as
>>>> many
>>>>> if() blocks as needed to set CPACK_PACKAGING_INSTALL_PREFIX to whatever
>>>>> value you want for each generator.
>>>>>
>>>>> The CPACK_PROJECT_CONFIG_FILE file is included *at cpack time* and is
>>>>> intended to give you the hook you need to do generator specific stuff.
>>>>>
>>>>> Perhaps the proposed change is still a good one and would make this
>> task
>>>>> easier. Although it seems silly to me to invent a bunch of new
>> variables
>>>>> when there's already a technique that could be used to achieve the task
>>>>> today. We already, as you have observed, have enough "prefix" variables
>>>>> floating around. I'm not sure adding more is the way to go.
>>>>>
>>>>
>>>> To try to understand your approach, I created a file,
>>>> "MyCpackConfig.cmake",
>>>> which looks like:
>>>>
>>>> # keep cmake-generated settings
>>>> include(CPackConfig.cmake)
>>>>
>>>> if("${CPACK_GENERATOR}" STREQUAL "PackageMaker")
>>>>   set(CPACK_PACKAGING_INSTALL_PREFIX "/tmp/local")
>>>> endif("${CPACK_GENERATOR}" STREQUAL "PackageMaker")
>>>>
>>>>
>>>> ...then I invoke like:
>>>>
>>>> cpack --config MyCpackConfig.cmake
>>>>
>>>> ...and yet, the results show that CPACK_PACKAGING_INSTALL_PREFIX was not
>>>> overriden for PackageMaker.  I am at a loss here...
>>>>
>>>>
>>>>
>>> You do not need to include(CPackConfig.cmake) -- and, in fact, you
>>> shouldn't.
>>>
>>> Since you did include it, it has CPACK_GENERATOR defined to a list from
>>> CPackConfig.cmake, rather than cpack's internal definition. (So it's
>> never
>>> equalling PackageMaker...) So you're not seeing your override take
>> effect...
>>>
>>> The CPACK_PROJECT_CONFIG_FILE is included automatically on a
>> per-generator
>>> basis. It only need contain overrides.
>>>
>>> Here's how it goes:
>>> - cpack runs
>>> - it includes CPackConfig.cmake
>>> - iterates over the generators listed in that file's CPACK_GENERATOR
>> (unless
>>> told to use just a specific one via -G on the command line...)
>>> --- foreach generator, it then
>>>   - sets CPACK_GENERATOR to the one currently being iterated
>>>   - includes the CPACK_PROJECT_CONFIG_FILE
>>>   - produces the package for that generator
>>>
>>> This is the key: For each generator listed in CPACK_GENERATOR in
>>> CPackConfig.cmake, cpack will *reset* CPACK_GENERATOR internally to *the
>> one
>>> currently being used* and then include the CPACK_PROJECT_CONFIG_FILE.
>>>
>>> As I said before, it's somewhat confusing, but once you get it, it does
>> make
>>> sense.
>>>
>>> So, to recap:
>>> -- do not include CPackConfig in your CPACK_PROJECT_CONFIG_FILE
>>> -- just run "cpack" on the command line
>>>
>>> I hope this gets you over the finish line, now. ;-)
>>>
>>>
>>> David
>>>
>>
>> Ok, now *that* explanation did the job - thanks!
>>
>> I was under the impression that CPACK_PROJECT_CONFIG_FILE was going to
>> *replace* the cmake-generated CPackConfig.cmake and that it would only
>> be referenced once for all the cpack generators.
>>
>> Unless I missed it, I would recommend putting this latest explanation
>> from you in a Wiki page.
>>
>> Thanks again,
>>
>>  -Chris
>>
> 
> 
> Excellent! I am now officially done for the weekend. :-)
> 
> Would you recommend a certain location on the Wiki? i.e. -- were you looking
> someplace for this, and found a place where you think such an explanation
> should go...? I'll be happy to add this to the Wiki, but frequently, I'm not
> sure where to link stuff from. If I knew around where you were looking,
> maybe that would be the right place to link from to get to the new Wiki
> page.
> 
> If you give me a hint about where, I'll add this to the Wiki next week
> sometime.
> 
> Thanks,
> David
> 

Here is were I spent most of my time trying to figure this out:
http://www.cmake.org/Wiki/CMake:CPackPackageGenerators

This off-site (not under "cmake.org" domain) page is also helpful:
http://www.itk.org/Wiki/CMake:CPackConfiguration

I would put it prominently near the beginning so a user does not have
to hunt for the info - or maybe the body of the text wherever is 
convenient and a link in the  "CPack_Package_Generators" opening 
paragraph:
http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#CPack_Package_Generators

Thanks again,

  -Chris


More information about the CMake mailing list