install_qt.cmake 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. include(qt_fix_makefile_install)
  2. function(install_qt)
  3. if(CMAKE_HOST_WIN32)
  4. if (VCPKG_QMAKE_USE_NMAKE)
  5. find_program(NMAKE nmake REQUIRED)
  6. set(INVOKE "${NMAKE}")
  7. set(INVOKE_SINGLE "${NMAKE}")
  8. get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY)
  9. set(PATH_GLOBAL "$ENV{PATH}")
  10. set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")
  11. set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}")
  12. else()
  13. vcpkg_find_acquire_program(JOM)
  14. set(INVOKE "${JOM}" /J ${VCPKG_CONCURRENCY})
  15. set(INVOKE_SINGLE "${JOM}" /J 1)
  16. endif()
  17. else()
  18. find_program(MAKE make)
  19. set(INVOKE "${MAKE}" -j${VCPKG_CONCURRENCY})
  20. set(INVOKE_SINGLE "${MAKE}" -j1)
  21. endif()
  22. vcpkg_find_acquire_program(PYTHON3)
  23. get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY)
  24. vcpkg_add_to_path(PREPEND "${PYTHON3_EXE_PATH}")
  25. if (CMAKE_HOST_WIN32)
  26. # flex and bison for ANGLE library
  27. vcpkg_find_acquire_program(FLEX)
  28. get_filename_component(FLEX_EXE_PATH ${FLEX} DIRECTORY)
  29. get_filename_component(FLEX_DIR ${FLEX_EXE_PATH} NAME)
  30. file(COPY ${FLEX_EXE_PATH} DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-tools" )
  31. set(FLEX_TEMP "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-tools/${FLEX_DIR}")
  32. file(RENAME "${FLEX_TEMP}/win_bison.exe" "${FLEX_TEMP}/bison.exe")
  33. file(RENAME "${FLEX_TEMP}/win_flex.exe" "${FLEX_TEMP}/flex.exe")
  34. vcpkg_add_to_path("${FLEX_TEMP}")
  35. endif()
  36. set(_path "$ENV{PATH}")
  37. #Replace with VCPKG variables if PR #7733 is merged
  38. unset(BUILDTYPES)
  39. if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
  40. set(_buildname "DEBUG")
  41. list(APPEND BUILDTYPES ${_buildname})
  42. set(_short_name_${_buildname} "dbg")
  43. set(_path_suffix_${_buildname} "/debug")
  44. set(_build_type_${_buildname} "debug")
  45. endif()
  46. if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
  47. set(_buildname "RELEASE")
  48. list(APPEND BUILDTYPES ${_buildname})
  49. set(_short_name_${_buildname} "rel")
  50. set(_path_suffix_${_buildname} "")
  51. set(_build_type_${_buildname} "release")
  52. endif()
  53. unset(_buildname)
  54. foreach(_buildname ${BUILDTYPES})
  55. set(_build_triplet ${TARGET_TRIPLET}-${_short_name_${_buildname}})
  56. set(_installed_prefix_ "${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}")
  57. set(_installed_libpath_ "${_installed_prefix_}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_installed_prefix_}/lib/manual-link/")
  58. vcpkg_add_to_path(PREPEND "${_installed_prefix_}/bin")
  59. vcpkg_add_to_path(PREPEND "${_installed_prefix_}/lib")
  60. # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking
  61. if(CMAKE_HOST_UNIX)
  62. if(DEFINED ENV{LD_LIBRARY_PATH})
  63. set(_ld_library_path_defined_ TRUE)
  64. set(_ld_library_path_backup_ $ENV{LD_LIBRARY_PATH})
  65. set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}${VCPKG_HOST_PATH_SEPARATOR}${_ld_library_path_backup_}")
  66. else()
  67. set(_ld_library_path_defined_ FALSE)
  68. set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}")
  69. endif()
  70. endif()
  71. if(VCPKG_TARGET_IS_OSX)
  72. # For some reason there will be an error on MacOSX without this clean!
  73. message(STATUS "Cleaning before build ${_build_triplet}")
  74. vcpkg_execute_required_process(
  75. COMMAND ${INVOKE_SINGLE} clean
  76. WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}
  77. LOGNAME cleaning-1-${_build_triplet}
  78. )
  79. endif()
  80. message(STATUS "Building ${_build_triplet}")
  81. vcpkg_execute_build_process(
  82. COMMAND ${INVOKE}
  83. NO_PARALLEL_COMMAND ${INVOKE_SINGLE}
  84. WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}
  85. LOGNAME build-${_build_triplet}
  86. )
  87. if(VCPKG_TARGET_IS_OSX)
  88. # For some reason there will be an error on MacOSX without this clean!
  89. message(STATUS "Cleaning after build before install ${_build_triplet}")
  90. vcpkg_execute_required_process(
  91. COMMAND ${INVOKE_SINGLE} clean
  92. WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}
  93. LOGNAME cleaning-2-${_build_triplet}
  94. )
  95. endif()
  96. message(STATUS "Fixing makefile installation path ${_build_triplet}")
  97. qt_fix_makefile_install("${CURRENT_BUILDTREES_DIR}/${_build_triplet}")
  98. message(STATUS "Installing ${_build_triplet}")
  99. vcpkg_execute_required_process(
  100. COMMAND ${INVOKE} install
  101. WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${_build_triplet}
  102. LOGNAME package-${_build_triplet}
  103. )
  104. message(STATUS "Package ${_build_triplet} done")
  105. set(ENV{PATH} "${_path}")
  106. # Restore backup
  107. if(CMAKE_HOST_UNIX)
  108. if(_ld_library_path_defined_)
  109. set(ENV{LD_LIBRARY_PATH} "${_ld_library_path_backup_}")
  110. else()
  111. unset(ENV{LD_LIBRARY_PATH})
  112. endif()
  113. endif()
  114. endforeach()
  115. endfunction()