diff options
Diffstat (limited to 'vcpkg/scripts/cmake/vcpkg_build_qmake.cmake')
| -rw-r--r-- | vcpkg/scripts/cmake/vcpkg_build_qmake.cmake | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake new file mode 100644 index 0000000..248af60 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake @@ -0,0 +1,82 @@ +function(z_run_jom_build invoke_command targets log_prefix log_suffix) + message(STATUS "Package ${log_prefix}-${TARGET_TRIPLET}-${log_suffix}") + vcpkg_execute_build_process( + COMMAND "${invoke_command}" -j ${VCPKG_CONCURRENCY} ${targets} + NO_PARALLEL_COMMAND "${invoke_command}" -j 1 ${targets} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${log_suffix}" + LOGNAME "package-${log_prefix}-${TARGET_TRIPLET}-${log_suffix}" + ) +endfunction() + +function(vcpkg_build_qmake) + # parse parameters such that semicolons in options arguments to COMMAND don't get erased + cmake_parse_arguments(PARSE_ARGV 0 arg + "SKIP_MAKEFILES" + "BUILD_LOGNAME" + "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS" + ) + + # Make sure that the linker finds the libraries used + vcpkg_backup_env_variables(VARS PATH LD_LIBRARY_PATH CL _CL_) + + # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings + set(ENV{_CL_} "/utf-8") + + if(CMAKE_HOST_WIN32) + if(VCPKG_TARGET_IS_MINGW) + find_program(MINGW32_MAKE mingw32-make REQUIRED) + set(invoke_command "${MINGW32_MAKE}") + elseif (VCPKG_QMAKE_USE_NMAKE) + find_program(NMAKE nmake) + set(invoke_command "${NMAKE}") + get_filename_component(nmake_exe_path "${NMAKE}" DIRECTORY) + vcpkg_host_path_list(APPEND ENV{PATH} "${nmake_exe_path}") + set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}") + else() + vcpkg_find_acquire_program(JOM) + set(invoke_command "${JOM}") + endif() + else() + find_program(MAKE make) + set(invoke_command "${MAKE}") + endif() + + if(NOT DEFINED arg_BUILD_LOGNAME) + set(arg_BUILD_LOGNAME build) + endif() + + set(short_name_debug "dbg") + set(path_suffix_debug "/debug") + set(targets_debug "${arg_DEBUG_TARGETS}") + + set(short_name_release "rel") + set(path_suffix_release "") + set(targets_release "${arg_RELEASE_TARGETS}") + + if(NOT DEFINED VCPKG_BUILD_TYPE) + set(items debug release) + else() + set(items release) + endif() + foreach(build_type IN ITEMS ${items}) + set(current_installed_prefix "${CURRENT_INSTALLED_DIR}${path_suffix_${build_type}}") + + vcpkg_add_to_path(PREPEND "${current_installed_prefix}/lib" "${current_installed_prefix}/bin") + + # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking + if(CMAKE_HOST_UNIX) + set(ENV{LD_LIBRARY_PATH} "") + vcpkg_host_path_list(APPEND ENV{LD_LIBRARY_PATH} "${current_installed_prefix}/lib" "${current_installed_prefix}/lib/manual-link") + endif() + + vcpkg_list(SET targets ${targets_${build_type}} ${arg_TARGETS}) + if(NOT arg_SKIP_MAKEFILES) + z_run_jom_build("${invoke_command}" qmake_all makefiles "${short_name_${build_type}}") + endif() + z_run_jom_build("${invoke_command}" "${targets}" "${arg_BUILD_LOGNAME}" "${short_name_${build_type}}") + + vcpkg_restore_env_variables(VARS PATH LD_LIBRARY_PATH) + endforeach() + + vcpkg_restore_env_variables(VARS CL _CL_) +endfunction() |