Choosing whether a dependency is optional or required.
Raphael Kubo da Costa
kubito at gmail.com
Thu Feb 3 00:07:30 CET 2011
Andreas Pakulat <apaku at gmx.de> writes:
> On 29.01.11 11:32:01, Raphael Kubo da Costa wrote:
>> I've recently committed a patch to Kopete's Yahoo! protocol that makes
>> libjasper required when the protocol is built.
>>
>> As I can see, the other Kopete protocols usually check for their
>> dependencies in the top-level CMakeLists.txt with
>>
>> macro_optional_find_package(Foo)
>> macro_log_feature(... FALSE ...) # FALSE for the required parameter
>>
>> and then, in protocols/CMakeLists.txt they do something along these
>> lines:
>>
>> if (WITH_someprotocol AND FOO_FOUND)
>> add_subdirectory(someprotocol)
>> else (WITH_someprotocol AND FOO_FOUND)
>> message(STATUS "Not building someprotocol")
>> endif (WITH_someprotocol AND FOO_FOUND)
>>
>> The "Not building" messages are shown right before the list of optional
>> and required dependencies which have been found/not found, and Foo is
>> shown as an optional dependency which could not be found.
>>
>> On the other hand, in the patch I've applied the checking is done
>> differently:
>>
>> # protocols/CMakeLists.txt
>> if (WITH_someprotocol)
>> add_subdirectory(someprotocol)
>> endif (WITH_someprotocol)
>>
>> # protocols/someprotocol/CMakeLists.txt
>> find_package(Foo)
>> macro_optional_find_package(... TRUE ...)
>>
>> So Foo is listed as a required dependency when the protocol is built.
>>
>> In the end, what's the way to go here with regards to considering these
>> protocol dependencies required or optional? And is find_package
>> preferred here in case we make the dependency required?
>
> Well, there's no policy on this in general I believe. Basically you and
> your team need to decide wether specifying WITH_XXX and not having the
> dependencies is an error or not. If you decide that its no error, then
> the first way would be correct, if you decide otherwise your way would
> be better.
>
> Also the default setting of the WITH_XXX options makes a difference
> here, as a user I think ideal would be:
>
> check for dependencies
> if dependency-found, set WITH_XXX to true (not using FORCE though so I
> can still disable) else set WITH_XX to false (again not with FORCE)
> if WITH_XXX is set to true, consider it an error if the dependencies are
> not found and log it with macro_optional_find_package( ... TRUE ... ).
Alright, thanks. In this specific case, the patch I committed is
probably correct then, as the protocol in question cannot be built
without that dependency.
I'll take a look at the other cases when I have some more time.
More information about the Kde-buildsystem
mailing list