blob: 9d15b7557afed2b10a12461237269280b6f52f6e [file] [log] [blame]
#!/usr/bin/python
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Invokes grunt build on AppRTC.
The AppRTC javascript code must be closure-compiled. This script uses
the node toolchain we downloaded earlier.
"""
import fileinput
import os
import shutil
import subprocess
import sys
import utils
# Phantomjs generates very deep paths in the node_modules structure and
# Windows can't deal with that, so just hack that out.
def _WorkaroundPhantomJsOnWin(samples_path):
if utils.GetPlatform() is 'win':
package_json = os.path.join(samples_path, 'package.json')
if not os.path.exists(package_json):
raise Exception('Expected %s to exist.' % os.path.abspath(package_json))
for line in fileinput.input(package_json, inplace=True):
if not 'phantomjs' in line:
sys.stdout.write(line)
def _WorkAroundMacNpmCorruptedDataOnInstall(command):
print 'Wiping .npm folder and trying again...'
npm_storage = os.path.expanduser('~/.npm')
assert npm_storage.endswith('.npm')
shutil.rmtree(npm_storage, ignore_errors=True)
utils.RunSubprocessWithRetry(command)
def main():
node_path = os.path.abspath('node')
if not os.path.exists(node_path):
return 'Expected node at %s.' % node_path
apprtc_path = os.path.join('src', 'out', 'apprtc')
if not os.path.exists(apprtc_path):
return 'Expected apprtc at %s.' % os.path.abspath(apprtc_path)
_WorkaroundPhantomJsOnWin(apprtc_path)
os.chdir(apprtc_path)
if utils.GetPlatform() is 'win':
npm_bin = os.path.join(node_path, 'npm.cmd')
node_bin = os.path.join(node_path, 'node.exe')
else:
npm_bin = os.path.join(node_path, 'bin', 'npm')
node_bin = os.path.join(node_path, 'bin', 'node')
command = [npm_bin, 'install']
try:
utils.RunSubprocessWithRetry(command)
except subprocess.CalledProcessError:
if utils.GetPlatform() is not 'mac':
raise
_WorkAroundMacNpmCorruptedDataOnInstall(command)
local_grunt_bin = os.path.join('node_modules', 'grunt-cli', 'bin', 'grunt')
if not os.path.exists(local_grunt_bin):
return ('Missing grunt-cli in the apprtc checkout; did '
'npm install fail?')
utils.RunSubprocessWithRetry([node_bin, local_grunt_bin, 'build'])
if __name__ == '__main__':
sys.exit(main())