| #!/usr/bin/env python |
| |
| # Copyright (C) 2009 Kevin Ollivier 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 COMPUTER, INC. ``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 COMPUTER, INC. OR |
| # 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. |
| # |
| # Script for building Mac .pkg installer |
| |
| import commands |
| import datetime |
| import distutils.sysconfig |
| import glob |
| import optparse |
| import os |
| import shutil |
| import string |
| import sys |
| import tempfile |
| |
| script_dir = os.path.abspath(os.path.dirname(__file__)) |
| sys.path.append(os.path.abspath(os.path.join(script_dir, "..", "build"))) |
| |
| from build_utils import * |
| |
| import wx |
| |
| wxwk_root = os.path.abspath(os.path.join(script_dir, "..", "..", "..")) |
| wxwebkit_dir = os.path.abspath(os.path.join(wxwk_root, "WebKitBuild", get_config(wxwk_root) + git_branch_name())) |
| |
| wx_version = wx.__version__[:5] |
| py_version = sys.version[:3] |
| |
| date = str(datetime.date.today()) |
| |
| platform = "osx" |
| |
| pkgname = "wxWebKit-%s-wx%s-py%s-%s" % (platform, wx_version[:3], py_version, date) |
| |
| tempdir = "/tmp/%s" % (pkgname) |
| |
| if os.path.exists(tempdir): |
| shutil.rmtree(tempdir) |
| os.makedirs(tempdir) |
| |
| installroot = os.path.join(tempdir, "install-root") |
| installapps = os.path.join(tempdir, "install-apps") |
| |
| sp_root = distutils.sysconfig.get_python_lib() |
| wx_root = sp_root |
| if sys.platform.startswith("darwin"): |
| wx_root = "/usr/local/lib/wxPython-unicode-%s" % wx.__version__ |
| sp_root = "%s/lib/python%s/site-packages" % (wx_root, py_version) |
| sitepackages = "%s/wx-%s-mac-unicode/wx" % (sp_root, wx_version[:3]) |
| prefix = wx_root + "/lib" |
| |
| def mac_update_dependencies(dylib, prefix): |
| """ |
| Copies any non-system dependencies into the bundle, and |
| updates the install name path to the new path in the bundle. |
| """ |
| global wx_root |
| system_prefixes = ["/usr/lib", "/System/Library", wx_root] |
| |
| output = commands.getoutput("otool -L %s" % dylib).strip() |
| for line in output.split("\n"): |
| filename = line.split("(")[0].strip() |
| if os.path.exists(filename): |
| print "checking dll %s" % filename |
| copy = True |
| for sys_prefix in system_prefixes: |
| if filename.startswith(sys_prefix): |
| copy = False |
| |
| if copy: |
| copydir = os.path.dirname(dylib) |
| |
| filedir, basename = os.path.split(filename) |
| dest_filename = os.path.join(prefix, basename) |
| copyname = os.path.join(copydir, basename) |
| if not os.path.exists(copyname): |
| shutil.copy(filename, copydir) |
| os.system("install_name_tool -id %s %s" % (dest_filename, copyname)) |
| |
| os.system("install_name_tool -change %s %s %s" % (filename, dest_filename, dylib)) |
| |
| def exitIfError(cmd): |
| print cmd |
| retval = os.system(cmd) |
| if retval != 0: |
| if os.path.exists(tempdir): |
| shutil.rmtree(tempdir) |
| sys.exit(1) |
| |
| wxroot = installroot + prefix |
| wxpythonroot = installroot + sitepackages |
| |
| try: |
| if not os.path.exists(wxroot): |
| os.makedirs(wxroot) |
| |
| if not os.path.exists(wxpythonroot): |
| os.makedirs(wxpythonroot) |
| |
| for wildcard in ["*.py", "*.so"]: |
| files = glob.glob(os.path.join(wxwebkit_dir, wildcard)) |
| for afile in files: |
| shutil.copy(afile, wxpythonroot) |
| |
| for wildcard in ["*.dylib"]: |
| files = glob.glob(os.path.join(wxwebkit_dir, wildcard)) |
| for afile in files: |
| shutil.copy(afile, wxroot) |
| |
| if sys.platform.startswith("darwin"): |
| dylib_path = os.path.join(wxroot, "libwxwebkit.dylib") |
| os.system("install_name_tool -id %s %s" % (os.path.join(prefix, "libwxwebkit.dylib"), dylib_path)) |
| mac_update_dependencies(dylib_path, prefix) |
| mac_update_dependencies(os.path.join(wxpythonroot, "_webview.so"), prefix) |
| |
| demodir = installroot + "/Applications/wxWebKit/Demos" |
| if not os.path.exists(demodir): |
| os.makedirs(demodir) |
| |
| shutil.copy(os.path.join(wxwk_root, "Source", "WebKit", "wx", "bindings", "python", "samples", "simple.py"), demodir) |
| |
| if os.path.exists(pkgname + ".pkg"): |
| shutil.rmtree(pkgname + ".pkg") |
| |
| pkg_args = ['--title ' + pkgname, |
| '--out %s.pkg' % pkgname, |
| '--version ' + date.strip(), |
| '--id org.wxwebkit.wxwebkit', |
| '--domain system', |
| '--root-volume-only', |
| '--root ' + installroot, |
| '--verbose' |
| ] |
| |
| packagemaker = "/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker" |
| exitIfError(packagemaker + " %s" % (string.join(pkg_args, " "))) |
| finally: |
| if os.path.exists(tempdir): |
| shutil.rmtree(tempdir) |