mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-26 21:57:16 +01:00
209 lines
7.6 KiB
Python
209 lines
7.6 KiB
Python
|
#
|
||
|
# __COPYRIGHT__
|
||
|
#
|
||
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||
|
# a copy of this software and associated documentation files (the
|
||
|
# "Software"), to deal in the Software without restriction, including
|
||
|
# without limitation the rights to use, copy, modify, merge, publish,
|
||
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||
|
# permit persons to whom the Software is furnished to do so, subject to
|
||
|
# the following conditions:
|
||
|
#
|
||
|
# The above copyright notice and this permission notice shall be included
|
||
|
# in all copies or substantial portions of the Software.
|
||
|
#
|
||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||
|
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||
|
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
#
|
||
|
# from typing import Dict, Any
|
||
|
|
||
|
__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
|
||
|
|
||
|
import os
|
||
|
import os.path
|
||
|
import unittest
|
||
|
|
||
|
import SCons.Node.FS
|
||
|
import SCons.Warnings
|
||
|
import SCons.Tool.MSCommon.vc
|
||
|
|
||
|
import TestCmd
|
||
|
|
||
|
original = os.getcwd()
|
||
|
|
||
|
test = TestCmd.TestCmd(workdir='')
|
||
|
|
||
|
os.chdir(test.workpath(''))
|
||
|
|
||
|
MSVCUnsupportedHostArch = SCons.Tool.MSCommon.vc.MSVCUnsupportedHostArch
|
||
|
MSVCUnsupportedTargetArch = SCons.Tool.MSCommon.vc.MSVCUnsupportedTargetArch
|
||
|
|
||
|
MS_TOOLS_VERSION='1.1.1'
|
||
|
|
||
|
class VswhereTestCase(unittest.TestCase):
|
||
|
@staticmethod
|
||
|
def _createVSWhere(path):
|
||
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||
|
with open(path, 'w') as f:
|
||
|
f.write("Created:%s"%f)
|
||
|
|
||
|
def testDefaults(self):
|
||
|
"""
|
||
|
Verify that msvc_find_vswhere() find's files in the specified paths
|
||
|
"""
|
||
|
# import pdb; pdb.set_trace()
|
||
|
vswhere_dirs = [os.path.splitdrive(p)[1] for p in SCons.Tool.MSCommon.vc.VSWHERE_PATHS]
|
||
|
base_dir = test.workpath('fake_vswhere')
|
||
|
test_vswhere_dirs = [os.path.join(base_dir,d[1:]) for d in vswhere_dirs]
|
||
|
|
||
|
SCons.Tool.MSCommon.vc.VSWHERE_PATHS = test_vswhere_dirs
|
||
|
for vsw in test_vswhere_dirs:
|
||
|
VswhereTestCase._createVSWhere(vsw)
|
||
|
find_path = SCons.Tool.MSCommon.vc.msvc_find_vswhere()
|
||
|
self.assertTrue(vsw == find_path, "Didn't find vswhere in %s found in %s"%(vsw, find_path))
|
||
|
os.remove(vsw)
|
||
|
|
||
|
# def specifiedVswherePathTest(self):
|
||
|
# "Verify that msvc.generate() respects VSWHERE Specified"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class MSVcTestCase(unittest.TestCase):
|
||
|
|
||
|
@staticmethod
|
||
|
def _createDummyCl(path, add_bin=True):
|
||
|
"""
|
||
|
Creates a dummy cl.exe in the correct directory.
|
||
|
It will create all missing parent directories as well
|
||
|
|
||
|
Args:
|
||
|
path: Relative path to cl.exe for the version about to be tested.
|
||
|
"""
|
||
|
|
||
|
# print("PATH:%s"%path)
|
||
|
|
||
|
path = path.replace('\\', os.sep)
|
||
|
if add_bin:
|
||
|
create_path = os.path.join(path,'bin')
|
||
|
else:
|
||
|
create_path = path
|
||
|
if create_path and not os.path.isdir(create_path):
|
||
|
os.makedirs(create_path)
|
||
|
|
||
|
create_this = os.path.join(create_path,'cl.exe')
|
||
|
|
||
|
# print("Creating: %s"%create_this)
|
||
|
with open(create_this,'w') as ct:
|
||
|
ct.write('created')
|
||
|
|
||
|
|
||
|
def runTest(self):
|
||
|
"""
|
||
|
Check that all proper HOST_PLATFORM and TARGET_PLATFORM are handled.
|
||
|
Verify that improper HOST_PLATFORM and/or TARGET_PLATFORM are properly handled.
|
||
|
by SCons.Tool.MSCommon.vc._check_cl_exists_in_vc_dir()
|
||
|
"""
|
||
|
|
||
|
check = SCons.Tool.MSCommon.vc._check_cl_exists_in_vc_dir
|
||
|
|
||
|
env={'TARGET_ARCH':'x86'}
|
||
|
p = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR[('x86','x86')]
|
||
|
MSVcTestCase._createDummyCl(p)
|
||
|
|
||
|
# print("retval:%s"%check(env, '.', '8.0'))
|
||
|
|
||
|
|
||
|
# Setup for VC 14+ tests
|
||
|
|
||
|
# Create the VC minor/major version file
|
||
|
tools_version_file = SCons.Tool.MSCommon.vc._VC_TOOLS_VERSION_FILE
|
||
|
tools_dir = os.path.dirname(tools_version_file)
|
||
|
if not os.path.isdir(tools_dir):
|
||
|
os.makedirs(tools_dir)
|
||
|
try:
|
||
|
with open(tools_version_file, 'w') as tf:
|
||
|
tf.write(MS_TOOLS_VERSION)
|
||
|
except IOError as e:
|
||
|
print("Failed trying to write :%s :%s"%(tools_version_file, e))
|
||
|
|
||
|
|
||
|
# Now walk all the valid combinations of host/target for VC 14 +
|
||
|
vc_gt_14_map = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR_GREATER_THAN_14
|
||
|
|
||
|
for key, value in vc_gt_14_map.items():
|
||
|
# print("GT 14 Got: %s -> %s"%(key,value))
|
||
|
|
||
|
env={'TARGET_ARCH':key[1], 'HOST_ARCH':key[0]}
|
||
|
path = os.path.join('.','Tools','MSVC', MS_TOOLS_VERSION, 'bin', value[0], value[1])
|
||
|
MSVcTestCase._createDummyCl(path, add_bin=False)
|
||
|
result=check(env, '.', '14.1')
|
||
|
# print("for:%s got :%s"%(key[1], result))
|
||
|
self.assertTrue(result, "Checking host: %s target: %s"%(value[0], value[1]))
|
||
|
|
||
|
# Now test bogus value for HOST_ARCH
|
||
|
env={'TARGET_ARCH':'x86', 'HOST_ARCH':'GARBAGE'}
|
||
|
try:
|
||
|
result=check(env, '.', '14.1')
|
||
|
# print("for:%s got :%s"%(env, result))
|
||
|
self.assertFalse(result, "Did not fail with bogus HOST_ARCH host: %s target: %s"%(value[0], value[1]))
|
||
|
except MSVCUnsupportedHostArch:
|
||
|
pass
|
||
|
else:
|
||
|
self.fail('Did not fail when HOST_ARCH specified as: %s'%env['HOST_ARCH'])
|
||
|
|
||
|
# Now test bogus value for TARGET_ARCH
|
||
|
env={'TARGET_ARCH':'GARBAGE', 'HOST_ARCH':'x86'}
|
||
|
try:
|
||
|
result=check(env, '.', '14.1')
|
||
|
# print("for:%s got :%s"%(env, result))
|
||
|
self.assertFalse(result, "Did not fail with bogus TARGET_ARCH host: %s target: %s"%(value[0], value[1]))
|
||
|
except MSVCUnsupportedTargetArch:
|
||
|
pass
|
||
|
else:
|
||
|
self.fail('Did not fail when HOST_ARCH specified as: %s'%env['TARGET_ARCH'])
|
||
|
|
||
|
# Test >8 < 14 VC versions
|
||
|
vc_map = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR
|
||
|
for key,value in vc_map.items():
|
||
|
# print("LT 14 Got: %s -> %s"%(key,value))
|
||
|
env={'TARGET_ARCH':key[1], 'HOST_ARCH':key[0]}
|
||
|
path = os.path.join('.', 'bin', value )
|
||
|
MSVcTestCase._createDummyCl(path, add_bin=False)
|
||
|
result=check(env, '.', '9.0')
|
||
|
# print("for:%s got :%s"%(key[1], result))
|
||
|
self.assertTrue(result, "Checking host: %s target: %s"%(key[0], key[1]))
|
||
|
|
||
|
# Now test bogus value for HOST_ARCH
|
||
|
env={'TARGET_ARCH':'x86', 'HOST_ARCH':'GARBAGE'}
|
||
|
try:
|
||
|
result=check(env, '.', '9.0')
|
||
|
# print("for:%s got :%s"%(env, result))
|
||
|
self.assertFalse(result, "Did not fail with bogus HOST_ARCH host: %s target: %s"%(env['HOST_ARCH'], env['TARGET_ARCH']))
|
||
|
except MSVCUnsupportedHostArch:
|
||
|
pass
|
||
|
else:
|
||
|
self.fail('Did not fail when HOST_ARCH specified as: %s'%env['HOST_ARCH'])
|
||
|
|
||
|
# Now test bogus value for TARGET_ARCH
|
||
|
env={'TARGET_ARCH':'GARBAGE', 'HOST_ARCH':'x86'}
|
||
|
try:
|
||
|
result=check(env, '.', '9.0')
|
||
|
# print("for:%s got :%s"%(env, result))
|
||
|
self.assertFalse(result, "Did not fail with bogus TARGET_ARCH host: %s target: %s"%(env['HOST_ARCH'], env['TARGET_ARCH']))
|
||
|
except MSVCUnsupportedTargetArch:
|
||
|
pass
|
||
|
else:
|
||
|
self.fail('Did not fail when HOST_ARCH specified as: %s'%env['TARGET_ARCH'])
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|