On 17. Mar, 2010, at 15:43 , Luigi Calori wrote:

> 
> [...]
>> He's not downloading with CMake, he just told git that in this directory is 
>> a submodule. The user has then to fetch it himself with one command:
>> 
>> http://git.wiki.kernel.org/index.php/GitSubmoduleTutorial
>>  
> Sorry ... no git expert at all.... my point was just to hack  
> ExternalProject_add to let specify different download ways, apart from URL, 
> SVN_REPOSITORY and mine BZR_REPOSITORY .... would like to have also 
> GIT_REPOSITORY and HG_REPOSITORY ....
>> [...]
>>  
>>>> 2) also build your main project wit a ExternalProject_Add and drive the 
>>>> whole thing from a "master-CMakeLists.txt"
>>>> 
>>>> The first one is probably easier to set up, but requires you to guess the 
>>>> installation names and paths correctly. The second option requires you to 
>>>> restructure your whole build system and adds considerable complexity due 
>>>> to the communication between your master-project and the external 
>>>> projects. For this communication I'd try the following:
>>>> 
>>>> - In the master project do all the feature-detection and setting of cache 
>>>> variables (such as options etc)
>>>> - Write a cache-initializer script to the binary tree
>>>> - Do all the ExternalProject_Add calls and specify the cache-initializer 
>>>> script with the -C option in CMAKE_ARGS
>>>>       
>>> This suggestion is really interesting:    the purpouse is to let any config 
>>>  options in the "master"  projects to be passed to the "slaves"?
>>> Have you any examples?
>>>    
>> 
>> You could pass every single cache variable using -D in CMAKE_ARGS, but that 
>> becomes pretty tedious very soon... Currently I don't have any example, 
>> sorry.
>>  
> from http://www.cmake.org/cmake/help/cmake-2-8-docs.html#opt:-Cinitial-cache
> seems that what  you are suggesting is not  passing the master cache to the 
> slaves, but to build a selection of variables and build a script in a 
> different format....
> Do you suggesto to pass the same script to ALL the subprojects? I' ll try to 
> find some examples of that usage.....seems useful

Yes, you'll have to generate a file containing "set(<var> <val> CACHE <type> 
<doc>)" invocations. Probably I'd create wrappers for OPTION and SET which add 
such lines to a global property and then I can use this to write the file in 
one go.


>>  
>>> I came up with a schema like 2:
>>> any project is built as external, dependencies are resolved by  
>>> ExternalProject_Add and I have used CMAKE_ARGS to communicate settings:
>>> As most of cmake projects were based on FindXXX stuff for finding deps, I 
>>> have overridden the necessary modules in order to make the projects find 
>>> the good components at configure time.
>>>    
>> 
>> That's what you could do with the cache-initialization script, no need to 
>> override the FindXXX modules. If more than one of the external projects use 
>> the same FindXXX module, do it in the master and then communicate the 
>> results using the initializer script. This way the user can easily override 
>> the results during the configure-step and get consistent results in all the 
>> sub-projects. Only thing that has me worried is when the user aborts the 
>> build, changes the settings in the master cache and then restarts the build. 
>> You'd need to somehow set up correct dependencies...
>>  
> If the  cache-initialization script is single, then would be good that all 
> the slave projects file_depends on that.... but do not know how to set a file 
> dependency on the configure step of ExternalProject_Add
>> If sub-project B does a FIND_PACKAGE(A REQUIRED) and A is built as another 
>> sub-project, then you can specify A_DIR to the B project containing the path 
>> to the directory containing its A-config.cmake.
>>  
> Yes, that would be good.... unfortunately not so many cmake projects builds 
> xxx-config.cmake in their build-install process.... It would be nice to have 
> good examples of usages:
> this could be a  "standard" way of building dependencies throug cmake .

Every CMake based project should do that if it is useful as a "development 
package"...

> 
> Is this ExternalProject_Add feature really used/developed?   I find it really 
> nice but a little scared of weather it will be really supported and improved.
> I have done some patching on it but not know if there is a group of 
> user/developer eventually interested to submit mods to

It is actively used and developed, but also relatively new. If you have 
improvements, it's best to create a tracker item with a patch and description 
there and post the link to the item on this list.


Michael

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to