diff --git a/CMakeLists.txt b/CMakeLists.txt index 18e692688..551644d0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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}) diff --git a/audio/CMakeLists.txt b/audio/CMakeLists.txt index 5a4b07e76..fcffd92d5 100644 --- a/audio/CMakeLists.txt +++ b/audio/CMakeLists.txt @@ -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}) - diff --git a/audio/resources/res.qrc b/audio/resources/audio_res.qrc similarity index 100% rename from audio/resources/res.qrc rename to audio/resources/audio_res.qrc diff --git a/audio/src/audio.cpp b/audio/src/audio.cpp index 6122382d0..435a63f96 100644 --- a/audio/src/audio.cpp +++ b/audio/src/audio.cpp @@ -30,5 +30,6 @@ */ std::unique_ptr Audio::makeAudio(IAudioSettings& settings) { + Q_INIT_RESOURCE(audio_res); return std::unique_ptr(new OpenAL(settings)); } diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index dcf6e44eb..71e7929a6 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -48,7 +48,6 @@ add_dependency( Qt5::Xml) include(CMakeParseArguments) -include(Qt5CorePatches) function(search_dependency pkg) set(options OPTIONAL STATIC_PACKAGE) diff --git a/cmake/Qt5CorePatches.cmake b/cmake/Qt5CorePatches.cmake deleted file mode 100644 index 5f9d25935..000000000 --- a/cmake/Qt5CorePatches.cmake +++ /dev/null @@ -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 "]*>" "" _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() diff --git a/cmake/Testing.cmake b/cmake/Testing.cmake index 40052b8db..749512fb6 100644 --- a/cmake/Testing.cmake +++ b/cmake/Testing.cmake @@ -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()