Compare commits
1 Commits
master
...
avoid-buil
Author | SHA1 | Date |
---|---|---|
Martchus | 8d9b6d845d |
|
@ -504,114 +504,126 @@ if (REQUIRED_ICONS)
|
||||||
CACHE STRING "specifies icon themes to be built-in")
|
CACHE STRING "specifies icon themes to be built-in")
|
||||||
option(BUILTIN_ICON_THEMES_IN_LIBRARIES "specifies whether icon themes should also be built-in when building libraries"
|
option(BUILTIN_ICON_THEMES_IN_LIBRARIES "specifies whether icon themes should also be built-in when building libraries"
|
||||||
OFF)
|
OFF)
|
||||||
|
option(BUILTIN_ICON_THEMES_CONFIGURED "whether built-in icons have been configured" NO)
|
||||||
if (BUILTIN_ICON_THEMES AND (BUILTIN_ICON_THEMES_IN_LIBRARIES OR (NOT "${META_PROJECT_TYPE}" STREQUAL "library")))
|
if (BUILTIN_ICON_THEMES AND (BUILTIN_ICON_THEMES_IN_LIBRARIES OR (NOT "${META_PROJECT_TYPE}" STREQUAL "library")))
|
||||||
set(ICON_THEME_FILES)
|
set(BUILTIN_ICON_THEMES_QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/icons/${META_PROJECT_NAME}_builtinicons.qrc")
|
||||||
set(ICON_SEARCH_PATHS)
|
if (BUILTIN_ICON_THEMES_CONFIGURED AND EXISTS BUILTIN_ICON_THEMES_QRC_FILE)
|
||||||
if (CMAKE_FIND_ROOT_PATH)
|
message(
|
||||||
foreach (ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
|
STATUS
|
||||||
list(APPEND ICON_SEARCH_PATHS "${ROOT_PATH}/${CMAKE_INSTALL_DATAROOTDIR}/icons")
|
"Skipping configuration of built-in icons as they have already been configured before. Run CMake with -DBUILTIN_ICON_THEMES_CONFIGURED=OFF to re-conduct the configuration."
|
||||||
endforeach ()
|
)
|
||||||
endif ()
|
else ()
|
||||||
list(APPEND ICON_SEARCH_PATHS "${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons")
|
set(ICON_THEME_FILES)
|
||||||
list(APPEND ICON_SEARCH_PATHS "/usr/${CMAKE_INSTALL_DATAROOTDIR}/icons") # find icons from regular prefix when cross-
|
set(ICON_SEARCH_PATHS)
|
||||||
# compiling
|
if (CMAKE_FIND_ROOT_PATH)
|
||||||
list(REMOVE_DUPLICATES ICON_SEARCH_PATHS)
|
foreach (ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
|
||||||
set(BUILTIN_ICONS_DIR "${CMAKE_CURRENT_BINARY_DIR}/icons")
|
list(APPEND ICON_SEARCH_PATHS "${ROOT_PATH}/${CMAKE_INSTALL_DATAROOTDIR}/icons")
|
||||||
set(DEFAULT_THEME_INDEX_FILE "${BUILTIN_ICONS_DIR}/default/index.theme")
|
endforeach ()
|
||||||
file(REMOVE_RECURSE "${BUILTIN_ICONS_DIR}")
|
|
||||||
file(MAKE_DIRECTORY "${BUILTIN_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 ()
|
endif ()
|
||||||
foreach (ICON_SEARCH_PATH ${ICON_SEARCH_PATHS})
|
list(APPEND ICON_SEARCH_PATHS "${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons")
|
||||||
set(ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
|
list(APPEND ICON_SEARCH_PATHS "/usr/${CMAKE_INSTALL_DATAROOTDIR}/icons") # find icons from regular prefix when
|
||||||
set(NEW_ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
|
# cross- compiling
|
||||||
if (IS_DIRECTORY "${ICON_THEME_PATH}")
|
list(REMOVE_DUPLICATES ICON_SEARCH_PATHS)
|
||||||
message(
|
set(BUILTIN_ICONS_DIR "${CMAKE_CURRENT_BINARY_DIR}/icons")
|
||||||
STATUS
|
set(DEFAULT_THEME_INDEX_FILE "${BUILTIN_ICONS_DIR}/default/index.theme")
|
||||||
"The specified icon theme \"${ICON_THEME}\" has been located under \"${ICON_THEME_PATH}\" and will be built-in."
|
file(REMOVE_RECURSE "${BUILTIN_ICONS_DIR}")
|
||||||
)
|
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}")
|
||||||
# find index files
|
foreach (ICON_THEME ${BUILTIN_ICON_THEMES})
|
||||||
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
|
string(REGEX MATCHALL "([^:]+|[^:]+$)" ICON_THEME_PARTS "${ICON_THEME}")
|
||||||
file(
|
list(LENGTH ICON_THEME_PARTS ICON_THEME_PARTS_LENGTH)
|
||||||
GLOB GLOBBED_ICON_THEME_INDEX_FILES
|
if ("${ICON_THEME_PARTS_LENGTH}" STREQUAL 2)
|
||||||
LIST_DIRECTORIES false
|
list(GET ICON_THEME_PARTS 0 ICON_THEME)
|
||||||
"${ICON_THEME_PATH}/index.theme" "${ICON_THEME_PATH}/icon-theme.cache")
|
list(GET ICON_THEME_PARTS 1 NEW_ICON_THEME_NAME)
|
||||||
else ()
|
else ()
|
||||||
# only index.theme required when icons are provided as fallback anyways
|
set(NEW_ICON_THEME_NAME "${ICON_THEME}")
|
||||||
file(
|
endif ()
|
||||||
GLOB GLOBBED_ICON_THEME_INDEX_FILES
|
foreach (ICON_SEARCH_PATH ${ICON_SEARCH_PATHS})
|
||||||
LIST_DIRECTORIES false
|
set(ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
|
||||||
"${ICON_THEME_PATH}/index.theme")
|
set(NEW_ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
|
||||||
endif ()
|
if (IS_DIRECTORY "${ICON_THEME_PATH}")
|
||||||
# make the first specified built-in the default theme
|
|
||||||
if (NOT EXISTS "${DEFAULT_THEME_INDEX_FILE}")
|
|
||||||
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/default")
|
|
||||||
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, except the icon theme is provided as fallback anyways
|
|
||||||
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
|
|
||||||
set(GLOB_PATTERNS)
|
|
||||||
foreach (REQUIRED_ICON ${REQUIRED_ICONS})
|
|
||||||
list(APPEND GLOB_PATTERNS "${ICON_THEME_PATH}/${REQUIRED_ICON}"
|
|
||||||
"${ICON_THEME_PATH}/${REQUIRED_ICON}.*" "${ICON_THEME_PATH}/*/${REQUIRED_ICON}"
|
|
||||||
"${ICON_THEME_PATH}/*/${REQUIRED_ICON}.*")
|
|
||||||
endforeach ()
|
|
||||||
file(
|
|
||||||
GLOB_RECURSE GLOBBED_ICON_THEME_FILES
|
|
||||||
LIST_DIRECTORIES false
|
|
||||||
${GLOB_PATTERNS})
|
|
||||||
else ()
|
|
||||||
message(
|
message(
|
||||||
STATUS
|
STATUS
|
||||||
"Icon files for specified theme \"${ICON_THEME}\" are skipped because these are provided as fallback anyways."
|
"The specified icon theme \"${ICON_THEME}\" has been located under \"${ICON_THEME_PATH}\" and will be built-in."
|
||||||
)
|
)
|
||||||
set(GLOBBED_ICON_THEME_FILES)
|
# find index files
|
||||||
endif ()
|
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
|
||||||
# make temporary copy of required icons and create resource list for Qt
|
file(
|
||||||
foreach (ICON_THEME_FILE ${GLOBBED_ICON_THEME_INDEX_FILES} ${GLOBBED_ICON_THEME_FILES})
|
GLOB GLOBBED_ICON_THEME_INDEX_FILES
|
||||||
# resolve symlinks
|
LIST_DIRECTORIES false
|
||||||
if (IS_SYMLINK "${ICON_THEME_FILE}")
|
"${ICON_THEME_PATH}/index.theme" "${ICON_THEME_PATH}/icon-theme.cache")
|
||||||
|
else ()
|
||||||
|
# only index.theme required when icons are provided as fallback anyways
|
||||||
|
file(
|
||||||
|
GLOB GLOBBED_ICON_THEME_INDEX_FILES
|
||||||
|
LIST_DIRECTORIES false
|
||||||
|
"${ICON_THEME_PATH}/index.theme")
|
||||||
|
endif ()
|
||||||
|
# make the first specified built-in the default theme
|
||||||
|
if (NOT EXISTS "${DEFAULT_THEME_INDEX_FILE}")
|
||||||
|
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/default")
|
||||||
|
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, except the icon theme is provided as fallback anyways
|
||||||
|
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
|
||||||
|
set(GLOB_PATTERNS)
|
||||||
|
foreach (REQUIRED_ICON ${REQUIRED_ICONS})
|
||||||
|
list(APPEND GLOB_PATTERNS "${ICON_THEME_PATH}/${REQUIRED_ICON}"
|
||||||
|
"${ICON_THEME_PATH}/${REQUIRED_ICON}.*" "${ICON_THEME_PATH}/*/${REQUIRED_ICON}"
|
||||||
|
"${ICON_THEME_PATH}/*/${REQUIRED_ICON}.*")
|
||||||
|
endforeach ()
|
||||||
|
file(
|
||||||
|
GLOB_RECURSE GLOBBED_ICON_THEME_FILES
|
||||||
|
LIST_DIRECTORIES false
|
||||||
|
${GLOB_PATTERNS})
|
||||||
|
else ()
|
||||||
|
message(
|
||||||
|
STATUS
|
||||||
|
"Icon files for specified theme \"${ICON_THEME}\" are skipped because these are provided as fallback anyways."
|
||||||
|
)
|
||||||
|
set(GLOBBED_ICON_THEME_FILES)
|
||||||
|
endif ()
|
||||||
|
# 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})
|
||||||
|
# resolve symlinks
|
||||||
|
if (IS_SYMLINK "${ICON_THEME_FILE}")
|
||||||
|
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}")
|
||||||
|
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
|
string(REGEX REPLACE "^${ICON_SEARCH_PATH}/" "" ICON_THEME_FILE_RELATIVE_PATH
|
||||||
"${ICON_THEME_FILE}")
|
"${ICON_THEME_FILE}")
|
||||||
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_RELATIVE_PATH
|
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_RELATIVE_PATH
|
||||||
"${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_DIR "${ICON_THEME_FILE_RELATIVE_PATH}" DIRECTORY)
|
||||||
get_filename_component(ICON_THEME_FILE "${ICON_THEME_FILE}" REALPATH)
|
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_DIR
|
||||||
else ()
|
"${ICON_THEME_FILE_DIR}")
|
||||||
unset(ICON_THEME_FILE_ALIAS)
|
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
|
||||||
endif ()
|
file(COPY "${ICON_THEME_FILE}" DESTINATION "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
|
||||||
string(REGEX REPLACE "^${ICON_SEARCH_PATH}/" "" ICON_THEME_FILE_RELATIVE_PATH "${ICON_THEME_FILE}")
|
list(APPEND ICON_THEME_FILES
|
||||||
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_RELATIVE_PATH
|
"<file${ICON_THEME_FILE_ALIAS}>${NEW_ICON_THEME_FILE_RELATIVE_PATH}</file>")
|
||||||
"${ICON_THEME_FILE_RELATIVE_PATH}")
|
endforeach ()
|
||||||
get_filename_component(ICON_THEME_FILE_DIR "${ICON_THEME_FILE_RELATIVE_PATH}" DIRECTORY)
|
break()
|
||||||
string(REGEX REPLACE "(^[^/\\]+)" "${NEW_ICON_THEME_NAME}" NEW_ICON_THEME_FILE_DIR
|
endif ()
|
||||||
"${ICON_THEME_FILE_DIR}")
|
unset(ICON_THEME_PATH)
|
||||||
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
|
endforeach ()
|
||||||
file(COPY "${ICON_THEME_FILE}" DESTINATION "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
|
if (NOT ICON_THEME_PATH)
|
||||||
list(APPEND ICON_THEME_FILES
|
message(FATAL_ERROR "The specified icon theme \"${ICON_THEME}\" could not be found.")
|
||||||
"<file${ICON_THEME_FILE_ALIAS}>${NEW_ICON_THEME_FILE_RELATIVE_PATH}</file>")
|
|
||||||
endforeach ()
|
|
||||||
break()
|
|
||||||
endif ()
|
endif ()
|
||||||
unset(ICON_THEME_PATH)
|
|
||||||
endforeach ()
|
endforeach ()
|
||||||
if (NOT ICON_THEME_PATH)
|
list(REMOVE_DUPLICATES ICON_THEME_FILES)
|
||||||
message(FATAL_ERROR "The specified icon theme \"${ICON_THEME}\" could not be found.")
|
string(CONCAT BUILTIN_ICON_THEMES_QRC_FILE_CONTENT "<RCC><qresource prefix=\"/icons\">" ${ICON_THEME_FILES}
|
||||||
endif ()
|
"</qresource></RCC>")
|
||||||
endforeach ()
|
file(WRITE "${BUILTIN_ICON_THEMES_QRC_FILE}" "${BUILTIN_ICON_THEMES_QRC_FILE_CONTENT}")
|
||||||
set(BUILTIN_ICON_THEMES_QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/icons/${META_PROJECT_NAME}_builtinicons.qrc")
|
set(BUILTIN_ICON_THEMES_CONFIGURED
|
||||||
list(REMOVE_DUPLICATES ICON_THEME_FILES)
|
YES
|
||||||
string(CONCAT BUILTIN_ICON_THEMES_QRC_FILE_CONTENT "<RCC><qresource prefix=\"/icons\">" ${ICON_THEME_FILES}
|
CACHE BOOLEAN "whether built-in icons have been configured" FORCE)
|
||||||
"</qresource></RCC>")
|
endif ()
|
||||||
file(WRITE "${BUILTIN_ICON_THEMES_QRC_FILE}" "${BUILTIN_ICON_THEMES_QRC_FILE_CONTENT}")
|
|
||||||
list(APPEND RES_FILES "${BUILTIN_ICON_THEMES_QRC_FILE}")
|
list(APPEND RES_FILES "${BUILTIN_ICON_THEMES_QRC_FILE}")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
Loading…
Reference in New Issue