annotate manage.py @ 0:d3ccbd89f5cc

Origination.
author Atul Varma <varmaa@toolness.com>
date Thu, 06 Aug 2009 10:50:23 -0700
parents
children 889c2fd4c9cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 #! /usr/bin/env python
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 import os
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4 import sys
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 if __name__ == '__main__':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 # This code is run if we're executed directly from the command-line.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 myfile = os.path.abspath(__file__)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 mydir = os.path.dirname(myfile)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 sys.path.insert(0, os.path.join(mydir, 'python-modules'))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13 args = sys.argv[1:]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14 if not args:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15 args = ['help']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
16
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 # Have paver run this very file as its pavement script.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18 args = ['-f', myfile] + args
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 import paver.tasks
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 paver.tasks.main(args)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22 sys.exit(0)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24 # This code is run if we're executed as a pavement script by paver.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
25
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26 import os
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27 import sys
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
28 import fnmatch
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29 import distutils.dir_util
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 import xml.dom.minidom
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
31 import zipfile
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32 import shutil
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33 import distutils.dir_util
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
34 import time
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
35 import threading
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
36 import subprocess
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 import simplejson
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 from ConfigParser import ConfigParser
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 from paver.easy import *
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 # Path to the root of the extension, relative to where this script is
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43 # located.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 EXT_SUBDIR = "extension"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 # Valid applications that this extension supports. The first one listed
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 # is the default used if one isn't explicitly provided on the command-line.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 VALID_APPS = ['firefox', 'thunderbird']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50 # When launching a temporary new Firefox profile, use these preferences.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 DEFAULT_FIREFOX_PREFS = {
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 'browser.startup.homepage' : 'about:blank',
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53 'startup.homepage_welcome_url' : 'about:blank',
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 }
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 # When launching a temporary new Thunderbird profile, use these preferences.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57 # Note that these were taken from:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 # http://mxr.mozilla.org/comm-central/source/mail/test/mozmill/runtest.py
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 DEFAULT_THUNDERBIRD_PREFS = {
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 # say yes to debug output via dump
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 'browser.dom.window.dump.enabled': True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 # say no to slow script warnings
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 'dom.max_chrome_script_run_time': 200,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 'dom.max_script_run_time': 0,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 # disable extension stuffs
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66 'extensions.update.enabled' : False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 'extensions.update.notifyUser' : False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 # do not ask about being the default mail client
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 'mail.shell.checkDefaultClient': False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 # disable non-gloda indexing daemons
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 'mail.winsearch.enable': False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 'mail.winsearch.firstRunDone': True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 'mail.spotlight.enable': False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 'mail.spotlight.firstRunDone': True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 # disable address books for undisclosed reasons
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 'ldap_2.servers.osx.position': 0,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 'ldap_2.servers.oe.position': 0,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 # disable the first use junk dialog
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79 'mailnews.ui.junk.firstuse': False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 # other unknown voodoo
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 # -- dummied up local accounts to stop the account wizard
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82 'mail.account.account1.server' : "server1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83 'mail.account.account2.identities' : "id1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84 'mail.account.account2.server' : "server2",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 'mail.accountmanager.accounts' : "account1,account2",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 'mail.accountmanager.defaultaccount' : "account2",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 'mail.accountmanager.localfoldersserver' : "server1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 'mail.identity.id1.fullName' : "Tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 'mail.identity.id1.smtpServer' : "smtp1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90 'mail.identity.id1.useremail' : "tinderbox@invalid.com",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
91 'mail.identity.id1.valid' : True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
92 'mail.root.none-rel' : "[ProfD]Mail",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
93 'mail.root.pop3-rel' : "[ProfD]Mail",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
94 'mail.server.server1.directory-rel' : "[ProfD]Mail/Local Folders",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
95 'mail.server.server1.hostname' : "Local Folders",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
96 'mail.server.server1.name' : "Local Folders",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97 'mail.server.server1.type' : "none",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 'mail.server.server1.userName' : "nobody",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99 'mail.server.server2.check_new_mail' : False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
100 'mail.server.server2.directory-rel' : "[ProfD]Mail/tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
101 'mail.server.server2.download_on_biff' : True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
102 'mail.server.server2.hostname' : "tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103 'mail.server.server2.login_at_startup' : False,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
104 'mail.server.server2.name' : "tinderbox@invalid.com",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105 'mail.server.server2.type' : "pop3",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
106 'mail.server.server2.userName' : "tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
107 'mail.smtp.defaultserver' : "smtp1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
108 'mail.smtpserver.smtp1.hostname' : "tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 'mail.smtpserver.smtp1.username' : "tinderbox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 'mail.smtpservers' : "smtp1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
111 'mail.startup.enabledMailCheckOnce' : True,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
112 'mailnews.start_page_override.mstone' : "ignore",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
113 }
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
114
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
115 PROFILE_DIRS = Bunch(
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
116 firefox = Bunch(
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
117 darwin = "~/Library/Application Support/Firefox/",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
118 windows = "Mozilla\\Firefox",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
119 linux = "~/.mozilla/firefox/"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
120 ),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
121 thunderbird = Bunch(
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
122 darwin = "~/Library/Thunderbird/",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
123 windows = "Mozilla\\Thunderbird",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
124 linux = "~/.thunderbird/"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
125 )
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
126 )
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
127
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
128 def clear_dir(dirname):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
129 if os.path.exists(dirname) and os.path.isdir(dirname):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
130 shutil.rmtree(dirname)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
131
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
132 def find_profile_dir(app, name):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
133 """
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
134 Given the name of an application and its profile, attempts
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
135 to find the absolute path to its directory. If it can't be found,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
136 None is returned.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
137 """
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
138
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
139 base_path = None
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
140 if sys.platform == "darwin":
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
141 base_path = os.path.expanduser(PROFILE_DIRS[app].darwin)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
142 elif (sys.platform.startswith("win") or
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
143 sys.platform == "cygwin"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
144 # TODO: This only works on 2000/XP/Vista, not 98/Me.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
145 appdata = os.environ["APPDATA"]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
146 base_path = os.path.join(appdata, PROFILE_DIRS[app].windows)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
147 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
148 base_path = os.path.expanduser(PROFILE_DIRS[app].linux)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
149 inifile = os.path.join(base_path, "profiles.ini")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
150 config = ConfigParser()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
151 config.read(inifile)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
152 profiles = [section for section in config.sections()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
153 if section.startswith("Profile")]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
154 for profile in profiles:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
155 if config.get(profile, "Name") == name:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
156 # TODO: Look at IsRelative?
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
157 path = config.get(profile, "Path")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
158 if not os.path.isabs(path):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
159 path = os.path.join(base_path, path)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
160 return path
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
161 return None
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
162
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
163 def get_install_rdf_dom(path_to_ext_root):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
164 rdf_path = os.path.join(path_to_ext_root, "install.rdf")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
165 rdf = xml.dom.minidom.parse(rdf_path)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
166 return rdf
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
167
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
168 def get_install_rdf_property(path_to_ext_root, property):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
169 rdf = get_install_rdf_dom(path_to_ext_root)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
170 element = rdf.documentElement.getElementsByTagName(property)[0]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
171 return element.firstChild.nodeValue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
172
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
173 def resolve_options(options, ext_subdir = EXT_SUBDIR):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
174 if not options.get('app'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
175 options.app = VALID_APPS[0]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
176 if not options.get('profile'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
177 options.profile = 'default'
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
178
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
179 if options.app not in VALID_APPS:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
180 print "Unrecognized or unsupported application: %s." % options.app
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
181 sys.exit(1)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
182
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
183 options.my_dir = os.path.dirname(os.path.abspath(options.pavement_file))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
184 options.profile_dir = find_profile_dir(options.app, options.profile)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
185 options.path_to_ext_root = os.path.join(options.my_dir, ext_subdir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
186
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
187 options.ext_id = get_install_rdf_property(options.path_to_ext_root,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
188 "em:id")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
189
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
190 options.ext_version = get_install_rdf_property(options.path_to_ext_root,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
191 "em:version")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
192
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
193 options.ext_name = get_install_rdf_property(options.path_to_ext_root,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
194 "em:name")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
195
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
196 if options.profile_dir:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
197 options.extension_file = os.path.join(options.profile_dir,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
198 "extensions",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
199 options.ext_id)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
200 # If cygwin, change the path to windows format so firefox can
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
201 # understand it.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
202 if sys.platform == "cygwin":
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
203 # TODO: Will this work if path_to_ext_root has spaces in it?
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
204 file = 'cygpath.exe -w ' + options.path_to_ext_root
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
205 path = "".join(os.popen(file).readlines())
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
206 path = path.replace("\n", " ").rstrip()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
207 options.firefox_path_to_ext_root = path
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
208 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
209 options.firefox_path_to_ext_root = options.path_to_ext_root
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
210
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
211 def remove_extension(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
212 if not (options.profile_dir and
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
213 os.path.exists(options.profile_dir) and
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
214 os.path.isdir(options.profile_dir)):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
215 raise BuildFailure("Can't resolve profile directory; aborting.")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
216
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
217 files_to_remove = ["compreg.dat", "xpti.dat"]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
218 for filename in files_to_remove:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
219 abspath = os.path.join(options.profile_dir, filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
220 if os.path.exists(abspath):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
221 os.remove(abspath)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
222 if os.path.exists(options.extension_file):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
223 if os.path.isdir(options.extension_file):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
224 shutil.rmtree(options.extension_file)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
225 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
226 os.remove(options.extension_file)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
227
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
228 APP_OPTION = ("app=", "a", "Application to use. Defaults to %s. "
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
229 "Valid choices are: %s." % (VALID_APPS[0],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
230 ", ".join(VALID_APPS)))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
231
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
232 INSTALL_OPTIONS = [("profile=", "p", "Profile name."),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
233 APP_OPTION]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
234 JSBRIDGE_OPTIONS = [("port=", "p", "Port to use for jsbridge communication."),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
235 ("binary=", "b", "Path to application binary."),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
236 APP_OPTION]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
237
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
238 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
239 @cmdopts(INSTALL_OPTIONS)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
240 def install(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
241 """Install the extension to an application profile."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
242
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
243 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
244 remove_extension(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
245
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
246 extdir = os.path.dirname(options.extension_file)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
247 if not os.path.exists(extdir):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
248 distutils.dir_util.mkpath(extdir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
249 fileobj = open(options.extension_file, "w")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
250 fileobj.write(options.firefox_path_to_ext_root)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
251 fileobj.close()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
252
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
253 copy_libs(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
254
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
255 print "Extension '%s' installed to %s profile '%s'." % (options.ext_id,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
256 options.app,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
257 options.profile)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
258
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
259 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
260 @cmdopts(INSTALL_OPTIONS)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
261 def uninstall(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
262 """Uninstall the extension from an application profile."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
263
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
264 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
265 remove_extension(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
266 print "Extension '%s' uninstalled from %s profile '%s'." % (options.ext_id,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
267 options.app,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
268 options.profile)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
269
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
270 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
271 def xpi(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
272 """Build a distributable xpi installer for the extension."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
273
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
274 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
275
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
276 platforms = os.listdir(os.path.join(options.my_dir, "lib"))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
277
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
278 for platform in platforms:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
279 zfname = "%s-%s-%s.xpi" % (options.ext_name.lower(),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
280 options.ext_version,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
281 platform)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
282 copy_libs(options, platform)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
283 zf = zipfile.ZipFile(zfname, "w", zipfile.ZIP_DEFLATED)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
284 for dirpath, dirnames, filenames in os.walk(options.path_to_ext_root):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
285 if platform in dirnames:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
286 # We're in the extension/platform directory, get rid of files for
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
287 # other platforms.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
288 dirnames[:] = [platform]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
289 for filename in filenames:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
290 abspath = os.path.join(dirpath, filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
291 arcpath = abspath[len(options.path_to_ext_root)+1:]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
292 zf.write(abspath, arcpath)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
293 print "Created %s." % zfname
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
294
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
295 def start_jsbridge(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
296 import mozrunner
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
297 import jsbridge
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
298
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
299 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
300
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
301 if not options.get('port'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
302 options.port = '24242'
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
303 options.port = int(options.port)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
304 options.binary = options.get('binary')
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
305
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
306 plugins = [jsbridge.extension_path, options.path_to_ext_root]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
307 if options.app == 'firefox':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
308 profile_class = mozrunner.FirefoxProfile
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
309 preferences = DEFAULT_FIREFOX_PREFS
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
310 runner_class = mozrunner.FirefoxRunner
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
311 elif options.app == 'thunderbird':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
312 profile_class = mozrunner.ThunderbirdProfile
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
313 preferences = DEFAULT_THUNDERBIRD_PREFS
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
314 runner_class = mozrunner.ThunderbirdRunner
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
315
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
316 profile = profile_class(plugins=plugins, preferences=preferences)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
317 runner = runner_class(profile=profile,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
318 binary=options.binary,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
319 cmdargs=["-jsbridge", str(options.port)])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
320 runner.start()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
321
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
322 back_channel, bridge = jsbridge.wait_and_create_network("127.0.0.1",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
323 options.port)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
324
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
325 return Bunch(back_channel = back_channel,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
326 bridge = bridge,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
327 runner = runner)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
328
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
329 def start_jetpack(options, listener):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
330 remote = start_jsbridge(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
331
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
332 import jsbridge
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
333
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
334 code = (
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
335 "((function() { var extension = {}; "
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
336 "Components.utils.import('resource://jetpack/modules/init.js', "
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
337 "extension); return extension; })())"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
338 )
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
339
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
340 remote.back_channel.add_global_listener(listener)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
341 extension = jsbridge.JSObject(remote.bridge, code)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
342
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
343 INTERVAL = 0.1
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
344 MAX_STARTUP_TIME = 5.0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
345
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
346 is_done = False
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
347 time_elapsed = 0.0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
348
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
349 try:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
350 while not is_done:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
351 time.sleep(INTERVAL)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
352 time_elapsed += INTERVAL
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
353
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
354 if time_elapsed > MAX_STARTUP_TIME:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
355 raise Exception('Maximum startup time exceeded.')
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
356
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
357 url = 'chrome://jetpack/content/index.html'
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
358 window = extension.get(url)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
359 if window is None:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
360 #print "Waiting for index to load."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
361 continue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
362 if hasattr(window, 'frameElement'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
363 #print "Window is in an iframe."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
364 continue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
365 if window.closed:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
366 #print "Window is closed."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
367 continue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
368 if not hasattr(window, 'JSBridge'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
369 #print "window.JSBridge does not exist."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
370 continue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
371 if not window.JSBridge.isReady:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
372 #print "Waiting for about:jetpack to be ready."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
373 continue
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
374 is_done = True
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
375 except:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
376 remote.runner.stop()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
377 raise
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
378
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
379 remote.window = window
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
380 return remote
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
381
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
382 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
383 @cmdopts(JSBRIDGE_OPTIONS)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
384 def run(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
385 """Run the application in a temporary new profile with the extension
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
386 installed."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
387
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
388 remote = start_jsbridge(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
389
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
390 try:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
391 print "Now running, press Ctrl-C to stop."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
392 remote.runner.wait()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
393 except KeyboardInterrupt:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
394 print "Received interrupt, stopping."
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
395 remote.runner.stop()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
396
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
397 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
398 @cmdopts(JSBRIDGE_OPTIONS)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
399 def render_docs(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
400 """Render the API and tutorial documentation in HTML format,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
401 and output it to the website directory."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
402
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
403 # TODO: Render tutorial docs too (bug 496457).
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
404
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
405 TEMPLATE = os.path.join("website", "templates", "api.html")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
406 OUTPUT = os.path.join("website", "api.html")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
407
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
408 done_event = threading.Event()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
409 result = Bunch()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
410
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
411 def listener(event_name, obj):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
412 if event_name == 'jetpack:result':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
413 result.update(obj)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
414 done_event.set()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
415
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
416 MAX_RENDER_RUN_TIME = 10.0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
417
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
418 remote = start_jetpack(options, listener)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
419
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
420 try:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
421 remote.window.JSBridge.renderDocs()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
422 done_event.wait(MAX_RENDER_RUN_TIME)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
423 if not done_event.isSet():
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
424 raise Exception('Maximum render run time exceeded.')
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
425 finally:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
426 remote.runner.stop()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
427
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
428 template = open(TEMPLATE).read();
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
429 template = template.replace(
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
430 "[[CONTENT]]",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
431 result.apiHtml.encode("ascii", "xmlcharrefreplace")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
432 )
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
433 open(OUTPUT, "w").write(template)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
434 print "Wrote API docs to %s using template at %s." % (OUTPUT,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
435 TEMPLATE)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
436
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
437 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
438 @cmdopts(JSBRIDGE_OPTIONS +
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
439 [("filter=", "f",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
440 "Run only test suites containing the given string.")])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
441 def test(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
442 """Run unit and functional tests."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
443
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
444 done_event = threading.Event()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
445 result = Bunch()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
446
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
447 def listener(event_name, obj):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
448 if event_name == 'jetpack:message':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
449 if obj.get('isWarning', False):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
450 print "[WARNING]: %s" % obj['message']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
451 elif obj.get('isError', False):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
452 print "[ERROR] : %s" % obj['message']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
453 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
454 print "[message]: %s" % obj['message']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
455 if obj.get('sourceName'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
456 print " %s:L%s" % (obj['sourceName'],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
457 obj.get('lineNumber', '?'))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
458 elif event_name == 'jetpack:result':
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
459 result.obj = obj
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
460 done_event.set()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
461
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
462 MAX_TEST_RUN_TIME = 25.0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
463
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
464 remote = start_jetpack(options, listener)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
465
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
466 try:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
467 remote.window.JSBridge.runTests(options.get("filter"))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
468 done_event.wait(MAX_TEST_RUN_TIME)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
469 if not done_event.isSet():
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
470 raise Exception('Maximum test run time exceeded.')
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
471 finally:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
472 remote.runner.stop()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
473
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
474 print "Tests failed: %d" % result.obj['failed']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
475 print "Tests succeeded: %d" % result.obj['succeeded']
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
476
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
477 if result.obj['failed'] > 0:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
478 sys.exit(result.obj['failed'])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
479
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
480 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
481 def clean(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
482 """Removes all intermediate and non-essential files."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
483
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
484 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
485 clear_dir(os.path.join(options.path_to_ext_root, "lib"))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
486
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
487 EXTENSIONS_TO_REMOVE = [".pyc", ".orig", ".rej"]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
488
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
489 for dirpath, dirnames, filenames in os.walk(os.getcwd()):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
490 if ".hg" in dirnames:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
491 dirnames.remove(".hg")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
492 for filename in filenames:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
493 fullpath = os.path.join(dirpath, filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
494 ext = os.path.splitext(filename)[1]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
495 if ext in EXTENSIONS_TO_REMOVE:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
496 os.remove(fullpath)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
497
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
498 def run_program(args, **kwargs):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
499 retval = subprocess.call(args, **kwargs)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
500 if retval:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
501 print "Process failed with exit code %d." % retval
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
502 sys.exit(retval)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
503
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
504 def copy_libs(options, platform = None):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
505 """Copy the platform-specific dynamic library files from our versioned
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
506 repository into the extension's temporary directory."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
507
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
508 if platform is None:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
509 if sys.platform == "darwin":
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
510 platform = "Darwin_x86-gcc3"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
511 elif sys.platform.startswith("linux"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
512 platform = "Linux_x86-gcc3"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
513 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
514 # Assume Windows.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
515 platform = "WINNT_x86-msvc"
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
516 src_dir = os.path.join(options.my_dir, "lib", platform)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
517 dest_dir = os.path.join(options.path_to_ext_root, "lib")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
518 clear_dir(dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
519 shutil.copytree(src_dir, dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
520
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
521 @task
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
522 @cmdopts([("srcdir=", "t", "The root of your mozilla-central checkout"),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
523 ("objdir=", "o", "The root of your objdir")])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
524 def xpcom(options):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
525 """Builds binary XPCOM components for Jetpack."""
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
526
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
527 for option in ["srcdir", "objdir"]:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
528 if not options.get(option):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
529 raise Exception("Please specify a value for the '%s' option." %
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
530 option)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
531
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
532 for dirname in ["srcdir", "objdir"]:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
533 options[dirname] = os.path.expanduser(options[dirname])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
534 options[dirname] = os.path.abspath(options[dirname])
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
535
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
536 resolve_options(options)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
537 options.xpcshell = os.path.join(options.objdir, "dist", "bin",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
538 "xpcshell")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
539
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
540 xpcom_info = Bunch()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
541 xpcom_info.components_dir = os.path.join(options.objdir, "dist",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
542 "bin", "components")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
543
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
544 autoconf = open(os.path.join(options.objdir, "config", "autoconf.mk"),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
545 "r").readlines()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
546 for line in autoconf:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
547 if line.startswith("OS_TARGET"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
548 xpcom_info.os = line.split("=")[1].strip()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
549 elif line.startswith("TARGET_XPCOM_ABI"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
550 xpcom_info.abi = line.split("=")[1].strip()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
551 elif line.startswith("MOZILLA_VERSION"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
552 xpcom_info.mozilla_version = line.split("=")[1].strip()[:5]
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
553 elif (line.startswith("MOZ_DEBUG") and
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
554 not line.startswith("MOZ_DEBUG_")):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
555 raw_value = line.split("=")[1].strip()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
556 if not raw_value:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
557 xpcom_info.is_debug = 0
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
558 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
559 xpcom_info.is_debug = int(raw_value)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
560
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
561 platform = "%(os)s_%(abi)s" % xpcom_info
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
562 print "Building XPCOM binary components for %s" % platform
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
563
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
564 comp_src_dir = os.path.join(options.my_dir, "components")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
565 rel_dest_dir = os.path.join("browser", "components", "jetpack")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
566 comp_dest_dir = os.path.join(options.srcdir, rel_dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
567 comp_xpi_dir = os.path.join(options.objdir, "dist", "xpi-stage",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
568 "jetpack", "components")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
569 comp_plat_dir1 = os.path.join(options.my_dir, "lib",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
570 platform, xpcom_info.mozilla_version)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
571 comp_plat_dir2 = os.path.join(options.path_to_ext_root, "lib",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
572 xpcom_info.mozilla_version)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
573
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
574 clear_dir(comp_dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
575 clear_dir(comp_xpi_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
576
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
577 shutil.copytree(comp_src_dir, comp_dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
578
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
579 # Ensure that these paths are unix-like on Windows.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
580 sh_pwd = subprocess.Popen(["sh", "-c", "pwd"],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
581 cwd=options.srcdir,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
582 stdout=subprocess.PIPE)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
583 sh_pwd.wait()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
584 unix_topsrcdir = sh_pwd.stdout.read().strip()
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
585 unix_rel_dest_dir = rel_dest_dir.replace("\\", "/")
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
586
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
587 # We're specifying 'perl' here because we have to for this
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
588 # to work on Windows.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
589 run_program(["perl",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
590 os.path.join(options.srcdir, "build", "autoconf",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
591 "make-makefile"),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
592 "-t", unix_topsrcdir,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
593 unix_rel_dest_dir],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
594 cwd=options.objdir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
595
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
596 run_program(["make"],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
597 cwd=os.path.join(options.objdir, rel_dest_dir))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
598
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
599 xptfiles = []
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
600 libfiles = []
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
601 for filename in os.listdir(comp_xpi_dir):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
602 if fnmatch.fnmatch(filename, '*.xpt'):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
603 xptfiles.append(filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
604 else:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
605 libfiles.append(filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
606
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
607 def copy_libs(dest_dir):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
608 clear_dir(dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
609 distutils.dir_util.mkpath(dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
610 for filename in libfiles:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
611 shutil.copy(os.path.join(comp_xpi_dir, filename),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
612 dest_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
613
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
614 if not xpcom_info.is_debug:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
615 copy_libs(comp_plat_dir1)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
616 copy_libs(comp_plat_dir2)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
617
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
618 for filename in xptfiles:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
619 shutil.copy(os.path.join(comp_xpi_dir, filename),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
620 os.path.join(options.path_to_ext_root, "components"))
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
621
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
622 for filename in os.listdir(comp_xpi_dir):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
623 shutil.copy(os.path.join(comp_xpi_dir, filename),
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
624 xpcom_info.components_dir)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
625
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
626 for filename in ["compreg.dat", "xpti.dat"]:
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
627 fullpath = os.path.join(xpcom_info.components_dir, filename)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
628 if os.path.exists(fullpath):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
629 os.unlink(fullpath)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
630
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
631 # Now run unit tests via xpcshell.
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
632
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
633 env = {}
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
634 env.update(os.environ)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
635 if sys.platform.startswith("linux"):
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
636 env['LD_LIBRARY_PATH'] = os.path.dirname(options.xpcshell)
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
637
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
638 run_program([options.xpcshell,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
639 os.path.join(options.my_dir, "extension",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
640 "content", "js", "tests",
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
641 "test-nsjetpack.js")],
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
642 env=env,
d3ccbd89f5cc Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
643 cwd=os.path.dirname(options.xpcshell))