Skip to content

Commit

Permalink
Merge PR #2671: Split mumble_flags.qrc into seperate files to reduce …
Browse files Browse the repository at this point in the history
….cpp size for older compilers.
  • Loading branch information
mkrautz committed Nov 27, 2016
2 parents b6d7cf4 + 54dd7e7 commit 0df5c64
Show file tree
Hide file tree
Showing 11 changed files with 375 additions and 224 deletions.
111 changes: 111 additions & 0 deletions scripts/mkflags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2005-2016 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.

# mkflags.py generates .pri and .qrc files from Mumble's
# flag SVGs, such that the flags can be included as Qt
# resources.
#
# The script splits the flags into multiple .qrc files once
# a single .qrc file exceeds a given threshold.
#
# This is because older compilers (and old hardware, too!)
# can have problems with large source files. When Qt embeds
# a .qrc file, it generates a .cpp file and compiles it. Some
# of our flag SVGs can be quite large, and if we only use a
# single .qrc file, it is (as of this writing) 32MB+ large.

from __future__ import (unicode_literals, print_function, division)

import os
import shutil
import codecs
import collections

# Container for an on-disk flag SVG. Contains size and filename.
OnDiskFlag = collections.namedtuple('OnDiskFlag', ['size', 'filename'])

# Once a .qrc file's content exceeds this size, the
# file will be considered full.
MAX_SIZE = 1024*1024

def main():
# Get a list of all flag SVGs, and sort them by size.
flags = []

flagsDir = os.path.join('icons', 'flags')
flagFns = os.listdir(flagsDir)
for fn in flagFns:
if not fn.lower().endswith('svg'):
continue

with open(os.path.join(flagsDir, fn), 'r') as f:
buf = f.read()
sz = len(buf)
flags.append(OnDiskFlag(size=sz, filename=fn))

flags = sorted(flags) # Sort by first tuple index (size).

# Figure out the .qrc target of the individual
# SVG files. Once a .qrc target exceeds MAX_SIZE,
# we add a new file.
flagsOut = []

curFileContent = []
curFileSz = 0

for flag in flags:
sz = flag.size
fn = flag.filename

curFileSz += sz

curFileContent.append(fn)

if curFileSz > MAX_SIZE:
flagsOut.append(curFileContent)

curFileContent = []
curFileSz = 0

if len(curFileContent) > 0:
flagsOut.append(curFileContent)

# Remove old flags qrc file.
oldFlagsQrc = os.path.join('src', 'mumble', 'mumble_flags.qrc')
if os.path.exists(oldFlagsQrc):
os.remove(oldFlagsQrc)

# Remove existing flags dir in src/mumble.
flagsOutDir = os.path.join('src', 'mumble', 'flags')
if os.path.exists(flagsOutDir):
shutil.rmtree(flagsOutDir)
os.mkdir(flagsOutDir)

# Generate output files.
for idx, content in enumerate(flagsOut):
fn = 'mumble_flags_{0}.qrc'.format(idx)

with codecs.open(os.path.join(flagsOutDir, fn), "w", "utf-8") as f:
f.write('<!DOCTYPE RCC>\n')
f.write('<RCC version="1.0">\n')
f.write('<qresource>\n')

for fn in content:
f.write('<file alias="{0}">{1}</file>\n'.format('flags/' + fn, '../../../icons/flags/' + fn))

f.write('</qresource>\n')
f.write('</RCC>\n')

# Generate .pri file for flags.
with codecs.open(os.path.join(flagsOutDir, 'mumble_flags.pri'), "w", "utf-8") as f:
for idx, _ in enumerate(flagsOut):
fn = 'mumble_flags_{0}.qrc'.format(idx)
f.write('RESOURCES *= flags/{0}\n'.format(fn))

if __name__ == '__main__':
main()
7 changes: 7 additions & 0 deletions src/mumble/flags/mumble_flags.pri
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
RESOURCES *= flags/mumble_flags_0.qrc
RESOURCES *= flags/mumble_flags_1.qrc
RESOURCES *= flags/mumble_flags_2.qrc
RESOURCES *= flags/mumble_flags_3.qrc
RESOURCES *= flags/mumble_flags_4.qrc
RESOURCES *= flags/mumble_flags_5.qrc
RESOURCES *= flags/mumble_flags_6.qrc
191 changes: 191 additions & 0 deletions src/mumble/flags/mumble_flags_0.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/id.svg">../../../icons/flags/id.svg</file>
<file alias="flags/mc.svg">../../../icons/flags/mc.svg</file>
<file alias="flags/pl.svg">../../../icons/flags/pl.svg</file>
<file alias="flags/ua.svg">../../../icons/flags/ua.svg</file>
<file alias="flags/ch.svg">../../../icons/flags/ch.svg</file>
<file alias="flags/pw.svg">../../../icons/flags/pw.svg</file>
<file alias="flags/bd.svg">../../../icons/flags/bd.svg</file>
<file alias="flags/dk.svg">../../../icons/flags/dk.svg</file>
<file alias="flags/se.svg">../../../icons/flags/se.svg</file>
<file alias="flags/am.svg">../../../icons/flags/am.svg</file>
<file alias="flags/at.svg">../../../icons/flags/at.svg</file>
<file alias="flags/bg.svg">../../../icons/flags/bg.svg</file>
<file alias="flags/de.svg">../../../icons/flags/de.svg</file>
<file alias="flags/ee.svg">../../../icons/flags/ee.svg</file>
<file alias="flags/ga.svg">../../../icons/flags/ga.svg</file>
<file alias="flags/hu.svg">../../../icons/flags/hu.svg</file>
<file alias="flags/lt.svg">../../../icons/flags/lt.svg</file>
<file alias="flags/lu.svg">../../../icons/flags/lu.svg</file>
<file alias="flags/lv.svg">../../../icons/flags/lv.svg</file>
<file alias="flags/nl.svg">../../../icons/flags/nl.svg</file>
<file alias="flags/ru.svg">../../../icons/flags/ru.svg</file>
<file alias="flags/sl.svg">../../../icons/flags/sl.svg</file>
<file alias="flags/ye.svg">../../../icons/flags/ye.svg</file>
<file alias="flags/co.svg">../../../icons/flags/co.svg</file>
<file alias="flags/fi.svg">../../../icons/flags/fi.svg</file>
<file alias="flags/fr.svg">../../../icons/flags/fr.svg</file>
<file alias="flags/be.svg">../../../icons/flags/be.svg</file>
<file alias="flags/ci.svg">../../../icons/flags/ci.svg</file>
<file alias="flags/gn.svg">../../../icons/flags/gn.svg</file>
<file alias="flags/ie.svg">../../../icons/flags/ie.svg</file>
<file alias="flags/it.svg">../../../icons/flags/it.svg</file>
<file alias="flags/ml.svg">../../../icons/flags/ml.svg</file>
<file alias="flags/ng.svg">../../../icons/flags/ng.svg</file>
<file alias="flags/pe.svg">../../../icons/flags/pe.svg</file>
<file alias="flags/ro.svg">../../../icons/flags/ro.svg</file>
<file alias="flags/td.svg">../../../icons/flags/td.svg</file>
<file alias="flags/wf.svg">../../../icons/flags/wf.svg</file>
<file alias="flags/to.svg">../../../icons/flags/to.svg</file>
<file alias="flags/mu.svg">../../../icons/flags/mu.svg</file>
<file alias="flags/bj.svg">../../../icons/flags/bj.svg</file>
<file alias="flags/mg.svg">../../../icons/flags/mg.svg</file>
<file alias="flags/so.svg">../../../icons/flags/so.svg</file>
<file alias="flags/ne.svg">../../../icons/flags/ne.svg</file>
<file alias="flags/la.svg">../../../icons/flags/la.svg</file>
<file alias="flags/vn.svg">../../../icons/flags/vn.svg</file>
<file alias="flags/ae.svg">../../../icons/flags/ae.svg</file>
<file alias="flags/bw.svg">../../../icons/flags/bw.svg</file>
<file alias="flags/gm.svg">../../../icons/flags/gm.svg</file>
<file alias="flags/jp.svg">../../../icons/flags/jp.svg</file>
<file alias="flags/fo.svg">../../../icons/flags/fo.svg</file>
<file alias="flags/is.svg">../../../icons/flags/is.svg</file>
<file alias="flags/no.svg">../../../icons/flags/no.svg</file>
<file alias="flags/bf.svg">../../../icons/flags/bf.svg</file>
<file alias="flags/cl.svg">../../../icons/flags/cl.svg</file>
<file alias="flags/sn.svg">../../../icons/flags/sn.svg</file>
<file alias="flags/gh.svg">../../../icons/flags/gh.svg</file>
<file alias="flags/cm.svg">../../../icons/flags/cm.svg</file>
<file alias="flags/mm.svg">../../../icons/flags/mm.svg</file>
<file alias="flags/cz.svg">../../../icons/flags/cz.svg</file>
<file alias="flags/gw.svg">../../../icons/flags/gw.svg</file>
<file alias="flags/bs.svg">../../../icons/flags/bs.svg</file>
<file alias="flags/ps.svg">../../../icons/flags/ps.svg</file>
<file alias="flags/sd.svg">../../../icons/flags/sd.svg</file>
<file alias="flags/kw.svg">../../../icons/flags/kw.svg</file>
<file alias="flags/gl.svg">../../../icons/flags/gl.svg</file>
<file alias="flags/cg.svg">../../../icons/flags/cg.svg</file>
<file alias="flags/cr.svg">../../../icons/flags/cr.svg</file>
<file alias="flags/th.svg">../../../icons/flags/th.svg</file>
<file alias="flags/cf.svg">../../../icons/flags/cf.svg</file>
<file alias="flags/sr.svg">../../../icons/flags/sr.svg</file>
<file alias="flags/mv.svg">../../../icons/flags/mv.svg</file>
<file alias="flags/sy.svg">../../../icons/flags/sy.svg</file>
<file alias="flags/dj.svg">../../../icons/flags/dj.svg</file>
<file alias="flags/tt.svg">../../../icons/flags/tt.svg</file>
<file alias="flags/pa.svg">../../../icons/flags/pa.svg</file>
<file alias="flags/sc.svg">../../../icons/flags/sc.svg</file>
<file alias="flags/jo.svg">../../../icons/flags/jo.svg</file>
<file alias="flags/pk.svg">../../../icons/flags/pk.svg</file>
<file alias="flags/tg.svg">../../../icons/flags/tg.svg</file>
<file alias="flags/tr.svg">../../../icons/flags/tr.svg</file>
<file alias="flags/kp.svg">../../../icons/flags/kp.svg</file>
<file alias="flags/fm.svg">../../../icons/flags/fm.svg</file>
<file alias="flags/st.svg">../../../icons/flags/st.svg</file>
<file alias="flags/ly.svg">../../../icons/flags/ly.svg</file>
<file alias="flags/tn.svg">../../../icons/flags/tn.svg</file>
<file alias="flags/dz.svg">../../../icons/flags/dz.svg</file>
<file alias="flags/eh.svg">../../../icons/flags/eh.svg</file>
<file alias="flags/az.svg">../../../icons/flags/az.svg</file>
<file alias="flags/jm.svg">../../../icons/flags/jm.svg</file>
<file alias="flags/cn.svg">../../../icons/flags/cn.svg</file>
<file alias="flags/ws.svg">../../../icons/flags/ws.svg</file>
<file alias="flags/hn.svg">../../../icons/flags/hn.svg</file>
<file alias="flags/gr.svg">../../../icons/flags/gr.svg</file>
<file alias="flags/za.svg">../../../icons/flags/za.svg</file>
<file alias="flags/sg.svg">../../../icons/flags/sg.svg</file>
<file alias="flags/sb.svg">../../../icons/flags/sb.svg</file>
<file alias="flags/lr.svg">../../../icons/flags/lr.svg</file>
<file alias="flags/mr.svg">../../../icons/flags/mr.svg</file>
<file alias="flags/ve.svg">../../../icons/flags/ve.svg</file>
<file alias="flags/vc.svg">../../../icons/flags/vc.svg</file>
<file alias="flags/nr.svg">../../../icons/flags/nr.svg</file>
<file alias="flags/tz.svg">../../../icons/flags/tz.svg</file>
<file alias="flags/cd.svg">../../../icons/flags/cd.svg</file>
<file alias="flags/ba.svg">../../../icons/flags/ba.svg</file>
<file alias="flags/cu.svg">../../../icons/flags/cu.svg</file>
<file alias="flags/pr.svg">../../../icons/flags/pr.svg</file>
<file alias="flags/aw.svg">../../../icons/flags/aw.svg</file>
<file alias="flags/cv.svg">../../../icons/flags/cv.svg</file>
<file alias="flags/kn.svg">../../../icons/flags/kn.svg</file>
<file alias="flags/bh.svg">../../../icons/flags/bh.svg</file>
<file alias="flags/qa.svg">../../../icons/flags/qa.svg</file>
<file alias="flags/gb.svg">../../../icons/flags/gb.svg</file>
<file alias="flags/gy.svg">../../../icons/flags/gy.svg</file>
<file alias="flags/ke.svg">../../../icons/flags/ke.svg</file>
<file alias="flags/tl.svg">../../../icons/flags/tl.svg</file>
<file alias="flags/bb.svg">../../../icons/flags/bb.svg</file>
<file alias="flags/uz.svg">../../../icons/flags/uz.svg</file>
<file alias="flags/ca.svg">../../../icons/flags/ca.svg</file>
<file alias="flags/lc.svg">../../../icons/flags/lc.svg</file>
<file alias="flags/ag.svg">../../../icons/flags/ag.svg</file>
<file alias="flags/il.svg">../../../icons/flags/il.svg</file>
<file alias="flags/tw.svg">../../../icons/flags/tw.svg</file>
<file alias="flags/ir.svg">../../../icons/flags/ir.svg</file>
<file alias="flags/nu.svg">../../../icons/flags/nu.svg</file>
<file alias="flags/au.svg">../../../icons/flags/au.svg</file>
<file alias="flags/my.svg">../../../icons/flags/my.svg</file>
<file alias="flags/ge.svg">../../../icons/flags/ge.svg</file>
<file alias="flags/si.svg">../../../icons/flags/si.svg</file>
<file alias="flags/mh.svg">../../../icons/flags/mh.svg</file>
<file alias="flags/na.svg">../../../icons/flags/na.svg</file>
<file alias="flags/nz.svg">../../../icons/flags/nz.svg</file>
<file alias="flags/np.svg">../../../icons/flags/np.svg</file>
<file alias="flags/km.svg">../../../icons/flags/km.svg</file>
<file alias="flags/ls.svg">../../../icons/flags/ls.svg</file>
<file alias="flags/hk.svg">../../../icons/flags/hk.svg</file>
<file alias="flags/mn.svg">../../../icons/flags/mn.svg</file>
<file alias="flags/ao.svg">../../../icons/flags/ao.svg</file>
<file alias="flags/nc.svg">../../../icons/flags/nc.svg</file>
<file alias="flags/iq.svg">../../../icons/flags/iq.svg</file>
<file alias="flags/sk.svg">../../../icons/flags/sk.svg</file>
<file alias="flags/et.svg">../../../icons/flags/et.svg</file>
<file alias="flags/kr.svg">../../../icons/flags/kr.svg</file>
<file alias="flags/mk.svg">../../../icons/flags/mk.svg</file>
<file alias="flags/ma.svg">../../../icons/flags/ma.svg</file>
<file alias="flags/ph.svg">../../../icons/flags/ph.svg</file>
<file alias="flags/cy.svg">../../../icons/flags/cy.svg</file>
<file alias="flags/bi.svg">../../../icons/flags/bi.svg</file>
<file alias="flags/tj.svg">../../../icons/flags/tj.svg</file>
<file alias="flags/us.svg">../../../icons/flags/us.svg</file>
<file alias="flags/ai.svg">../../../icons/flags/ai.svg</file>
<file alias="flags/tv.svg">../../../icons/flags/tv.svg</file>
<file alias="flags/lb.svg">../../../icons/flags/lb.svg</file>
<file alias="flags/er.svg">../../../icons/flags/er.svg</file>
<file alias="flags/pg.svg">../../../icons/flags/pg.svg</file>
<file alias="flags/gd.svg">../../../icons/flags/gd.svg</file>
<file alias="flags/mw.svg">../../../icons/flags/mw.svg</file>
<file alias="flags/mz.svg">../../../icons/flags/mz.svg</file>
<file alias="flags/al.svg">../../../icons/flags/al.svg</file>
<file alias="flags/kg.svg">../../../icons/flags/kg.svg</file>
<file alias="flags/in.svg">../../../icons/flags/in.svg</file>
<file alias="flags/br.svg">../../../icons/flags/br.svg</file>
<file alias="flags/rw.svg">../../../icons/flags/rw.svg</file>
<file alias="flags/vu.svg">../../../icons/flags/vu.svg</file>
<file alias="flags/xk.svg">../../../icons/flags/xk.svg</file>
<file alias="flags/uy.svg">../../../icons/flags/uy.svg</file>
<file alias="flags/mo.svg">../../../icons/flags/mo.svg</file>
<file alias="flags/sa.svg">../../../icons/flags/sa.svg</file>
<file alias="flags/ug.svg">../../../icons/flags/ug.svg</file>
<file alias="flags/sz.svg">../../../icons/flags/sz.svg</file>
<file alias="flags/pf.svg">../../../icons/flags/pf.svg</file>
<file alias="flags/eg.svg">../../../icons/flags/eg.svg</file>
<file alias="flags/gu.svg">../../../icons/flags/gu.svg</file>
<file alias="flags/kz.svg">../../../icons/flags/kz.svg</file>
<file alias="flags/gq.svg">../../../icons/flags/gq.svg</file>
<file alias="flags/by.svg">../../../icons/flags/by.svg</file>
<file alias="flags/bn.svg">../../../icons/flags/bn.svg</file>
<file alias="flags/zm.svg">../../../icons/flags/zm.svg</file>
<file alias="flags/li.svg">../../../icons/flags/li.svg</file>
<file alias="flags/ar.svg">../../../icons/flags/ar.svg</file>
<file alias="flags/hr.svg">../../../icons/flags/hr.svg</file>
<file alias="flags/ms.svg">../../../icons/flags/ms.svg</file>
<file alias="flags/lk.svg">../../../icons/flags/lk.svg</file>
<file alias="flags/vi.svg">../../../icons/flags/vi.svg</file>
<file alias="flags/py.svg">../../../icons/flags/py.svg</file>
<file alias="flags/ki.svg">../../../icons/flags/ki.svg</file>
<file alias="flags/zw.svg">../../../icons/flags/zw.svg</file>
</qresource>
</RCC>
18 changes: 18 additions & 0 deletions src/mumble/flags/mumble_flags_1.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/md.svg">../../../icons/flags/md.svg</file>
<file alias="flags/ad.svg">../../../icons/flags/ad.svg</file>
<file alias="flags/je.svg">../../../icons/flags/je.svg</file>
<file alias="flags/kh.svg">../../../icons/flags/kh.svg</file>
<file alias="flags/dm.svg">../../../icons/flags/dm.svg</file>
<file alias="flags/ni.svg">../../../icons/flags/ni.svg</file>
<file alias="flags/do.svg">../../../icons/flags/do.svg</file>
<file alias="flags/gt.svg">../../../icons/flags/gt.svg</file>
<file alias="flags/om.svg">../../../icons/flags/om.svg</file>
<file alias="flags/ky.svg">../../../icons/flags/ky.svg</file>
<file alias="flags/bm.svg">../../../icons/flags/bm.svg</file>
<file alias="flags/af.svg">../../../icons/flags/af.svg</file>
<file alias="flags/me.svg">../../../icons/flags/me.svg</file>
</qresource>
</RCC>
12 changes: 12 additions & 0 deletions src/mumble/flags/mumble_flags_2.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/sv.svg">../../../icons/flags/sv.svg</file>
<file alias="flags/gi.svg">../../../icons/flags/gi.svg</file>
<file alias="flags/sm.svg">../../../icons/flags/sm.svg</file>
<file alias="flags/fj.svg">../../../icons/flags/fj.svg</file>
<file alias="flags/sh.svg">../../../icons/flags/sh.svg</file>
<file alias="flags/ht.svg">../../../icons/flags/ht.svg</file>
<file alias="flags/mx.svg">../../../icons/flags/mx.svg</file>
</qresource>
</RCC>
10 changes: 10 additions & 0 deletions src/mumble/flags/mumble_flags_3.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/es.svg">../../../icons/flags/es.svg</file>
<file alias="flags/fk.svg">../../../icons/flags/fk.svg</file>
<file alias="flags/mt.svg">../../../icons/flags/mt.svg</file>
<file alias="flags/bo.svg">../../../icons/flags/bo.svg</file>
<file alias="flags/bz.svg">../../../icons/flags/bz.svg</file>
</qresource>
</RCC>
8 changes: 8 additions & 0 deletions src/mumble/flags/mumble_flags_4.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/ac.svg">../../../icons/flags/ac.svg</file>
<file alias="flags/rs.svg">../../../icons/flags/rs.svg</file>
<file alias="flags/pt.svg">../../../icons/flags/pt.svg</file>
</qresource>
</RCC>
8 changes: 8 additions & 0 deletions src/mumble/flags/mumble_flags_5.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/ec.svg">../../../icons/flags/ec.svg</file>
<file alias="flags/bt.svg">../../../icons/flags/bt.svg</file>
<file alias="flags/tm.svg">../../../icons/flags/tm.svg</file>
</qresource>
</RCC>
6 changes: 6 additions & 0 deletions src/mumble/flags/mumble_flags_6.qrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="flags/va.svg">../../../icons/flags/va.svg</file>
</qresource>
</RCC>
5 changes: 4 additions & 1 deletion src/mumble/mumble.pro
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,10 @@ SOURCES *= BanEditor.cpp \
widgets/MUComboBox.cpp

DIST *= ../../icons/mumble.ico ../../icons/mumble.xpm murmur_pch.h mumble.plist
RESOURCES *= mumble.qrc mumble_translations.qrc mumble_flags.qrc ../../themes/MumbleTheme.qrc
RESOURCES *= mumble.qrc mumble_translations.qrc ../../themes/MumbleTheme.qrc
# Add the various mumble_flags_XX.qrc files to RESOURCES...
include(flags/mumble_flags.pri)

FORMS *= ConfigDialog.ui \
MainWindow.ui \
ConnectDialog.ui \
Expand Down
Loading

0 comments on commit 0df5c64

Please sign in to comment.