diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-03-07 11:06:23 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-03-11 14:52:09 +0000 |
commit | 4b105d77c24fb09fc65f1b1e622a47c69dabccaf (patch) | |
tree | e9f10c344b3273f74a736eb6fc8407aec37924a5 | |
parent | af8413af152212a7513b6fa71259ec58a6e7868f (diff) |
CMake: pro2cmake.py: Remove .qrc files!
Remove qrc files from CMake. Use add_qt_resource function instead.
Change-Id: I64cdbd9498f97d23cd8e03f34ab5ae4a52dba5af
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rwxr-xr-x | util/cmake/pro2cmake.py | 107 |
1 files changed, 91 insertions, 16 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 7c00afad1c..7abb8f5a1c 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -32,6 +32,7 @@ from __future__ import annotations from argparse import ArgumentParser import copy +import xml.etree.ElementTree as ET from itertools import chain import os.path import re @@ -72,6 +73,61 @@ def _parse_commandline(): return parser.parse_args() +def process_qrc_file(target: str, filepath: str, base_dir: str = '') -> str: + assert(target) + resource_name = os.path.splitext(os.path.basename(filepath))[0] + base_dir = os.path.join('' if base_dir == '.' else base_dir, os.path.dirname(filepath)) + + tree = ET.parse(filepath) + root = tree.getroot() + assert(root.tag == 'RCC') + + output = '' + + resource_count = 0 + for resource in root: + assert(resource.tag == 'qresource') + lang = resource.get('lang', '') + prefix = resource.get('prefix', '') + + full_resource_name = resource_name + (str(resource_count) if resource_count > 0 else '') + + files: Dict[str, str] = {} + for file in resource: + path = file.text + assert path + + # Get alias: + alias = file.get('alias', '') + files[path] = alias + + sorted_files = sorted(files.keys()) + + assert(sorted_files) + + for source in sorted_files: + alias = files[source] + if alias: + full_source = os.path.join(base_dir, source) + output += 'set_source_files_properties("{}"\n' \ + ' PROPERTIES alias "{}")\n'.format(full_source, alias) + + params = '' + if lang: + params += ' LANG "{}"'.format(lang) + if prefix: + params += ' PREFIX "{}"'.format(prefix) + if base_dir: + params += ' BASE "{}"'.format(base_dir) + output += 'add_qt_resource({} "{}"{} FILES\n {})\n'.format(target, full_resource_name, + params, + '\n '.join(sorted_files)) + + resource_count += 1 + + return output + + def fixup_linecontinuation(contents: str) -> str: contents = re.sub(r'([^\t ])\\[ \t]*\n', '\\1 \\\n', contents) contents = re.sub(r'\\[ \t]*\n', '\\\n', contents) @@ -778,28 +834,19 @@ def write_sources_section(cm_fh: typing.IO[str], scope: Scope, *, ind = spaces(indent) scope.reset_visited_keys() + # mark RESOURCES as visited: + scope.get('RESOURCES', '') + plugin_type = scope.get('PLUGIN_TYPE') if plugin_type: cm_fh.write('{} TYPE {}\n'.format(ind, plugin_type[0])) + vpath = scope.expand('VPATH') + sources = scope.expand('SOURCES') + scope.expand('HEADERS') \ + scope.expand('OBJECTIVE_SOURCES') + scope.expand('NO_PCH_SOURCES') \ + scope.expand('FORMS') - resources = scope.expand('RESOURCES') - if resources: - qrc_only = True - for r in resources: - if not r.endswith('.qrc'): - qrc_only = False - break - - if not qrc_only: - print(' XXXX Ignoring non-QRC file resources.') - else: - sources += resources - - vpath = scope.expand('VPATH') sources = [map_source_to_cmake(s, scope.basedir, vpath) for s in sources] if sources: @@ -1078,6 +1125,31 @@ def map_to_cmake_condition(condition: str) -> str: return condition +def write_resources(cm_fh: typing.IO[str], target: str, scope: Scope, indent: int = 0): + vpath = scope.expand('VPATH') + + # Handle QRC files by turning them into add_qt_resource: + resources = scope.expand('RESOURCES') + qrc_output = '' + if resources: + qrc_only = True + for r in resources: + if r.endswith('.qrc'): + qrc_output += process_qrc_file(target, + map_source_to_cmake(r, scope.basedir, vpath), + scope.basedir) + else: + qrc_only = False + + if not qrc_only: + print(' XXXX Ignoring non-QRC file resources.') + + if qrc_output: + cm_fh.write('\n# Resources:\n') + for line in qrc_output.split('\n'): + cm_fh.write(' ' * indent + line + '\n') + + def write_extend_target(cm_fh: typing.IO[str], target: str, scope: Scope, indent: int = 0): extend_qt_io_string = io.StringIO() @@ -1106,6 +1178,8 @@ def write_extend_target(cm_fh: typing.IO[str], target: str, cm_fh.write(extend_scope) + write_resources(cm_fh, target, scope, indent) + def flatten_scopes(scope: Scope) -> typing.List[Scope]: result = [scope] # type: typing.List[Scope] @@ -1137,8 +1211,7 @@ def merge_scopes(scopes: typing.List[Scope]) -> typing.List[Scope]: def write_main_part(cm_fh: typing.IO[str], name: str, typename: str, cmake_function: str, scope: Scope, *, extra_lines: typing.List[str] = [], - indent: int = 0, - **kwargs: typing.Any): + indent: int = 0, **kwargs: typing.Any): # Evaluate total condition of all scopes: recursive_evaluate_scope(scope) @@ -1168,6 +1241,8 @@ def write_main_part(cm_fh: typing.IO[str], name: str, typename: str, # Footer: cm_fh.write('{})\n'.format(spaces(indent))) + write_resources(cm_fh, name, scope, indent) + # Scopes: if len(scopes) == 1: return |