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 Workervoid 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 Workerbool 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