13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# -*- coding: utf-8 -*- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 43c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# drawElements Quality Program utilities 53c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# -------------------------------------- 63c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 73c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Copyright 2015 The Android Open Source Project 83c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 93c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Licensed under the Apache License, Version 2.0 (the "License"); 103c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# you may not use this file except in compliance with the License. 113c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# You may obtain a copy of the License at 123c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 133c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# http://www.apache.org/licenses/LICENSE-2.0 143c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 153c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Unless required by applicable law or agreed to in writing, software 163c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# distributed under the License is distributed on an "AS IS" BASIS, 173c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# See the License for the specific language governing permissions and 193c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# limitations under the License. 203c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 213c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 223c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport os 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport shlex 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryimport subprocess 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 273c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySRC_BASE_DIR = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))) 283c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDEQP_DIR = os.path.join(SRC_BASE_DIR, "deqp") 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef die (msg): 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry print msg 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry exit(-1) 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef shellquote(s): 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return '"%s"' % s.replace('\\', '\\\\').replace('"', '\"').replace('$', '\$').replace('`', '\`') 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryg_workDirStack = [] 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef pushWorkingDir (path): 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry oldDir = os.getcwd() 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry os.chdir(path) 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry g_workDirStack.append(oldDir) 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef popWorkingDir (): 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry assert len(g_workDirStack) > 0 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry newDir = g_workDirStack[-1] 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry g_workDirStack.pop() 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry os.chdir(newDir) 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef execute (args): 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry retcode = subprocess.call(args) 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if retcode != 0: 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry raise Exception("Failed to execute '%s', got %d" % (str(args), retcode)) 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef readFile (filename): 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry f = open(filename, 'rb') 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry data = f.read() 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry f.close() 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return data 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydef writeFile (filename, data): 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry f = open(filename, 'wb') 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry f.write(data) 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry f.close() 65290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos 66290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulosdef which (binName): 67290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos for path in os.environ['PATH'].split(os.pathsep): 68290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos path = path.strip('"') 69290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos fullPath = os.path.join(path, binName) 70290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos if os.path.isfile(fullPath) and os.access(fullPath, os.X_OK): 71290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos return fullPath 72290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos 73290f32ab4cdac8866be121c3da33bb187333f4abPyry Haulos return None 74