diff options
| author | David Edmundson <kde@davidedmundson.co.uk> | 2013-10-28 19:21:19 +0100 | 
|---|---|---|
| committer | David Edmundson <kde@davidedmundson.co.uk> | 2013-10-29 09:28:50 +0100 | 
| commit | 4be8dbfedb9d8865730cd72c68409d8342296e47 (patch) | |
| tree | e4bf71e3a95280b5a247ea59c874bd07c36df31a /modules/ECMInstallIcons.cmake | |
| parent | a668c69ca934d9e8e8d3558dafe564737324fcb1 (diff) | |
| download | extra-cmake-modules-4be8dbfedb9d8865730cd72c68409d8342296e47.tar.gz extra-cmake-modules-4be8dbfedb9d8865730cd72c68409d8342296e47.tar.bz2 | |
Copy KDE4 macro to install all icons in the current source dir
REVIEW: 113483
Diffstat (limited to 'modules/ECMInstallIcons.cmake')
| -rw-r--r-- | modules/ECMInstallIcons.cmake | 121 | 
1 files changed, 121 insertions, 0 deletions
| diff --git a/modules/ECMInstallIcons.cmake b/modules/ECMInstallIcons.cmake new file mode 100644 index 00000000..11148050 --- /dev/null +++ b/modules/ECMInstallIcons.cmake @@ -0,0 +1,121 @@ +# - Function for installing icons +# This module provides the function ECM_INSTALL_ICONS(). + +# ECM_INSTALL_ICONS installs all icons in the current path +# into the diectory provided. + +# a "map" of short type names to the directories +# unknown names should give empty results +# xdg icon naming specification compatibility +set(_ECM_ICON_GROUP_mimetypes  "mimetypes") +set(_ECM_ICON_GROUP_places     "places") +set(_ECM_ICON_GROUP_devices    "devices") +set(_ECM_ICON_GROUP_apps       "apps") +set(_ECM_ICON_GROUP_actions    "actions") +set(_ECM_ICON_GROUP_categories "categories") +set(_ECM_ICON_GROUP_status     "status") +set(_ECM_ICON_GROUP_emblems    "emblems") +set(_ECM_ICON_GROUP_emotes     "emotes") +set(_ECM_ICON_GROUP_animations "animations") +set(_ECM_ICON_GROUP_intl       "intl") + +# a "map" of short theme names to the theme directory +set(_ECM_ICON_THEME_ox "oxygen") +set(_ECM_ICON_THEME_cr "crystalsvg") +set(_ECM_ICON_THEME_lo "locolor") +set(_ECM_ICON_THEME_hi "hicolor") + +macro (ECM_INSTALL_ICONS _defaultpath ) + +   # the l10n-subdir if language given as second argument (localized icon) +   set(_lang ${ARGV1}) +   if(_lang) +      set(_l10n_SUBDIR l10n/${_lang}) +   else(_lang) +      set(_l10n_SUBDIR ".") +   endif(_lang) + +   # first the png icons +   file(GLOB _icons *.png) +   foreach (_current_ICON ${_icons} ) +      # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty +      string(REGEX MATCH "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" _dummy  "${_current_ICON}") +      set(_type  "${CMAKE_MATCH_1}") +      set(_size  "${CMAKE_MATCH_2}") +      set(_group "${CMAKE_MATCH_3}") +      set(_name  "${CMAKE_MATCH_4}") + +      set(_theme_GROUP ${_ECM_ICON_THEME_${_type}}) +      if( _theme_GROUP) +         _ECM_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake +                    ${_defaultpath}/${_theme_GROUP}/${_size}x${_size} +                    ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) +      endif( _theme_GROUP) +   endforeach (_current_ICON) + +   # mng icons +   file(GLOB _icons *.mng) +   foreach (_current_ICON ${_icons} ) +      # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty +      string(REGEX MATCH "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" _dummy  "${_current_ICON}") +      set(_type  "${CMAKE_MATCH_1}") +      set(_size  "${CMAKE_MATCH_2}") +      set(_group "${CMAKE_MATCH_3}") +      set(_name  "${CMAKE_MATCH_4}") + +      set(_theme_GROUP ${_ECM_ICON_THEME_${_type}}) +      if( _theme_GROUP) +         _ECM_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake +                ${_defaultpath}/${_theme_GROUP}/${_size}x${_size} +                ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) +      endif( _theme_GROUP) +   endforeach (_current_ICON) + +   # and now the svg icons +   file(GLOB _icons *.svgz) +   foreach (_current_ICON ${_icons} ) +      # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty +      string(REGEX MATCH "^.*/([a-zA-Z]+)sc\\-([a-z]+)\\-(.+\\.svgz)$" _dummy "${_current_ICON}") +      set(_type  "${CMAKE_MATCH_1}") +      set(_group "${CMAKE_MATCH_2}") +      set(_name  "${CMAKE_MATCH_3}") + +      set(_theme_GROUP ${_ECM_ICON_THEME_${_type}}) +      if( _theme_GROUP) +          _ECM_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake +                            ${_defaultpath}/${_theme_GROUP}/scalable +                            ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) +      endif( _theme_GROUP) +   endforeach (_current_ICON) + +   ecm_update_iconcache() + +endmacro (ECM_INSTALL_ICONS) + +# only used internally by ECM_INSTALL_ICONS +macro (_ECM_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME _l10n_SUBDIR) + +   # if the string doesn't match the pattern, the result is the full string, so all three have the same content +   if (NOT ${_group} STREQUAL ${_install_NAME} ) +      set(_icon_GROUP  ${_ECM_ICON_GROUP_${_group}}) +      if(NOT _icon_GROUP) +         set(_icon_GROUP "actions") +      endif(NOT _icon_GROUP) +#      message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name} l10n: ${_l10n_SUBDIR}") +      install(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/${_l10n_SUBDIR}/ RENAME ${_install_NAME} ) +   endif (NOT ${_group} STREQUAL ${_install_NAME} ) + +endmacro (_ECM_ADD_ICON_INSTALL_RULE) + +macro (ECM_UPDATE_ICONCACHE) +    # Update mtime of hicolor icon theme dir. +    # We don't always have touch command (e.g. on Windows), so instead create +    #  and delete a temporary file in the theme dir. +   install(CODE " +    set(DESTDIR_VALUE \"\$ENV{DESTDIR}\") +    if (NOT DESTDIR_VALUE) +        file(WRITE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\" \"update\") +        file(REMOVE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\") +    endif (NOT DESTDIR_VALUE) +    ") +endmacro (ECM_UPDATE_ICONCACHE)
\ No newline at end of file | 
