fix: Qt ressource system usage

Make use of the `AUTORCC` feature of cmake to simplify adding resource
files to qTox.

Fixes #6144
reviewable/pr6148/r4
sudden6 2020-05-20 10:33:55 +02:00
parent 431fd7bfa2
commit 0335f20362
No known key found for this signature in database
GPG Key ID: 279509B499E032B9
7 changed files with 44 additions and 142 deletions

View File

@ -73,8 +73,20 @@ project(qtox)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Run resource compilation automatically
set(CMAKE_AUTORCC ON)
# Enable maximum compression
set(AUTORCC_OPTIONS -compress 9 -threshold 0)
set(RCC_OPTIONS -compress 9 -threshold 0)
if(NOT Qt5Widgets_VERSION VERSION_LESS "5.9")
# Drop the file modification time of source files from generated files
# to help with reproducible builds. We do not use QFileInfo.lastModified
# so this has no unwanted side effects. This mtime started appearing in
# Qt 5.8. The option to force the old file format without mtime was
# added in Qt 5.9. See https://bugreports.qt.io/browse/QTBUG-58769
set(AUTORCC_OPTIONS ${AUTORCC_OPTIONS} -format-version 1)
endif()
# Use C++11.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
@ -133,14 +145,6 @@ include_directories(${CMAKE_SOURCE_DIR})
include(Dependencies)
if(NOT Qt5Widgets_VERSION VERSION_LESS "5.9")
# Drop the file modification time of source files from generated files
# to help with reproducible builds. We do not use QFileInfo.lastModified
# so this has no unwanted side effects. This mtime started appearing in
# Qt 5.8. The option to force the old file format without mtime was
# added in Qt 5.9. See https://bugreports.qt.io/browse/QTBUG-58769
set(RCC_OPTIONS ${RCC_OPTIONS} -format-version 1)
endif()
################################################################################
#
@ -210,12 +214,9 @@ qt5_add_translation(${PROJECT_NAME}_QM_FILES
translations/zh_TW.ts
)
qt5_add_resources(
${PROJECT_NAME}_RESOURCES
res.qrc
${CMAKE_CURRENT_BINARY_DIR}/translations.qrc
DEPENDS ${${PROJECT_NAME}_QM_FILES}
OPTIONS ${RCC_OPTIONS}
set(${PROJECT_NAME}_RESOURCES
res.qrc
${CMAKE_CURRENT_BINARY_DIR}/translations.qrc
)
if(NOT SMILEYS)
@ -223,16 +224,14 @@ if(NOT SMILEYS)
endif()
if(NOT "${SMILEYS}" STREQUAL "DISABLED")
qt5_add_resources(
${PROJECT_NAME}_RESOURCES
smileys/emojione.qrc
OPTIONS ${RCC_OPTIONS})
set(${PROJECT_NAME}_RESOURCES
${${PROJECT_NAME}_RESOURCES}
smileys/emojione.qrc)
if(NOT "${SMILEYS}" STREQUAL "MIN")
qt5_add_resources(
${PROJECT_NAME}_RESOURCES
smileys/smileys.qrc
OPTIONS ${RCC_OPTIONS})
set(${PROJECT_NAME}_RESOURCES
${${PROJECT_NAME}_RESOURCES}
smileys/smileys.qrc)
endif()
endif()
@ -557,6 +556,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
src/platform/camera/directshow.cpp
src/platform/camera/directshow.h
)
set(${PROJECT_NAME}_RESOURCES ${${PROJECT_NAME}_RESOURCES}
windows/qtox.rc
)
@ -652,8 +652,7 @@ add_library(${PROJECT_NAME}_static
STATIC
${${PROJECT_NAME}_FORMS}
${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_QM_FILES}
${${PROJECT_NAME}_RESOURCES})
${${PROJECT_NAME}_QM_FILES})
target_link_libraries(${PROJECT_NAME}_static
${CMAKE_REQUIRED_LIBRARIES}
${ALL_LIBRARIES})

View File

@ -28,13 +28,7 @@ set(SOURCE_FILES
"src/backend/openal.cpp"
"src/backend/openal.h")
add_library(audio_library STATIC ${SOURCE_FILES})
qt5_add_resources(
audio_library
res.qrc
OPTIONS ${RCC_OPTIONS}
)
add_library(audio_library STATIC ${SOURCE_FILES} resources/audio_res.qrc)
# We need this directory, and users of our library will need it too
target_include_directories(audio_library PUBLIC include/)
@ -42,4 +36,3 @@ target_include_directories(audio_library PUBLIC include/)
target_link_libraries(audio_library util_library)
target_link_libraries(audio_library Qt5::Core)
target_link_libraries(audio_library ${OPENAL_LIBRARIES})

View File

@ -30,5 +30,6 @@
*/
std::unique_ptr<IAudioControl> Audio::makeAudio(IAudioSettings& settings)
{
Q_INIT_RESOURCE(audio_res);
return std::unique_ptr<IAudioControl>(new OpenAL(settings));
}

View File

@ -48,7 +48,6 @@ add_dependency(
Qt5::Xml)
include(CMakeParseArguments)
include(Qt5CorePatches)
function(search_dependency pkg)
set(options OPTIONAL STATIC_PACKAGE)

View File

@ -1,90 +0,0 @@
#=============================================================================
# Copyright 2005-2011 Kitware, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the name of Kitware, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
#########################################################################
#
# Patched versions of macros defined in Qt5CoreMacros.cmake
#
#########################################################################
# qt5_add_resources(outfiles inputfile ... )
function(QT5_ADD_RESOURCES outfiles )
set(options)
set(oneValueArgs)
set(multiValueArgs OPTIONS DEPENDS)
cmake_parse_arguments(_RCC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(rcc_files ${_RCC_UNPARSED_ARGUMENTS})
set(rcc_options ${_RCC_OPTIONS})
foreach(it ${rcc_files})
get_filename_component(outfilename ${it} NAME_WE)
get_filename_component(infile ${it} ABSOLUTE)
get_filename_component(rc_path ${infile} PATH)
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cpp)
set(_RC_DEPENDS)
if(EXISTS "${infile}")
# parse file for dependencies
# all files are absolute paths or relative to the location of the qrc file
file(READ "${infile}" _RC_FILE_CONTENTS)
string(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
foreach(_RC_FILE ${_RC_FILES})
string(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
if(NOT IS_ABSOLUTE "${_RC_FILE}")
set(_RC_FILE "${rc_path}/${_RC_FILE}")
endif()
set(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
endforeach()
# Since this cmake macro is doing the dependency scanning for these files,
# let's make a configured file and add it as a dependency so cmake is run
# again when dependencies need to be recomputed.
qt5_make_output_file("${infile}" "" "qrc.depends" out_depends)
configure_file("${infile}" "${out_depends}")
else()
# The .qrc file does not exist (yet). Let's add a dependency and hope
# that it will be generated later
set(out_depends)
endif()
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Core_RCC_EXECUTABLE}
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile}
DEPENDS ${_RC_DEPENDS} "${out_depends}" ${_RCC_DEPENDS} VERBATIM)
list(APPEND ${outfiles} ${outfile})
endforeach()
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
endfunction()

View File

@ -22,9 +22,9 @@
enable_testing()
function(auto_test subsystem module)
function(auto_test subsystem module extra_deps)
add_executable(test_${module}
test/${subsystem}/${module}_test.cpp)
test/${subsystem}/${module}_test.cpp ${extra_deps})
target_link_libraries(test_${module}
${PROJECT_NAME}_static
${CHECK_LIBRARIES}
@ -34,22 +34,22 @@ function(auto_test subsystem module)
COMMAND ${TEST_CROSSCOMPILING_EMULATOR} test_${module})
endfunction()
auto_test(core core)
auto_test(core contactid)
auto_test(core toxid)
auto_test(core toxstring)
auto_test(chatlog textformatter)
auto_test(net bsu)
auto_test(persistence paths)
auto_test(persistence dbschema)
auto_test(persistence offlinemsgengine)
auto_test(model friendmessagedispatcher)
auto_test(model groupmessagedispatcher)
auto_test(model messageprocessor)
auto_test(model sessionchatlog)
auto_test(model exiftransform)
auto_test(model notificationgenerator)
auto_test(core core ${${PROJECT_NAME}_RESOURCES})
auto_test(core contactid "")
auto_test(core toxid "")
auto_test(core toxstring "")
auto_test(chatlog textformatter "")
auto_test(net bsu ${${PROJECT_NAME}_RESOURCES}) # needs nodes list
auto_test(persistence paths "")
auto_test(persistence dbschema "")
auto_test(persistence offlinemsgengine "")
auto_test(model friendmessagedispatcher "")
auto_test(model groupmessagedispatcher "")
auto_test(model messageprocessor "")
auto_test(model sessionchatlog "")
auto_test(model exiftransform "")
auto_test(model notificationgenerator "")
if (UNIX)
auto_test(platform posixsignalnotifier)
auto_test(platform posixsignalnotifier "")
endif()