mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
#! /usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
import hashlib
|
|
from waflib import Task, TaskGen, Logs
|
|
|
|
OBJ_NAME = 'YY_Thunks_for_WinXP.obj'
|
|
OBJ_SHA256 = '51a13c4b667c82181d357e274a50308a273be63f5f85ae958465774857721573'
|
|
DLL_LINKFLAGS = ['-ENTRY:DllMainCRTStartupForYY_Thunks', '-alternatename:_YY_ThunksOriginalDllMainCRTStartup@12=__DllMainCRTStartup@12']
|
|
|
|
class copy_yy_thunks(Task.Task):
|
|
color = 'CYAN'
|
|
def run(self):
|
|
return self.outputs[0].write(self.inputs[0].read('rb'), 'wb')
|
|
|
|
@TaskGen.feature('yy_thunks')
|
|
def add_yy_thunks_obj(self):
|
|
src = self.path.find_node(OBJ_NAME)
|
|
out = self.path.find_or_declare(OBJ_NAME)
|
|
self.compiled_tasks = [self.create_task('copy_yy_thunks', src, out)]
|
|
|
|
@TaskGen.feature('cshlib', 'cxxshlib')
|
|
@TaskGen.after_method('process_use')
|
|
def apply_yy_thunks_dll(self):
|
|
if 'yy_thunks' not in self.to_list(getattr(self, 'use', [])):
|
|
return
|
|
|
|
try:
|
|
self.bld.get_tgen_by_name('yy_thunks')
|
|
except Exception:
|
|
return
|
|
self.env.append_value('LINKFLAGS', DLL_LINKFLAGS)
|
|
|
|
def options(opt):
|
|
pass
|
|
|
|
def configure(conf):
|
|
if conf.env.DEST_OS != 'win32' or conf.env.COMPILER_CC != 'msvc':
|
|
return
|
|
|
|
if conf.env.MSVC_TARGETS[0] not in ['amd64_x86', 'x86']:
|
|
return
|
|
|
|
obj = conf.path.find_node(OBJ_NAME)
|
|
if not obj:
|
|
Logs.warn('YY-Thunks: %s not found, XP compatibility disabled' % OBJ_NAME)
|
|
return
|
|
|
|
with open(obj.abspath(), 'rb') as f:
|
|
digest = hashlib.sha256(f.read()).hexdigest()
|
|
|
|
if digest != OBJ_SHA256:
|
|
conf.fatal('%s checksum mismatch: expected %s, got %s' % (OBJ_NAME, OBJ_SHA256, digest))
|
|
|
|
conf.env.YY_THUNKS = True
|
|
|
|
def build(bld):
|
|
if bld.env.YY_THUNKS:
|
|
bld(name='yy_thunks', features='yy_thunks')
|