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:
@@ -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)
|
||||
|
||||
|
||||
57
cmake/modules/GenQrc.cmake
Normal file
57
cmake/modules/GenQrc.cmake
Normal 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()
|
||||
26
cmake/scripts/GenQrc.cmake
Normal file
26
cmake/scripts/GenQrc.cmake
Normal 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>")
|
||||
Reference in New Issue
Block a user