blob: 882161a168ca4a971b3557279b50c13342c98d19 (
plain)
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
|
env_with_default("QDS_AUTO_INSTALL_QUICK_DESIGNER_COMPONENTS" ENV_QDS_AUTO_INSTALL_QUICK_DESIGNER_COMPONENTS ${BUILD_DESIGNSTUDIO})
option(QDS_AUTO_INSTALL_QUICK_DESIGNER_COMPONENTS "Auto-install qtquickdesigner-components into the active Qt" ${ENV_QDS_AUTO_INSTALL_QUICK_DESIGNER_COMPONENTS})
# to avoid long file path which are problematic under windows
# it picks a short build dir under current drive temp
function(determine_dependency_build_directory out_var)
set(dep_build_dir "${PROJECT_BINARY_DIR}/build_quickdesigner_components")
if(WIN32)
set(_cfg "${CMAKE_BUILD_TYPE}")
if(NOT _cfg)
if(CMAKE_CONFIGURATION_TYPES)
set(_cfg "Release")
else()
set(_cfg "Release")
endif()
endif()
# the path have to be on the same device like the Qt
string(REGEX REPLACE "^([A-Za-z]):/.*" "\\1:" drive "${Qt6_DIR}")
if(drive MATCHES "^[A-Za-z]:$")
set(candidate "${drive}/_buildquickdesignercomps${_cfg}")
if(EXISTS "${candidate}")
file(REMOVE_RECURSE "${candidate}")
endif()
file(MAKE_DIRECTORY "${candidate}")
file(
WRITE
"${candidate}/Readme.txt"
"This build dir was generated by AutoInstallDesignerComponents.cmake to avoid too long build path for qtquickdesigner-components."
)
if(IS_DIRECTORY "${candidate}")
file(TO_CMAKE_PATH "${candidate}" dep_build_dir)
endif()
endif()
endif()
set(${out_var} "${dep_build_dir}" PARENT_SCOPE)
endfunction()
function(auto_install_quick_designer_components)
get_filename_component(_qtCMakeDir "${Qt6_DIR}" ABSOLUTE)
get_filename_component(_qtLibDir "${_qtCMakeDir}/../.." ABSOLUTE)
get_filename_component(qtInstallPrefix "${_qtLibDir}/.." ABSOLUTE)
set(_qqdc_cfg "${CMAKE_BUILD_TYPE}")
if(NOT _qqdc_cfg)
set(_qqdc_cfg "Release")
endif()
string(TOLOWER "${_qqdc_cfg}" _qqdc_build_type)
set(_qqdc_sha_file "${qtInstallPrefix}/.qtquickdesigner-components.${_qqdc_build_type}.sha")
if (EXISTS "${_qqdc_sha_file}")
file(READ "${_qqdc_sha_file}" _qqdc_installed_sha)
string(STRIP "${_qqdc_installed_sha}" _qqdc_installed_sha)
message(STATUS "auto_install_qtquickdesigner_components: found existing install (SHA=${_qqdc_installed_sha}) → skip")
if (NOT TARGET a_i_q_c)
# Dummy-Target
add_custom_target(a_i_q_c)
endif()
return()
endif()
include(ExternalProject)
determine_dependency_build_directory(SHORT_BUILD_DIRECTORY)
message(STATUS "auto_install_qtquickdesigner_components: using build dir=${SHORT_BUILD_DIRECTORY}")
if (NOT TARGET a_i_q_c)
set(_extra_macos_argument "")
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
set(_extra_macos_argument "-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}")
endif()
ExternalProject_Add(a_i_q_c
GIT_REPOSITORY https://codereview.qt-project.org/qt-labs/qtquickdesigner-components
GIT_TAG HEAD
GIT_SHALLOW TRUE
SOURCE_DIR "${SHORT_BUILD_DIRECTORY}/src"
BINARY_DIR "${SHORT_BUILD_DIRECTORY}"
CMAKE_ARGS
-DCMAKE_PREFIX_PATH=${qtInstallPrefix}
-DCMAKE_INSTALL_PREFIX=${qtInstallPrefix}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
${_extra_macos_argument}
USES_TERMINAL_DOWNLOAD TRUE
USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
USES_TERMINAL_INSTALL TRUE
UPDATE_DISCONNECTED TRUE
)
set(qdsWriteShaScript "${CMAKE_CURRENT_BINARY_DIR}/qds_write_sha.cmake")
file(WRITE "${qdsWriteShaScript}" [=[
cmake_minimum_required(VERSION 3.16)
if(NOT DEFINED source_dir OR NOT DEFINED output_file)
message(FATAL_ERROR "qds_write_sha.cmake: missing variables")
endif()
find_program(GIT_EXECUTABLE git)
if(NOT GIT_EXECUTABLE)
set(sha "unknown")
else()
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${source_dir}" rev-parse HEAD
OUTPUT_VARIABLE sha OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
if(NOT sha)
set(sha "unknown")
endif()
endif()
file(WRITE "${output_file}" "${sha}")
message(STATUS "qtquickdesigner-components: wrote SHA '${sha}' to '${output_file}'")
]=])
ExternalProject_Add_Step(a_i_q_c write_sha
DEPENDEES install
COMMAND ${CMAKE_COMMAND}
-Dsource_dir=<SOURCE_DIR>
-Doutput_file=${_qqdc_sha_file}
-P ${qdsWriteShaScript}
USES_TERMINAL TRUE
)
endif() #if (NOT TARGET a_i_q_c)
endfunction()
if (QDS_AUTO_INSTALL_QUICK_DESIGNER_COMPONENTS)
message(STATUS "auto_install_qtquickdesigner_components: enabled")
auto_install_quick_designer_components()
else()
message(STATUS "auto_install_qtquickdesigner_components: disabled")
endif()
|