require "rubygems" require "rake" require "mkmf" desc "Building event log dll" def ensure_present(commands) commands.each do |c| unless find_executable c warn "Could not find #{c}. Windows Event Logging will not correctly function." end end end EVT_MC_FILE = "chef-log.man" EVT_RC_FILE = "chef-log.rc" EVT_RESOURCE_OBJECT = "resource.o" EVT_SHARED_OBJECT = "chef-log.dll" MC = "windmc" RC = "windres" CC = "gcc" ensure_present [MC, RC, CC] task :build => [EVT_RESOURCE_OBJECT, EVT_SHARED_OBJECT] task :default => [:build, :register] file EVT_RC_FILE => EVT_MC_FILE do sh "#{MC} #{EVT_MC_FILE}" end file EVT_RESOURCE_OBJECT => EVT_RC_FILE do sh "#{RC} -i #{EVT_RC_FILE} -o #{EVT_RESOURCE_OBJECT}" end file EVT_SHARED_OBJECT => EVT_RESOURCE_OBJECT do sh "#{CC} -o #{EVT_SHARED_OBJECT} -shared #{EVT_RESOURCE_OBJECT}" end task :register => EVT_SHARED_OBJECT do require "win32/eventlog" dll_file = File.expand_path(EVT_SHARED_OBJECT) begin Win32::EventLog.add_event_source( :source => "Application", :key_name => "Chef", :event_message_file => dll_file, :category_message_file => dll_file ) rescue Errno::EIO => e puts "Skipping event log registration due to missing privileges: #{e}" end end