123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- set(_DownloadProjectDir "${CMAKE_CURRENT_LIST_DIR}")
- include(CMakeParseArguments)
- function(download_project)
- set(options QUIET)
- set(oneValueArgs
- PROJ
- PREFIX
- DOWNLOAD_DIR
- SOURCE_DIR
- BINARY_DIR
-
- CONFIGURE_COMMAND
- BUILD_COMMAND
- INSTALL_COMMAND
- TEST_COMMAND
- )
- set(multiValueArgs "")
- cmake_parse_arguments(DL_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
- if (DL_ARGS_QUIET)
- set(OUTPUT_QUIET "OUTPUT_QUIET")
- else()
- unset(OUTPUT_QUIET)
- message(STATUS "Downloading/updating ${DL_ARGS_PROJ}")
- endif()
-
-
-
- if (NOT DL_ARGS_PREFIX)
- set(DL_ARGS_PREFIX "${CMAKE_BINARY_DIR}")
- else()
- get_filename_component(DL_ARGS_PREFIX "${DL_ARGS_PREFIX}" ABSOLUTE
- BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
- endif()
- if (NOT DL_ARGS_DOWNLOAD_DIR)
- set(DL_ARGS_DOWNLOAD_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-download")
- endif()
-
- if (NOT DL_ARGS_SOURCE_DIR)
- set(DL_ARGS_SOURCE_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-src")
- endif()
- if (NOT DL_ARGS_BINARY_DIR)
- set(DL_ARGS_BINARY_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-build")
- endif()
- set(${DL_ARGS_PROJ}_SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" PARENT_SCOPE)
- set(${DL_ARGS_PROJ}_BINARY_DIR "${DL_ARGS_BINARY_DIR}" PARENT_SCOPE)
-
-
-
-
-
-
-
-
- file(REMOVE "${DL_ARGS_DOWNLOAD_DIR}/CMakeCache.txt")
-
-
-
-
-
- configure_file("${_DownloadProjectDir}/DownloadProject.CMakeLists.cmake.in"
- "${DL_ARGS_DOWNLOAD_DIR}/CMakeLists.txt")
- execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
- -D "CMAKE_MAKE_PROGRAM:FILE=${CMAKE_MAKE_PROGRAM}"
- .
- RESULT_VARIABLE result
- ${OUTPUT_QUIET}
- WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}"
- )
- if(result)
- message(FATAL_ERROR "CMake step for ${DL_ARGS_PROJ} failed: ${result}")
- endif()
- execute_process(COMMAND ${CMAKE_COMMAND} --build .
- RESULT_VARIABLE result
- ${OUTPUT_QUIET}
- WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}"
- )
- if(result)
- message(FATAL_ERROR "Build step for ${DL_ARGS_PROJ} failed: ${result}")
- endif()
- endfunction()
|