Home | History | Annotate | Download | only in thirdparty
      1 # Copyright (C) 2010 Chris Jerdonek (cjerdonek (at] webkit.org)
      2 #
      3 # Redistribution and use in source and binary forms, with or without
      4 # modification, are permitted provided that the following conditions
      5 # are met:
      6 # 1.  Redistributions of source code must retain the above copyright
      7 #     notice, this list of conditions and the following disclaimer.
      8 # 2.  Redistributions in binary form must reproduce the above copyright
      9 #     notice, this list of conditions and the following disclaimer in the
     10 #     documentation and/or other materials provided with the distribution.
     11 #
     12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
     13 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
     16 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     17 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     18 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     19 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     20 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     21 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     22 
     23 # This module is required for Python to treat this directory as a package.
     24 
     25 """Autoinstalls third-party code required by WebKit."""
     26 
     27 from __future__ import with_statement
     28 
     29 import codecs
     30 import os
     31 
     32 from webkitpy.common.system.autoinstall import AutoInstaller
     33 
     34 # Putting the autoinstall code into webkitpy/thirdparty/__init__.py
     35 # ensures that no autoinstalling occurs until a caller imports from
     36 # webkitpy.thirdparty.  This is useful if the caller wants to configure
     37 # logging prior to executing autoinstall code.
     38 
     39 # FIXME: Ideally, a package should be autoinstalled only if the caller
     40 #        attempts to import from that individual package.  This would
     41 #        make autoinstalling lazier than it is currently.  This can
     42 #        perhaps be done using Python's import hooks as the original
     43 #        autoinstall implementation did.
     44 
     45 # FIXME: If any of these servers is offline, webkit-patch breaks (and maybe
     46 # other scripts do, too). See <http://webkit.org/b/42080>.
     47 
     48 # We put auto-installed third-party modules in this directory--
     49 #
     50 #     webkitpy/thirdparty/autoinstalled
     51 thirdparty_dir = os.path.dirname(__file__)
     52 autoinstalled_dir = os.path.join(thirdparty_dir, "autoinstalled")
     53 
     54 # We need to download ClientForm since the mechanize package that we download
     55 # below requires it.  The mechanize package uses ClientForm, for example,
     56 # in _html.py.  Since mechanize imports ClientForm in the following way,
     57 #
     58 # > import sgmllib, ClientForm
     59 #
     60 # the search path needs to include ClientForm.  We put ClientForm in
     61 # its own directory so that we can include it in the search path without
     62 # including other modules as a side effect.
     63 clientform_dir = os.path.join(autoinstalled_dir, "clientform")
     64 installer = AutoInstaller(append_to_search_path=True,
     65                           target_dir=clientform_dir)
     66 installer.install(url="http://pypi.python.org/packages/source/C/ClientForm/ClientForm-0.2.10.zip",
     67                   url_subpath="ClientForm.py")
     68 
     69 # The remaining packages do not need to be in the search path, so we create
     70 # a new AutoInstaller instance that does not append to the search path.
     71 installer = AutoInstaller(target_dir=autoinstalled_dir)
     72 
     73 installer.install(url="http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.4.zip",
     74                   url_subpath="mechanize")
     75 installer.install(url="http://pypi.python.org/packages/source/p/pep8/pep8-0.5.0.tar.gz#md5=512a818af9979290cd619cce8e9c2e2b",
     76                   url_subpath="pep8-0.5.0/pep8.py")
     77 installer.install(url="http://www.adambarth.com/webkit/eliza",
     78                   target_name="eliza.py")
     79 
     80 # Since irclib and ircbot are two top-level packages, we need to import
     81 # them separately.  We group them into an irc package for better
     82 # organization purposes.
     83 irc_dir = os.path.join(autoinstalled_dir, "irc")
     84 installer = AutoInstaller(target_dir=irc_dir)
     85 installer.install(url="http://downloads.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip", url_subpath="irclib.py")
     86 installer.install(url="http://downloads.sourceforge.net/project/python-irclib/python-irclib/0.4.8/python-irclib-0.4.8.zip", url_subpath="ircbot.py")
     87 
     88 pywebsocket_dir = os.path.join(autoinstalled_dir, "pywebsocket")
     89 installer = AutoInstaller(target_dir=pywebsocket_dir)
     90 installer.install(url="http://pywebsocket.googlecode.com/files/mod_pywebsocket-0.5.2.tar.gz",
     91                   url_subpath="pywebsocket-0.5.2/src/mod_pywebsocket")
     92 
     93 readme_path = os.path.join(autoinstalled_dir, "README")
     94 if not os.path.exists(readme_path):
     95     with codecs.open(readme_path, "w", "ascii") as file:
     96         file.write("This directory is auto-generated by WebKit and is "
     97                    "safe to delete.\nIt contains needed third-party Python "
     98                    "packages automatically downloaded from the web.")
     99