#!/usr/bin/env python

# Copyright (C) 2010 Apple Inc.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer. 
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution. 
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import os, sys

def main():
    tasksToKill = [ "cl.exe", 
					"devenv.com", 
					"devenv.exe", 
					"DumpRenderTree.exe", 
					"DumpRenderTree_debug.exe",
					"httpd.exe", 
					"imagediff.exe", 
					"imagediff_debug.exe", 
					"jsc.exe", 
					"jsc_debug.exe",
					"LightTPD.exe", 
					"link.exe", 
					"midl.exe", 
					"perl.exe", 
					"Safari.exe", 
					"svn.exe", 
					"testapi.exe", 
					"testapi_debug.exe", 
					"VcBuildHelper.exe", 
					"wdiff.exe", 
					"WebKit2WebProcess.exe", 
					"WebKit2WebProcess_debug.exe", 
					"WebKitTestRunner.exe", 
					"WebKitTestRunner_debug.exe"]
					
    for task in tasksToKill:
        os.system("taskkill /t /f /im " + task)

if __name__ == '__main__':
    sys.exit(main())
