set(LINUX_ICON_SIZES 16 22 24 32 48 64 128)
set(WINDOWS_ICON_SIZES 16 24 32 48 256)
set(MACOS_ICON_SIZES 16 32 128 256 512)

find_program(CONVERT_EXECUTABLE convert)
find_program(PNG2ICNS_EXECUTABLE png2icns)

if(CONVERT_EXECUTABLE)
  set(ICON_FILES icons/tigervnc.ico)
  foreach(SIZE ${LINUX_ICON_SIZES})
    list(APPEND ICON_FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png)
  endforeach()
  if(PNG2ICNS_EXECUTABLE)
    list(APPEND ICON_FILES icons/tigervnc.icns)
  endif()
  add_custom_target(icons DEPENDS ${ICON_FILES})

  foreach(SIZE ${LINUX_ICON_SIZES} ${WINDOWS_ICON_SIZES} ${MACOS_ICON_SIZES})
    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc_${SIZE}.svg)
      set(ICON_SRC_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc_${SIZE}.svg)
    else()
      set(ICON_SRC_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tigervnc_48.svg)
    endif()
    add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png
      COMMAND ${CONVERT_EXECUTABLE} -depth 8 -background transparent
        -size ${SIZE}x${SIZE} ${ICON_SRC_FILE}
        ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png
      DEPENDS ${ICON_SRC_FILE}
      COMMENT "Generating icons/tigervnc_${SIZE}.png")
  endforeach()

  foreach(SIZE ${WINDOWS_ICON_SIZES})
    if(${SIZE} LESS_EQUAL 32)
      list(APPEND ICO_LEGACY \\\( ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png -depth 4 -colors 16 \\\))
      list(APPEND ICO_LEGACY \\\( ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png -depth 8 -colors 256 \\\))
    endif()
    list(APPEND ICO_NORMAL \\\( ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png \\\))
    list(APPEND ICO_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png)
  endforeach()
  add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc.ico
    COMMAND ${CONVERT_EXECUTABLE} ${ICO_LEGACY} ${ICO_NORMAL}
      ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc.ico
    DEPENDS ${ICO_DEPENDS}
    COMMENT "Generating icons/tigervnc.ico")

  if(PNG2ICNS_EXECUTABLE)
    # FIXME: Should be a drop shadow here as well
    foreach(SIZE ${MACOS_ICON_SIZES})
      list(APPEND ICNS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc_${SIZE}.png)
    endforeach()
    add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc.icns
      COMMAND ${PNG2ICNS_EXECUTABLE}
          ${CMAKE_CURRENT_SOURCE_DIR}/icons/tigervnc.icns ${ICNS_FILES}
      DEPENDS ${ICNS_FILES}
      COMMENT "Generating icons/tigervnc.icns")
  endif()
endif()