Add ninja wrappers to trigger DEPS ninja
This is the first step to deprecate ninja binaries in depot_tools. depot_tools/{ninja, ninja.bat} will call ninja.py, which finds CIPD ninja under src/third_party in the current gclient source tree. https://crrev.com/c/3869740 If it fails to find, it does fallback to an existing ninja binary in depot_tools, until removing the references to the legacy ninja binaries. # For those who see the deprecation message, You need to install ninja using DEPS at your project. (https://crrev.com/c/3869740 is an example.) If your project doesn't have DEPS, you need to install ninja and include it in PATH manually. e.g. sudo apt install ninja-build Test: Linux builder: https://ci.chromium.org/swarming/task/5e9cfc917aa3f110?server=chromium-swarm.appspot.com Windows builder: https://ci.chromium.org/swarming/task/5e9d48885c460b10?server=chromium-swarm.appspot.com Bug: 1340825 Change-Id: I70d1863d72ddfa65b87a62c9bde8ff63f7641d13 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3925341 Reviewed-by: Nico Weber <thakis@chromium.org> Commit-Queue: Junji Watanabe <jwata@google.com> Reviewed-by: Takuto Ikuta <tikuta@chromium.org>changes/41/3925341/20
parent
aad574d446
commit
1f67d5573f
@ -0,0 +1,12 @@
|
|||||||
|
@echo off
|
||||||
|
:: Copyright 2022 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.
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
:: Ensure that "depot_tools" is somewhere in PATH so this tool can be used
|
||||||
|
:: standalone, but allow other PATH manipulations to take priority.
|
||||||
|
set PATH=%PATH%;%~dp0
|
||||||
|
|
||||||
|
:: Defer control.
|
||||||
|
python3 "%~dp0\ninja.py" %*
|
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2022 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.
|
||||||
|
"""This script is a wrapper around the ninja binary that is pulled to
|
||||||
|
third_party as part of gclient sync. It will automatically find the ninja
|
||||||
|
binary when run inside a gclient source tree, so users can just type
|
||||||
|
"ninja" on the command line."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import gclient_paths
|
||||||
|
|
||||||
|
DEPOT_TOOLS_ROOT = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
def fallbackToLegacyNinja(ninja_args):
|
||||||
|
print(
|
||||||
|
'depot_tools/ninja.py: Fallback to a deprecated legacy ninja binary. '
|
||||||
|
'Note that this ninja binary will be removed soon.\n'
|
||||||
|
'Please install ninja to your project using DEPS. '
|
||||||
|
'If your project does not have DEPS, Please install ninja in your PATH.\n'
|
||||||
|
'See also https://crbug.com/1340825',
|
||||||
|
file=sys.stderr)
|
||||||
|
|
||||||
|
exe_name = ''
|
||||||
|
if sys.platform == 'linux':
|
||||||
|
exe_name = 'ninja-linux64'
|
||||||
|
elif sys.platform == 'darwin':
|
||||||
|
exe_name = 'ninja-mac'
|
||||||
|
elif sys.platform in ['win32', 'cygwin']:
|
||||||
|
exe_name = 'ninja.exe'
|
||||||
|
else:
|
||||||
|
print('depot_tools/ninja.py: %s is not supported platform' % sys.platform)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
ninja_path = os.path.join(DEPOT_TOOLS_ROOT, exe_name)
|
||||||
|
return subprocess.call([ninja_path] + ninja_args)
|
||||||
|
|
||||||
|
|
||||||
|
def findNinjaInPath():
|
||||||
|
env_path = os.getenv('PATH')
|
||||||
|
if not env_path:
|
||||||
|
return
|
||||||
|
exe = 'ninja'
|
||||||
|
if sys.platform in ['win32', 'cygwin']:
|
||||||
|
exe += '.exe'
|
||||||
|
for bin_dir in env_path.split(os.pathsep):
|
||||||
|
if bin_dir.rstrip(os.sep).endswith('depot_tools'):
|
||||||
|
# skip depot_tools to avoid calling ninja.py infitely.
|
||||||
|
continue
|
||||||
|
ninja_path = os.path.join(bin_dir, exe)
|
||||||
|
if os.path.isfile(ninja_path):
|
||||||
|
return ninja_path
|
||||||
|
|
||||||
|
|
||||||
|
def fallback(ninja_args):
|
||||||
|
# Try to find ninja in PATH.
|
||||||
|
ninja_path = findNinjaInPath()
|
||||||
|
if ninja_path:
|
||||||
|
return subprocess.call([ninja_path] + ninja_args)
|
||||||
|
|
||||||
|
# TODO(crbug.com/1340825): remove raw binaries from depot_tools.
|
||||||
|
return fallbackToLegacyNinja(ninja_args)
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
# Get gclient root + src.
|
||||||
|
primary_solution_path = gclient_paths.GetPrimarySolutionPath()
|
||||||
|
if not primary_solution_path:
|
||||||
|
return fallback(args[1:])
|
||||||
|
gclient_root_path = gclient_paths.FindGclientRoot(os.getcwd())
|
||||||
|
for base_path in [primary_solution_path, gclient_root_path]:
|
||||||
|
ninja_path = os.path.join(base_path, 'third_party', 'ninja',
|
||||||
|
'ninja' + gclient_paths.GetExeSuffix())
|
||||||
|
if os.path.isfile(ninja_path):
|
||||||
|
return subprocess.call([ninja_path] + args[1:])
|
||||||
|
|
||||||
|
return fallback(args[1:])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main(sys.argv))
|
Loading…
Reference in New Issue