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