mirror of https://github.com/tp4a/teleport
436 lines
17 KiB
Python
436 lines
17 KiB
Python
#!/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import codecs
|
|
|
|
from core import colorconsole as cc
|
|
from core.context import *
|
|
from core.env import env
|
|
|
|
ctx = BuildContext()
|
|
|
|
|
|
class Builder:
|
|
def __init__(self):
|
|
self.ver_in = os.path.join(env.root_path, 'version.in')
|
|
|
|
self.VER_TP_SERVER = ''
|
|
self.VER_TP_TPCORE = ''
|
|
self.VER_TP_TPWEB = ''
|
|
self.VER_TP_ASSIST = ''
|
|
|
|
def build(self):
|
|
cc.n('update version...')
|
|
|
|
if not os.path.exists(self.ver_in):
|
|
raise RuntimeError('file `version.in` not exists.')
|
|
with codecs.open(self.ver_in, 'r', 'utf-8') as f:
|
|
lines = f.readlines()
|
|
for l in lines:
|
|
if l.startswith('TP_SERVER '):
|
|
x = l.split(' ')
|
|
self.VER_TP_SERVER = x[1].strip()
|
|
elif l.startswith('TP_TPCORE '):
|
|
x = l.split(' ')
|
|
self.VER_TP_TPCORE = x[1].strip()
|
|
elif l.startswith('TP_TPWEB '):
|
|
x = l.split(' ')
|
|
self.VER_TP_TPWEB = x[1].strip()
|
|
elif l.startswith('TP_ASSIST '):
|
|
x = l.split(' ')
|
|
self.VER_TP_ASSIST = x[1].strip()
|
|
|
|
cc.v('new version:')
|
|
cc.v(' Server : ', self.VER_TP_SERVER)
|
|
cc.v(' - tp_core : ', self.VER_TP_TPCORE)
|
|
cc.v(' - tp_web : ', self.VER_TP_TPWEB)
|
|
cc.v(' Assist : ', self.VER_TP_ASSIST)
|
|
cc.v('')
|
|
|
|
self.make_builder_ver()
|
|
self.make_server_ver()
|
|
self.make_tpcore_ver()
|
|
self.make_tpweb_ver()
|
|
self.make_assist_win_ver()
|
|
self.make_assist_macos_ver()
|
|
|
|
def make_builder_ver(self):
|
|
ver_file = os.path.join(env.root_path, 'build', 'builder', 'core', 'ver.py')
|
|
ver_content = '# -*- coding: utf8 -*-\nVER_TP_SERVER = "{}"\nVER_TP_ASSIST = "{}"\n'.format(self.VER_TP_SERVER, self.VER_TP_ASSIST)
|
|
|
|
rewrite = False
|
|
if not os.path.exists(ver_file):
|
|
rewrite = True
|
|
else:
|
|
with open(ver_file, 'r') as f:
|
|
old_content = f.read()
|
|
if old_content != ver_content:
|
|
rewrite = True
|
|
|
|
if rewrite:
|
|
cc.v(' update {}...'.format(ver_file))
|
|
with open(ver_file, 'w') as f:
|
|
f.write(ver_content)
|
|
|
|
def make_tpcore_ver(self):
|
|
ver_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'ts_ver.h')
|
|
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPCORE)
|
|
|
|
rewrite = False
|
|
if not os.path.exists(ver_file):
|
|
rewrite = True
|
|
else:
|
|
with open(ver_file, 'r') as f:
|
|
old_content = f.read()
|
|
if old_content != ver_content:
|
|
rewrite = True
|
|
|
|
if rewrite:
|
|
cc.v(' update {}...'.format(ver_file))
|
|
with open(ver_file, 'w') as f:
|
|
f.write(ver_content)
|
|
|
|
rc_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.rc')
|
|
self._update_ver_rc(rc_file, self.VER_TP_TPCORE)
|
|
|
|
def make_server_ver(self):
|
|
ver_file = os.path.join(env.root_path, 'server', 'www', 'teleport', 'webroot', 'app', 'app_ver.py')
|
|
# ver_content = '# -*- coding: utf8 -*-\n\nTS_VER = "{}"\n'.format(self.VER_TELEPORT_SERVER)
|
|
ver_content = '# -*- coding: utf8 -*-\nTP_SERVER_VER = "{}"\n'.format(self.VER_TP_SERVER)
|
|
|
|
rewrite = False
|
|
if not os.path.exists(ver_file):
|
|
rewrite = True
|
|
else:
|
|
with open(ver_file, 'r') as f:
|
|
old_content = f.read()
|
|
if old_content != ver_content:
|
|
rewrite = True
|
|
|
|
if rewrite:
|
|
cc.v(' update {}...'.format(ver_file))
|
|
with open(ver_file, 'w') as f:
|
|
f.write(ver_content)
|
|
|
|
def make_assist_win_ver(self):
|
|
ver_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'ts_ver.h')
|
|
ver_content = '#ifndef __TS_ASSIST_VER_H__\n#define __TS_ASSIST_VER_H__\n\n#define TP_ASSIST_VER\tL"{}"\n\n#endif // __TS_ASSIST_VER_H__\n'.format(self.VER_TP_ASSIST)
|
|
|
|
rewrite = False
|
|
if not os.path.exists(ver_file):
|
|
rewrite = True
|
|
else:
|
|
with open(ver_file, 'r') as f:
|
|
old_content = f.read()
|
|
if old_content != ver_content:
|
|
rewrite = True
|
|
|
|
if rewrite:
|
|
cc.v(' update {}...'.format(ver_file))
|
|
with open(ver_file, 'w') as f:
|
|
f.write(ver_content)
|
|
|
|
rc_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.rc')
|
|
self._update_ver_rc(rc_file, self.VER_TP_ASSIST)
|
|
|
|
nsi_file = os.path.join(env.root_path, 'dist', 'client', 'windows', 'assist', 'installer.nsi')
|
|
self._update_ver_nsi(nsi_file, self.VER_TP_ASSIST)
|
|
|
|
def make_assist_macos_ver(self):
|
|
plist_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'tp_assist-Info.plist')
|
|
self._update_ver_plist(plist_file, self.VER_TP_ASSIST)
|
|
|
|
def make_tpweb_ver(self):
|
|
ver_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'ts_ver.h')
|
|
ver_content = '#ifndef __TS_SERVER_VER_H__\n#define __TS_SERVER_VER_H__\n\n#define TP_SERVER_VER\tL"{}"\n\n#endif // __TS_SERVER_VER_H__\n'.format(self.VER_TP_TPWEB)
|
|
|
|
rewrite = False
|
|
if not os.path.exists(ver_file):
|
|
rewrite = True
|
|
else:
|
|
with open(ver_file, 'r') as f:
|
|
old_content = f.read()
|
|
if old_content != ver_content:
|
|
rewrite = True
|
|
|
|
if rewrite:
|
|
cc.v(' update {}...'.format(ver_file))
|
|
with open(ver_file, 'w') as f:
|
|
f.write(ver_content)
|
|
|
|
rc_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.rc')
|
|
self._update_ver_rc(rc_file, self.VER_TP_TPWEB)
|
|
|
|
def _update_ver_rc(self, rcFilePath, ver):
|
|
""" update rc file version info """
|
|
|
|
t_ver = ver.split('.')
|
|
if len(t_ver) != 4:
|
|
raise RuntimeError('Invalid version for .rc file.')
|
|
|
|
bOK = False
|
|
try:
|
|
# open rc file
|
|
rcFile = codecs.open(rcFilePath, 'r', 'utf16')
|
|
# read out all lines of rc file
|
|
rcLines = rcFile.readlines()
|
|
rcFile.close()
|
|
|
|
for x in range(len(rcLines)):
|
|
rcline = rcLines[x]
|
|
|
|
if rcline.find(" FILEVERSION") != -1: # find " FILEVERSION"
|
|
# cc.v('[ver] old ver: %s' % rcLines[x])
|
|
pos1 = rcline.find(' FILEVERSION ')
|
|
pos2 = rcline.rfind('\\0"')
|
|
_ver = rcline[pos1 + 13: pos2].strip()
|
|
|
|
rcSplitList = _ver.split(",")
|
|
if (len(rcSplitList) < 4):
|
|
rcSplitList = _ver.split(".")
|
|
if (len(rcSplitList) < 4):
|
|
raise RuntimeError('Invalid .rc file.')
|
|
if '.'.join(rcSplitList) == ver:
|
|
continue
|
|
|
|
rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 13], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
|
|
rcLines[x] = ""
|
|
rcLines[x] = rcline
|
|
# cc.v('[ver] new ver: %s' % rcLines[x])
|
|
bOK = True
|
|
|
|
elif rcline.find("VALUE \"FileVersion\",") != -1: # find "VALUE FileVersion"
|
|
# cc.v('[ver] old ver: %s' % rcLines[x])
|
|
pos1 = rcline.find('\"FileVersion\", \"')
|
|
pos2 = rcline.rfind('\\0"')
|
|
_ver = rcline[pos1 + 16: pos2].strip()
|
|
|
|
rcSplitList = _ver.split(".")
|
|
if (len(rcSplitList) < 4):
|
|
rcSplitList = _ver.split(",")
|
|
if (len(rcSplitList) < 4):
|
|
raise RuntimeError('Invalid .rc file.')
|
|
if '.'.join(rcSplitList) == ver:
|
|
continue
|
|
|
|
rcline = '%s%s.%s.%s.%s\\0\"\n' % (rcline[0:pos1 + 16], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
|
|
rcLines[x] = ""
|
|
rcLines[x] = rcline
|
|
# cc.v('[ver] new ver: %s' % rcLines[x])
|
|
bOK = True
|
|
|
|
elif rcline.find(" PRODUCTVERSION") != -1:
|
|
# cc.v('[ver] old ver: %s' % rcLines[x])
|
|
pos1 = rcline.find(' PRODUCTVERSION ')
|
|
pos2 = rcline.rfind('\\0"')
|
|
_ver = rcline[pos1 + 16: pos2].strip()
|
|
|
|
rcSplitList = _ver.split(",")
|
|
if (len(rcSplitList) < 4):
|
|
rcSplitList = _ver.split(".")
|
|
if (len(rcSplitList) < 4):
|
|
raise RuntimeError('Invalid .rc file.')
|
|
if '.'.join(rcSplitList) == ver:
|
|
continue
|
|
|
|
rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 16], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
|
|
rcLines[x] = ""
|
|
rcLines[x] = rcline
|
|
# cc.v('[ver] new ver: %s' % rcLines[x])
|
|
bOK = True
|
|
|
|
elif rcline.find("VALUE \"ProductVersion\",") != -1:
|
|
# cc.v('[ver] old ver: %s' % rcLines[x])
|
|
pos1 = rcline.find('\"ProductVersion\", \"')
|
|
pos2 = rcline.rfind('\\0"')
|
|
_ver = rcline[pos1 + 19: pos2].strip()
|
|
|
|
rcSplitList = _ver.split(".")
|
|
if (len(rcSplitList) < 4):
|
|
rcSplitList = _ver.split(",")
|
|
if (len(rcSplitList) < 4):
|
|
raise RuntimeError('Invalid .rc file.')
|
|
if '.'.join(rcSplitList) == ver:
|
|
continue
|
|
|
|
rcline = '%s%s.%s.%s.%s\\0\"\n' % (rcline[0:pos1 + 19], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
|
|
rcLines[x] = ""
|
|
rcLines[x] = rcline
|
|
# cc.v('[ver] new ver: %s' % rcLines[x])
|
|
bOK = True
|
|
|
|
if bOK:
|
|
cc.v(' update {}...'.format(rcFilePath))
|
|
wrcFile = codecs.open(rcFilePath, 'w', 'utf16')
|
|
wrcFile.writelines(rcLines)
|
|
wrcFile.close()
|
|
|
|
except IOError:
|
|
raise RuntimeError('can not process rc file.')
|
|
|
|
def _update_ver_nsi(self, nsiFilePath, ver):
|
|
""" update nsis file version info """
|
|
t_ver = ver.split('.')
|
|
if len(t_ver) != 4:
|
|
raise RuntimeError('Invalid version for nsis file.')
|
|
|
|
bOK = False
|
|
try:
|
|
# open nsis file
|
|
nsiFile = open(nsiFilePath, 'r', encoding='utf-16-le')
|
|
# read out all lines of nsi file
|
|
nsiLines = nsiFile.readlines()
|
|
nsiFile.close()
|
|
|
|
# for nsiline in nsiLines:
|
|
for x in range(len(nsiLines)):
|
|
nsiline = nsiLines[x]
|
|
if nsiline.find('\n') != -1:
|
|
nsiline = nsiline[:-1]
|
|
|
|
if nsiline.find(" FILE_VER") != -1 or nsiline.find(" STR_FILE_VER") != -1:
|
|
# cc.v('[ver] old ver: %s' % nsiLines[x])
|
|
pos1 = nsiline.find('"')
|
|
pos2 = nsiline.rfind('"')
|
|
_ver = nsiline[pos1 + 1: pos2]
|
|
|
|
nsiSplitList = _ver.split(".")
|
|
if (len(nsiSplitList) != 4):
|
|
raise RuntimeError('Invalid .nsi file (1).')
|
|
if '.'.join(nsiSplitList) == ver:
|
|
continue
|
|
|
|
# nsiline = '%s\"%d.%d.%d.%d\"\n' % (nsiline[0:pos1], self.major, self.minor, self.revision, self.build)
|
|
nsiline = '%s\"%s.%s.%s.%s\"\n' % (nsiline[0:pos1], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
|
|
nsiLines[x] = ""
|
|
nsiLines[x] = nsiline
|
|
# cc.v('[ver] new ver: %s' % nsiLines[x])
|
|
bOK = True
|
|
|
|
elif nsiline.find(" PRODUCT_VER") != -1:
|
|
# cc.v('[ver] old ver: %s' % nsiLines[x])
|
|
pos1 = nsiline.find('"')
|
|
pos2 = nsiline.rfind('"')
|
|
_ver = nsiline[pos1 + 1: pos2]
|
|
|
|
nsiSplitList = _ver.split(".")
|
|
if (len(nsiSplitList) != 2):
|
|
raise RuntimeError('Invalid .nsi file (2).')
|
|
if '.'.join(nsiSplitList) == '%s.%s' % (t_ver[0], t_ver[1]):
|
|
continue
|
|
|
|
# nsiline = '%s\"%d.%d\"\n' % (nsiline[0:pos1], self.major, self.minor)
|
|
nsiline = '%s\"%s.%s\"\n' % (nsiline[0:pos1], t_ver[0], t_ver[1])
|
|
|
|
nsiLines[x] = ""
|
|
nsiLines[x] = nsiline
|
|
# cc.v('[ver] new ver: %s' % nsiLines[x])
|
|
bOK = True
|
|
|
|
else:
|
|
continue
|
|
|
|
if bOK:
|
|
cc.v(' update {}...'.format(nsiFilePath))
|
|
wnsiFile = open(nsiFilePath, 'w', encoding='utf-16-le')
|
|
wnsiFile.writelines(nsiLines)
|
|
wnsiFile.close()
|
|
return bOK
|
|
|
|
except IOError:
|
|
raise RuntimeError('can not process nsi file.')
|
|
|
|
def _update_ver_plist(self, plist_file, ver):
|
|
""" update plist file version info for MacOS app."""
|
|
t_ver = ver.split('.')
|
|
if len(t_ver) != 4:
|
|
raise RuntimeError('Invalid version for plist file.')
|
|
|
|
bOK = False
|
|
try:
|
|
# open rc file
|
|
f = codecs.open(plist_file, 'r', 'utf8')
|
|
# read out all lines of rc file
|
|
lines = f.readlines()
|
|
f.close()
|
|
|
|
is_ver = False
|
|
for x in range(len(lines)):
|
|
l = lines[x]
|
|
|
|
if l.find('<key>CFBundleShortVersionString</key>') != -1:
|
|
is_ver = True
|
|
continue
|
|
if l.find('<key>CFBundleVersion</key>') != -1:
|
|
is_ver = True
|
|
continue
|
|
# pos1 = rcline.find(' FILEVERSION ')
|
|
# pos2 = rcline.rfind('\\0"')
|
|
# _ver = rcline[pos1 + 13: pos2].strip()
|
|
#
|
|
# rcSplitList = _ver.split(",")
|
|
# if (len(rcSplitList) < 4):
|
|
# rcSplitList = _ver.split(".")
|
|
# if (len(rcSplitList) < 4):
|
|
# raise RuntimeError('Invalid .rc file.')
|
|
# if '.'.join(rcSplitList) == ver:
|
|
# continue
|
|
#
|
|
# rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 13], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
#
|
|
# rcLines[x] = ""
|
|
# rcLines[x] = rcline
|
|
# # cc.v('[ver] new ver: %s' % rcLines[x])
|
|
# bOK = True
|
|
|
|
if is_ver:
|
|
is_ver = False
|
|
|
|
pos1 = l.find('<string>')
|
|
pos2 = l.rfind('</string>')
|
|
if pos1 == -1 or pos2 == -2:
|
|
continue
|
|
_ver = l[pos1 + 8: pos2].strip()
|
|
|
|
v = _ver.split(".")
|
|
if len(v) < 4:
|
|
raise RuntimeError('Invalid .plist file.')
|
|
old_ver = '.'.join(v)
|
|
if old_ver == ver:
|
|
continue
|
|
lines[x] = '<string>{ver}</string>'.format(ver=ver)
|
|
bOK = True
|
|
|
|
if bOK:
|
|
cc.v(' update {}...'.format(plist_file))
|
|
wrcFile = codecs.open(plist_file, 'w', 'utf8')
|
|
wrcFile.writelines(lines)
|
|
wrcFile.close()
|
|
|
|
except IOError:
|
|
raise RuntimeError('can not process plist file.')
|
|
|
|
|
|
def main():
|
|
if not env.init():
|
|
return
|
|
|
|
builder = Builder()
|
|
builder.build()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
except RuntimeError as e:
|
|
cc.e(e.__str__())
|
|
except:
|
|
cc.f('got exception.')
|