blob: 40a84883f0d7ceeeb5d72449292b6f83ab89e403 [file] [log] [blame]
# Copyright 2016 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.
from __future__ import absolute_import
import os
import subprocess
import sys
import py_utils
from py_utils import binary_manager
from py_utils import dependency_util
def _NodeBinariesConfigPath():
return os.path.realpath(os.path.join(
os.path.dirname(os.path.abspath(__file__)), 'node_binaries.json'))
class _NodeManager(object):
def __init__(self):
self.bm = binary_manager.BinaryManager(
[_NodeBinariesConfigPath()])
self.os_name = dependency_util.GetOSNameForCurrentDesktopPlatform()
self.arch_name = dependency_util.GetArchForCurrentDesktopPlatform(
self.os_name)
self.node_path = self.bm.FetchPath('node', self.os_name, self.arch_name)
self.npm_path = self.bm.FetchPath('npm', self.os_name, self.arch_name)
self.node_initialized = False
def InitNode(self):
if self.node_initialized:
return # So we only init once per run
self.node_initialized = True
old_dir = os.path.abspath(os.curdir)
os.chdir(os.path.join(os.path.abspath(
py_utils.GetCatapultDir()), 'common', 'node_runner', 'node_runner'))
subprocess.call([self.node_path, self.npm_path, 'install'])
os.chdir(old_dir)
_NODE_MANAGER = _NodeManager()
def InitNode():
_NODE_MANAGER.InitNode()
def GetNodePath():
return _NODE_MANAGER.node_path
def GetNodeModulesPath():
_NODE_MANAGER.InitNode()
path = os.path.abspath(os.path.join(os.path.dirname(__file__),
'node_modules'))
if sys.platform.startswith('win'):
# Escape path on Windows because it's very long and must be passed to NTFS.
path = u'\\\\?\\' + path
return path