mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
# Copyright 2014 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.
|
|
|
|
import os
|
|
|
|
from .config import Config
|
|
from .gn import BuildDirectoryForConfig
|
|
|
|
class Paths(object):
|
|
"""Provides commonly used paths"""
|
|
|
|
def __init__(self, config=None, build_dir=None):
|
|
"""Specify either a config or a build_dir to generate paths to binary
|
|
artifacts."""
|
|
self.src_root = os.path.abspath(os.path.join(__file__,
|
|
os.pardir, os.pardir, os.pardir, os.pardir))
|
|
self.mojo_dir = os.path.join(self.src_root, "mojo")
|
|
self.adb_path = os.path.join(self.src_root, 'third_party', 'android_tools',
|
|
'sdk', 'platform-tools', 'adb')
|
|
|
|
if config:
|
|
self.build_dir = BuildDirectoryForConfig(config, self.src_root)
|
|
elif build_dir is not None:
|
|
self.build_dir = os.path.abspath(build_dir)
|
|
else:
|
|
self.build_dir = None
|
|
|
|
if self.build_dir is not None:
|
|
self.mojo_shell_path = os.path.join(self.build_dir, "mojo_shell")
|
|
self.sky_shell_path = os.path.join(self.build_dir, "sky_shell")
|
|
# TODO(vtl): Use the host OS here, since |config| may not be available.
|
|
# In any case, if the target is Windows, but the host isn't, using
|
|
# |os.path| isn't correct....
|
|
if Config.GetHostOS() == Config.OS_WINDOWS:
|
|
self.mojo_shell_path += ".exe"
|
|
self.sky_shell_path += ".exe"
|
|
if config and config.target_os == Config.OS_ANDROID:
|
|
self.target_mojo_shell_path = os.path.join(self.build_dir,
|
|
"apks",
|
|
"MojoShell.apk")
|
|
self.target_sky_shell_path = os.path.join(self.build_dir,
|
|
"apks",
|
|
"SkyDemo.apk")
|
|
else:
|
|
self.target_mojo_shell_path = self.mojo_shell_path
|
|
self.target_sky_shell_path = self.sky_shell_path
|
|
else:
|
|
self.mojo_shell_path = None
|
|
self.sky_shell_path = None
|
|
self.target_mojo_shell_path = None
|
|
self.target_sky_shell_path = None
|
|
|
|
def RelPath(self, path):
|
|
"""Returns the given path, relative to the current directory."""
|
|
return os.path.relpath(path)
|
|
|
|
def SrcRelPath(self, path):
|
|
"""Returns the given path, relative to self.src_root."""
|
|
return os.path.relpath(path, self.src_root)
|
|
|
|
def FileFromUrl(self, url):
|
|
"""Given an app URL (<scheme>:<appname>), return 'build_dir/appname.mojo'.
|
|
If self.build_dir is None, just return appname.mojo
|
|
"""
|
|
(_, name) = url.split(':')
|
|
if self.build_dir:
|
|
return os.path.join(self.build_dir, name + '.mojo')
|
|
return name + '.mojo'
|
|
|
|
@staticmethod
|
|
def IsValidAppUrl(url):
|
|
"""Returns False if url is malformed, True otherwise."""
|
|
try:
|
|
return len(url.split(':')) == 2
|
|
except ValueError:
|
|
return False
|