xref: /aosp_15_r20/external/cronet/net/test/python_utils.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/test/python_utils.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <memory>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include "base/command_line.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/environment.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
12*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace {
15*6777b538SAndroid Build Coastguard Worker const base::FilePath::CharType kPythonPathEnv[] =
16*6777b538SAndroid Build Coastguard Worker     FILE_PATH_LITERAL("PYTHONPATH");
17*6777b538SAndroid Build Coastguard Worker const base::FilePath::CharType kVPythonClearPathEnv[] =
18*6777b538SAndroid Build Coastguard Worker     FILE_PATH_LITERAL("VPYTHON_CLEAR_PYTHONPATH");
19*6777b538SAndroid Build Coastguard Worker }  // namespace
20*6777b538SAndroid Build Coastguard Worker 
SetPythonPathInEnvironment(const std::vector<base::FilePath> & python_path,base::EnvironmentMap * map)21*6777b538SAndroid Build Coastguard Worker void SetPythonPathInEnvironment(const std::vector<base::FilePath>& python_path,
22*6777b538SAndroid Build Coastguard Worker                                 base::EnvironmentMap* map) {
23*6777b538SAndroid Build Coastguard Worker   base::NativeEnvironmentString path_str;
24*6777b538SAndroid Build Coastguard Worker   for (const auto& path : python_path) {
25*6777b538SAndroid Build Coastguard Worker     if (!path_str.empty()) {
26*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
27*6777b538SAndroid Build Coastguard Worker       path_str.push_back(';');
28*6777b538SAndroid Build Coastguard Worker #else
29*6777b538SAndroid Build Coastguard Worker       path_str.push_back(':');
30*6777b538SAndroid Build Coastguard Worker #endif
31*6777b538SAndroid Build Coastguard Worker     }
32*6777b538SAndroid Build Coastguard Worker     path_str += path.value();
33*6777b538SAndroid Build Coastguard Worker   }
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker   (*map)[kPythonPathEnv] = path_str;
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   // vpython has instructions on BuildBot (not swarming or LUCI) to clear
38*6777b538SAndroid Build Coastguard Worker   // PYTHONPATH on invocation. Since we are clearing and manipulating it
39*6777b538SAndroid Build Coastguard Worker   // ourselves, we don't want vpython to throw out our hard work.
40*6777b538SAndroid Build Coastguard Worker   (*map)[kVPythonClearPathEnv] = base::NativeEnvironmentString();
41*6777b538SAndroid Build Coastguard Worker }
42*6777b538SAndroid Build Coastguard Worker 
GetPython3Command(base::CommandLine * python_cmd)43*6777b538SAndroid Build Coastguard Worker bool GetPython3Command(base::CommandLine* python_cmd) {
44*6777b538SAndroid Build Coastguard Worker   DCHECK(python_cmd);
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker // Use vpython3 to pick up src.git's vpython3 VirtualEnv spec.
47*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
48*6777b538SAndroid Build Coastguard Worker   python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3.bat")));
49*6777b538SAndroid Build Coastguard Worker #else
50*6777b538SAndroid Build Coastguard Worker   python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3")));
51*6777b538SAndroid Build Coastguard Worker #endif
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_MAC)
54*6777b538SAndroid Build Coastguard Worker   // Enable logging to help diagnose https://crbug.com/1254962. Remove this when
55*6777b538SAndroid Build Coastguard Worker   // the bug is resolved.
56*6777b538SAndroid Build Coastguard Worker   python_cmd->AppendArg("-vpython-log-level=info");
57*6777b538SAndroid Build Coastguard Worker #endif
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   // Launch python in unbuffered mode, so that python output doesn't mix with
60*6777b538SAndroid Build Coastguard Worker   // gtest output in buildbot log files. See http://crbug.com/147368.
61*6777b538SAndroid Build Coastguard Worker   python_cmd->AppendArg("-u");
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker   return true;
64*6777b538SAndroid Build Coastguard Worker }
65