Relax jq dependency from provisioning

We may read the installed package information from the 'vcpkg list'
command instead of parsing the vcpkg.json. Also instead of using
the jq as a parser, use the cmake script. This allows skipping the
jq installation.

Change-Id: Id3ace62f8f40ff1bd059878da3fd13e466861830
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev
2025-01-08 17:58:25 +01:00
parent 3145c3a5ed
commit c259d85b8e
33 changed files with 77 additions and 138 deletions

View File

@@ -0,0 +1,45 @@
#!/usr/bin/cmake -P
cmake_minimum_required(VERSION 3.19)
message("VCPKG_EXECUTABLE: ${VCPKG_EXECUTABLE}")
if(NOT VCPKG_EXECUTABLE OR NOT EXISTS "${VCPKG_EXECUTABLE}" OR NOT OUTPUT OR NOT VCPKG_INSTALL_ROOT)
message(FATAL_ERROR "Usage: \ncmake -DVCPKG_EXECUTABLE=<path/to/vcpkg/executable>"
" -DOUTPUT=<path/to/versions.txt> -DVCPKG_INSTALL_ROOT=<path/to/install/root>"
" -P vcpkg_parse_packages.cmake"
)
endif()
execute_process(COMMAND "${VCPKG_EXECUTABLE}"
"list" "--x-install-root=${VCPKG_INSTALL_ROOT}" "--x-json" OUTPUT_VARIABLE result)
string(JSON element_count LENGTH "${result}")
file(STRINGS "${OUTPUT}" output_data)
math(EXPR last_index "${element_count} - 1")
foreach(i RANGE 0 ${last_index})
string(JSON package MEMBER "${result}" "${i}")
# Extract the package name from <package name>:<triplet> pair
if(NOT package MATCHES "^([^:]+):.+$")
continue()
endif()
# Skip vcpkg internal tools
set(package_name "${CMAKE_MATCH_1}")
if(package_name MATCHES "^vcpkg-.+$")
continue()
endif()
string(JSON package_info GET "${result}" "${package}")
string(JSON version GET "${package_info}" "version")
string(STRIP "${package}" package)
string(STRIP "${version}" version)
# Store the package information for the particular triplet
list(APPEND output_data "vcpkg ${package} = ${version}")
endforeach()
if(output_data)
list(JOIN output_data "\n" output_data)
file(WRITE "${OUTPUT}" "${output_data}\n")
endif()