################################################# ##### ##### tde_message_fatal macro( tde_message_fatal ) message( FATAL_ERROR "#################################################\n" " ${ARGV}\n" "#################################################" ) endmacro( tde_message_fatal ) ################################################# ##### ##### tde_install_icons( THEME DESTINATION ) ##### default theme: hicolor ##### default destination: ${SHARE_INSTALL_DIR}/icons macro( tde_install_icons ) # clearing unset( _dest ) unset( _req_theme ) unset( _icons ) set( _var _icons ) # parse all arguments foreach( _arg ${ARGV} ) # directive DESTINATION if( _arg STREQUAL "DESTINATION" ) set( _var _dest ) set( _directive 1 ) endif( _arg STREQUAL "DESTINATION" ) # directive THEME if( _arg STREQUAL "THEME" ) set( _var _req_theme ) set( _directive 1 ) endif( _arg STREQUAL "THEME" ) # collect data if( _directive ) unset( _directive ) else( _directive ) set( ${_var} ${${_var}} ${_arg} ) set( _var _icons ) endif( _directive ) endforeach( _arg ) #defaults if( NOT _icons ) set( _icons "*" ) endif( NOT _icons ) if( NOT _dest ) set( _dest "${SHARE_INSTALL_DIR}/icons" ) endif( NOT _dest ) foreach( _icon ${_icons} ) unset( _theme ) # clearing file(GLOB _icon_files *-${_icon}.png _icon_files *-${_icon}.svg* ) foreach( _icon_file ${_icon_files} ) # FIXME need a review string( REGEX MATCH "^.*/([a-zA-Z][a-zA-Z])([0-9a-zA-Z]+)\\-([a-z]+)\\-(.+)$" _dummy "${_icon_file}" ) set( _type "${CMAKE_MATCH_1}" ) set( _size "${CMAKE_MATCH_2}" ) set( _group "${CMAKE_MATCH_3}" ) set( _name "${CMAKE_MATCH_4}" ) # we must ignore invalid icon names if( _type AND _size AND _group AND _name ) # autodetect theme if( NOT _req_theme ) if( "${_type}" STREQUAL "cr" ) set( _theme crystalsvg ) elseif( "${_type}" STREQUAL "lo" ) set( _theme locolor ) endif( "${_type}" STREQUAL "cr" ) # defaulting if( NOT _theme ) set( _theme hicolor ) endif( NOT _theme ) else( NOT _req_theme ) set( _theme ${_req_theme} ) endif( NOT _req_theme ) # fix "group" name if( "${_group}" STREQUAL "mime" ) set( _group "mimetypes" ) endif( "${_group}" STREQUAL "mime" ) if( "${_group}" STREQUAL "filesys" ) set( _group "filesystems" ) endif( "${_group}" STREQUAL "filesys" ) if( "${_group}" STREQUAL "device" ) set( _group "devices" ) endif( "${_group}" STREQUAL "device" ) if( "${_group}" STREQUAL "app" ) set( _group "apps" ) endif( "${_group}" STREQUAL "app" ) if( "${_group}" STREQUAL "action" ) set( _group "actions" ) endif( "${_group}" STREQUAL "action" ) if( "${_size}" STREQUAL "sc" ) install( FILES ${_icon_file} DESTINATION ${_dest}/${_theme}/scalable/${_group}/ RENAME ${_name} ) else( "${_size}" STREQUAL "sc" ) install( FILES ${_icon_file} DESTINATION ${_dest}/${_theme}/${_size}x${_size}/${_group}/ RENAME ${_name} ) endif( "${_size}" STREQUAL "sc" ) endif( _type AND _size AND _group AND _name ) endforeach( _icon_file ) endforeach( _icon ) endmacro( tde_install_icons ) ################################################# ##### ##### tde_add_lut( [depends] ) ##### default depends: source macro( tde_add_lut _src _lut _dep ) set( create_hash_table ${CMAKE_SOURCE_DIR}/kjs/create_hash_table ) if( NOT _dep ) set( _dep ${_src} ) endif( NOT _dep ) add_custom_command( OUTPUT ${_lut} COMMAND perl ARGS ${create_hash_table} ${CMAKE_CURRENT_SOURCE_DIR}/${_src} -i > ${_lut} DEPENDS ${_src} ) set_source_files_properties( ${_dep} PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_lut} ) unset( _dep ) endmacro( tde_add_lut ) ################################################# ##### ##### tde_add_luts( ) macro( tde_add_luts ) foreach( _src ${ARGV} ) get_filename_component( _lut ${_src} NAME_WE ) set( _lut "${_lut}.lut.h" ) tde_add_lut( ${_src} ${_lut} ${_src} ) endforeach( _src ) endmacro( tde_add_luts ) ################################################# ##### ##### tde_install_la_file( ) macro( tde_install_la_file _target _destination ) get_target_property( _target_location ${_target} LOCATION ) get_filename_component( _laname ${_target_location} NAME_WE ) get_filename_component( _soname ${_target_location} NAME ) set( _laname ${CMAKE_CURRENT_BINARY_DIR}/${_laname}.la ) file( WRITE ${_laname} "# ${_laname} - a libtool library file, generated by cmake # The name that we can dlopen(3). dlname='${_soname}' # Names of this library library_names='${_soname} ${_soname} ${_soname}' # The name of the static archive old_library='' # Libraries that this one depends upon. dependency_libs='' # Version information.\ncurrent=0\nage=0\nrevision=0 # Is this an already installed library?\ninstalled=yes # Should we warn about portability when linking against -modules?\nshouldnotlink=yes # Files to dlopen/dlpreopen\ndlopen=''\ndlpreopen='' # Directory that this library needs to be installed in: libdir='${_destination}' " ) install( FILES ${_laname} DESTINATION ${_destination} ) endmacro( tde_install_la_file ) ################################################# ##### ##### __tde_internal_process_sources macro( __tde_internal_process_sources _sources ) unset( ${_sources} ) foreach( _arg ${ARGN} ) get_filename_component( _ext ${_arg} EXT ) get_filename_component( _name ${_arg} NAME_WE ) get_filename_component( _path ${_arg} PATH ) # if not path, set it to "." if( NOT _path ) set( _path "./" ) endif( NOT _path ) # handle .ui files if( ${_ext} STREQUAL ".ui" ) kde3_add_ui_files( ${_sources} ${_arg} ) # handle .skel files elseif( ${_ext} STREQUAL ".skel" ) kde3_add_dcop_skels( ${_sources} ${_name}.h ) # handle .stub files elseif( ${_ext} STREQUAL ".stub" ) kde3_add_dcop_stubs( ${_sources} ${_path}/${_name}.h ) # handle .kcfgc files elseif( ${_ext} STREQUAL ".kcfgc" ) kde3_add_kcfg_files( ${_sources} ${_arg} ) # handle any other files else( ${_ext} STREQUAL ".ui" ) list(APPEND ${_sources} ${_arg} ) endif( ${_ext} STREQUAL ".ui" ) endforeach( _arg ) endmacro( __tde_internal_process_sources ) ################################################# ##### ##### tde_install_libtool_file macro( tde_install_libtool_file _target _destination ) get_target_property( _target_location ${_target} LOCATION ) # get name of target get_filename_component( _name ${_target_location} NAME_WE ) # get .la name set( _laname ${_name}.la ) # get .so name get_filename_component( _soname ${_target_location} NAME ) # get version of target get_target_property( _target_version ${_target} VERSION ) get_target_property( _target_soversion ${_target} SOVERSION ) # we have so version if( _target_version ) set( _library_name_1 "${_soname}.${_target_version}" ) set( _library_name_2 "${_soname}.${_target_soversion}" ) set( _library_name_3 "${_soname}" ) string( REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" _dummy "${_target_version}" ) set( _version_current "${CMAKE_MATCH_1}" ) set( _version_age "${CMAKE_MATCH_2}" ) set( _version_revision "${CMAKE_MATCH_3}" ) # we have no so version (module?) else( _target_version ) set( _library_name_1 "${_soname}" ) set( _library_name_2 "${_soname}" ) set( _library_name_3 "${_soname}" ) set( _version_current "0" ) set( _version_age "0" ) set( _version_revision "0" ) endif( _target_version ) if( IS_ABSOLUTE ${_destination} ) set( _libdir "${_destination}" ) else( IS_ABSOLUTE ${_destination} ) set( _libdir "${CMAKE_INSTALL_PREFIX}/${_destination}" ) endif( IS_ABSOLUTE ${_destination} ) configure_file( ${CMAKE_SOURCE_DIR}/cmake/modules/template_libtool_file.cmake "${_laname}" @ONLY ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/${_laname}" DESTINATION ${_destination} ) endmacro( tde_install_libtool_file ) ################################################# ##### ##### tde_add_library macro( tde_add_library _arg_target ) unset( _target ) unset( _type ) unset( _static_pic ) unset( _automoc ) unset( _no_libtool_file ) unset( _version ) unset( _sources ) unset( _destination ) unset( _embed ) unset( _link ) unset( _dependencies ) unset( _storage ) set( _shouldnotlink no ) foreach( _arg ${ARGV} ) # this variable help us to skip # storing unapropriate values (i.e. directives) unset( _skip_store ) # found one of directives: "SHARED", "STATIC", "MODULE" if( "${_arg}" STREQUAL "SHARED" OR "${_arg}" STREQUAL "STATIC" OR "${_arg}" STREQUAL "MODULE" ) set( _skip_store 1 ) set( _type "${_arg}" ) endif( "${_arg}" STREQUAL "SHARED" OR "${_arg}" STREQUAL "STATIC" OR "${_arg}" STREQUAL "MODULE" ) # found directive "STATIC_PIC" if( "${_arg}" STREQUAL "STATIC_PIC" ) set( _skip_store 1 ) set( _type "STATIC" ) set( _static_pic 1 ) endif( "${_arg}" STREQUAL "STATIC_PIC" ) # found directive "AUTOMOC" if( "${_arg}" STREQUAL "AUTOMOC" ) set( _skip_store 1 ) set( _automoc 1 ) endif( "${_arg}" STREQUAL "AUTOMOC" ) # found directive "NO_LIBTOOL_FILE" if( "${_arg}" STREQUAL "NO_LIBTOOL_FILE" ) set( _skip_store 1 ) set( _no_libtool_file 1 ) endif( "${_arg}" STREQUAL "NO_LIBTOOL_FILE" ) # found directive "VERSION" if( "${_arg}" STREQUAL "VERSION" ) set( _skip_store 1 ) set( _storage "_version" ) endif( "${_arg}" STREQUAL "VERSION" ) # found directive "SOURCES" if( "${_arg}" STREQUAL "SOURCES" ) set( _skip_store 1 ) set( _storage "_sources" ) endif( "${_arg}" STREQUAL "SOURCES" ) # found directive "EMBED" if( "${_arg}" STREQUAL "EMBED" ) set( _skip_store 1 ) set( _storage "_embed" ) endif( "${_arg}" STREQUAL "EMBED" ) # found directive "LINK" if( "${_arg}" STREQUAL "LINK" ) set( _skip_store 1 ) set( _storage "_link" ) endif( "${_arg}" STREQUAL "LINK" ) # found directive "DEPENDENCIES" if( "${_arg}" STREQUAL "DEPENDENCIES" ) set( _skip_store 1 ) set( _storage "_dependencies" ) endif( "${_arg}" STREQUAL "DEPENDENCIES" ) # found directive "DESTINATION" if( "${_arg}" STREQUAL "DESTINATION" ) set( _skip_store 1 ) set( _storage "_destination" ) unset( ${_storage} ) endif( "${_arg}" STREQUAL "DESTINATION" ) # storing value if( _storage AND NOT _skip_store ) #set( ${_storage} "${${_storage}} ${_arg}" ) list( APPEND ${_storage} ${_arg} ) endif( _storage AND NOT _skip_store ) endforeach( _arg ) # if no type is set, we choose one # based on BUILD_SHARED_LIBS if( NOT _type ) if( BUILD_SHARED_LIBS ) set( _type "SHARED" ) else( BUILD_SHARED_LIBS ) set( _type "STATIC" ) endif( BUILD_SHARED_LIBS ) endif( NOT _type ) # change target name, based on type string( TOLOWER "${_type}" _target ) set( _target "${_arg_target}-${_target}" ) # disallow target without sources if( NOT _sources ) message( FATAL_ERROR "\nTarget [$_target] have no sources." ) endif( NOT _sources ) # processing different types of sources __tde_internal_process_sources( _sources ${_sources} ) # set automoc if( _automoc ) kde3_automoc( ${_sources} ) endif( _automoc ) # add target add_library( ${_target} ${_type} ${_sources} ) # we assume that modules have no prefix and no version # also, should not link if( ${_type} STREQUAL "MODULE" ) set_target_properties( ${_target} PROPERTIES PREFIX "" ) unset( _version ) set( _shouldnotlink yes ) endif( ${_type} STREQUAL "MODULE" ) # set real name of target set_target_properties( ${_target} PROPERTIES OUTPUT_NAME ${_arg_target} ) # set -fPIC flag for static libraries if( _static_pic ) set_target_properties( ${_target} PROPERTIES COMPILE_FLAGS -fPIC ) endif( _static_pic ) # set version if( _version ) string( REGEX MATCH "^[0-9]+" _soversion ${_version} ) set_target_properties( ${_target} PROPERTIES VERSION ${_version} SOVERSION ${_soversion} ) endif( _version ) # set interface libraries target_link_libraries( ${_target} LINK_INTERFACE_LIBRARIES ${_link} ) # set embedded archives if( _embed ) list( INSERT _link 0 -Wl,-whole-archive ${_embed} -Wl,-no-whole-archive ) endif( _embed ) # set link libraries if( _link ) target_link_libraries( ${_target} ${_link} ) endif( _link ) # set dependencies if( _dependencies ) add_dependencies( ${_target} ${_dependencies} ) endif( _dependencies ) # set destination directory if( _destination ) install( TARGETS ${_target} DESTINATION ${_destination} ) if( NOT "STATIC" STREQUAL ${_type} AND NOT _no_libtool_file ) tde_install_libtool_file( ${_target} ${_destination} ) endif( NOT "STATIC" STREQUAL ${_type} AND NOT _no_libtool_file ) endif( _destination ) endmacro( tde_add_library ) ################################################# ##### ##### tde_add_kpart macro( tde_add_kpart _target ) tde_add_library( ${_target} ${ARGN} MODULE ) endmacro( tde_add_kpart ) ################################################# ##### ##### tde_add_executable macro( tde_add_executable _arg_target ) unset( _target ) unset( _automoc ) unset( _setuid ) unset( _sources ) unset( _destination ) unset( _link ) unset( _dependencies ) unset( _storage ) foreach( _arg ${ARGV} ) # this variable help us to skip # storing unapropriate values (i.e. directives) unset( _skip_store ) # found directive "AUTOMOC" if( "${_arg}" STREQUAL "AUTOMOC" ) set( _skip_store 1 ) set( _automoc 1 ) endif( "${_arg}" STREQUAL "AUTOMOC" ) # found directive "SETUID" if( "${_arg}" STREQUAL "SETUID" ) set( _skip_store 1 ) set( _setuid 1 ) endif( "${_arg}" STREQUAL "SETUID" ) # found directive "SOURCES" if( "${_arg}" STREQUAL "SOURCES" ) set( _skip_store 1 ) set( _storage "_sources" ) endif( "${_arg}" STREQUAL "SOURCES" ) # found directive "LINK" if( "${_arg}" STREQUAL "LINK" ) set( _skip_store 1 ) set( _storage "_link" ) endif( "${_arg}" STREQUAL "LINK" ) # found directive "DEPENDENCIES" if( "${_arg}" STREQUAL "DEPENDENCIES" ) set( _skip_store 1 ) set( _storage "_dependencies" ) endif( "${_arg}" STREQUAL "DEPENDENCIES" ) # found directive "DESTINATION" if( "${_arg}" STREQUAL "DESTINATION" ) set( _skip_store 1 ) set( _storage "_destination" ) unset( ${_storage} ) endif( "${_arg}" STREQUAL "DESTINATION" ) # storing value if( _storage AND NOT _skip_store ) #set( ${_storage} "${${_storage}} ${_arg}" ) list( APPEND ${_storage} ${_arg} ) endif( _storage AND NOT _skip_store ) endforeach( _arg ) set( _target "${_arg_target}" ) # disallow target without sources if( NOT _sources ) message( FATAL_ERROR "\nTarget [$_target] have no sources." ) endif( NOT _sources ) # processing different types of sources __tde_internal_process_sources( _sources ${_sources} ) # set automoc if( _automoc ) kde3_automoc( ${_sources} ) endif( _automoc ) # add target add_executable( ${_target} ${_sources} ) # set link libraries if( _link ) target_link_libraries( ${_target} ${_link} ) endif( _link ) # set dependencies if( _dependencies ) add_dependencies( ${_target} ${_dependencies} ) endif( _dependencies ) # set destination directory if( _destination ) if( _setuid ) install( TARGETS ${_target} DESTINATION ${_destination} PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE SETUID ) else( _setuid ) install( TARGETS ${_target} DESTINATION ${_destination} ) endif( _setuid ) endif( _destination ) endmacro( tde_add_executable ) ################################################# ##### ##### tde_add_kdeinit_executable macro( tde_add_kdeinit_executable _target ) configure_file( ${CMAKE_SOURCE_DIR}/cmake/modules/template_kdeinit_executable.cmake ${_target}_kdeinit_executable.cpp COPYONLY ) configure_file( ${CMAKE_SOURCE_DIR}/cmake/modules/template_kdeinit_module.cmake ${_target}_kdeinit_module.cpp COPYONLY ) unset( _sources ) unset( _runtime_destination ) unset( _library_destination ) unset( _plugin_destination ) # default storage is _sources set( _storage _sources ) foreach( _arg ${ARGN} ) # this variable help us to skip # storing unapropriate values (i.e. directives) unset( _skip_store ) # found directive "RUNTIME_DESTINATION" if( "${_arg}" STREQUAL "RUNTIME_DESTINATION" ) set( _skip_store 1 ) set( _storage "_runtime_destination" ) unset( ${_storage} ) endif( "${_arg}" STREQUAL "RUNTIME_DESTINATION" ) # found directive "LIBRARY_DESTINATION" if( "${_arg}" STREQUAL "LIBRARY_DESTINATION" ) set( _skip_store 1 ) set( _storage "_library_destination" ) unset( ${_storage} ) endif( "${_arg}" STREQUAL "LIBRARY_DESTINATION" ) # found directive "PLUGIN_DESTINATION" if( "${_arg}" STREQUAL "PLUGIN_DESTINATION" ) set( _skip_store 1 ) set( _storage "_plugin_destination" ) unset( ${_storage} ) endif( "${_arg}" STREQUAL "PLUGIN_DESTINATION" ) # storing value if( _storage AND NOT _skip_store ) list( APPEND ${_storage} ${_arg} ) set( _storage "_sources" ) endif( _storage AND NOT _skip_store ) endforeach( _arg ) # if destinations are not set, we using some defaults # we assume that kdeinit executable MUST be installed # (otherwise why we build it?) if( NOT _runtime_destination ) set( _runtime_destination ${BIN_INSTALL_DIR} ) endif( NOT _runtime_destination ) if( NOT _library_destination ) set( _library_destination ${LIB_INSTALL_DIR} ) endif( NOT _library_destination ) if( NOT _plugin_destination ) set( _plugin_destination ${PLUGIN_INSTALL_DIR} ) endif( NOT _plugin_destination ) # create the library tde_add_library( kdeinit_${_target} ${_sources} SHARED DESTINATION ${_library_destination} ) # create the executable tde_add_executable( ${_target} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${_target}_kdeinit_executable.cpp LINK kdeinit_${_target}-shared DESTINATION ${_runtime_destination} ) # create the plugin tde_add_kpart( ${_target} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${_target}_kdeinit_module.cpp LINK kdeinit_${_target}-shared DESTINATION ${_plugin_destination} ) endmacro( tde_add_kdeinit_executable ) ################################################# ##### ##### tde_install_symlink macro( tde_install_symlink _target _link ) # if path is relative, we must to prefix it with CMAKE_INSTALL_PREFIX if( IS_ABSOLUTE ${_link} ) set( _destination "${_link}" ) else( IS_ABSOLUTE ${_link} ) set( _destination "${CMAKE_INSTALL_PREFIX}/${_link}" ) endif( IS_ABSOLUTE ${_link} ) # prefix with DESTDIR set( _destination "$ENV{DESTDIR}${_destination}" ) get_filename_component( _path ${_destination} PATH ) if( NOT IS_DIRECTORY "${_path}" ) install( CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${_path} )" ) endif( NOT IS_DIRECTORY "${_path}" ) install( CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink ${_target} ${_destination} )" ) endmacro( tde_install_symlink ) ################################################# ##### ##### tde_install_empty_directory macro( tde_install_empty_directory _path ) # if path is relative, we must to prefix it with CMAKE_INSTALL_PREFIX if( IS_ABSOLUTE ${_path} ) set( _destination "${_path}" ) else( IS_ABSOLUTE ${_path} ) set( _destination "${CMAKE_INSTALL_PREFIX}/${_path}" ) endif( IS_ABSOLUTE ${_path} ) # prefix with DESTDIR set( _destination "$ENV{DESTDIR}${_destination}" ) install( CODE "execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${_destination} )" ) endmacro( tde_install_empty_directory )