macro(convert_to_png IMAGE_INPUT IMAGE_OUTPUT SCALE)
   get_filename_component(FILE_EXT ${IMAGE_INPUT} EXT)
   string(TOUPPER ${FILE_EXT} FILE_TYPE)
   string(REGEX REPLACE "^\\." "" FILE_TYPE ${FILE_TYPE})
   if(${IMAGE_CONVERTER_${FILE_TYPE}} MATCHES "rsvg-convert")
      if (${SCALE} GREATER 0)
         set(SCALE_ARGS --width=${SCALE} --height=${SCALE})
      else()
         set(SCALE_ARGS)
      endif()
      set(COMMAND_ARGS ${SCALE_ARGS} --output ${IMAGE_OUTPUT} ${IMAGE_INPUT})
   elseif(${IMAGE_CONVERTER_${FILE_TYPE}} MATCHES "convert")
      if (${SCALE} GREATER 0)
         set(SCALE_ARGS -resize ${SCALE}x${SCALE})
      else()
         set(SCALE_ARGS)
      endif()
      set(COMMAND_ARGS -background none ${IMAGE_INPUT} ${SCALE_ARGS} ${IMAGE_OUTPUT})
   elseif(${IMAGE_CONVERTER_${FILE_TYPE}} MATCHES "ksvgtopng")
      set (NEW_SCALE ${SCALE})
      if (${SCALE} EQUAL 0)
         file(STRINGS  ${IMAGE_INPUT} NEW_SCALE_LINE REGEX "[^-]width=\"[0-9pxt.]*\"")
         string(REGEX REPLACE ".*width=\"([0-9]*).*" "\\1" NEW_SCALE ${NEW_SCALE_LINE})
       endif()
      set(COMMAND_ARGS ${NEW_SCALE} ${NEW_SCALE}  ${IMAGE_INPUT} ${IMAGE_OUTPUT})
   elseif(${IMAGE_CONVERTER_${FILE_TYPE}} MATCHES "inkscape")
      if (${SCALE} GREATER 0)
         set(SCALE_ARGS --export-width=${SCALE} --export-height=${SCALE})
      else()
         set(SCALE_ARGS)
      endif()
      set(COMMAND_ARGS --without-gui --export-background-opacity=0 --export-png ${IMAGE_OUTPUT} ${SCALE_ARGS} ${IMAGE_INPUT})
   else()
      message(FATAL_ERROR "no svg2png converter defined here.")
   endif()

   add_custom_command (
      OUTPUT ${IMAGE_OUTPUT}
      DEPENDS ${IMAGE_INPUT}
      COMMAND ${IMAGE_CONVERTER_${FILE_TYPE}} ${COMMAND_ARGS}
   )
endmacro()

macro(add_scale_targets IMAGE_SRC IMAGE_NAME)
   string(REPLACE "," ";" SCALES "${ARGN}")
   set(add_scale_targets_is_first_scale 1)
   foreach (CURRENT_SCALE ${SCALES})
      if(add_scale_targets_is_first_scale EQUAL 1)
         set (IMAGE_DST ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_NAME}.png)
         set(add_scale_targets_is_first_scale 0)
      elseif (${CURRENT_SCALE} EQUAL 0)
         set (IMAGE_DST ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_NAME}.png)
         message_error( "Image size value of 0 to leave image unscaled can only be given as the first value in row, e.g. -D svg2png_scaling=0,16,32 " )
      else()
         set (IMAGE_DST ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_NAME}_${CURRENT_SCALE}_${CURRENT_SCALE}.png)
      endif()
      
      if(NOT CURRENT_SCALE EQUAL -1)
        convert_to_png(
           ${CMAKE_CURRENT_SOURCE_DIR}/${IMAGE_SRC} 
           ${IMAGE_DST}
           ${CURRENT_SCALE}
        )
        list(APPEND IMAGE_TARGETS ${IMAGE_DST})
      endif()
   endforeach()
endmacro()

install(FILES  desktop_icons/navit.desktop DESTINATION share/applications)
install(FILES  desktop_icons/22x22/navit.png DESTINATION share/icons/hicolor/22x22/apps)
install(FILES  desktop_icons/128x128/navit.png DESTINATION share/icons/hicolor/128x128/apps)
#install(FILES  bench.xpm DESTINATION )

if (USE_SVG OR SVG2PNG)
   FILE(GLOB SVG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.svg" "*.svgz")
   
   if(USE_SVG)
      list(APPEND IMAGES_TO_COPY ${SVG_FILES})
   endif(USE_SVG)
   if(SVG2PNG)
      list(APPEND FILES_TO_PNG ${SVG_FILES})
   endif(SVG2PNG)
endif()

FILE(GLOB XPM_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.xpm")
if(XPM2PNG)
   foreach (IMAGE_SRC ${SVG_FILES})
      string(REGEX REPLACE ".[a-z]*\$" "" IMAGE ${IMAGE_SRC})
      list(APPEND SVG_FILES_BASENAMES ${IMAGE})
   endforeach()
   foreach (IMAGE_SRC ${XPM_FILES})
      string(REGEX REPLACE ".[a-z]*\$" "" IMAGE ${IMAGE_SRC})
      list(FIND SVG_FILES_BASENAMES ${IMAGE} DUP_IMG)
      if ( ${DUP_IMG} LESS 0 )
         list(APPEND FILES_TO_PNG ${IMAGE_SRC})
      else()
         message(STATUS "image '${IMAGE}': XPM version skipped in favor of SVG")
      endif()
   endforeach()
else()
   list(APPEND IMAGES_TO_COPY ${XPM_FILES})
endif(XPM2PNG)

foreach (IMAGE_SRC ${FILES_TO_PNG})
   string(REGEX REPLACE ".[a-z]*\$" "" IMAGE ${IMAGE_SRC})
   
   if ( IMAGE_SRC MATCHES ".*svgz*" )
      if ( DEFINED svg2png_scaling_nav AND ${IMAGE} MATCHES "^nav_")
         add_scale_targets(${IMAGE_SRC} ${IMAGE} ${svg2png_scaling_nav})
      elseif( DEFINED svg2png_scaling_flag AND ${IMAGE} MATCHES "^country_")
         add_scale_targets(${IMAGE_SRC} ${IMAGE} ${svg2png_scaling_flag})
      elseif( DEFINED svg2png_scaling)
         add_scale_targets(${IMAGE_SRC} ${IMAGE} ${svg2png_scaling})
      endif()
   else()
      add_scale_targets(${IMAGE_SRC} ${IMAGE} 0)
   endif()
      
endforeach()

foreach (IMAGE_FILE ${IMAGES_TO_COPY})
   add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_FILE}"
		      DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${IMAGE_FILE}"
		      COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${IMAGE_FILE}"
		      "${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_FILE}"
   )
   list(APPEND IMAGE_TARGETS "${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_FILE}")
endforeach()

add_custom_target(images ALL DEPENDS ${IMAGE_TARGETS})
add_custom_target(images_resource COMMAND mkdir -p ../resources/share/navit/xpm COMMAND cp ${IMAGE_TARGETS} ../resources/share/navit/xpm)
add_dependencies(images_resource images)

install(
   FILES ${IMAGE_TARGETS}
   DESTINATION ${IMAGE_DIR}
   PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
