mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-27 15:57:18 +00:00
891f00a011
This header was added in late 2020 and hasn't made its way into the GitHub Actions image yet.
144 lines
4.3 KiB
Python
Executable File
144 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import datetime
|
|
import fnmatch
|
|
import os
|
|
import re
|
|
import subprocess
|
|
from textwrap import wrap
|
|
|
|
PROJECT = os.path.dirname(__file__)
|
|
EXTENSIONS = ('.c', '.cpp', '.h', '.nsi', '.rc')
|
|
START_YEAR = 2017
|
|
CURRENT_YEAR = datetime.date.today().year
|
|
|
|
reignore = re.compile('^vendor/|.*/shader/|.*/d3d12.h$')
|
|
recopyright = re.compile(r'\A/\*.*?\*/\s+', re.DOTALL)
|
|
|
|
project_name = 'Looking Glass'
|
|
copyright = f'Copyright © {START_YEAR}-{CURRENT_YEAR} The Looking Glass Authors'
|
|
project_url = 'https://looking-glass.io'
|
|
header = [project_name, copyright, project_url]
|
|
|
|
paragraphs = ['''\
|
|
This program is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by the Free
|
|
Software Foundation; either version 2 of the License, or (at your option)
|
|
any later version.''',
|
|
'''\
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
more details.''',
|
|
'''\
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc., 59
|
|
Temple Place, Suite 330, Boston, MA 02111-1307 USA''']
|
|
|
|
|
|
def make_comment_block():
|
|
lines = ['/**']
|
|
lines += [' * ' + line for line in header]
|
|
|
|
for paragraph in paragraphs:
|
|
lines.append(' *')
|
|
lines += wrap(paragraph, width=78, initial_indent=' * ', subsequent_indent=' * ')
|
|
|
|
lines.append(' */')
|
|
return '\n'.join(lines) + '\n\n'
|
|
|
|
|
|
def gen_c_literal():
|
|
lines = [''] + header
|
|
for paragraph in paragraphs:
|
|
lines.append('')
|
|
lines += wrap(paragraph, width=79)
|
|
lines.append('')
|
|
return '\n'.join(f' "{line}\\n"' for line in lines) + '\n'
|
|
|
|
|
|
def update_c_style(file, copyright):
|
|
print(f'Updating copyright for {file}...')
|
|
with open(file, encoding='utf-8') as f:
|
|
data = recopyright.sub('', f.read())
|
|
with open(file, 'w', encoding='utf-8') as f:
|
|
f.write(copyright)
|
|
f.write(data)
|
|
|
|
|
|
def update_config_c(file):
|
|
prefix = []
|
|
suffix = []
|
|
current = prefix
|
|
|
|
print(f'Refresh embedded copyright string in {file}...')
|
|
|
|
with open(file, encoding='utf-8') as f:
|
|
for line in f:
|
|
if '// BEGIN LICENSE BLOCK' in line:
|
|
prefix.append(line)
|
|
current = []
|
|
elif '// END LICENSE BLOCK' in line:
|
|
suffix.append(line)
|
|
current = suffix
|
|
else:
|
|
current.append(line)
|
|
|
|
with open(file, 'w', encoding='utf-8') as f:
|
|
f.writelines(prefix)
|
|
f.write(gen_c_literal())
|
|
f.writelines(suffix)
|
|
|
|
|
|
def appstring_license():
|
|
lines = []
|
|
for paragraph in paragraphs:
|
|
paragraph = wrap(paragraph, width=75)
|
|
for line in paragraph[:-1]:
|
|
lines.append(f' "{line} "')
|
|
lines.append(f' "{paragraph[-1]}\\n"')
|
|
lines.append(r' "\n"')
|
|
lines.pop()
|
|
lines[-1] = f'{lines[-1][:-3]}";'
|
|
return lines
|
|
|
|
|
|
def update_appstrings(file):
|
|
print(f'Refresh app string in {file}...')
|
|
lines = []
|
|
|
|
with open(file, encoding='utf-8') as f:
|
|
f = iter(f)
|
|
for line in f:
|
|
lines.append(line)
|
|
if 'LG_COPYRIGHT_STR' in line:
|
|
next(f)
|
|
lines.append(f' "{copyright}";\n')
|
|
elif 'LG_WEBSITE_STR' in line:
|
|
next(f)
|
|
lines.append(f' "{project_url}";\n')
|
|
elif 'LG_LICENSE_STR' in line:
|
|
lines += [f'{line}\n' for line in appstring_license()]
|
|
for line in f:
|
|
if '";' in line:
|
|
break
|
|
|
|
with open(file, 'w', encoding='utf-8') as f:
|
|
f.writelines(lines)
|
|
|
|
|
|
def main():
|
|
comment_block = make_comment_block()
|
|
files = subprocess.check_output(['git', '-C', PROJECT, 'ls-files', '-z']).decode('utf-8').split('\0')
|
|
for file in files:
|
|
if reignore.match(file):
|
|
continue
|
|
if file.endswith(EXTENSIONS):
|
|
update_c_style(os.path.join(PROJECT, file), comment_block)
|
|
|
|
update_config_c(os.path.join(PROJECT, 'client', 'src', 'config.c'))
|
|
update_appstrings(os.path.join(PROJECT, 'common', 'src', 'appstrings.c'))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|