portfile.cmake 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. vcpkg_buildpath_length_warning(37)
  2. if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
  3. option(QT_OPENSSL_LINK "Link against OpenSSL at compile-time." ON)
  4. else()
  5. option(QT_OPENSSL_LINK "Link against OpenSSL at compile-time." OFF)
  6. endif()
  7. if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
  8. option(QT_MYSQL_PLUGIN "Create MySQL plugin" OFF)
  9. else()
  10. if ("mysqlplugin" IN_LIST FEATURES)
  11. option(QT_MYSQL_PLUGIN "Create MySQL plugin" ON)
  12. endif()
  13. endif()
  14. if (VCPKG_TARGET_IS_LINUX)
  15. message(WARNING "qt5-base currently requires some packages from the system package manager, see https://doc.qt.io/qt-5/linux-requirements.html")
  16. message(WARNING
  17. [[
  18. qt5-base for qt5-x11extras requires the following libraries from the system package manager:
  19. libxkbcommon-x11-dev
  20. These can be installed on Ubuntu systems via apt-get install libxkbcommon-x11-dev.
  21. ]]
  22. )
  23. endif()
  24. list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
  25. list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
  26. if("latest" IN_LIST FEATURES) # latest = core currently
  27. set(QT_BUILD_LATEST ON)
  28. set(PATCHES
  29. patches/Qt5BasicConfig.patch
  30. patches/Qt5PluginTarget.patch
  31. patches/create_cmake.patch
  32. )
  33. else()
  34. set(PATCHES
  35. patches/Qt5BasicConfig.patch
  36. patches/Qt5PluginTarget.patch
  37. patches/create_cmake.patch
  38. )
  39. endif()
  40. include(qt_port_functions)
  41. include(configure_qt)
  42. include(install_qt)
  43. #########################
  44. ## Find Host and Target mkspec name for configure
  45. include(find_qt_mkspec)
  46. find_qt_mkspec(TARGET_MKSPEC HOST_MKSPEC HOST_TOOLS)
  47. set(QT_PLATFORM_CONFIGURE_OPTIONS TARGET_PLATFORM ${TARGET_MKSPEC})
  48. if(DEFINED HOST_MKSPEC)
  49. list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_PLATFORM ${HOST_MKSPEC})
  50. endif()
  51. if(DEFINED HOST_TOOLS)
  52. list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_TOOLS_ROOT ${HOST_TOOLS})
  53. endif()
  54. #########################
  55. ## Downloading Qt5-Base
  56. qt_download_submodule( OUT_SOURCE_PATH SOURCE_PATH
  57. PATCHES
  58. patches/winmain_pro.patch #Moves qtmain to manual-link
  59. patches/windows_prf.patch #fixes the qtmain dependency due to the above move
  60. patches/qt_app.patch #Moves the target location of qt5 host apps to always install into the host dir.
  61. patches/gui_configure.patch #Patches the gui configure.json to break freetype/fontconfig autodetection because it does not include its dependencies.
  62. patches/icu.patch #Help configure find static icu builds in vcpkg on windows
  63. patches/xlib.patch #Patches Xlib check to actually use Pkgconfig instead of makeSpec only
  64. patches/egl.patch #Fix egl detection logic.
  65. patches/zstdd.patch #Fix detection of zstd in debug builds
  66. #patches/mysql_plugin_include.patch #Fix include path of mysql plugin
  67. #patches/mysql-configure.patch #Fix mysql project
  68. #patches/static_opengl.patch #Use this patch if you really want to statically link angle on windows (e.g. using -opengl es2 and -static).
  69. #Be carefull since it requires definining _GDI32_ for all dependent projects due to redefinition errors in the
  70. #the windows supplied gl.h header and the angle gl.h otherwise.
  71. #CMake fixes
  72. ${PATCHES}
  73. patches/Qt5GuiConfigExtras.patch # Patches the library search behavior for EGL since angle is not build with Qt
  74. )
  75. # Remove vendored dependencies to ensure they are not picked up by the build
  76. foreach(DEPENDENCY zlib freetype harfbuzz-ng libjpeg libpng double-conversion sqlite pcre2)
  77. if(EXISTS ${SOURCE_PATH}/src/3rdparty/${DEPENDENCY})
  78. file(REMOVE_RECURSE ${SOURCE_PATH}/src/3rdparty/${DEPENDENCY})
  79. endif()
  80. endforeach()
  81. #file(REMOVE_RECURSE ${SOURCE_PATH}/include/QtZlib)
  82. #########################
  83. ## Setup Configure options
  84. # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings
  85. set(ENV{_CL_} "/utf-8")
  86. set(CORE_OPTIONS
  87. -confirm-license
  88. -opensource
  89. #-simulator_and_device
  90. #-ltcg
  91. #-combined-angle-lib
  92. # ENV ANGLE_DIR to external angle source dir. (Will always be compiled with Qt)
  93. #-optimized-tools
  94. #-force-debug-info
  95. -verbose
  96. )
  97. ## 3rd Party Libs
  98. list(APPEND CORE_OPTIONS
  99. -system-zlib
  100. -system-libjpeg
  101. -system-libpng
  102. -system-freetype # static builds require to also link its dependent bzip!
  103. -system-pcre
  104. -system-doubleconversion
  105. -system-sqlite
  106. -system-harfbuzz
  107. -sql-psql
  108. -icu
  109. -no-angle) # Qt does not need to build angle. VCPKG will build angle!
  110. if(QT_OPENSSL_LINK)
  111. list(APPEND CORE_OPTIONS -openssl-linked)
  112. endif()
  113. if(VCPKG_TARGET_IS_WINDOWS)
  114. if(QT_MYSQL_PLUGIN)
  115. list(APPEND CORE_OPTIONS -sql-mysql)
  116. endif()
  117. endif()
  118. find_library(ZLIB_RELEASE NAMES z zlib PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  119. find_library(ZLIB_DEBUG NAMES z zlib zd zlibd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  120. find_library(JPEG_RELEASE NAMES jpeg jpeg-static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  121. find_library(JPEG_DEBUG NAMES jpeg jpeg-static jpegd jpeg-staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  122. find_library(LIBPNG_RELEASE NAMES png16 libpng16 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) #Depends on zlib
  123. find_library(LIBPNG_DEBUG NAMES png16 png16d libpng16 libpng16d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  124. find_library(PSQL_RELEASE NAMES pq libpq PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux)
  125. find_library(PSQL_DEBUG NAMES pq libpq pqd libpqd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  126. if(NOT (PSQL_RELEASE MATCHES ".*\.so") AND NOT (PSQL_DEBUG MATCHES ".*\.so"))
  127. find_library(PSQL_COMMON_RELEASE NAMES pgcommon libpgcommon PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux)
  128. find_library(PSQL_COMMON_DEBUG NAMES pgcommon libpgcommon pgcommond libpgcommond PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  129. find_library(PSQL_PORT_RELEASE NAMES pgport libpgport PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux)
  130. find_library(PSQL_PORT_DEBUG NAMES pgport libpgport pgportd libpgportd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  131. endif()
  132. find_library(MYSQL_RELEASE NAMES libmysql mysqlclient PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux)
  133. find_library(MYSQL_DEBUG NAMES libmysql libmysqld mysqlclient mysqlclientd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  134. find_library(PCRE2_RELEASE NAMES pcre2-16 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  135. find_library(PCRE2_DEBUG NAMES pcre2-16 pcre2-16d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  136. find_library(FREETYPE_RELEASE NAMES freetype PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) #zlib, bzip2, libpng
  137. find_library(FREETYPE_DEBUG NAMES freetype freetyped PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  138. find_library(DOUBLECONVERSION_RELEASE NAMES double-conversion PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  139. find_library(DOUBLECONVERSION_DEBUG NAMES double-conversion PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  140. find_library(HARFBUZZ_RELEASE NAMES harfbuzz PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  141. find_library(HARFBUZZ_DEBUG NAMES harfbuzz PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  142. find_library(SQLITE_RELEASE NAMES sqlite3 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH) # Depends on openssl and zlib(linux)
  143. find_library(SQLITE_DEBUG NAMES sqlite3 sqlite3d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  144. find_library(BROTLI_COMMON_RELEASE NAMES brotlicommon brotlicommon-static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  145. find_library(BROTLI_COMMON_DEBUG NAMES brotlicommon brotlicommon-static brotlicommond brotlicommon-staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  146. find_library(BROTLI_DEC_RELEASE NAMES brotlidec brotlidec-static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  147. find_library(BROTLI_DEC_DEBUG NAMES brotlidec brotlidec-static brotlidecd brotlidec-staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  148. find_library(ICUUC_RELEASE NAMES icuuc libicuuc PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  149. find_library(ICUUC_DEBUG NAMES icuucd libicuucd icuuc libicuuc PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  150. find_library(ICUTU_RELEASE NAMES icutu libicutu PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  151. find_library(ICUTU_DEBUG NAMES icutud libicutud icutu libicutu PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  152. # Was installed in WSL but not on CI machine
  153. # find_library(ICULX_RELEASE NAMES iculx libiculx PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  154. # find_library(ICULX_DEBUG NAMES iculxd libiculxd iculx libiculx PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  155. find_library(ICUIO_RELEASE NAMES icuio libicuio PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  156. find_library(ICUIO_DEBUG NAMES icuiod libicuiod icuio libicuio PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  157. find_library(ICUIN_RELEASE NAMES icui18n libicui18n icuin PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  158. find_library(ICUIN_DEBUG NAMES icui18nd libicui18nd icui18n libicui18n icuin icuind PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  159. find_library(ICUDATA_RELEASE NAMES icudata libicudata icudt PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  160. find_library(ICUDATA_DEBUG NAMES icudatad libicudatad icudata libicudata icudtd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  161. set(ICU_RELEASE "${ICUIN_RELEASE} ${ICUTU_RELEASE} ${ICULX_RELEASE} ${ICUUC_RELEASE} ${ICUIO_RELEASE} ${ICUDATA_RELEASE}")
  162. set(ICU_DEBUG "${ICUIN_DEBUG} ${ICUTU_DEBUG} ${ICULX_DEBUG} ${ICUUC_DEBUG} ${ICUIO_DEBUG} ${ICUDATA_DEBUG}")
  163. if(VCPKG_TARGET_IS_WINDOWS)
  164. set(ICU_RELEASE "${ICU_RELEASE} Advapi32.lib")
  165. set(ICU_DEBUG "${ICU_DEBUG} Advapi32.lib" )
  166. endif()
  167. find_library(FONTCONFIG_RELEASE NAMES fontconfig PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  168. find_library(FONTCONFIG_DEBUG NAMES fontconfig PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  169. find_library(EXPAT_RELEASE NAMES expat PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  170. find_library(EXPAT_DEBUG NAMES expat PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  171. #Dependent libraries
  172. find_library(ZSTD_RELEASE NAMES zstd zstd_static PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  173. find_library(ZSTD_DEBUG NAMES zstdd zstd_staticd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  174. find_library(BZ2_RELEASE bz2 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  175. find_library(BZ2_DEBUG bz2 bz2d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  176. find_library(SSL_RELEASE ssl ssleay32 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  177. find_library(SSL_DEBUG ssl ssleay32 ssld ssleay32d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  178. find_library(EAY_RELEASE libeay32 crypto libcrypto PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  179. find_library(EAY_DEBUG libeay32 crypto libcrypto libeay32d cryptod libcryptod PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  180. set(FREETYPE_RELEASE_ALL "${FREETYPE_RELEASE} ${BZ2_RELEASE} ${LIBPNG_RELEASE} ${ZLIB_RELEASE} ${BROTLI_DEC_RELEASE} ${BROTLI_COMMON_RELEASE}")
  181. set(FREETYPE_DEBUG_ALL "${FREETYPE_DEBUG} ${BZ2_DEBUG} ${LIBPNG_DEBUG} ${ZLIB_DEBUG} ${BROTLI_DEC_DEBUG} ${BROTLI_COMMON_DEBUG}")
  182. # If HarfBuzz is built with GLib enabled, it must be statically link
  183. set(GLIB_LIB_VERSION 2.0)
  184. find_library(GLIB_RELEASE NAMES glib-${GLIB_LIB_VERSION} PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
  185. find_library(GLIB_DEBUG NAMES glib-${GLIB_LIB_VERSION} PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
  186. if(GLIB_RELEASE MATCHES "-NOTFOUND" OR GLIB_DEBUG MATCHES "-NOTFOUND")
  187. set(GLIB_RELEASE "")
  188. set(GLIB_DEBUG "")
  189. endif()
  190. set(RELEASE_OPTIONS
  191. "LIBJPEG_LIBS=${JPEG_RELEASE}"
  192. "ZLIB_LIBS=${ZLIB_RELEASE}"
  193. "LIBPNG_LIBS=${LIBPNG_RELEASE} ${ZLIB_RELEASE}"
  194. "PCRE2_LIBS=${PCRE2_RELEASE}"
  195. "FREETYPE_LIBS=${FREETYPE_RELEASE_ALL}"
  196. "ICU_LIBS=${ICU_RELEASE}"
  197. "QMAKE_LIBS_PRIVATE+=${BZ2_RELEASE}"
  198. "QMAKE_LIBS_PRIVATE+=${LIBPNG_RELEASE}"
  199. "QMAKE_LIBS_PRIVATE+=${ICU_RELEASE}"
  200. "QMAKE_LIBS_PRIVATE+=${ZSTD_RELEASE}"
  201. )
  202. set(DEBUG_OPTIONS
  203. "LIBJPEG_LIBS=${JPEG_DEBUG}"
  204. "ZLIB_LIBS=${ZLIB_DEBUG}"
  205. "LIBPNG_LIBS=${LIBPNG_DEBUG} ${ZLIB_DEBUG}"
  206. "PCRE2_LIBS=${PCRE2_DEBUG}"
  207. "FREETYPE_LIBS=${FREETYPE_DEBUG_ALL}"
  208. "ICU_LIBS=${ICU_DEBUG}"
  209. "QMAKE_LIBS_PRIVATE+=${BZ2_DEBUG}"
  210. "QMAKE_LIBS_PRIVATE+=${LIBPNG_DEBUG}"
  211. "QMAKE_LIBS_PRIVATE+=${ICU_DEBUG}"
  212. "QMAKE_LIBS_PRIVATE+=${ZSTD_DEBUG}"
  213. )
  214. if(VCPKG_TARGET_IS_WINDOWS)
  215. if(VCPKG_TARGET_IS_UWP)
  216. list(APPEND CORE_OPTIONS -appstore-compliant)
  217. endif()
  218. if(NOT ${VCPKG_LIBRARY_LINKAGE} STREQUAL "static")
  219. list(APPEND CORE_OPTIONS -opengl dynamic) # other options are "-no-opengl", "-opengl angle", and "-opengl desktop" and "-opengel es2"
  220. else()
  221. list(APPEND CORE_OPTIONS -opengl dynamic) # other possible option without moving angle dlls: "-opengl desktop". "-opengel es2" only works with commented patch
  222. endif()
  223. list(APPEND RELEASE_OPTIONS
  224. "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} ws2_32.lib secur32.lib advapi32.lib shell32.lib crypt32.lib user32.lib gdi32.lib"
  225. "SQLITE_LIBS=${SQLITE_RELEASE}"
  226. "HARFBUZZ_LIBS=${HARFBUZZ_RELEASE} ${FREETYPE_RELEASE_ALL}"
  227. "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} ws2_32.lib secur32.lib advapi32.lib shell32.lib crypt32.lib user32.lib gdi32.lib"
  228. )
  229. list(APPEND DEBUG_OPTIONS
  230. "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} ws2_32.lib secur32.lib advapi32.lib shell32.lib crypt32.lib user32.lib gdi32.lib"
  231. "SQLITE_LIBS=${SQLITE_DEBUG}"
  232. "HARFBUZZ_LIBS=${HARFBUZZ_DEBUG} ${FREETYPE_DEBUG_ALL}"
  233. "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} ws2_32.lib secur32.lib advapi32.lib shell32.lib crypt32.lib user32.lib gdi32.lib"
  234. )
  235. if (QT_MYSQL_PLUGIN)
  236. list(APPEND RELEASE_OPTIONS "MYSQL_LIBS=${MYSQL_RELEASE}")
  237. list(APPEND DEBUG_OPTIONS "MYSQL_LIBS=${MYSQL_DEBUG}")
  238. endif(QT_MYSQL_PLUGIN)
  239. elseif(VCPKG_TARGET_IS_LINUX)
  240. list(APPEND CORE_OPTIONS -fontconfig -xcb-xlib -xcb -linuxfb)
  241. if (NOT EXISTS "/usr/include/GL/glu.h")
  242. message(FATAL_ERROR "qt5 requires libgl1-mesa-dev and libglu1-mesa-dev, please use your distribution's package manager to install them.\nExample: \"apt-get install libgl1-mesa-dev libglu1-mesa-dev\"")
  243. endif()
  244. list(APPEND RELEASE_OPTIONS
  245. "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_TYPES_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread"
  246. "SQLITE_LIBS=${SQLITE_RELEASE} -ldl -lpthread"
  247. "HARFBUZZ_LIBS=${HARFBUZZ_RELEASE} ${FREETYPE_RELEASE_ALL} ${GLIB_RELEASE} -lpthread"
  248. "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread"
  249. "FONTCONFIG_LIBS=${FONTCONFIG_RELEASE} ${FREETYPE_RELEASE} ${EXPAT_RELEASE} -luuid"
  250. )
  251. list(APPEND DEBUG_OPTIONS
  252. "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_TYPES_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread"
  253. "SQLITE_LIBS=${SQLITE_DEBUG} -ldl -lpthread"
  254. "HARFBUZZ_LIBS=${HARFBUZZ_DEBUG} ${FREETYPE_DEBUG_ALL} ${GLIB_DEBUG} -lpthread"
  255. "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread"
  256. "FONTCONFIG_LIBS=${FONTCONFIG_DEBUG} ${FREETYPE_DEBUG} ${EXPAT_DEBUG} -luuid"
  257. )
  258. elseif(VCPKG_TARGET_IS_OSX)
  259. list(APPEND CORE_OPTIONS -fontconfig)
  260. if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET)
  261. set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET})
  262. else()
  263. execute_process(COMMAND xcrun --show-sdk-version
  264. OUTPUT_FILE OSX_SDK_VER.txt
  265. WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR})
  266. FILE(STRINGS "${CURRENT_BUILDTREES_DIR}/OSX_SDK_VER.txt" VCPKG_OSX_DEPLOYMENT_TARGET REGEX "^[0-9][0-9]\.[0-9][0-9]*")
  267. message(STATUS "Detected OSX SDK Version: ${VCPKG_OSX_DEPLOYMENT_TARGET}")
  268. string(REGEX MATCH "^[0-9][0-9]\.[0-9][0-9]*" VCPKG_OSX_DEPLOYMENT_TARGET ${VCPKG_OSX_DEPLOYMENT_TARGET})
  269. message(STATUS "Major.Minor OSX SDK Version: ${VCPKG_OSX_DEPLOYMENT_TARGET}")
  270. set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET})
  271. if(${VCPKG_OSX_DEPLOYMENT_TARGET} GREATER "10.15") # Max Version supported by QT. This version is defined in mkspecs/common/macx.conf as QT_MAC_SDK_VERSION_MAX
  272. message(STATUS "Qt ${QT_MAJOR_MINOR_VER}.${QT_PATCH_VER} only support OSX_DEPLOYMENT_TARGET up to 10.15")
  273. set(VCPKG_OSX_DEPLOYMENT_TARGET "10.15")
  274. endif()
  275. set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET})
  276. message(STATUS "Enviromnent OSX SDK Version: $ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET}")
  277. FILE(READ "${SOURCE_PATH}/mkspecs/common/macx.conf" _tmp_contents)
  278. string(REPLACE "QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13" "QMAKE_MACOSX_DEPLOYMENT_TARGET = ${VCPKG_OSX_DEPLOYMENT_TARGET}" _tmp_contents ${_tmp_contents})
  279. FILE(WRITE "${SOURCE_PATH}/mkspecs/common/macx.conf" ${_tmp_contents})
  280. endif()
  281. #list(APPEND QT_PLATFORM_CONFIGURE_OPTIONS HOST_PLATFORM ${TARGET_MKSPEC})
  282. list(APPEND RELEASE_OPTIONS
  283. "PSQL_LIBS=${PSQL_RELEASE} ${PSQL_PORT_RELEASE} ${PSQL_TYPES_RELEASE} ${PSQL_COMMON_RELEASE} ${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread"
  284. "SQLITE_LIBS=${SQLITE_RELEASE} -ldl -lpthread"
  285. "HARFBUZZ_LIBS=${HARFBUZZ_RELEASE} ${FREETYPE_RELEASE_ALL} -framework ApplicationServices"
  286. "OPENSSL_LIBS=${SSL_RELEASE} ${EAY_RELEASE} -ldl -lpthread"
  287. "FONTCONFIG_LIBS=${FONTCONFIG_RELEASE} ${FREETYPE_RELEASE} ${EXPAT_RELEASE} -liconv"
  288. )
  289. list(APPEND DEBUG_OPTIONS
  290. "PSQL_LIBS=${PSQL_DEBUG} ${PSQL_PORT_DEBUG} ${PSQL_TYPES_DEBUG} ${PSQL_COMMON_DEBUG} ${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread"
  291. "SQLITE_LIBS=${SQLITE_DEBUG} -ldl -lpthread"
  292. "HARFBUZZ_LIBS=${HARFBUZZ_DEBUG} ${FREETYPE_DEBUG_ALL} -framework ApplicationServices"
  293. "OPENSSL_LIBS=${SSL_DEBUG} ${EAY_DEBUG} -ldl -lpthread"
  294. "FONTCONFIG_LIBS=${FONTCONFIG_DEBUG} ${FREETYPE_DEBUG} ${EXPAT_DEBUG} -liconv"
  295. )
  296. endif()
  297. ## Do not build tests or examples
  298. list(APPEND CORE_OPTIONS
  299. -nomake examples
  300. -nomake tests)
  301. if(QT_UPDATE_VERSION)
  302. SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
  303. else()
  304. configure_qt(
  305. SOURCE_PATH ${SOURCE_PATH}
  306. ${QT_PLATFORM_CONFIGURE_OPTIONS}
  307. OPTIONS ${CORE_OPTIONS}
  308. OPTIONS_RELEASE ${RELEASE_OPTIONS}
  309. OPTIONS_DEBUG ${DEBUG_OPTIONS}
  310. )
  311. install_qt()
  312. #########################
  313. #TODO: Make this a function since it is also done by modular scripts!
  314. # e.g. by patching mkspecs/features/qt_tools.prf somehow
  315. file(GLOB_RECURSE PRL_FILES "${CURRENT_PACKAGES_DIR}/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/mkspecs/*.pri"
  316. "${CURRENT_PACKAGES_DIR}/debug/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/lib/*.prl" "${CURRENT_PACKAGES_DIR}/tools/qt5/debug/mkspecs/*.pri")
  317. file(TO_CMAKE_PATH "${CURRENT_INSTALLED_DIR}/include" CMAKE_INCLUDE_PATH)
  318. if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
  319. qt_fix_prl("${CURRENT_INSTALLED_DIR}" "${PRL_FILES}")
  320. file(COPY ${CMAKE_CURRENT_LIST_DIR}/qtdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/plugins)
  321. endif()
  322. if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
  323. qt_fix_prl("${CURRENT_INSTALLED_DIR}/debug" "${PRL_FILES}")
  324. file(COPY ${CMAKE_CURRENT_LIST_DIR}/qtdeploy.ps1 DESTINATION ${CURRENT_PACKAGES_DIR}/debug/plugins)
  325. endif()
  326. file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/share)
  327. file(RENAME ${CURRENT_PACKAGES_DIR}/lib/cmake ${CURRENT_PACKAGES_DIR}/share/cmake)
  328. file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/cmake) # TODO: check if important debug information for cmake is lost
  329. #This needs a new VCPKG policy or a static angle build (ANGLE needs to be fixed in VCPKG!)
  330. if(VCPKG_TARGET_IS_WINDOWS AND ${VCPKG_LIBRARY_LINKAGE} MATCHES "static") # Move angle dll libraries
  331. if(EXISTS "${CURRENT_PACKAGES_DIR}/bin")
  332. message(STATUS "Moving ANGLE dlls from /bin to /tools/qt5-angle/bin. In static builds dlls are not allowed in /bin")
  333. file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/qt5-angle)
  334. file(RENAME ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/bin)
  335. if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/bin)
  336. file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/debug)
  337. file(RENAME ${CURRENT_PACKAGES_DIR}/debug/bin ${CURRENT_PACKAGES_DIR}/tools/qt5-angle/debug/bin)
  338. endif()
  339. endif()
  340. endif()
  341. ## Fix location of qtmain(d).lib. Has been moved into manual-link. Add debug version
  342. set(cmakefile "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Core/Qt5CoreConfigExtras.cmake")
  343. file(READ "${cmakefile}" _contents)
  344. if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_BUILD_TYPE)
  345. string(REPLACE "set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)" "set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)" _contents "${_contents}")
  346. string(REPLACE
  347. [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmain.lib")]]
  348. [[set(imported_location_release "${_qt5Core_install_prefix}/lib/manual-link/qtmain.lib")
  349. set(imported_location_debug "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]]
  350. _contents "${_contents}")
  351. string(REPLACE
  352. [[ set_target_properties(Qt5::WinMain PROPERTIES
  353. IMPORTED_LOCATION_RELEASE ${imported_location}
  354. )]]
  355. [[ set_target_properties(Qt5::WinMain PROPERTIES
  356. IMPORTED_LOCATION_RELEASE ${imported_location_release}
  357. IMPORTED_LOCATION_DEBUG ${imported_location_debug}
  358. )]]
  359. _contents "${_contents}")
  360. else() # Single configuration build (either debug or release)
  361. # Release case
  362. string(REPLACE
  363. [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmain.lib")]]
  364. [[set(imported_location "${_qt5Core_install_prefix}/lib/manual-link/qtmain.lib")]]
  365. _contents "${_contents}")
  366. # Debug case (whichever will match)
  367. string(REPLACE
  368. [[set(imported_location "${_qt5Core_install_prefix}/lib/qtmaind.lib")]]
  369. [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]]
  370. _contents "${_contents}")
  371. string(REPLACE
  372. [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/qtmaind.lib")]]
  373. [[set(imported_location "${_qt5Core_install_prefix}/debug/lib/manual-link/qtmaind.lib")]]
  374. _contents "${_contents}")
  375. endif()
  376. file(WRITE "${cmakefile}" "${_contents}")
  377. if(EXISTS ${CURRENT_PACKAGES_DIR}/tools/qt5/bin)
  378. file(COPY ${CURRENT_PACKAGES_DIR}/tools/qt5/bin DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT})
  379. vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin)
  380. vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/qt5/bin)
  381. endif()
  382. # This should be removed if possible! (Currently debug build of qt5-translations requires it.)
  383. if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/tools/qt5/bin)
  384. file(COPY ${CURRENT_PACKAGES_DIR}/tools/qt5/bin DESTINATION ${CURRENT_PACKAGES_DIR}/tools/qt5/debug)
  385. vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/qt5/debug/bin)
  386. endif()
  387. if(EXISTS ${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf)
  388. file(REMOVE "${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf")
  389. endif()
  390. set(CURRENT_INSTALLED_DIR_BACKUP "${CURRENT_INSTALLED_DIR}")
  391. set(CURRENT_INSTALLED_DIR "./../../.." ) # Making the qt.conf relative and not absolute
  392. configure_file(${CURRENT_PACKAGES_DIR}/tools/qt5/qt_release.conf ${CURRENT_PACKAGES_DIR}/tools/qt5/bin/qt.conf) # This makes the tools at least useable for release
  393. set(CURRENT_INSTALLED_DIR "${CURRENT_INSTALLED_DIR_BACKUP}")
  394. qt_install_copyright(${SOURCE_PATH})
  395. endif()
  396. #install scripts for other qt ports
  397. file(COPY
  398. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_port_hashes.cmake
  399. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_port_functions.cmake
  400. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_makefile_install.cmake
  401. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_cmake.cmake
  402. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_fix_prl.cmake
  403. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_download_submodule.cmake
  404. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_build_submodule.cmake
  405. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_install_copyright.cmake
  406. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_submodule_installation.cmake
  407. DESTINATION
  408. ${CURRENT_PACKAGES_DIR}/share/qt5
  409. )
  410. # Fix Qt5GuiConfigExtras EGL path
  411. if(VCPKG_TARGET_IS_LINUX)
  412. set(_file "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake")
  413. file(READ "${_file}" _contents)
  414. string(REGEX REPLACE "_qt5gui_find_extra_libs\\\(EGL[^\\\n]+" "_qt5gui_find_extra_libs(EGL \"EGL\" \"\" \"\${_qt5Gui_install_prefix}/include\")\n" _contents "${_contents}")
  415. file(WRITE "${_file}" "${_contents}")
  416. endif()
  417. if(QT_BUILD_LATEST)
  418. file(COPY
  419. ${CMAKE_CURRENT_LIST_DIR}/cmake/qt_port_hashes_latest.cmake
  420. DESTINATION
  421. ${CURRENT_PACKAGES_DIR}/share/qt5
  422. )
  423. endif()
  424. # #Code to get generated CMake files from CI
  425. # file(RENAME "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Core/Qt5CoreConfig.cmake" "${CURRENT_BUILDTREES_DIR}/Qt5CoreConfig.cmake.log")
  426. # file(GLOB_RECURSE CMAKE_GUI_FILES "${CURRENT_PACKAGES_DIR}/share/cmake/Qt5Gui/*.cmake" )
  427. # foreach(cmake_file ${CMAKE_GUI_FILES})
  428. # get_filename_component(cmake_filename "${cmake_file}" NAME)
  429. # file(COPY "${cmake_file}" DESTINATION "${CURRENT_BUILDTREES_DIR}")
  430. # file(RENAME "${CURRENT_BUILDTREES_DIR}/${cmake_filename}" "${CURRENT_BUILDTREES_DIR}/${cmake_filename}.log")
  431. # endforeach()
  432. # #Copy config.log from buildtree/triplet to buildtree to get the log in CI in case of failure
  433. # if(EXISTS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/config.log")
  434. # file(RENAME "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/config.log" "${CURRENT_BUILDTREES_DIR}/config-rel.log")
  435. # endif()
  436. # if(EXISTS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/config.log")
  437. # file(RENAME "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/config.log" "${CURRENT_BUILDTREES_DIR}/config-dbg.log")
  438. # endif()
  439. # message(FATAL_ERROR "Need Info from CI!")