[cmake-developers] Making Config.cmake files safer
David Cole
david.cole at kitware.com
Tue Nov 15 13:24:53 EST 2011
On Tue, Nov 15, 2011 at 1:19 PM, Alexander Neundorf <neundorf at kde.org> wrote:
> On Monday 14 November 2011, you wrote:
>> On 11/14/2011 4:01 PM, Alexander Neundorf wrote:
>> >> Instead of adding the code to the bottom of GenerateImportPropertyCode
>> >> please create a separate method next to it for that part.
>> >
>> > Done, in an updated version of the
>> > CheckImportedFileExistenceInConfigDotCMakeFiles branch.
>>
>> Looks good. My remaining hesitation is that the message gets duplicated
>> many times in the targets file and takes a lot of (visual) space but
>> its presence does not add much information for a (human) reader. I
>> wonder if we can accumulate a list of files to be checked and add one
>> test at the end of the targets file that looks for everything and
>> fails with a single message.
>
> I could do
>
> function(check_for_file _file _target)
> if(NOT EXISTS _file)
> message(FATAL_ERROR "... long error message...")
> endfunction()
>
> check_for_file(libFoo123.so Foo)
> ...
> check_for_file(libBar123.so Bar)
>
>
> Or I could collect the files and targets together, but then the error message
> becomes less straigh forward.
> Right now it is:
>
> The file "libbar.so.1.2.3" for the imported target "bar" does not exist.
> There are multiple possible reasons:
> * the file "libbar.so.1.2.3" has been manually deleted, renamed or moved to
> another location
> * a previous install or uninstall procedure did not run successfully to its
> end
> * the installation package was faulty, and contained "BarTargets.cmake",
> but not "libbar.so.1.2.3", which must always be installed together.
>
>
> Then it could be:
>
> There were files missing for imported targets. There are multiple possible
> reasons:
> * the files have been manually deleted, renamed or moved to
> another location
> * a previous install or uninstall procedure did not run successfully to its
> end
> * the installation package was faulty, and contained "BarTargets.cmake",
> but not the corresponding files, although they must always be installed
> together.
>
> Missing files:
> libbar123.so (for target "bar")
>
>
> I'm not sure in the second version is as clear to understand as the first one,
> since it has to talk generally about "the files" in the text, while the first
> one can directly use "libbar.so.123".
>
> Also, since this should be a rare error case, I'm not sure it makes sense to
> optimize it for the case of multiple missing files.
>
> Alex
>
I think the function approach is reasonable...
More information about the cmake-developers
mailing list