Warning, /frameworks/kdelibs4support/src/KDEUIMacros.cmake is written in an unsupported language. File is not indexed.
0001 # Copyright (c) 2006-2009 Alexander Neundorf, <neundorf@kde.org> 0002 # Copyright (c) 2006, 2007, Laurent Montel, <montel@kde.org> 0003 # Copyright (c) 2007 Matthias Kretz <kretz@kde.org> 0004 # 0005 # Redistribution and use is allowed according to the terms of the BSD license. 0006 # For details see the accompanying COPYING-CMAKE-SCRIPTS file. 0007 0008 0009 get_filename_component(KDE4UI_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) 0010 0011 # TODO: These macros belong with the framework they relate to. 0012 0013 #create the implementation files from the ui files and add them to the list of sources 0014 #usage: KDE4_ADD_UI_FILES(foo_SRCS ${ui_files}) 0015 macro (KDE4_ADD_UI_FILES _sources ) 0016 foreach (_current_FILE ${ARGN}) 0017 0018 get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE) 0019 get_filename_component(_basename ${_tmp_FILE} NAME_WE) 0020 set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h) 0021 0022 get_target_property(QT_UIC_EXECUTABLE Qt5::uic LOCATION) 0023 # we need to run uic and replace some things in the generated file 0024 # this is done by executing the cmake script kde4uic.cmake 0025 add_custom_command(OUTPUT ${_header} 0026 COMMAND ${CMAKE_COMMAND} 0027 ARGS 0028 -DKDE4_HEADER:BOOL=ON 0029 -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE} 0030 -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE} 0031 -DKDE_UIC_H_FILE:FILEPATH=${_header} 0032 -DKDE_UIC_BASENAME:STRING=${_basename} 0033 -P ${KDE4UI_MODULE_DIR}/kde4uic.cmake 0034 MAIN_DEPENDENCY ${_tmp_FILE} 0035 ) 0036 list(APPEND ${_sources} ${_header}) 0037 endforeach (_current_FILE) 0038 endmacro (KDE4_ADD_UI_FILES) 0039 0040 0041 macro (KDE4_UPDATE_ICONCACHE) 0042 # Update mtime of hicolor icon theme dir. 0043 # We don't always have touch command (e.g. on Windows), so instead create 0044 # and delete a temporary file in the theme dir. 0045 install(CODE " 0046 set(DESTDIR_VALUE \"\$ENV{DESTDIR}\") 0047 if (NOT DESTDIR_VALUE) 0048 file(WRITE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\" \"update\") 0049 file(REMOVE \"${ICON_INSTALL_DIR}/hicolor/temp.txt\") 0050 endif (NOT DESTDIR_VALUE) 0051 ") 0052 endmacro (KDE4_UPDATE_ICONCACHE) 0053 0054 # a "map" of short type names to the directories 0055 # unknown names should give empty results 0056 # KDE 3 compatibility 0057 set(_KDE4_ICON_GROUP_mime "mimetypes") 0058 set(_KDE4_ICON_GROUP_filesys "places") 0059 set(_KDE4_ICON_GROUP_device "devices") 0060 set(_KDE4_ICON_GROUP_app "apps") 0061 set(_KDE4_ICON_GROUP_action "actions") 0062 # KDE 4 / icon naming specification compatibility 0063 set(_KDE4_ICON_GROUP_mimetypes "mimetypes") 0064 set(_KDE4_ICON_GROUP_places "places") 0065 set(_KDE4_ICON_GROUP_devices "devices") 0066 set(_KDE4_ICON_GROUP_apps "apps") 0067 set(_KDE4_ICON_GROUP_actions "actions") 0068 set(_KDE4_ICON_GROUP_categories "categories") 0069 set(_KDE4_ICON_GROUP_status "status") 0070 set(_KDE4_ICON_GROUP_emblems "emblems") 0071 set(_KDE4_ICON_GROUP_emotes "emotes") 0072 set(_KDE4_ICON_GROUP_animations "animations") 0073 set(_KDE4_ICON_GROUP_intl "intl") 0074 0075 # a "map" of short theme names to the theme directory 0076 set(_KDE4_ICON_THEME_ox "oxygen") 0077 set(_KDE4_ICON_THEME_cr "crystalsvg") 0078 set(_KDE4_ICON_THEME_lo "locolor") 0079 set(_KDE4_ICON_THEME_hi "hicolor") 0080 0081 0082 # only used internally by KDE4_INSTALL_ICONS 0083 macro (_KDE4_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME _l10n_SUBDIR) 0084 0085 # if the string doesn't match the pattern, the result is the full string, so all three have the same content 0086 if (NOT ${_group} STREQUAL ${_install_NAME} ) 0087 set(_icon_GROUP ${_KDE4_ICON_GROUP_${_group}}) 0088 if(NOT _icon_GROUP) 0089 set(_icon_GROUP "actions") 0090 endif(NOT _icon_GROUP) 0091 # message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name} l10n: ${_l10n_SUBDIR}") 0092 install(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/${_l10n_SUBDIR}/ RENAME ${_install_NAME} ) 0093 endif (NOT ${_group} STREQUAL ${_install_NAME} ) 0094 0095 endmacro (_KDE4_ADD_ICON_INSTALL_RULE) 0096 0097 0098 macro (KDE4_INSTALL_ICONS _defaultpath ) 0099 0100 # the l10n-subdir if language given as second argument (localized icon) 0101 set(_lang ${ARGV1}) 0102 if(_lang) 0103 set(_l10n_SUBDIR l10n/${_lang}) 0104 else(_lang) 0105 set(_l10n_SUBDIR ".") 0106 endif(_lang) 0107 0108 # first the png icons 0109 file(GLOB _icons *.png) 0110 foreach (_current_ICON ${_icons} ) 0111 # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty 0112 string(REGEX MATCH "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" _dummy "${_current_ICON}") 0113 set(_type "${CMAKE_MATCH_1}") 0114 set(_size "${CMAKE_MATCH_2}") 0115 set(_group "${CMAKE_MATCH_3}") 0116 set(_name "${CMAKE_MATCH_4}") 0117 0118 set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}}) 0119 if( _theme_GROUP) 0120 _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake 0121 ${_defaultpath}/${_theme_GROUP}/${_size}x${_size} 0122 ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) 0123 endif( _theme_GROUP) 0124 endforeach (_current_ICON) 0125 0126 # mng icons 0127 file(GLOB _icons *.mng) 0128 foreach (_current_ICON ${_icons} ) 0129 # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty 0130 string(REGEX MATCH "^.*/([a-zA-Z]+)([0-9]+)\\-([a-z]+)\\-(.+\\.mng)$" _dummy "${_current_ICON}") 0131 set(_type "${CMAKE_MATCH_1}") 0132 set(_size "${CMAKE_MATCH_2}") 0133 set(_group "${CMAKE_MATCH_3}") 0134 set(_name "${CMAKE_MATCH_4}") 0135 0136 set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}}) 0137 if( _theme_GROUP) 0138 _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake 0139 ${_defaultpath}/${_theme_GROUP}/${_size}x${_size} 0140 ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) 0141 endif( _theme_GROUP) 0142 endforeach (_current_ICON) 0143 0144 # and now the svg icons 0145 file(GLOB _icons *.svgz) 0146 foreach (_current_ICON ${_icons} ) 0147 # since CMake 2.6 regex matches are stored in special variables CMAKE_MATCH_x, if it didn't match, they are empty 0148 string(REGEX MATCH "^.*/([a-zA-Z]+)sc\\-([a-z]+)\\-(.+\\.svgz)$" _dummy "${_current_ICON}") 0149 set(_type "${CMAKE_MATCH_1}") 0150 set(_group "${CMAKE_MATCH_2}") 0151 set(_name "${CMAKE_MATCH_3}") 0152 0153 set(_theme_GROUP ${_KDE4_ICON_THEME_${_type}}) 0154 if( _theme_GROUP) 0155 _KDE4_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake 0156 ${_defaultpath}/${_theme_GROUP}/scalable 0157 ${_group} ${_current_ICON} ${_name} ${_l10n_SUBDIR}) 0158 endif( _theme_GROUP) 0159 endforeach (_current_ICON) 0160 0161 kde4_update_iconcache() 0162 0163 endmacro (KDE4_INSTALL_ICONS) 0164 0165 0166 set(KDEWIDGETS_MAKEKDEWIDGETS_EXECUTABLE ${KF5DESIGNERPLUGIN_GENERATOR_EXECUTABLE}) 0167 set(_KDE4_MAKEKDEWIDGETS_DEP ${_KF5DESIGNERPLUGIN_GENERATOR_EXECUTABLE_DEP}) 0168 macro (KDE4_ADD_WIDGET_FILES _sources) 0169 foreach (_current_FILE ${ARGN}) 0170 0171 get_filename_component(_input ${_current_FILE} ABSOLUTE) 0172 get_filename_component(_basename ${_input} NAME_WE) 0173 set(_source ${CMAKE_CURRENT_BINARY_DIR}/${_basename}widgets.cpp) 0174 set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}widgets.moc) 0175 0176 # create source file from the .widgets file 0177 add_custom_command(OUTPUT ${_source} 0178 COMMAND ${KDEWIDGETS_MAKEKDEWIDGETS_EXECUTABLE} 0179 ARGS -o ${_source} ${_input} 0180 MAIN_DEPENDENCY ${_input} DEPENDS ${_KDE4_MAKEKDEWIDGETS_DEP}) 0181 0182 # create moc file 0183 qt5_generate_moc(${_source} ${_moc} ) 0184 0185 list(APPEND ${_sources} ${_source} ${_moc}) 0186 0187 endforeach (_current_FILE) 0188 0189 endmacro (KDE4_ADD_WIDGET_FILES) 0190 0191 # adds application icon to target source list 0192 # 'appsources' - the sources of the application 0193 # 'pngfiles' - specifies the list of icon files 0194 # example: KDE4_ADD_WIN32_APP_ICON(myapp_SRCS "pics/cr16-myapp.png;pics/cr32-myapp.png") 0195 macro (KDE4_ADD_WIN32_APP_ICON appsources) 0196 message(STATUS "KDE4_ADD_WIN32_APP_ICON() is deprecated, use KDE4_ADD_APP_ICON() instead") 0197 if (WIN32) 0198 if(NOT WINCE) 0199 find_program(PNG2ICO_EXECUTABLE NAMES png2ico) 0200 else(NOT WINCE) 0201 find_program(PNG2ICO_EXECUTABLE NAMES png2ico PATHS ${HOST_BINDIR} NO_DEFAULT_PATH ) 0202 endif(NOT WINCE) 0203 string(REPLACE _SRCS "" appname ${appsources}) 0204 if (PNG2ICO_EXECUTABLE) 0205 set (_outfilename ${CMAKE_CURRENT_BINARY_DIR}/${appname}) 0206 0207 # png2ico is found by the above find_program 0208 # message("png2ico ${_outfilename}.ico ${ARGN}") 0209 exec_program(png2ico ARGS ${_outfilename}.ico ${ARGN}) 0210 0211 # now make rc file for adding it to the sources 0212 file(WRITE ${_outfilename}.rc "IDI_ICON1 ICON DISCARDABLE \"${_outfilename}.ico\"\n") 0213 list(APPEND ${appsources} ${CMAKE_CURRENT_BINARY_DIR}/${appname}.rc) 0214 endif(PNG2ICO_EXECUTABLE) 0215 endif(WIN32) 0216 endmacro (KDE4_ADD_WIN32_APP_ICON) 0217 0218 # adds application icon to target source list 0219 # for detailed documentation see the top of FindKDE4Internal.cmake 0220 macro (KDE4_ADD_APP_ICON appsources pattern) 0221 set (_outfilename ${CMAKE_CURRENT_BINARY_DIR}/${appsources}) 0222 0223 if (WIN32) 0224 if(NOT WINCE) 0225 find_program(PNG2ICO_EXECUTABLE NAMES png2ico) 0226 else(NOT WINCE) 0227 find_program(PNG2ICO_EXECUTABLE NAMES png2ico PATHS ${HOST_BINDIR} NO_DEFAULT_PATH ) 0228 endif(NOT WINCE) 0229 if (PNG2ICO_EXECUTABLE) 0230 string(REPLACE "*" "(.*)" pattern_rx "${pattern}") 0231 file(GLOB files "${pattern}") 0232 foreach (it ${files}) 0233 string(REGEX REPLACE "${pattern_rx}" "\\1" fn "${it}") 0234 if (fn MATCHES ".*16.*" ) 0235 list (APPEND _icons ${it}) 0236 endif (fn MATCHES ".*16.*") 0237 if (fn MATCHES ".*32.*" ) 0238 list (APPEND _icons ${it}) 0239 endif (fn MATCHES ".*32.*") 0240 if (fn MATCHES ".*48.*" ) 0241 list (APPEND _icons ${it}) 0242 endif (fn MATCHES ".*48.*") 0243 if (fn MATCHES ".*64.*" ) 0244 list (APPEND _icons ${it}) 0245 endif (fn MATCHES ".*64.*") 0246 if (fn MATCHES ".*128.*" ) 0247 list (APPEND _icons ${it}) 0248 endif (fn MATCHES ".*128.*") 0249 endforeach (it) 0250 if (_icons) 0251 add_custom_command(OUTPUT ${_outfilename}.ico ${_outfilename}.rc 0252 COMMAND ${PNG2ICO_EXECUTABLE} ARGS --rcfile ${_outfilename}.rc ${_outfilename}.ico ${_icons} 0253 DEPENDS ${PNG2ICO_EXECUTABLE} ${_icons} 0254 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 0255 ) 0256 list(APPEND ${appsources} ${_outfilename}.rc) 0257 else(_icons) 0258 message(STATUS "Unable to find a related icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!") 0259 endif(_icons) 0260 else(PNG2ICO_EXECUTABLE) 0261 message(STATUS "Unable to find the png2ico utility - application will not have an application icon!") 0262 endif(PNG2ICO_EXECUTABLE) 0263 endif(WIN32) 0264 if (APPLE) 0265 # first convert image to a tiff using the Mac OS X "sips" utility, 0266 # then use tiff2icns to convert to an icon 0267 find_program(SIPS_EXECUTABLE NAMES sips) 0268 find_program(TIFF2ICNS_EXECUTABLE NAMES tiff2icns) 0269 if (SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE) 0270 file(GLOB_RECURSE files "${pattern}") 0271 # we can only test for the 128-icon like that - we don't use patterns anymore 0272 foreach (it ${files}) 0273 if (it MATCHES ".*128.*" ) 0274 set (_icon ${it}) 0275 endif (it MATCHES ".*128.*") 0276 endforeach (it) 0277 0278 if (_icon) 0279 0280 # first, get the basename of our app icon 0281 add_custom_command(OUTPUT ${_outfilename}.icns ${outfilename}.tiff 0282 COMMAND ${SIPS_EXECUTABLE} -s format tiff ${_icon} --out ${outfilename}.tiff 0283 COMMAND ${TIFF2ICNS_EXECUTABLE} ${outfilename}.tiff ${_outfilename}.icns 0284 DEPENDS ${_icon} 0285 ) 0286 0287 # This will register the icon into the bundle 0288 set(MACOSX_BUNDLE_ICON_FILE ${appsources}.icns) 0289 0290 # Append the icns file to the sources list so it will be a dependency to the 0291 # main target 0292 list(APPEND ${appsources} ${_outfilename}.icns) 0293 0294 # Install the icon into the Resources dir in the bundle 0295 set_source_files_properties(${_outfilename}.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 0296 0297 else(_icon) 0298 # TODO - try to scale a non-128 icon...? Try to convert an SVG on the fly? 0299 message(STATUS "Unable to find an 128x128 icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!") 0300 endif(_icon) 0301 0302 else(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE) 0303 message(STATUS "Unable to find the sips and tiff2icns utilities - application will not have an application icon!") 0304 endif(SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE) 0305 endif(APPLE) 0306 endmacro (KDE4_ADD_APP_ICON) 0307