1#!/usr/bin/env python3
2#
3# Generate gdk.gresources.xml
4#
5# Usage: gen-gdk-gresources-xml SRCDIR_GDK [OUTPUT-FILE]
6
7import os, sys
8import filecmp
9
10def replace_if_changed(new, old):
11  '''
12  Compare contents and only replace if changed to avoid triggering a rebuild.
13  '''
14  try:
15    changed = not filecmp.cmp(new, old, shallow=False)
16  except FileNotFoundError:
17    changed = True
18  if changed:
19    os.replace(new, old)
20  else:
21    os.remove(new)
22
23srcdir = sys.argv[1]
24
25xml = '''<?xml version='1.0' encoding='UTF-8'?>
26<gresources>
27  <gresource prefix='/org/gtk/libgdk'>
28    <file alias='cursor/default'>default_cursor.png</file>
29'''
30
31def get_files(subdir,extension):
32  return sorted(filter(lambda x: x.endswith((extension)), os.listdir(os.path.join(srcdir,subdir))))
33
34for f in get_files('resources/glsl', '.glsl'):
35  xml += '    <file alias=\'glsl/{0}\'>resources/glsl/{0}</file>\n'.format(f)
36
37xml += '''
38  </gresource>
39</gresources>'''
40
41if len(sys.argv) > 2:
42  outfile = sys.argv[2]
43  tmpfile = outfile + '~'
44  with open(tmpfile, 'w') as f:
45    f.write(xml)
46  replace_if_changed(tmpfile, outfile)
47else:
48  print(xml)
49