[CMake] ExternalProject + Patch command

Luigi Calori l.calori at cineca.it
Wed Mar 16 13:26:24 EDT 2011


On 16/03/2011 17.37, David Cole wrote:
> It would be nice (as a future feature addition) to be able to support
> sharing the download/update/patch/source_dir aspects of an
> ExternalProject target among multiple configurations and avoid the
> multiple runs of these things that are exactly the same independent of
> the config.
>
> Until that dream becomes reality, though.....
I had once modified the External to include support for <SRC_STAMP_DIR>
#    [SRCSTAMP_DIR dir]          # Directory to store source step timestamps

I still have the file but i unfortunated did not kept it up to date with 
recent mods
> You could run a script as the PATCH_COMMAND, and put some sort of "has
> this patch already been applied to this source tree" logic into the
> script, and only actually do the patch command if not already applied.
>
> It's a work-around, and might be ugly, but it should work.
Another way is to split the project in two:

one build the source and the other do the config,build,install like

ExternalProject_Add(
     ${PACKAGE}-GetSource
     SOURCE_DIR ${Package_Source_Dir}
     STAMP_DIR ${Package_Source_Stamp_Dir} 
<----------------------------------------------- I set this in a place 
"near" the sources, so can remove the build without re-patch
     SVN_REPOSITORY ........................
     PATCH_COMMAND <----- your patch--->
     UPDATE_COMMAND ""
     CONFIGURE_COMMAND ""
     BUILD_COMMAND ""
     INSTALL_COMMAND ""
)

if(Package_current_dependencies_effective_line)
     set( Package_current_dependencies_effective_line 
${Package_current_dependencies_effective_line} ${PACKAGE}-GetSource)
else()
     set(Package_current_dependencies_effective_line DEPENDS 
${PACKAGE}-GetSource)
endif()



ExternalProject_Add(
     ${PACKAGE}
     SOURCE_DIR ${Package_Source_Dir}
     DOWNLOAD_COMMAND "" <--------------------------------------this is 
important
     BUILD_DIR ......
    INSTALL_DIR ............
     CMAKE_COMMAND ${CMAKE_COMMAND}
     CMAKE_ARGS
         ${Package_std_cmake_args}
         ${Package_additional_cmake_args}
     BUILD_COMMAND ........
     INSTALL_COMMAND ....................
     ${Package_current_dependencies_effective_line} 
<------------------------ add ${PACKAGE}-GetSource to your dependencies
     STEP_TARGETS configure build

)

HTH
                 Luigi


>
> HTH,
> David
>
>
> On Wed, Mar 16, 2011 at 11:40 AM, Johan Björk<phb at spotify.com>  wrote:
>> Hi everyone,
>>
>>
>> I'm using an SVN repository and a PATCH command. It seems to work
>> fine, but when I'm selecting a different build configuration, all
>> steps will be executed again (as expected), but it results in my patch
>> being applied twice.
>>
>> Any ideas how to work around this?
>>
>> My externalProject command for reference:
>>
>>     ExternalProject_Add(Breakpad
>>       SVN_REPOSITORY http://google-breakpad.googlecode.com/svn/trunk/
>>       UPDATE_COMMAND ""
>>       CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
>> -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
>> -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
>>       PATCH_COMMAND patch<
>> ${CMAKE_CURRENT_LIST_DIR}/other/patches/breakpad.patch
>>     )
>>
>> Thanks
>> /Johan
>> _______________________________________________
>> 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
>>
> _______________________________________________
> 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
>
>



More information about the CMake mailing list