function(__add_file_to_qrc_file) set(options "") set(oneValueArgs QRC_PATH FILE_PATH ALIAS) set(multiValueArgs) cmake_parse_arguments(__ADD_FILE_TO_QRC_FILE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) foreach(param QRC_PATH FILE_PATH) if(NOT __ADD_FILE_TO_QRC_FILE_${param}) message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION}: Argument missing: ${param}") endif() endforeach() set(line "${__ADD_FILE_TO_QRC_FILE_FILE_PATH}") file(APPEND ${__ADD_FILE_TO_QRC_FILE_QRC_PATH} " ${line}\n") endfunction() function(__addIcon QRC_PATH THEME ICON_NAME) set(options) set(oneValueArgs SRC_PATH) set(multiValueArgs) cmake_parse_arguments(_ICON "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT _ICON_SRC_PATH) set(_ICON_SRC_PATH ${THEME}) endif() set(icon "theme/${_ICON_SRC_PATH}/${ICON_NAME}.svg") set(iconAlias "${APPLICATION_SHORTNAME}/theme/${THEME}/${ICON_NAME}.svg") if (EXISTS ${OEM_THEME_DIR}/${icon}) file(APPEND "${QRC_PATH}" "${OEM_THEME_DIR}/${icon}\n") else() set(icon "theme/${_ICON_SRC_PATH}/${ICON_NAME}.png") set(iconAlias "${APPLICATION_SHORTNAME}/theme/${THEME}/${ICON_NAME}.png") if (EXISTS ${OEM_THEME_DIR}/${icon}) __add_file_to_qrc_file( QRC_PATH ${QRC_PATH} FILE_PATH ${OEM_THEME_DIR}/${icon} ALIAS ${iconAlias} ) else() set(SIZES "16;22;32;48;64;128;256;512;1024") foreach(size ${SIZES}) set(icon "theme/${_ICON_SRC_PATH}/${ICON_NAME}-${size}.png") set(iconAlias "${APPLICATION_SHORTNAME}/theme/${THEME}/${ICON_NAME}-${size}.png") if (EXISTS ${OEM_THEME_DIR}/${icon}) __add_file_to_qrc_file( QRC_PATH ${QRC_PATH} FILE_PATH ${OEM_THEME_DIR}/${icon} ALIAS ${iconAlias} ) endif() endforeach() endif() endif() endfunction() function(__write_qrc_file_header QRC_PATH FILES_PREFIX) file(WRITE ${QRC_PATH} "\n") file(APPEND ${QRC_PATH} " \n") endfunction() function(__write_qrc_file_footer QRC_PATH) file(APPEND ${QRC_PATH} " \n") file(APPEND ${QRC_PATH} "\n") endfunction() function(generate_theme TARGET OWNCLOUD_SIDEBAR_ICONS_OUT) if(NOT "${OEM_THEME_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") set(QRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/theme.qrc) __write_qrc_file_header(${QRC_PATH} theme) __addIcon(${QRC_PATH} "universal" "${APPLICATION_ICON_NAME}-icon" SRC_PATH "colored") __addIcon(${QRC_PATH} "universal" "wizard_logo" SRC_PATH "colored") set(STATES "ok;error;information;offline;pause;sync") set(THEMES "colored;dark;black;white") foreach(theme ${THEMES}) foreach(state ${STATES}) __addIcon(${QRC_PATH} ${theme} "state-${state}") endforeach() endforeach() __write_qrc_file_footer(${QRC_PATH}) target_sources(${TARGET} PRIVATE ${QRC_PATH}) # add executable icon on windows and osx file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${OEM_THEME_DIR}/theme/colored/*-${APPLICATION_ICON_NAME}-sidebar.png") else() file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${OEM_THEME_DIR}/theme/colored/*-${APPLICATION_ICON_NAME}-icon-sidebar.png") endif() if (NOT OWNCLOUD_SIDEBAR_ICONS) message(WARNING "The branding does not provide sidebar icons falling back to vanilla icons") file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${PROJECT_SOURCE_DIR}/theme/colored/*-owncloud-icon-sidebar.png") endif() set(${OWNCLOUD_SIDEBAR_ICONS_OUT} ${OWNCLOUD_SIDEBAR_ICONS} PARENT_SCOPE) endfunction() function(generate_legacy_icons theme_dir OUT) # allow legacy file names file(GLOB_RECURSE OWNCLOUD_ICONS_OLD "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon-*.png") foreach(icon ${OWNCLOUD_ICONS_OLD}) get_filename_component(icon_name ${icon} NAME) string(REGEX MATCH "([0-9]+)" size ${icon_name}) set(out_name "${CMAKE_BINARY_DIR}/${size}-app-icon.png") configure_file(${icon} ${out_name} COPYONLY) list(APPEND OWNCLOUD_ICONS ${out_name}) endforeach() set(${OUT} ${OWNCLOUD_ICONS} PARENT_SCOPE) endfunction() function(generate_qrc_file) set(options "") set(oneValueArgs QRC_PATH PREFIX) set(multiValueArgs FILES) cmake_parse_arguments(GENERATE_QRC_FILE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) foreach(param ${oneValueArgs} ${multiValueArgs}) if(NOT GENERATE_QRC_FILE_${param}) message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION}: Argument missing: ${param}") endif() endforeach() __write_qrc_file_header(${GENERATE_QRC_FILE_QRC_PATH} ${GENERATE_QRC_FILE_PREFIX}) foreach(file ${GENERATE_QRC_FILE_FILES}) get_filename_component(file_name ${file} NAME) set(file_alias ${GENERATE_QRC_FILE_PREFIX}/${file_name}) __add_file_to_qrc_file( QRC_PATH ${GENERATE_QRC_FILE_QRC_PATH} FILE_PATH ${file} ALIAS ${file_alias} ) endforeach() __write_qrc_file_footer(${GENERATE_QRC_FILE_QRC_PATH}) endfunction() # add resources to a target using the Qt resources system # parameters: # - TARGET: the target to bundle the resources with # - PREFIX: virtual "subdirectory" the files will be available from # - FILES: the files to bundle function(add_resources_to_target) set(options "") set(oneValueArgs TARGET PREFIX) set(multiValueArgs FILES) cmake_parse_arguments(ADD_RESOURCES_TO_TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) foreach(param ${oneValueArgs} ${multiValueArgs}) if(NOT ADD_RESOURCES_TO_TARGET_${param}) message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION}: Argument missing: ${param}") endif() endforeach() set(qrc_path ${CMAKE_CURRENT_BINARY_DIR}/${ADD_RESOURCES_TO_TARGET_TARGET}-${ADD_RESOURCES_TO_TARGET_PREFIX}.qrc) generate_qrc_file( QRC_PATH ${qrc_path} PREFIX ${ADD_RESOURCES_TO_TARGET_PREFIX} FILES "${ADD_RESOURCES_TO_TARGET_FILES}" ) target_sources(${ADD_RESOURCES_TO_TARGET_TARGET} PRIVATE ${qrc_path}) endfunction()