Allow including icon themes under another name

This commit is contained in:
Martchus 2016-08-27 15:00:55 +02:00
parent 3ea0e47a53
commit 924c3b9f61
1 changed files with 33 additions and 10 deletions

View File

@ -21,14 +21,14 @@ if(DBUS_FILES)
list(APPEND QT_MODULES DBus)
endif()
# determine Qt linkage
set(QT_LINKAGE "AUTO_LINKAGE")
if(BUILD_STATIC_LIBS AND BUILD_SHARED_LIBS)
message(FATAL_ERROR "When using Qt/KDE modules it is not possible to build shared and static libraries at the same time.")
endif()
# set USE_STATIC_QT_BUILD variable to ON to use static Qt, this only works with patched mingw-w64-qt5-* packages found in my PKGBUILDs repository
# in any other environment you must ensure that the available Qt version is in accordance to the specified STATIC_LINKAGE/STATIC_LIBRARY_LINKAGE options
# set USE_STATIC_QT_BUILD variable to ON to use static Qt
# this only works with patched mingw-w64-qt5-* packages found in my PKGBUILDs repository
# in any other environment you must ensure that the available Qt version is in accordance with the specified STATIC_LINKAGE/STATIC_LIBRARY_LINKAGE options
if(BUILD_STATIC_LIBS OR ("${QT_LINKAGE}" STREQUAL "AUTO_LINKAGE" AND ((STATIC_LINKAGE AND "${META_PROJECT_TYPE}" STREQUAL "application") OR (STATIC_LIBRARY_LINKAGE AND ("${META_PROJECT_TYPE}" STREQUAL "" OR "${META_PROJECT_TYPE}" STREQUAL "library")))) OR ("${QT_LINKAGE}" STREQUAL "STATIC"))
set(USE_STATIC_QT_BUILD ON)
message(STATUS "Linking ${META_PROJECT_NAME} statically against Qt 5.")
@ -49,7 +49,7 @@ foreach(KF_MODULE ${KF_MODULES})
list(APPEND STATIC_LIBRARIES KF5::${KF_MODULE})
endforeach()
# include further plugins statically
# include plugins statically
if(USE_STATIC_QT_BUILD)
if(WIDGETS_GUI OR QUICK_GUI)
if(WIN32)
@ -152,6 +152,7 @@ if(REQUIRED_ICONS)
set(ICON_THEME_FILES)
set(ICON_SEARCH_PATHS)
if(CMAKE_FIND_ROOT_PATH)
# find icons from the regular prefix when cross-compiling
list(APPEND ICON_SEARCH_PATHS "${CMAKE_FIND_ROOT_PATH}/share/icons")
endif()
list(APPEND ICON_SEARCH_PATHS "${CMAKE_INSTALL_PREFIX}/share/icons")
@ -161,15 +162,27 @@ if(REQUIRED_ICONS)
file(REMOVE_RECURSE "${BUILDIN_ICONS_DIR}")
file(MAKE_DIRECTORY "${BUILDIN_ICONS_DIR}")
foreach(ICON_THEME ${BUILTIN_ICON_THEMES})
string(REGEX MATCHALL "([^:]+|[^:]+$)" ICON_THEME_PARTS "${ICON_THEME}")
list(LENGTH ICON_THEME_PARTS ICON_THEME_PARTS_LENGTH)
if("${ICON_THEME_PARTS_LENGTH}" STREQUAL 2)
list(GET ICON_THEME_PARTS 0 ICON_THEME)
list(GET ICON_THEME_PARTS 1 NEW_ICON_THEME_NAME)
else()
set(NEW_ICON_THEME_NAME "${ICON_THEME}")
endif()
foreach(ICON_SEARCH_PATH ${ICON_SEARCH_PATHS})
set(ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
set(NEW_ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
if(IS_DIRECTORY "${ICON_THEME_PATH}")
# find index files
file(GLOB GLOBBED_ICON_THEME_INDEX_FILES LIST_DIRECTORIES false "${ICON_THEME_PATH}/index.theme" "${ICON_THEME_PATH}/icon-theme.cache")
# make the first specified built-in the default theme
if(NOT EXISTS "${DEFAULT_THEME_INDEX_FILE}")
file(MAKE_DIRECTORY "${BUILDIN_ICONS_DIR}/default")
file(WRITE "${DEFAULT_THEME_INDEX_FILE}" "[Icon Theme]\nInherits=${ICON_THEME}")
file(WRITE "${DEFAULT_THEME_INDEX_FILE}" "[Icon Theme]\nInherits=${NEW_ICON_THEME_NAME}")
list(APPEND ICON_THEME_FILES "<file>default/index.theme</file>")
endif()
# find required icons
set(GLOB_PATTERNS)
foreach(REQUIRED_ICON ${REQUIRED_ICONS})
list(APPEND GLOB_PATTERNS
@ -180,23 +193,33 @@ if(REQUIRED_ICONS)
)
endforeach()
file(GLOB_RECURSE GLOBBED_ICON_THEME_FILES LIST_DIRECTORIES false ${GLOB_PATTERNS})
# make temporary copy of required icons and create resource list for Qt
foreach(ICON_THEME_FILE ${GLOBBED_ICON_THEME_INDEX_FILES} ${GLOBBED_ICON_THEME_FILES})
#message(STATUS "relpath: ${ICON_THEME_FILE_RELATIVE_PATH}, new relpath: ${NEW_ICON_THEME_FILE_RELATIVE_PATH}")
# resolve symlinks (use
if(IS_SYMLINK "${ICON_THEME_FILE}")
string(REGEX REPLACE "^${ICON_SEARCH_PATH}/" "" ICON_THEME_FILE_RELATIVE_PATH "${ICON_THEME_FILE}")
set(ICON_THEME_FILE_ALIAS " alias=\"${ICON_THEME_FILE_RELATIVE_PATH}\"")
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_RELATIVE_PATH "${ICON_THEME_FILE_RELATIVE_PATH}")
set(ICON_THEME_FILE_ALIAS " alias=\"${NEW_ICON_THEME_FILE_RELATIVE_PATH}\"")
get_filename_component(ICON_THEME_FILE "${ICON_THEME_FILE}" REALPATH)
else()
unset(ICON_THEME_FILE_ALIAS)
endif()
string(REGEX REPLACE "^${ICON_SEARCH_PATH}/" "" ICON_THEME_FILE_RELATIVE_PATH "${ICON_THEME_FILE}")
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_RELATIVE_PATH "${ICON_THEME_FILE_RELATIVE_PATH}")
get_filename_component(ICON_THEME_FILE_DIR "${ICON_THEME_FILE_RELATIVE_PATH}" DIRECTORY)
file(MAKE_DIRECTORY "${BUILDIN_ICONS_DIR}/${ICON_THEME_FILE_DIR}")
file(COPY "${ICON_THEME_FILE}" DESTINATION "${BUILDIN_ICONS_DIR}/${ICON_THEME_FILE_DIR}")
list(APPEND ICON_THEME_FILES "<file${ICON_THEME_FILE_ALIAS}>${ICON_THEME_FILE_RELATIVE_PATH}</file>")
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_DIR "${ICON_THEME_FILE_DIR}")
file(MAKE_DIRECTORY "${BUILDIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
file(COPY "${ICON_THEME_FILE}" DESTINATION "${BUILDIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
list(APPEND ICON_THEME_FILES "<file${ICON_THEME_FILE_ALIAS}>${NEW_ICON_THEME_FILE_RELATIVE_PATH}</file>")
endforeach()
break()
endif()
unset(ICON_THEME_PATH)
endforeach()
if(NOT ICON_THEME_PATH)
message(FATAL_ERROR "The specified icon theme \"${ICON_THEME}\" coud not be found.")
endif()
endforeach()
set(BUILTIN_ICON_THEMES_QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/icons/builtinicons.qrc")
list(REMOVE_DUPLICATES ICON_THEME_FILES)