]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | #[===[.md: |
2 | # vcpkg_build_qmake | |
3 | ||
4 | Build a qmake-based project, previously configured using vcpkg_configure_qmake. | |
5 | ||
6 | ```cmake | |
7 | vcpkg_build_qmake() | |
8 | ``` | |
9 | #]===] | |
10 | ||
11 | function(vcpkg_build_qmake) | |
12 | # parse parameters such that semicolons in options arguments to COMMAND don't get erased | |
13 | cmake_parse_arguments(PARSE_ARGV 0 _csc "SKIP_MAKEFILES" "BUILD_LOGNAME" "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS") | |
14 | ||
15 | if(CMAKE_HOST_WIN32) | |
16 | if (VCPKG_QMAKE_USE_NMAKE) | |
17 | find_program(NMAKE nmake) | |
18 | set(INVOKE "${NMAKE}") | |
19 | get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY) | |
20 | set(PATH_GLOBAL "$ENV{PATH}") | |
21 | set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}") | |
22 | set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}") | |
23 | else() | |
24 | vcpkg_find_acquire_program(JOM) | |
25 | set(INVOKE "${JOM}") | |
26 | endif() | |
27 | else() | |
28 | find_program(MAKE make) | |
29 | set(INVOKE "${MAKE}") | |
30 | endif() | |
31 | ||
32 | # Make sure that the linker finds the libraries used | |
33 | set(ENV_PATH_BACKUP "$ENV{PATH}") | |
34 | ||
35 | file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR) | |
36 | ||
37 | if(NOT _csc_BUILD_LOGNAME) | |
38 | set(_csc_BUILD_LOGNAME build) | |
39 | endif() | |
40 | ||
41 | function(run_jom TARGETS LOG_PREFIX LOG_SUFFIX) | |
42 | message(STATUS "Package ${LOG_PREFIX}-${TARGET_TRIPLET}-${LOG_SUFFIX}") | |
43 | vcpkg_execute_build_process( | |
44 | COMMAND ${INVOKE} -j ${VCPKG_CONCURRENCY} ${TARGETS} | |
45 | NO_PARALLEL_COMMAND ${INVOKE} -j 1 ${TARGETS} | |
46 | WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${LOG_SUFFIX} | |
47 | LOGNAME package-${LOG_PREFIX}-${TARGET_TRIPLET}-${LOG_SUFFIX} | |
48 | ) | |
49 | endfunction() | |
50 | ||
51 | # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings | |
52 | set(ENV_CL_BACKUP "$ENV{_CL_}") | |
53 | set(ENV{_CL_} "/utf-8") | |
54 | ||
55 | #Replace with VCPKG variables if PR #7733 is merged | |
56 | unset(BUILDTYPES) | |
57 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") | |
58 | set(_buildname "DEBUG") | |
59 | list(APPEND BUILDTYPES ${_buildname}) | |
60 | set(_short_name_${_buildname} "dbg") | |
61 | set(_path_suffix_${_buildname} "/debug") | |
62 | endif() | |
63 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") | |
64 | set(_buildname "RELEASE") | |
65 | list(APPEND BUILDTYPES ${_buildname}) | |
66 | set(_short_name_${_buildname} "rel") | |
67 | set(_path_suffix_${_buildname} "") | |
68 | endif() | |
69 | unset(_buildname) | |
70 | ||
71 | foreach(_buildname ${BUILDTYPES}) | |
72 | set(_installed_prefix_ "${CURRENT_INSTALLED_DIR}${_path_suffix_${_buildname}}") | |
73 | set(_installed_libpath_ "${_installed_prefix_}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_installed_prefix_}/lib/manual-link/") | |
74 | ||
75 | vcpkg_add_to_path(PREPEND "${_installed_prefix_}/bin") | |
76 | vcpkg_add_to_path(PREPEND "${_installed_prefix_}/lib") | |
77 | ||
78 | # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking | |
79 | if(CMAKE_HOST_UNIX) | |
80 | if(DEFINED ENV{LD_LIBRARY_PATH}) | |
81 | set(_ld_library_path_defined_ TRUE) | |
82 | set(_ld_library_path_backup_ $ENV{LD_LIBRARY_PATH}) | |
83 | set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}${VCPKG_HOST_PATH_SEPARATOR}${_ld_library_path_backup_}") | |
84 | else() | |
85 | set(_ld_library_path_defined_ FALSE) | |
86 | set(ENV{LD_LIBRARY_PATH} "${_installed_libpath_}") | |
87 | endif() | |
88 | endif() | |
89 | ||
90 | list(APPEND _csc_${_buildname}_TARGETS ${_csc_TARGETS}) | |
91 | if(NOT _csc_SKIP_MAKEFILES) | |
92 | run_jom(qmake_all makefiles ${_short_name_${_buildname}}) | |
93 | endif() | |
94 | run_jom("${_csc_${_buildname}_TARGETS}" ${_csc_BUILD_LOGNAME} ${_short_name_${_buildname}}) | |
95 | ||
96 | # Restore backup | |
97 | if(CMAKE_HOST_UNIX) | |
98 | if(_ld_library_path_defined_) | |
99 | set(ENV{LD_LIBRARY_PATH} "${_ld_library_path_backup_}") | |
100 | else() | |
101 | unset(ENV{LD_LIBRARY_PATH}) | |
102 | endif() | |
103 | endif() | |
104 | endforeach() | |
105 | ||
106 | # Restore the original value of ENV{PATH} | |
107 | set(ENV{PATH} "${ENV_PATH_BACKUP}") | |
108 | set(ENV{_CL_} "${ENV_CL_BACKUP}") | |
109 | endfunction() |