diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-06-26 16:23:02 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-07-03 07:45:21 +0000 |
commit | b262605c806a6572f31cf9a50aab7b0e10cbc951 (patch) | |
tree | 649b5c2468bb6a7e6a745ab284e921e5f909639d /tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in | |
parent | 32c33ee9abec1ef2f05233c3a613689431f6654b (diff) |
Fix qtquick_compiler_add_resources when cross-compiling
Attempt to locate the qmlcachegen binary in the host bin directory if
possible.
Task-number: QTBUG-68724
Change-Id: If0d28408a316b3dd33f4734464e0d5fe44c9fc2c
Reviewed-by: Rolf Eike Beer <eb@emlix.com>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in')
-rw-r--r-- | tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in b/tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in new file mode 100644 index 0000000000..e4963c3a33 --- /dev/null +++ b/tools/qmlcachegen/Qt5QuickCompilerConfig.cmake.in @@ -0,0 +1,87 @@ +include(CMakeParseArguments) + +function(QTQUICK_COMPILER_DETERMINE_OUTPUT_FILENAME outvariable filename) + file(RELATIVE_PATH relpath ${CMAKE_CURRENT_SOURCE_DIR} ${filename}) + string(REPLACE \".qml\" \"_qml\" relpath ${relpath}) + string(REPLACE \".js\" \"_js\" relpath ${relpath}) + string(REPLACE \"/\" \"_\" relpath ${relpath}) + set(${outvariable} ${CMAKE_CURRENT_BINARY_DIR}/${relpath}.cpp PARENT_SCOPE) +endfunction() + +function(QTQUICK_COMPILER_ADD_RESOURCES outfiles) + set(options) + set(oneValueArgs) + set(multiValueArgs OPTIONS) + + cmake_parse_arguments(_RCC \"${options}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN}) + + find_package(Qt5 COMPONENTS Qml Core) + +!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE) + set(compiler_path \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}qmlcachegen$$CMAKE_BIN_SUFFIX\") +!!ELSE + set(compiler_path \"$${CMAKE_BIN_DIR}qmlcachegen$$CMAKE_BIN_SUFFIX\") +!!ENDIF + if(NOT EXISTS \"${compiler_path}\" ) + message(FATAL_ERROR \"The package \\\"Qt5QuickCompilerConfig\\\" references the file + \\\"${compiler_path}\\\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \\\"${CMAKE_CURRENT_LIST_FILE}\\\" +but not all the files it references. +\") + endif() + + get_target_property(rcc_path ${Qt5Core_RCC_EXECUTABLE} IMPORTED_LOCATION) + + set(rcc_files ${_RCC_UNPARSED_ARGUMENTS}) + set(rcc_options ${_RCC_OPTIONS}) + set(filtered_rcc_files) + set(compiler_output) + set(rcc_files_with_compilation_units) + set(loader_flags) + + foreach(_resource ${rcc_files}) + get_filename_component(resource_base ${_resource} NAME_WE) + set(new_resource_file ${CMAKE_CURRENT_BINARY_DIR}/${resource_base}_qmlcache.qrc) + + get_filename_component(input_resource ${_resource} ABSOLUTE) + + execute_process(COMMAND ${compiler_path} -filter-resource-file ${input_resource} -o ${new_resource_file} OUTPUT_VARIABLE remaining_files) + if(remaining_files) + list(APPEND filtered_rcc_files ${new_resource_file}) + list(APPEND loader_flags \"--resource-file-mapping=${_resource}=${new_resource_file}\") + else() + list(APPEND loader_flags \"--resource-file-mapping=${_resource}\") + endif() + + set(rcc_file_with_compilation_units) + + execute_process(COMMAND ${rcc_path} -list \"${input_resource}\" OUTPUT_VARIABLE rcc_contents) + string(REGEX REPLACE \"[\r\n]+\" \";\" rcc_contents ${rcc_contents}) + foreach(it ${rcc_contents}) + get_filename_component(extension ${it} EXT) + if(extension STREQUAL \".qml\" OR extension STREQUAL \".js\" OR extension STREQUAL \".ui.qml\") + qtquick_compiler_determine_output_filename(output_file ${it}) + add_custom_command(OUTPUT ${output_file} COMMAND ${compiler_path} ARGS --resource=${input_resource} ${it} -o ${output_file} DEPENDS ${it}) + list(APPEND compiler_output ${output_file}) + set(rcc_file_with_compilation_units ${input_resource}) + endif() + endforeach() + + if(rcc_file_with_compilation_units) + list(APPEND rcc_files_with_compilation_units ${rcc_file_with_compilation_units}) + endif() + endforeach() + + if(rcc_files_with_compilation_units) + set(loader_source ${CMAKE_CURRENT_BINARY_DIR}/qmlcache_loader.cpp) + add_custom_command(OUTPUT ${loader_source} COMMAND ${compiler_path} ARGS ${loader_flags} ${rcc_files_with_compilation_units} -o ${loader_source} DEPENDS ${rcc_files_with_compilation_units}) + list(APPEND compiler_output ${loader_source}) + endif() + + qt5_add_resources(output_resources ${filtered_rcc_files} OPTIONS ${options}) + set(${outfiles} ${output_resources} ${compiler_output} PARENT_SCOPE) +endfunction() |