Use Qt's Resource System (2nd approach) (#1891)

* Remove bin2res, use Qt's resource system
* Use QDir search paths and QImageReader in getIconPixmap
* Don't include "embed.cpp" in plugins
* getIconPixmap: Use QPixmapCache, use QPixmap::fromImageReader
* Require CMake 2.8.9

* Fix ReverbSC embed usage
This commit is contained in:
Lukas W
2017-03-26 22:06:43 +02:00
committed by GitHub
parent abc73c06ee
commit 9f905bce3e
88 changed files with 243 additions and 419 deletions

View File

@@ -3,6 +3,8 @@
# description: build LMMS-plugin
# usage: BUILD_PLUGIN(<PLUGIN_NAME> <PLUGIN_SOURCES> MOCFILES <HEADERS_FOR_MOC> EMBEDDED_RESOURCES <LIST_OF_FILES_TO_EMBED> UICFILES <UI_FILES_TO_COMPILE> LINK <SHARED|MODULE>)
INCLUDE(GenQrc)
MACRO(BUILD_PLUGIN PLUGIN_NAME)
CMAKE_PARSE_ARGUMENTS(PLUGIN "" "" "MOCFILES;EMBEDDED_RESOURCES;UICFILES;LINK" ${ARGN})
SET(PLUGIN_SOURCES ${PLUGIN_UNPARSED_ARGUMENTS})
@@ -25,11 +27,7 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ENDFOREACH()
SET(PLUGIN_EMBEDDED_RESOURCES ${NEW_ARGS})
SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h)
ADD_CUSTOM_COMMAND(OUTPUT ${ER_H}
COMMAND ${BIN2RES}
ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H}
DEPENDS bin2res)
ADD_GEN_QRC(RCC_OUT "${PLUGIN_NAME}.qrc" PREFIX artwork/${PLUGIN_NAME} ${PLUGIN_EMBEDDED_RESOURCES})
ENDIF(ER_LEN)
IF(QT5)
@@ -41,7 +39,7 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ENDIF()
FOREACH(f ${PLUGIN_SOURCES})
ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_UIC_out})
ADD_FILE_DEPENDENCIES(${f} ${RCC_OUT} ${plugin_UIC_out})
ENDFOREACH(f)
IF(LMMS_BUILD_APPLE)
@@ -58,11 +56,11 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ENDIF()
IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES} ${plugin_MOC_out})
ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES} ${plugin_MOC_out} ${RCC_OUT})
ELSE ()
ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out})
ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out} ${RCC_OUT})
ENDIF ()
IF(QT5)
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml)
ENDIF()
@@ -81,6 +79,6 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} $<TARGET_FILE:${PLUGIN_NAME}>)
ENDIF(LMMS_BUILD_WIN32)
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}")
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${RCC_OUT} ${plugin_MOC_out}")
ENDMACRO(BUILD_PLUGIN)

View File

@@ -0,0 +1,57 @@
# GenQrc.cmake - Copyright (c) 2015 Lukas W <lukaswhl/at/gmail.com>
# Generates a simple qrc file containing the given resource files ${ARGN}:
# GEN_QRC(resources.qrc artwork.png icon.png PREFIX /icons)
# Files may also be added using a pattern with the GLOB keyword, e.g.:
# GEN_QRC(resources.qrc GLOB *.png)
FUNCTION(GEN_QRC OUT_FILE)
CMAKE_PARSE_ARGUMENTS(RC "" "PREFIX;GLOB" "" ${ARGN})
IF(DEFINED RC_GLOB)
FILE(GLOB GLOB_FILES ${RC_GLOB})
ENDIF()
# Set the standard prefix to "/" if none is given
IF(NOT DEFINED RC_PREFIX)
SET(RC_PREFIX "/")
ENDIF()
# We need to convert our list to a string in order to pass it to the script
# on the command line.
STRING(REPLACE ";" "\;" FILES "${RC_UNPARSED_ARGUMENTS};${GLOB_FILES}")
SET(GENQRC_SCRIPT "${CMAKE_SOURCE_DIR}/cmake/scripts/GenQrc.cmake")
ADD_CUSTOM_COMMAND(
OUTPUT ${OUT_FILE}
COMMAND ${CMAKE_COMMAND} -D OUT_FILE=${OUT_FILE} -D RC_PREFIX=${RC_PREFIX} -D FILES:list=${FILES} -D DIR=${CMAKE_CURRENT_SOURCE_DIR} -P "${GENQRC_SCRIPT}"
DEPENDS ${GENQRC_SCRIPT}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
)
ENDFUNCTION()
# Generates a qrc file named ${QRC_OUT} from ${ARGN}, rccs it and returns Qt's
# output file.
# Must only be run once per CMakeLists.txt.
# Usage example:
# ADD_GEN_QRC(RCC_OUTPUT resources.qrc icon.png manual.pdf)
# ADD_EXECUTABLE(myexe main.cpp ${RCC_OUTPUT})
MACRO(ADD_GEN_QRC RCCOUT QRC_OUT)
IF(NOT IS_ABSOLUTE ${QRC_OUT})
SET(QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${QRC_OUT}")
ELSE()
SET(QRC_FILE ${QRC_OUT})
ENDIF()
GEN_QRC(${QRC_FILE} "${ARGN}")
QT_ADD_RESOURCES(${RCCOUT} ${QRC_FILE})
ENDMACRO()
MACRO(QT_ADD_RESOURCES)
IF(QT5)
QT5_ADD_RESOURCES(${ARGN})
ELSE()
QT4_ADD_RESOURCES(${ARGN})
ENDIF()
ENDMACRO()

View File

@@ -0,0 +1,26 @@
# GenQrcScript.cmake - Copyright (c) 2015 Lukas W <lukaswhl/at/gmail.com>
INCLUDE(CMakeParseArguments)
FILE(REMOVE ${OUT_FILE})
MACRO(OUT STRING)
FILE(APPEND ${OUT_FILE} "${STRING}\n")
ENDMACRO()
IF(NOT DEFINED RC_PREFIX)
SET(RC_PREFIX "/")
ENDIF()
# Write qrc file
OUT("<RCC>")
OUT(" <qresource prefix=\"${RC_PREFIX}\">")
FOREACH(VAR ${FILES})
GET_FILENAME_COMPONENT(FILENAME ${VAR} NAME)
IF(IS_ABSOLUTE ${VAR})
OUT(" <file alias=\"${FILENAME}\">${VAR}</file>")
ELSE()
OUT(" <file alias=\"${FILENAME}\">${DIR}/${VAR}</file>")
ENDIF()
ENDFOREACH()
OUT(" </qresource>")
OUT("</RCC>")