WSL/cmake/findNuget.cmake

43 lines
1.6 KiB
CMake

function(find_nuget_package name var_name path)
string(JSON "${var_name}_VERSION" GET ${NUGET_PACKAGES_JSON} "${name}")
set(${var_name}_SOURCE_DIR "${CMAKE_BINARY_DIR}/packages/${name}.${${var_name}_VERSION}${path}" PARENT_SCOPE)
set(${var_name}_VERSION "${${var_name}_VERSION}" PARENT_SCOPE)
endfunction()
function (restore_nuget_packages)
# Fetch nuget.exe
FILE(DOWNLOAD
https://dist.nuget.org/win-x86-commandline/v5.10.0/nuget.exe
${CMAKE_BINARY_DIR}/_deps/nuget.exe
EXPECTED_HASH SHA256=852b71cc8c8c2d40d09ea49d321ff56fd2397b9d6ea9f96e532530307bbbafd3)
set_property(
DIRECTORY
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS
${CMAKE_CURRENT_LIST_DIR}/packages.config
${CMAKE_CURRENT_LIST_DIR}/nuget.config)
# Restore nuget packages
execute_process(COMMAND
${CMAKE_BINARY_DIR}/_deps/nuget.exe restore packages.config -SolutionDirectory ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND_ERROR_IS_FATAL ANY)
endfunction()
function (parse_nuget_packages_versions)
# Parse the list of available packages
set(CMD "$packages=@{}; (Select-Xml -path ${CMAKE_SOURCE_DIR}/packages.config /packages).Node.ChildNodes | Where-Object { $_.name -ne '#whitespace'} | % {$packages.add($_.id, $_.Attributes['version'].Value) }; $packages | ConvertTo-Json | Write-Host")
execute_process(
COMMAND powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -Command "${CMD}"
OUTPUT_VARIABLE output
COMMAND_ERROR_IS_FATAL ANY)
set(NUGET_PACKAGES_JSON ${output} PARENT_SCOPE)
endfunction()