mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-17 06:10:15 +00:00
285f1cc30f
Use the Python script that was used to create gtk-win32.rc from gtk-win32.rc.in to similarly create libgtk3.manifest. As the wildcard character can be used for all architectures, use that. The libgtk3.manifest file needs to be specified explicitly in the projects, so that it will be recognized and built into the GTK dll, so update the project files as well on this part. https://bugzilla.gnome.org/show_bug.cgi?id=733773
100 lines
3.4 KiB
Python
100 lines
3.4 KiB
Python
#!/usr/bin/python
|
|
# vim: encoding=utf-8
|
|
# expand Windows-specific *.in files
|
|
# for Visual Studio Builds
|
|
|
|
import os
|
|
import sys
|
|
import re
|
|
import string
|
|
import argparse
|
|
|
|
|
|
def open_compat(src, mode):
|
|
if (sys.version_info.major < 3):
|
|
return open(src, mode)
|
|
else:
|
|
return open(src, mode, encoding='utf-8', errors='surrogateescape')
|
|
|
|
def get_version(srcroot):
|
|
ver = {}
|
|
RE_VERSION = re.compile(r'^m4_define\(\[(gtk_\w+)\],\s*\[(\d+)\]\)')
|
|
RE_FLOAT_VERSION = re.compile(r'^m4_define\(\[(gtk_\w+)\],\s*\[(\d+\.\d*)\]\)')
|
|
with open(os.path.join(srcroot, 'configure.ac'), 'r') as ac:
|
|
for i in ac:
|
|
mo = RE_VERSION.search(i)
|
|
if mo:
|
|
ver[mo.group(1).upper()] = int(mo.group(2))
|
|
mo = RE_FLOAT_VERSION.search(i)
|
|
if mo:
|
|
ver[mo.group(1).upper()] = float(mo.group(2))
|
|
|
|
ver['GTK_BINARY_AGE'] = 100 * ver['GTK_MINOR_VERSION'] + ver['GTK_MICRO_VERSION']
|
|
ver['GTK_VERSION'] = '%d.%d.%d' % (ver['GTK_MAJOR_VERSION'],
|
|
ver['GTK_MINOR_VERSION'],
|
|
ver['GTK_MICRO_VERSION'])
|
|
ver['LT_RELEASE'] = '%d.%d' % (ver['GTK_MAJOR_VERSION'], ver['GTK_MINOR_VERSION'])
|
|
ver['LT_CURRENT'] = 100 * \
|
|
ver['GTK_MINOR_VERSION'] + \
|
|
ver['GTK_MICRO_VERSION'] - \
|
|
ver['GTK_INTERFACE_AGE']
|
|
ver['LT_REVISION'] = ver['GTK_INTERFACE_AGE']
|
|
ver['LT_AGE'] = ver['GTK_BINARY_AGE'] - ver['GTK_INTERFACE_AGE']
|
|
ver['LT_CURRENT_MINUS_AGE'] = ver['LT_CURRENT'] - ver['LT_AGE']
|
|
return ver
|
|
|
|
def process_in(src, dest, vars):
|
|
RE_VARS = re.compile(r'@(\w+?)@')
|
|
|
|
with open_compat(src, 'r') as s:
|
|
with open_compat(dest, 'w') as d:
|
|
for i in s:
|
|
i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i)
|
|
d.write(i)
|
|
|
|
def get_srcroot():
|
|
if not os.path.isabs(__file__):
|
|
path = os.path.abspath(__file__)
|
|
else:
|
|
path = __file__
|
|
dirname = os.path.dirname(path)
|
|
return os.path.abspath(os.path.join(dirname, '..', '..'))
|
|
|
|
def main(argv):
|
|
prog_desc = 'Create Various autogenerated Win32-specific Source Files'
|
|
parser = argparse.ArgumentParser(description=prog_desc)
|
|
parser.add_argument('--gtkwin32rc', dest='gtkwin32rc', action='store_const',
|
|
const=1,
|
|
help='Generate gtk-win32.rc')
|
|
|
|
parser.add_argument('--gtk3manifest', dest='gtk3manifest', action='store_const',
|
|
const=1,
|
|
help='Generate libgtk3.manifest')
|
|
|
|
args = parser.parse_args()
|
|
no_args = True
|
|
|
|
if args.gtkwin32rc is not None:
|
|
srcroot = get_srcroot()
|
|
|
|
ver = get_version(srcroot)
|
|
|
|
process_in(os.path.join(srcroot, 'gtk', 'gtk-win32.rc.in'),
|
|
os.path.join(srcroot, 'gtk', 'gtk-win32.rc'),
|
|
ver)
|
|
no_args = False
|
|
|
|
if args.gtk3manifest is not None:
|
|
manifest = {}
|
|
manifest['EXE_MANIFEST_ARCHITECTURE'] = '*'
|
|
process_in(os.path.join(srcroot, 'gtk', 'libgtk3.manifest.in'),
|
|
os.path.join(srcroot, 'gtk', 'libgtk3.manifest'),
|
|
manifest)
|
|
no_args = False
|
|
|
|
if no_args is True:
|
|
raise SystemExit('Action argument required. Please see %s --help for details.' % __file__)
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv))
|