2012-04-02 15:44:24 +04:00
SET ( WINDRES_EXECUTABLE ${ CMAKE_RC_COMPILER } )
# This macro is taken from kdelibs/cmake/modules/KDE4Macros.cmake.
#
# Copyright (c) 2006-2009 Alexander Neundorf, <neundorf@kde.org>
# Copyright (c) 2006, 2007, Laurent Montel, <montel@kde.org>
# Copyright (c) 2007 Matthias Kretz <kretz@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file [in KDE repositories].
# adds application icon to target source list
# for detailed documentation see the top of FindKDE4Internal.cmake
macro ( KDE4_ADD_APP_ICON appsources pattern )
set ( _outfilename ${ CMAKE_CURRENT_BINARY_DIR } / ${ appsources } )
if ( WIN32 )
if ( NOT WINCE )
find_program ( PNG2ICO_EXECUTABLE NAMES png2ico )
else ( NOT WINCE )
find_program ( PNG2ICO_EXECUTABLE NAMES png2ico PATHS ${ HOST_BINDIR } NO_DEFAULT_PATH )
endif ( NOT WINCE )
find_program ( WINDRES_EXECUTABLE NAMES windres )
if ( MSVC )
set ( WINDRES_EXECUTABLE TRUE )
endif ( MSVC )
if ( PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE )
2012-05-02 18:33:07 +04:00
string ( REPLACE "*" "([0123456789]*)" pattern_rx "${pattern}" )
2012-04-02 15:44:24 +04:00
file ( GLOB files "${pattern}" )
foreach ( it ${ files } )
string ( REGEX REPLACE "${pattern_rx}" "\\1" fn "${it}" )
if ( fn MATCHES ".*16.*" )
list ( APPEND _icons ${ it } )
endif ( fn MATCHES ".*16.*" )
if ( fn MATCHES ".*32.*" )
list ( APPEND _icons ${ it } )
endif ( fn MATCHES ".*32.*" )
if ( fn MATCHES ".*48.*" )
list ( APPEND _icons ${ it } )
endif ( fn MATCHES ".*48.*" )
if ( fn MATCHES ".*64.*" )
list ( APPEND _icons ${ it } )
endif ( fn MATCHES ".*64.*" )
if ( fn MATCHES ".*128.*" )
list ( APPEND _icons ${ it } )
endif ( fn MATCHES ".*128.*" )
endforeach ( it )
if ( _icons )
add_custom_command ( OUTPUT ${ _outfilename } .ico ${ _outfilename } .rc
C O M M A N D $ { P N G 2 I C O _ E X E C U T A B L E } A R G S - - r c f i l e $ { _ o u t f i l e n a m e } . r c $ { _ o u t f i l e n a m e } . i c o $ { _ i c o n s }
D E P E N D S $ { P N G 2 I C O _ E X E C U T A B L E } $ { _ i c o n s }
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
)
if ( MINGW )
add_custom_command ( OUTPUT ${ _outfilename } _res.o
C O M M A N D $ { W I N D R E S _ E X E C U T A B L E } A R G S - i $ { _ o u t f i l e n a m e } . r c - o $ { _ o u t f i l e n a m e } _ r e s . o - - i n c l u d e - d i r = $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R }
D E P E N D S $ { W I N D R E S _ E X E C U T A B L E } $ { _ o u t f i l e n a m e } . r c
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
)
list ( APPEND ${ appsources } ${ _outfilename } _res.o )
else ( MINGW )
list ( APPEND ${ appsources } ${ _outfilename } .rc )
endif ( MINGW )
else ( _icons )
message ( STATUS "Unable to find a related icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!" )
endif ( _icons )
else ( PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE )
2012-08-13 16:05:40 +04:00
message ( FATAL_ERROR "Unable to find the png2ico or windres utilities - application will not have an application icon!" )
2012-04-02 15:44:24 +04:00
endif ( PNG2ICO_EXECUTABLE AND WINDRES_EXECUTABLE )
endif ( WIN32 )
if ( Q_WS_MAC )
# first convert image to a tiff using the Mac OS X "sips" utility,
# then use tiff2icns to convert to an icon
find_program ( SIPS_EXECUTABLE NAMES sips )
find_program ( TIFF2ICNS_EXECUTABLE NAMES tiff2icns )
if ( SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE )
file ( GLOB_RECURSE files "${pattern}" )
# we can only test for the 128-icon like that - we don't use patterns anymore
foreach ( it ${ files } )
if ( it MATCHES ".*128.*" )
set ( _icon ${ it } )
endif ( it MATCHES ".*128.*" )
endforeach ( it )
if ( _icon )
# first, get the basename of our app icon
add_custom_command ( OUTPUT ${ _outfilename } .icns ${ outfilename } .tiff
C O M M A N D $ { S I P S _ E X E C U T A B L E } - s f o r m a t t i f f $ { _ i c o n } - - o u t $ { o u t f i l e n a m e } . t i f f
C O M M A N D $ { T I F F 2 I C N S _ E X E C U T A B L E } $ { o u t f i l e n a m e } . t i f f $ { _ o u t f i l e n a m e } . i c n s
D E P E N D S $ { _ i c o n }
)
# This will register the icon into the bundle
set ( MACOSX_BUNDLE_ICON_FILE ${ appsources } .icns )
# Append the icns file to the sources list so it will be a dependency to the
# main target
list ( APPEND ${ appsources } ${ _outfilename } .icns )
# Install the icon into the Resources dir in the bundle
set_source_files_properties ( ${ _outfilename } .icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
else ( _icon )
# TODO - try to scale a non-128 icon...? Try to convert an SVG on the fly?
message ( STATUS "Unable to find an 128x128 icon that matches pattern ${pattern} for variable ${appsources} - application will not have an application icon!" )
endif ( _icon )
else ( SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE )
message ( STATUS "Unable to find the sips and tiff2icns utilities - application will not have an application icon!" )
endif ( SIPS_EXECUTABLE AND TIFF2ICNS_EXECUTABLE )
endif ( Q_WS_MAC )
endmacro ( KDE4_ADD_APP_ICON )