Re: [CMake] Copying directories as post build events without losing parent directory

2015-12-07 Thread David Cole via CMake
$ cmake -E copy_directory foo bar/foo

?


On Mon, Dec 7, 2015 at 4:53 PM, Robert Dailey  wrote:
> I have a custom target which runs a command similar to this:
>
> $ cmake -E copy_directory foo bar
>
> The problem is that the contents of "foo" are copied inside of "bar",
> instead of it creating a directory "bar/foo" and putting the contents
> in there.
>
> Is there a way to make copy_directory behave like this? If not, I
> guess my only option is to create a little CMake script that runs
> file(INSTALL) to copy the directories like I want.
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: 
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more 
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at 
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake


Re: [CMake] Copying directories as post build events without losing parent directory

2015-12-07 Thread Robert Dailey
On Mon, Dec 7, 2015 at 3:59 PM, David Cole  wrote:
> $ cmake -E copy_directory foo bar/foo
>
> ?
>
>
> On Mon, Dec 7, 2015 at 4:53 PM, Robert Dailey  
> wrote:
>> I have a custom target which runs a command similar to this:
>>
>> $ cmake -E copy_directory foo bar
>>
>> The problem is that the contents of "foo" are copied inside of "bar",
>> instead of it creating a directory "bar/foo" and putting the contents
>> in there.
>>
>> Is there a way to make copy_directory behave like this? If not, I
>> guess my only option is to create a little CMake script that runs
>> file(INSTALL) to copy the directories like I want.
>> --
>>
>> Powered by www.kitware.com
>>
>> Please keep messages on-topic and check the CMake FAQ at: 
>> http://www.cmake.org/Wiki/CMake_FAQ
>>
>> Kitware offers various services to support the CMake community. For more 
>> information on each offering, please visit:
>>
>> CMake Support: http://cmake.org/cmake/help/support.html
>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>
>> Visit other Kitware open-source projects at 
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/cmake

That's the obvious answer but due to complexity reasons I don't want
to repeat the destination directory name. I want the copy to be
inclusive of the source directory name. I'd have to use
get_filename_component() to find the leaf directory name in the list
of directories I provide to my function for copying, simply to repeat
that name in the destination path I build. I want to avoid this.
Another weirdness is that I like to pass in a list with a mixture of
directories and files. Think of this is a way for me to pass in a list
of game data resources that need to be copied to the EXE directory so
the game can find them and run. I also have to add weird
if(IS_DIRECTORY) checks so I can tell my custom command to use "copy"
or "copy_directory".

A simple little install.cmake script that I run is able to do this,
but as far as complexity goes, it doesn't save me a whole lot:

function( copy_data )
if( NOT TARGET copy_data )
add_custom_target( copy_data COMMENT "Copying data directories
and files..." )
endif()

set( data_directories ${ARGN} )

foreach( data ${data_directories} )
get_filename_component( data ${data} ABSOLUTE )
set( output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$" )
set( install_script "${BUILD_CMAKE_DIR}/scripts/install.cmake" )

add_custom_command( TARGET copy_data POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS "-DSOURCE=${data}" "-DOUTPUT_DIR=${output_dir}" -P
"${install_script}"
)
endforeach()
endfunction()
-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake


Re: [CMake] Copying directories as post build events without losing parent directory

2015-12-07 Thread Robert Dailey
On Mon, Dec 7, 2015 at 4:15 PM, Robert Dailey  wrote:
> On Mon, Dec 7, 2015 at 3:59 PM, David Cole  wrote:
>> $ cmake -E copy_directory foo bar/foo
>>
>> ?
>>
>>
>> On Mon, Dec 7, 2015 at 4:53 PM, Robert Dailey  
>> wrote:
>>> I have a custom target which runs a command similar to this:
>>>
>>> $ cmake -E copy_directory foo bar
>>>
>>> The problem is that the contents of "foo" are copied inside of "bar",
>>> instead of it creating a directory "bar/foo" and putting the contents
>>> in there.
>>>
>>> Is there a way to make copy_directory behave like this? If not, I
>>> guess my only option is to create a little CMake script that runs
>>> file(INSTALL) to copy the directories like I want.
>>> --
>>>
>>> Powered by www.kitware.com
>>>
>>> Please keep messages on-topic and check the CMake FAQ at: 
>>> http://www.cmake.org/Wiki/CMake_FAQ
>>>
>>> Kitware offers various services to support the CMake community. For more 
>>> information on each offering, please visit:
>>>
>>> CMake Support: http://cmake.org/cmake/help/support.html
>>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>>
>>> Visit other Kitware open-source projects at 
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/cmake
>
> That's the obvious answer but due to complexity reasons I don't want
> to repeat the destination directory name. I want the copy to be
> inclusive of the source directory name. I'd have to use
> get_filename_component() to find the leaf directory name in the list
> of directories I provide to my function for copying, simply to repeat
> that name in the destination path I build. I want to avoid this.
> Another weirdness is that I like to pass in a list with a mixture of
> directories and files. Think of this is a way for me to pass in a list
> of game data resources that need to be copied to the EXE directory so
> the game can find them and run. I also have to add weird
> if(IS_DIRECTORY) checks so I can tell my custom command to use "copy"
> or "copy_directory".
>
> A simple little install.cmake script that I run is able to do this,
> but as far as complexity goes, it doesn't save me a whole lot:
>
> function( copy_data )
> if( NOT TARGET copy_data )
> add_custom_target( copy_data COMMENT "Copying data directories
> and files..." )
> endif()
>
> set( data_directories ${ARGN} )
>
> foreach( data ${data_directories} )
> get_filename_component( data ${data} ABSOLUTE )
> set( output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$" )
> set( install_script "${BUILD_CMAKE_DIR}/scripts/install.cmake" )
>
> add_custom_command( TARGET copy_data POST_BUILD
> COMMAND ${CMAKE_COMMAND}
> ARGS "-DSOURCE=${data}" "-DOUTPUT_DIR=${output_dir}" -P
> "${install_script}"
> )
> endforeach()
> endfunction()

Oh and the contents of install.cmake:

file( INSTALL ${SOURCE} DESTINATION ${OUTPUT_DIR} )
-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake