master
cmake 42 lines 1.62 KB
Raw
1 function(find_nuget_package name var_name path)
2
3 string(JSON "${var_name}_VERSION" GET ${NUGET_PACKAGES_JSON} "${name}")
4
5 set(${var_name}_SOURCE_DIR "${CMAKE_BINARY_DIR}/packages/${name}.${${var_name}_VERSION}${path}" PARENT_SCOPE)
6 set(${var_name}_VERSION "${${var_name}_VERSION}" PARENT_SCOPE)
7 endfunction()
8
9 function (restore_nuget_packages)
10
11 # Fetch nuget.exe
12 FILE(DOWNLOAD
13 https://dist.nuget.org/win-x86-commandline/v5.10.0/nuget.exe
14 ${CMAKE_BINARY_DIR}/_deps/nuget.exe
15 EXPECTED_HASH SHA256=852b71cc8c8c2d40d09ea49d321ff56fd2397b9d6ea9f96e532530307bbbafd3)
16
17 set_property(
18 DIRECTORY
19 APPEND
20 PROPERTY CMAKE_CONFIGURE_DEPENDS
21 ${CMAKE_CURRENT_LIST_DIR}/packages.config
22 ${CMAKE_CURRENT_LIST_DIR}/nuget.config)
23
24 # Restore nuget packages
25 execute_process(COMMAND
26 ${CMAKE_BINARY_DIR}/_deps/nuget.exe restore packages.config -SolutionDirectory ${CMAKE_BINARY_DIR}
27 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
28 COMMAND_ERROR_IS_FATAL ANY)
29 endfunction()
30
31 function (parse_nuget_packages_versions)
32
33 # Parse the list of available packages
34 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")
35
36 execute_process(
37 COMMAND powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -Command "${CMD}"
38 OUTPUT_VARIABLE output
39 COMMAND_ERROR_IS_FATAL ANY)
40
41 set(NUGET_PACKAGES_JSON ${output} PARENT_SCOPE)
42 endfunction()