2
0
mirror of https://github.com/FWGS/xash3d-fwgs synced 2024-12-28 19:55:09 +01:00

wscript: now waf builds extras archive by itself, using Python standard library's zipfile

This commit is contained in:
Alibek Omarov 2022-09-11 01:39:29 +03:00
parent c29eb458ea
commit 686a966ff7
2 changed files with 54 additions and 0 deletions

53
scripts/waifulib/zip.py Normal file
View File

@ -0,0 +1,53 @@
#! /usr/bin/env python
# encoding: utf-8
from waflib import TaskGen, Task, Logs
import zipfile
class ziparchive(Task.Task):
color = 'YELLOW'
def __str__(self):
tgt_str = ' '.join([a.path_from(a.ctx.launch_node()) for a in self.outputs])
count = len(self.inputs)
return '%s: %d files -> %s' % (self.__class__.__name__, count, tgt_str)
def keyword(self):
return 'Creating'
def run(self):
outfile = self.outputs[0].path_from(self.outputs[0].ctx.launch_node())
comp = zipfile.ZIP_STORED if self.compresslevel == 0 else zipfile.ZIP_DEFLATED
with zipfile.ZipFile(outfile, mode='w',
compression=comp, compresslevel=self.compresslevel,
strict_timestamps=False) as zf:
for src in self.inputs:
infile = src.path_from(src.ctx.launch_node())
arcfile = src.path_from(self.relative_to)
Logs.debug('%s: %s <- %s as %s', self.__class__.__name__, outfile, infile, arcfile)
zf.write(infile, arcfile)
@TaskGen.feature('zip')
def create_zip_archive(self):
compresslevel = getattr(self, 'compresslevel', 6) # 6 is zip default
if compresslevel < 0 or compresslevel > 9:
self.fatal('Invalid compress level')
files = getattr(self, 'files', None)
if not files:
self.fatal('No files to archive')
relative_to = getattr(self, 'relative_to', None)
if not relative_to:
self.fatal('No relative directory supplied')
self.path.get_bld().mkdir()
target = self.path.get_bld().make_node(self.name)
tsk = self.create_task('ziparchive', files, target)
setattr(tsk, 'compresslevel', compresslevel)
setattr(tsk, 'relative_to', relative_to)

View File

@ -39,6 +39,7 @@ SUBDIRS = [
Subproject('dllemu'),
# disable only by engine feature, makes no sense to even parse subprojects in dedicated mode
Subproject('3rdparty/extras', lambda x: not x.env.DEDICATED),
Subproject('3rdparty/nanogl', lambda x: not x.env.DEDICATED and x.env.NANOGL),
Subproject('3rdparty/gl-wes-v2', lambda x: not x.env.DEDICATED and x.env.GLWES),
Subproject('3rdparty/gl4es', lambda x: not x.env.DEDICATED and x.env.GL4ES),