Skip to content

Commit

Permalink
Remove dependency on win32ole
Browse files Browse the repository at this point in the history
This gem is being bundled in Ruby 3.5: ruby/ruby@f365bef

So, just use buildin commands to do the same thing.

The powershell version will work on at least Windows 8. There are no docs I could find for earlier versions
wmic is deprecated, prefer the powershell version
  • Loading branch information
Earlopain committed Jun 8, 2024
1 parent 6537c74 commit 1017f39
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions lib/rake/cpu_counter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,20 @@ def count_via_java_runtime
end
def count_via_win32
require 'win32ole'
wmi = WIN32OLE.connect("winmgmts://")
cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # TODO count hyper-threaded in this
cpu.to_enum.first.NumberOfCores
rescue StandardError, LoadError
# Get-CimInstance introduced in PowerShell 3 or earlier: https://learn.microsoft.com/en-us/previous-versions/powershell/module/cimcmdlets/get-ciminstance?view=powershell-3.0
result = run_win32(
'powershell -command "Get-CimInstance -ClassName Win32_Processor -Property NumberOfCores ' \
'| Select-Object -Property NumberOfCores"'
)
if !result || $?.exitstatus != 0
# fallback to deprecated wmic for older systems
result = run_win32("wmic cpu get NumberOfCores")
end
# powershell: "\nNumberOfCores\n-------------\n 4\n\n\n"
# wmic: "NumberOfCores \n\n4 \n\n\n\n"
result.scan(/\d+/).map(&:to_i).reduce(:+) if result
rescue StandardError
nil
end
Expand All @@ -87,6 +96,12 @@ def run(command, *args)
end
end
def run_win32(command, *args)
IO.popen(command, &:read)
rescue Errno::ENOENT
nil
end
def resolve_command(command)
look_for_command("/usr/sbin", command) ||
look_for_command("/sbin", command) ||
Expand Down

0 comments on commit 1017f39

Please sign in to comment.