-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathinstall.cmake
executable file
·68 lines (57 loc) · 1.92 KB
/
install.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env cmake -P
include(CMakeParseArguments)
set(ARGS)
foreach(i RANGE 4 ${CMAKE_ARGC})
list(APPEND ARGS ${CMAKE_ARGV${i}})
endforeach()
set(options help)
set(oneValueArgs -r)
set(multiValueArgs)
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGS})
set(FILENAME master.tar.gz)
if(PARSE_-r)
set(FILENAME ${PARSE_-r}.tar.gz)
endif()
set(_PREFIX ${CMAKE_ARGV3})
get_filename_component(PREFIX ${_PREFIX} ABSOLUTE)
set(URL "https://github.com/pfultz2/cmake-get/archive/${FILENAME}")
string(TIMESTAMP _tmp_dir_STAMP "%H-%M-%S")
string(RANDOM _tmp_dir_RAND)
set(TMP_DIR "${PREFIX}/tmp/cmake-get-install-${_tmp_dir_STAMP}-${_tmp_dir_RAND}")
set(DOWNLOAD_DIR "${TMP_DIR}/download")
set(BUILD_DIR "${TMP_DIR}/build")
function(cget_exec)
execute_process(${ARGN} RESULT_VARIABLE RESULT)
if(NOT RESULT EQUAL 0)
message(FATAL_ERROR "Process failed: ${ARGN}")
endif()
endfunction()
function(cget_download)
file(DOWNLOAD ${ARGN} STATUS RESULT_LIST)
list(GET RESULT_LIST 0 RESULT)
list(GET RESULT_LIST 1 RESULT_MESSAGE)
if(NOT RESULT EQUAL 0)
message(FATAL_ERROR "Download failed: ${RESULT_MESSAGE}: ${ARGN}")
endif()
endfunction()
cget_download(${URL} ${DOWNLOAD_DIR}/${FILENAME})
cget_exec(COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOAD_DIR}/${FILENAME}
WORKING_DIRECTORY ${DOWNLOAD_DIR}
)
file(REMOVE ${DOWNLOAD_DIR}/${FILENAME})
file(GLOB FILES LIST_DIRECTORIES true RELATIVE ${DOWNLOAD_DIR} ${DOWNLOAD_DIR}/*)
list(LENGTH FILES NFILES)
if(NFILES GREATER 0)
list(GET FILES 0 _DIR)
set(SOURCE_DIR ${DOWNLOAD_DIR}/${_DIR})
else()
message(FATAL_ERROR "Failed to fetch: ${URL}")
endif()
file(MAKE_DIRECTORY ${BUILD_DIR})
cget_exec(COMMAND ${CMAKE_COMMAND}
-DCMAKE_INSTALL_PREFIX=${PREFIX}
${SOURCE_DIR}
WORKING_DIRECTORY ${BUILD_DIR}
)
cget_exec(COMMAND ${CMAKE_COMMAND} --build ${BUILD_DIR} --target install)
file(REMOVE_RECURSE ${TMP_DIR})