1e5c31af7Sopenharmony_ci# -*- coding: utf-8 -*- 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci#------------------------------------------------------------------------- 4e5c31af7Sopenharmony_ci# drawElements Quality Program utilities 5e5c31af7Sopenharmony_ci# -------------------------------------- 6e5c31af7Sopenharmony_ci# 7e5c31af7Sopenharmony_ci# Copyright 2015 The Android Open Source Project 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 10e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 11e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 12e5c31af7Sopenharmony_ci# 13e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 14e5c31af7Sopenharmony_ci# 15e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 16e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 17e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 19e5c31af7Sopenharmony_ci# limitations under the License. 20e5c31af7Sopenharmony_ci# 21e5c31af7Sopenharmony_ci#------------------------------------------------------------------------- 22e5c31af7Sopenharmony_ci 23e5c31af7Sopenharmony_ciimport os 24e5c31af7Sopenharmony_ciimport sys 25e5c31af7Sopenharmony_ciimport shlex 26e5c31af7Sopenharmony_ciimport platform 27e5c31af7Sopenharmony_ciimport subprocess 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciDEQP_DIR = os.path.realpath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", ".."))) 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_ci# HostInfo describes properties of the host where these scripts 32e5c31af7Sopenharmony_ci# are running on. 33e5c31af7Sopenharmony_ciclass HostInfo: 34e5c31af7Sopenharmony_ci OS_WINDOWS = 0 35e5c31af7Sopenharmony_ci OS_LINUX = 1 36e5c31af7Sopenharmony_ci OS_OSX = 2 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_ci @staticmethod 39e5c31af7Sopenharmony_ci def getOs (): 40e5c31af7Sopenharmony_ci if sys.platform == 'darwin': 41e5c31af7Sopenharmony_ci return HostInfo.OS_OSX 42e5c31af7Sopenharmony_ci elif sys.platform == 'win32': 43e5c31af7Sopenharmony_ci return HostInfo.OS_WINDOWS 44e5c31af7Sopenharmony_ci elif sys.platform.startswith('linux'): 45e5c31af7Sopenharmony_ci return HostInfo.OS_LINUX 46e5c31af7Sopenharmony_ci else: 47e5c31af7Sopenharmony_ci raise Exception("Unknown sys.platform '%s'" % sys.platform) 48e5c31af7Sopenharmony_ci 49e5c31af7Sopenharmony_ci @staticmethod 50e5c31af7Sopenharmony_ci def getArchBits (): 51e5c31af7Sopenharmony_ci MACHINE_BITS = { 52e5c31af7Sopenharmony_ci "i386": 32, 53e5c31af7Sopenharmony_ci "i686": 32, 54e5c31af7Sopenharmony_ci "x86": 32, 55e5c31af7Sopenharmony_ci "x86_64": 64, 56e5c31af7Sopenharmony_ci "AMD64": 64 57e5c31af7Sopenharmony_ci } 58e5c31af7Sopenharmony_ci machine = platform.machine() 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci if not machine in MACHINE_BITS: 61e5c31af7Sopenharmony_ci raise Exception("Unknown platform.machine() '%s'" % machine) 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci return MACHINE_BITS[machine] 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_cidef die (msg): 66e5c31af7Sopenharmony_ci print(msg) 67e5c31af7Sopenharmony_ci exit(-1) 68e5c31af7Sopenharmony_ci 69e5c31af7Sopenharmony_cidef shellquote(s): 70e5c31af7Sopenharmony_ci return '"%s"' % s.replace('\\', '\\\\').replace('"', '\"').replace('$', '\$').replace('`', '\`') 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_cig_workDirStack = [] 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_cidef pushWorkingDir (path): 75e5c31af7Sopenharmony_ci oldDir = os.getcwd() 76e5c31af7Sopenharmony_ci os.chdir(path) 77e5c31af7Sopenharmony_ci g_workDirStack.append(oldDir) 78e5c31af7Sopenharmony_ci 79e5c31af7Sopenharmony_cidef popWorkingDir (): 80e5c31af7Sopenharmony_ci assert len(g_workDirStack) > 0 81e5c31af7Sopenharmony_ci newDir = g_workDirStack[-1] 82e5c31af7Sopenharmony_ci g_workDirStack.pop() 83e5c31af7Sopenharmony_ci os.chdir(newDir) 84e5c31af7Sopenharmony_ci 85e5c31af7Sopenharmony_cidef execute (args): 86e5c31af7Sopenharmony_ci retcode = subprocess.call(args) 87e5c31af7Sopenharmony_ci if retcode != 0: 88e5c31af7Sopenharmony_ci raise Exception("Failed to execute '%s', got %d" % (str(args), retcode)) 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_cidef readBinaryFile (filename): 91e5c31af7Sopenharmony_ci f = open(filename, 'rb') 92e5c31af7Sopenharmony_ci data = f.read() 93e5c31af7Sopenharmony_ci f.close() 94e5c31af7Sopenharmony_ci return data 95e5c31af7Sopenharmony_ci 96e5c31af7Sopenharmony_cidef readFile (filename): 97e5c31af7Sopenharmony_ci f = open(filename, 'rt') 98e5c31af7Sopenharmony_ci data = f.read() 99e5c31af7Sopenharmony_ci f.close() 100e5c31af7Sopenharmony_ci return data 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_cidef writeBinaryFile (filename, data): 103e5c31af7Sopenharmony_ci f = open(filename, 'wb') 104e5c31af7Sopenharmony_ci f.write(data) 105e5c31af7Sopenharmony_ci f.close() 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_cidef writeFile (filename, data): 108e5c31af7Sopenharmony_ci if (sys.version_info < (3, 0)): 109e5c31af7Sopenharmony_ci f = open(filename, 'wt') 110e5c31af7Sopenharmony_ci else: 111e5c31af7Sopenharmony_ci f = open(filename, 'wt', newline='\n') 112e5c31af7Sopenharmony_ci f.write(data) 113e5c31af7Sopenharmony_ci f.close() 114e5c31af7Sopenharmony_ci 115e5c31af7Sopenharmony_cidef which (binName, paths = None): 116e5c31af7Sopenharmony_ci if paths == None: 117e5c31af7Sopenharmony_ci paths = os.environ['PATH'].split(os.pathsep) 118e5c31af7Sopenharmony_ci 119e5c31af7Sopenharmony_ci def whichImpl (binWithExt): 120e5c31af7Sopenharmony_ci for path in paths: 121e5c31af7Sopenharmony_ci path = path.strip('"') 122e5c31af7Sopenharmony_ci fullPath = os.path.join(path, binWithExt) 123e5c31af7Sopenharmony_ci if os.path.isfile(fullPath) and os.access(fullPath, os.X_OK): 124e5c31af7Sopenharmony_ci return fullPath 125e5c31af7Sopenharmony_ci 126e5c31af7Sopenharmony_ci return None 127e5c31af7Sopenharmony_ci 128e5c31af7Sopenharmony_ci extensions = [""] 129e5c31af7Sopenharmony_ci if HostInfo.getOs() == HostInfo.OS_WINDOWS: 130e5c31af7Sopenharmony_ci extensions += [".exe", ".bat"] 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_ci for extension in extensions: 133e5c31af7Sopenharmony_ci extResult = whichImpl(binName + extension) 134e5c31af7Sopenharmony_ci if extResult != None: 135e5c31af7Sopenharmony_ci return extResult 136e5c31af7Sopenharmony_ci 137e5c31af7Sopenharmony_ci return None 138