#!/usr/bin/python

# Copyright (C) 2010 Apple Inc.  All rights reserved.

# Copyright (C) 2011 Google 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():

    tasksToKillWin = [

        "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",

    ]



    tasksToKillMac = [

        "apache2",

        "cc1plus",

        "cc1objplus",

        "clang",

        "clang\+\+",

        "gcc-4.2",

        "httpd",

        "i686-apple-darwin10-gcc-4.2.1",

        "jsc",

        "make",

        "pboard", # FIXME: https://bugs.webkit.org/show_bug.cgi?id=81012

        "per5.12",

        "perl",

        "Problem Reporter",

        "ruby",

        "Safari Web Content",

        "Safari",

        "svn",

        "DumpRenderTree",

        "TestWebKitAPI Web Content",

        "TestWebKitAPI",

        "WebKitPluginAgen", # FIXME: Why no 't'?

        "WebKitTestRunner Web Content",

        "WebKitTestRunner",

        "WebProcess",

        "xcodebuild",

    ]



    taskToKillUnix = [

        "apache2",

        "cc1plus",

        "DumpRenderTree",

        "gold",

        "httpd",

        "ld",

        "make",

        "ruby",

        "svn",

        "webkit_unit_tests",

        "WebKitTestRunner",

        "Xvfb",

    ]



    if sys.platform == 'darwin':

        for task in tasksToKillMac:

            os.system("killall -9 -v -m " + task)

        # Kill all instances of python executing run-webkit-tests

        os.system("ps aux | grep -P '.+/Python .+(run_webkit_tests|run-webkit-tests)' | grep -v grep | awk '{print $2}' | xargs kill")

    elif sys.platform == 'cygwin' or sys.platform == 'win32':

        for task in tasksToKillWin:

            os.system("taskkill /t /f /im " + task)

    elif sys.platform.startswith('linux'):

        for task in taskToKillUnix:

            os.system("killall -9 -v " + task)

        os.system("ps aux | grep -P '.+/python .+(run_webkit_tests|run-webkit-tests)' | grep -v grep | awk '{print $2}' | xargs kill")

    else:

        sys.exit()

        # FIXME: Should we return an exit code based on how the kills went?





if __name__ == '__main__':

    sys.exit(main())

