vcpkg/scripts/cmake/vcpkg_build_qmake.cmake
Billy O'Neal ae76307e4b
Audit use of TO_NATIVE_PATH. (#26201)
* Audit use of TO_NATIVE_PATH.

TO_NATIVE_PATH should only be used when (1) pasting a path into a command line, or (2) displaying a path to a user. It must not be used before calling other CMake operations like file(WRITE.

Fixes https://github.com/microsoft/vcpkg/issues/26178

ports/ffmpeg/portfile.cmake:
Both uses are being embedded into a command line 

ports/gdal/dependency_win.cmake
117: This used TO_NATIVE_PATH but didn't actually connect the result. It's going on a command line so TO_NATIVE_PATH is appropriate.
Drive by: Added quotes around other uses (all of which seem to be going to command lines).
202: ${EXPAT_LIBRARY_REL} ${ZLIB_LIBRARY_REL} don't seem to be set even though they are used; I think this is wrong but I don't know for sure that it is so I'm leaving it alone for now.

ports/msmpi/portfile.cmake
All 3 uses are being embedded into a command line 

ports/jemalloc/fix-utilities.patch
ports/libproxy/fix-dependency-libmodman.patch
ports/qtbase/env.patch
These are in upstream content / context so it is not edited.

ports/opengl/portfile.cmake
Broken! Drive by fixes:
* Modernized checking VCPKG_BUILD_TYPE
* Ordered things consistently to be release then debug.
* Removed funny newlines.

ports/openni2/portfile.cmake
Borderline OK; it goes into an MSBuild / vcxproj. I'm leaving it alone. Drive by fixes:
* Guarded debug-only copies for VCPKG_BUILD_TYPE
* Fixed supports expression

ports/openssl/unix/CMakeLists.txt:
Unused!

ports/pthreads/portfile.cmake:
Both uses are being embedded into a command line 

ports/qt5-base/cmake/qt_fix_makefile_install.cmake
I'm not sure if this one is OK but it's being embedded into a file so it's probably fine.

ports/qtapplicationmanager/portfile.cmake:
I'm pretty sure this one is wrong, but it's guarded by VCPKG_TARGET_IS_WINDOWS so the ability to create damage is limited.

ports/readosm/portfile.cmake:
The use is being embedded into a command line 

ports/spatialite-tools/portfile.cmake:
The use is being embedded into a command line 

ports/sqlcipher/portfile.cmake:
Both uses are being embedded into a command line 

scripts/ports.cmake:
Some uses were unused, others are immediately used and printed to the console. 

scripts/buildsystems/vcpkg.cmake:
Fixed :)

scripts/cmake/vcpkg_build_qmake:
Looks unused.

scripts/cmake/vcpkg_build_process.cmake:
Added to console message only. 

scripts/cmake/vcpkg_execute_required_process_repeat.cmake:
Added to console message only. 
Drive by: Fixed typo in variable name in the message.

scripts/cmake/vcpkg_execute_required_process.cmake:
Added to console message only. 

* Fix missing license.
2022-08-12 15:21:20 -07:00

80 lines
3.0 KiB
CMake

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_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()