| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # UPSTREAM our ECMAddAppIcon.cmake then require that version here
- # find_package(ECM 1.7.0 REQUIRED NO_MODULE)
- # list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
- include(ECMAddAppIcon)
- find_program(SVG_CONVERTER
- NAMES inkscape inkscape.exe rsvg-convert
- REQUIRED
- HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV SVG_CONVERTER_DIR)
- # REQUIRED keyword is only supported on CMake 3.18 and above
- if (NOT SVG_CONVERTER)
- message(FATAL_ERROR "Could not find a suitable svg converter. Set SVG_CONVERTER_DIR to the path of either the inkscape or rsvg-convert executable.")
- endif()
- function(generate_sized_png_from_svg icon_path size)
- set(options)
- set(oneValueArgs OUTPUT_ICON_NAME OUTPUT_ICON_FULL_NAME_WLE OUTPUT_ICON_PATH)
- set(multiValueArgs)
- cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- get_filename_component(icon_name_dir ${icon_path} DIRECTORY)
- get_filename_component(icon_name_wle ${icon_path} NAME_WLE)
- if (ARG_OUTPUT_ICON_NAME)
- set(icon_name_wle ${ARG_OUTPUT_ICON_NAME})
- endif ()
- if (ARG_OUTPUT_ICON_PATH)
- set(icon_name_dir ${ARG_OUTPUT_ICON_PATH})
- endif ()
- set(output_icon_full_name_wle "${size}-${icon_name_wle}")
- if (ARG_OUTPUT_ICON_FULL_NAME_WLE)
- set(output_icon_full_name_wle ${ARG_OUTPUT_ICON_FULL_NAME_WLE})
- endif ()
- if (EXISTS "${icon_name_dir}/${output_icon_full_name_wle}.png")
- return()
- endif()
- set(icon_output_name "${output_icon_full_name_wle}.png")
- message(STATUS "Generate ${icon_output_name}")
- execute_process(COMMAND
- "${SVG_CONVERTER}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}"
- WORKING_DIRECTORY "${icon_name_dir}"
- RESULT_VARIABLE
- SVG_CONVERTER_SIDEBAR_ERROR
- OUTPUT_QUIET
- ERROR_QUIET)
- if (SVG_CONVERTER_SIDEBAR_ERROR)
- message(FATAL_ERROR
- "${SVG_CONVERTER} could not generate icon: ${SVG_CONVERTER_SIDEBAR_ERROR}")
- else()
- endif()
- endfunction()
|