-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInstallDeps.cmake
More file actions
166 lines (122 loc) · 4.51 KB
/
Copy pathInstallDeps.cmake
File metadata and controls
166 lines (122 loc) · 4.51 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
option(RELEASE_ONLY "\
Build only Release versions of vcpkg libraries. \
Be careful, as this will edit all triplet files in your vcpkg installation" OFF)
option(CLEAN "Clean vcpkg folder after install" OFF)
if (NOT VCPKG_ROOT)
set(VCPKG_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg")
endif ()
if (WIN32)
set(CMAKE_EXECUTABLE_SUFFIX .exe)
endif ()
set(VCPKG_EXECUTABLE "${VCPKG_ROOT}/vcpkg${CMAKE_EXECUTABLE_SUFFIX}")
function(vcpkg_install)
if (NOT EXISTS "${VCPKG_ROOT}")
message(STATUS "Vcpkg isn't installed in the expected location. Will install it now.")
execute_process(COMMAND git clone https://github.com/microsoft/vcpkg "${VCPKG_ROOT}")
else ()
message(STATUS "Found vcpkg source directory (${VCPKG_ROOT})")
endif ()
if (NOT EXISTS "${VCPKG_EXECUTABLE}")
message(STATUS "Vcpkg executable ${VCPKG_EXECUTABLE} not found")
message(STATUS "Boostrapping vcpkg...")
if (WIN32)
set(bootstrap_script "${VCPKG_ROOT}/bootstrap-vcpkg.bat")
else ()
set(bootstrap_script "${VCPKG_ROOT}/bootstrap-vcpkg.sh")
endif ()
execute_process(COMMAND "${bootstrap_script}" -disableMetrics
RESULT_VARIABLE FAILED)
if (NOT FAILED)
message(STATUS "vcpkg installed.")
endif ()
else ()
message(STATUS "Found vcpkg executable (${VCPKG_ROOT}/vcpkg)")
endif ()
endfunction()
function(parse_lists_file lists_file out)
file(READ ${lists_file} contents)
string(REGEX MATCHALL "find_package\\([^\\)]+" FIND_PACKAGE_ARGS "${contents}")
list(TRANSFORM FIND_PACKAGE_ARGS REPLACE "find_package\\(" "")
set(PACKAGES)
foreach (ARGS ${FIND_PACKAGE_ARGS})
list(TRANSFORM ARGS REPLACE " +" ";")
list(GET ARGS 0 PKG_name)
string(TOLOWER ${PKG_name} PKG_name)
string(REGEX REPLACE "_" "-" PKG_name ${PKG_name})
list(APPEND PACKAGES ${PKG_name})
endforeach ()
set(${out} ${PACKAGES} PARENT_SCOPE)
endfunction()
function(install_package package_info success)
string(REPLACE "@" ";" package_info ${package_info})
list(GET package_info 0 package_name)
string(REGEX REPLACE "-.+" "" package_name_base ${package_name})
list(LENGTH package_info package_info_length)
if (package_info_length EQUAL 2)
list(GET package_info 1 package_sha)
endif ()
if (NOT package_sha)
set(package_sha master)
endif ()
message(STATUS "Installing ${package_name}@${package_sha}...")
execute_process(COMMAND
git checkout ${package_sha} -- ports
WORKING_DIRECTORY "${VCPKG_ROOT}"
RESULT_VARIABLE failed)
if (NOT failed)
if (EXISTS vcpkg-triplets)
set(flags --overlay-triplets=vcpkg-triplets)
endif ()
if (NOT TRIPLETS)
execute_process(COMMAND
"${VCPKG_ROOT}/vcpkg" install
${package_name}
${flags}
RESULT_VARIABLE failed)
else ()
foreach (triplet ${TRIPLETS})
if (NOT failed)
execute_process(COMMAND
"${VCPKG_ROOT}/vcpkg" install
${package_name}:${triplet}
${flags}
RESULT_VARIABLE failed)
endif ()
endforeach ()
endif ()
endif ()
if (NOT failed)
set(${success} 1 PARENT_SCOPE)
else ()
set(${success} 0 PARENT_SCOPE)
endif ()
endfunction()
function(make_release_only_triplets triplet_files)
message(STATUS "Adding \"set(CPKG_BUILD_TYPE release)\" to triplet files")
foreach (file ${triplet_files})
file(READ ${file} file_contents)
if (NOT ${file_contents} MATCHES "VCPKG_BUILD_TYPE release")
file(APPEND ${file} "\nset(VCPKG_BUILD_TYPE release)\n")
endif ()
endforeach ()
endfunction()
# Main logic
include(./Dependencies.cmake)
vcpkg_install()
if (RELEASE_ONLY)
# Find all triplet files
file(GLOB_RECURSE TRIPLET_FILES "${VCPKG_ROOT}/triplets/*.cmake")
make_release_only_triplets("${TRIPLET_FILES}")
endif ()
foreach (PACKAGE_INFO ${PACKAGES})
install_package(${PACKAGE_INFO} success)
if (success)
message(STATUS "Installing ${PACKAGE} done")
else ()
message(FATAL_ERROR "Installing ${PACKAGE} failed")
endif ()
endforeach ()
if (CLEAN)
file(REMOVE_RECURSE "${VCPKG_ROOT}/downloads")
file(REMOVE_RECURSE "${VCPKG_ROOT}/packages")
endif ()