]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/qt5-base/cmake/configure_qt.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / qt5-base / cmake / configure_qt.cmake
1 function(configure_qt)
2 cmake_parse_arguments(_csc "" "SOURCE_PATH;TARGET_PLATFORM;HOST_PLATFORM;HOST_TOOLS_ROOT" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
3
4 if(NOT _csc_TARGET_PLATFORM)
5 message(FATAL_ERROR "configure_qt requires a TARGET_PLATFORM argument.")
6 endif()
7
8 if(DEFINED _csc_HOST_PLATFORM)
9 list(APPEND _csc_OPTIONS -platform ${_csc_HOST_PLATFORM})
10 endif()
11
12 if(DEFINED _csc_HOST_TOOLS_ROOT)
13 ## vcpkg internal file struture assumed here!
14 message(STATUS "Building Qt with prepared host tools from ${_csc_HOST_TOOLS_ROOT}!")
15 vcpkg_add_to_path("${_csc_HOST_TOOLS_ROOT}/bin")
16 vcpkg_add_to_path("${_csc_HOST_TOOLS_ROOT}")
17 set(EXT_BIN_DIR -external-hostbindir ${_csc_HOST_TOOLS_ROOT}/bin) # we only use release binaries for building
18 find_program(QMAKE_COMMAND NAMES qmake PATHS ${_csc_HOST_TOOLS_ROOT}/bin NO_DEFAULT_PATH)
19 set(INVOKE "${QMAKE_COMMAND}" )
20 else()
21 if(CMAKE_HOST_WIN32)
22 set(CONFIGURE_BAT "configure.bat")
23 else()
24 set(CONFIGURE_BAT "configure")
25 endif()
26 set(INVOKE "${_csc_SOURCE_PATH}/${CONFIGURE_BAT}")
27 endif()
28
29 #Cleanup previous build folders
30 file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
31
32 #Find and ad Perl to PATH
33 vcpkg_find_acquire_program(PERL)
34 get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY)
35 vcpkg_add_to_path("${PERL_EXE_PATH}")
36
37 if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static")
38 list(APPEND _csc_OPTIONS -static)
39 else()
40 #list(APPEND _csc_OPTIONS_DEBUG -separate-debug-info)
41 endif()
42
43 if(VCPKG_TARGET_IS_WINDOWS AND "${VCPKG_CRT_LINKAGE}" STREQUAL "static")
44 list(APPEND _csc_OPTIONS -static-runtime)
45 endif()
46
47 list(APPEND _csc_OPTIONS_RELEASE -release)
48 list(APPEND _csc_OPTIONS_DEBUG -debug)
49
50 #Replace with VCPKG variables if PR #7733 is merged
51 unset(BUILDTYPES)
52 if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
53 set(_buildname "DEBUG")
54 list(APPEND BUILDTYPES ${_buildname})
55 set(_short_name_${_buildname} "dbg")
56 set(_path_suffix_${_buildname} "/debug")
57 set(_build_type_${_buildname} "debug")
58 endif()
59 if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
60 set(_buildname "RELEASE")
61 list(APPEND BUILDTYPES ${_buildname})
62 set(_short_name_${_buildname} "rel")
63 set(_path_suffix_${_buildname} "")
64 set(_build_type_${_buildname} "release")
65 endif()
66 unset(_buildname)
67
68 vcpkg_find_acquire_program(PKGCONFIG)
69 set(ENV{PKG_CONFIG} "${PKGCONFIG}")
70 get_filename_component(PKGCONFIG_PATH "${PKGCONFIG}" DIRECTORY)
71 vcpkg_add_to_path("${PKGCONFIG_PATH}")
72
73 foreach(_buildname ${BUILDTYPES})
74 set(PKGCONFIG_INSTALLED_DIR "${_VCPKG_INSTALLED_PKGCONF}${_path_suffix_${_buildname}}/lib/pkgconfig")
75 set(PKGCONFIG_INSTALLED_SHARE_DIR "${_VCPKG_INSTALLED_PKGCONF}/share/pkgconfig")
76 set(PKGCONFIG_PACKAGES_DIR "${_VCPKG_PACKAGES_PKGCONF}${_path_suffix_${_buildname}}/lib/pkgconfig")
77 set(PKGCONFIG_PACKAGES_SHARE_DIR "${_VCPKG_PACKAGES_PKGCONF}/share/pkgconfig")
78 if(DEFINED ENV{PKG_CONFIG_PATH})
79 set(BACKUP_ENV_PKG_CONFIG_PATH_${_config} $ENV{PKG_CONFIG_PATH})
80 set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}$ENV{PKG_CONFIG_PATH}")
81 else()
82 set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_INSTALLED_SHARE_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_DIR}${VCPKG_HOST_PATH_SEPARATOR}${PKGCONFIG_PACKAGES_SHARE_DIR}")
83 endif()
84
85 set(_build_triplet ${TARGET_TRIPLET}-${_short_name_${_buildname}})
86 message(STATUS "Configuring ${_build_triplet}")
87 set(_build_dir "${CURRENT_BUILDTREES_DIR}/${_build_triplet}")
88 file(MAKE_DIRECTORY ${_build_dir})
89 # These paths get hardcoded into qmake. So point them into the CURRENT_INSTALLED_DIR instead of CURRENT_PACKAGES_DIR
90 # makefiles will be fixed to install into CURRENT_PACKAGES_DIR in install_qt
91 set(BUILD_OPTIONS ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildname}}
92 -prefix ${CURRENT_INSTALLED_DIR}
93 #-extprefix ${CURRENT_INSTALLED_DIR}
94 ${EXT_BIN_DIR}
95 -hostprefix ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}
96 #-hostprefix ${CURRENT_INSTALLED_DIR}/tools/qt5
97 -hostlibdir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}/lib # could probably be move to manual-link
98 -hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}/bin
99 #-hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5/bin
100 # Qt VS Plugin requires a /bin subfolder with the executables in the root dir. But to use the wizard a correctly setup lib folder is also required
101 # So with the vcpkg layout there is no way to make it work unless all dll are are copied to tools/qt5/bin and all libs to tools/qt5/lib
102 -archdatadir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}
103 -datadir ${CURRENT_INSTALLED_DIR}${_path_suffix}/share/qt5${_path_suffix_${_buildname}}
104 -plugindir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/plugins
105 -qmldir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/qml
106 -headerdir ${CURRENT_INSTALLED_DIR}/include/qt5
107 -libexecdir ${CURRENT_INSTALLED_DIR}/tools/qt5${_path_suffix_${_buildname}}
108 -bindir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/bin
109 -libdir ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib
110 -I ${CURRENT_INSTALLED_DIR}/include
111 -I ${CURRENT_INSTALLED_DIR}/include/qt5
112 -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib
113 -L ${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}/lib/manual-link
114 -platform ${_csc_TARGET_PLATFORM}
115 )
116
117 if(DEFINED _csc_HOST_TOOLS_ROOT) #use qmake
118 if(WIN32)
119 set(INVOKE_OPTIONS "QMAKE_CXX.QMAKE_MSC_VER=1911" "QMAKE_MSC_VER=1911")
120 endif()
121 vcpkg_execute_required_process(
122 COMMAND ${INVOKE} "${_csc_SOURCE_PATH}" "${INVOKE_OPTIONS}" -- ${BUILD_OPTIONS}
123 WORKING_DIRECTORY ${_build_dir}
124 LOGNAME config-${_build_triplet}
125 )
126 else()# call configure (builds qmake for triplet and calls it like above)
127 vcpkg_execute_required_process(
128 COMMAND "${INVOKE}" ${BUILD_OPTIONS}
129 WORKING_DIRECTORY ${_build_dir}
130 LOGNAME config-${_build_triplet}
131 )
132 endif()
133
134 # Note archdatadir and datadir are required to be prefixed with the hostprefix?
135 message(STATUS "Configuring ${_build_triplet} done")
136
137 # Copy configuration dependent qt.conf
138 file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CMAKE_CURRENT_PACKAGES_DIR_PATH)
139 file(TO_CMAKE_PATH "${CURRENT_INSTALLED_DIR}" CMAKE_CURRENT_INSTALLED_DIR_PATH)
140 file(READ "${CURRENT_BUILDTREES_DIR}/${_build_triplet}/bin/qt.conf" _contents)
141 string(REPLACE "${CMAKE_CURRENT_PACKAGES_DIR_PATH}" "\${CURRENT_INSTALLED_DIR}" _contents ${_contents})
142 string(REPLACE "${CMAKE_CURRENT_INSTALLED_DIR_PATH}" "\${CURRENT_INSTALLED_DIR}" _contents ${_contents})
143 #string(REPLACE "HostPrefix=\${CURRENT_PACKAGES_DIR}" "HostPrefix=\${CURRENT_INSTALLED_DIR}" _contents ${_contents})
144 string(REPLACE "[EffectivePaths]\nPrefix=..\n" "" _contents ${_contents})
145 string(REPLACE "[EffectiveSourcePaths]\nPrefix=${_csc_SOURCE_PATH}\n" "" _contents ${_contents})
146 string(REPLACE "Sysroot=\n" "" _contents ${_contents})
147 string(REPLACE "SysrootifyPrefix=false\n" "" _contents ${_contents})
148 file(WRITE "${CURRENT_PACKAGES_DIR}/tools/qt5/qt_${_build_type_${_buildname}}.conf" "${_contents}")
149 endforeach()
150
151 endfunction()