[CMake] Is there a better way to retrieve content from a remote zip file?
Chuck Atkinschuck.atkins at kitware.com
Thu Apr 28 11:58:12 EDT 2016
This looks well suited to ExternalProject. Just give it an empty configure and build steps and then have the install step perform the copy: include(ExternalProject) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(3rdParty_SUBDIR x64) else() set(3rdParty_SUBDIR x86) endif() ExternalProject_Add( 3rdParty URL http://download.osgvisual.org/3rdParty_VS2013_v120_x86_x64_V9_small.7z URL_MD5 c9294a16b39783cba8c4c55df182b24b BUILD_IN_SOURCE 1 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${3rdParty_SUBDIR}/ ${CMAKE_INSTALL_PREFIX} ) This created a "3rdParty" target that should do everything you need and only if necessary. - Chuck On Thu, Apr 28, 2016 at 11:19 AM, Lee Butler <iraytrace at gmail.com> wrote: > I am looking for a better way to do something than having a sequence of > "if (NOT EXISTS)" statements. My package being built depends on some > external libraries and headers, that are available in a zip file on an > external website. So for example: zlib.h,zlib.dll and zlib.lib are (along > with other stuff) in 3rdParty.zip available from a remote URL. I don't > want to build these things, I want to fetch the zip file, unpack it and > copy the relevant portions into place only as needed. >> At the moment I have the code below, which feels "unclean" on so many > levels: >> if (NOT EXISTS "${CMAKE_INSTALL_PREFIX}/include/zlib.h") > if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64") > if (NOT EXISTS > "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z") > MESSAGE(STATUS "Downloading 3rdParty") > file(DOWNLOAD >http://download.osgvisual.org/3rdParty_VS2013_v120_x86_x64_V9_small.7z> "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z" > SHOW_PROGRESS) > endif() >> message(STATUS "expanding 3rdParty Archive") > execute_process( COMMAND ${CMAKE_COMMAND} -E tar xzf > "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z" ) > endif() > foreach(dir bin data include lib ssl) > file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64/x64/${dir}" > "${CMAKE_INSTALL_PREFIX}/${dir}") > endforeach(dir) > file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64") > endif() >> This has the property of fetching the 7z file, extracting the contents and > leaving the 7z file around for later rebuilds. I hope there is a cleaner > way of saying the same thing. BTW, I would be just as happy putting > "products" from the zip file in the current build destinations instead of > the install destinations. > -- >> 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>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://public.kitware.com/pipermail/cmake/attachments/20160428/513cfd5e/attachment.html>
More information about the CMake mailing list
Источник: [https://torrent-igruha.org/3551-portal.html]Thu Apr 28 11:58:12 EDT 2016
This looks well suited to ExternalProject. Just give it an empty configure and build steps and then have the install step perform the copy: include(ExternalProject) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(3rdParty_SUBDIR x64) else() set(3rdParty_SUBDIR x86) endif() ExternalProject_Add( 3rdParty URL http://download.osgvisual.org/3rdParty_VS2013_v120_x86_x64_V9_small.7z URL_MD5 c9294a16b39783cba8c4c55df182b24b BUILD_IN_SOURCE 1 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${3rdParty_SUBDIR}/ ${CMAKE_INSTALL_PREFIX} ) This created a "3rdParty" target that should do everything you need and only if necessary. - Chuck On Thu, Apr 28, 2016 at 11:19 AM, Lee Butler <iraytrace at gmail.com> wrote: > I am looking for a better way to do something than having a sequence of > "if (NOT EXISTS)" statements. My package being built depends on some > external libraries and headers, that are available in a zip file on an > external website. So for example: zlib.h,zlib.dll and zlib.lib are (along > with other stuff) in 3rdParty.zip available from a remote URL. I don't > want to build these things, I want to fetch the zip file, unpack it and > copy the relevant portions into place only as needed. >> At the moment I have the code below, which feels "unclean" on so many > levels: >> if (NOT EXISTS "${CMAKE_INSTALL_PREFIX}/include/zlib.h") > if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64") > if (NOT EXISTS > "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z") > MESSAGE(STATUS "Downloading 3rdParty") > file(DOWNLOAD >http://download.osgvisual.org/3rdParty_VS2013_v120_x86_x64_V9_small.7z> "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z" > SHOW_PROGRESS) > endif() >> message(STATUS "expanding 3rdParty Archive") > execute_process( COMMAND ${CMAKE_COMMAND} -E tar xzf > "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_VS2013_v120_x86_x64_V9_small.7z" ) > endif() > foreach(dir bin data include lib ssl) > file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64/x64/${dir}" > "${CMAKE_INSTALL_PREFIX}/${dir}") > endforeach(dir) > file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/3rdParty_x86_x64") > endif() >> This has the property of fetching the 7z file, extracting the contents and > leaving the 7z file around for later rebuilds. I hope there is a cleaner > way of saying the same thing. BTW, I would be just as happy putting > "products" from the zip file in the current build destinations instead of > the install destinations. > -- >> 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>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://public.kitware.com/pipermail/cmake/attachments/20160428/513cfd5e/attachment.html>
More information about the CMake mailing list
-
-