mirror-chatterino2/cmake/resources/generate_resources.cmake

96 lines
3.6 KiB
CMake

set(RES_DIR "${CMAKE_SOURCE_DIR}/resources")
# Note: files in this ignorelist should be relative to ${RES_DIR}
set(
RES_IGNORED_FILES
.gitignore
qt.conf
resources.qrc
resources_autogenerated.qrc
themes/ChatterinoTheme.schema.json
)
set(RES_EXCLUDE_FILTER ^raw)
set(RES_IMAGE_EXCLUDE_FILTER "^(buttons/(update|clearSearch)|avatars|icon|settings|raw)")
file(GLOB_RECURSE RES_ALL_FILES RELATIVE "${RES_DIR}" LIST_DIRECTORIES false CONFIGURE_DEPENDS "${RES_DIR}/*")
file(GLOB_RECURSE RES_IMAGE_FILES RELATIVE "${RES_DIR}" LIST_DIRECTORIES false CONFIGURE_DEPENDS "${RES_DIR}/*.png")
list(REMOVE_ITEM RES_ALL_FILES ${RES_IGNORED_FILES})
list(FILTER RES_ALL_FILES EXCLUDE REGEX ${RES_EXCLUDE_FILTER})
list(FILTER RES_IMAGE_FILES EXCLUDE REGEX ${RES_IMAGE_EXCLUDE_FILTER})
###############################
# Generate resources_autogenerated.qrc
###############################
message(STATUS "Generating resources_autogenerated.qrc")
foreach (_file ${RES_ALL_FILES})
list(APPEND RES_RESOURCES_CONTENT " <file>${_file}</file>")
endforeach ()
list(JOIN RES_RESOURCES_CONTENT "\n" RES_RESOURCES_CONTENT)
configure_file(${CMAKE_CURRENT_LIST_DIR}/resources_autogenerated.qrc.in ${RES_DIR}/resources_autogenerated.qrc @ONLY)
###############################
# Generate ResourcesAutogen.cpp
###############################
message(STATUS "Generating ResourcesAutogen.cpp")
foreach (_file ${RES_IMAGE_FILES})
get_filename_component(_ext "${_file}" EXT)
string(REPLACE "${_ext}" "" _var_name ${_file})
string(REPLACE "/" "." _var_name ${_var_name})
list(APPEND RES_SOURCE_CONTENT " this->${_var_name} = QPixmap(\":/${_file}\")\;")
list(APPEND RES_VAR_NAMES "${_var_name}")
endforeach ()
list(JOIN RES_SOURCE_CONTENT "\n" RES_SOURCE_CONTENT)
configure_file(${CMAKE_CURRENT_LIST_DIR}/ResourcesAutogen.cpp.in ${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.cpp @ONLY)
###############################
# Generate ResourcesAutogen.hpp
###############################
message(STATUS "Generating ResourcesAutogen.hpp")
set(_struct_list "")
foreach (_file ${RES_IMAGE_FILES})
get_filename_component(_dir "${_file}" DIRECTORY)
get_filename_component(_name "${_file}" NAME_WE)
string(REPLACE "/" "_" _dir "${_dir}")
if (NOT _dir)
set(_dir "root")
endif ()
list(APPEND ${_dir} "${_name}")
list(APPEND _struct_list "${_dir}")
endforeach ()
list(REMOVE_DUPLICATES _struct_list)
foreach (_str_name ${_struct_list})
if (NOT "${_str_name}" STREQUAL "root")
list(APPEND RES_HEADER_CONTENT " struct {")
set(_indent " ")
else ()
set(_indent " ")
endif ()
foreach (_name ${${_str_name}})
list(APPEND RES_HEADER_CONTENT "${_indent}QPixmap ${_name}\;")
endforeach ()
if (NOT "${_str_name}" STREQUAL "root")
list(APPEND RES_HEADER_CONTENT " } ${_str_name}\;")
endif ()
endforeach ()
list(JOIN RES_HEADER_CONTENT "\n" RES_HEADER_CONTENT)
configure_file(${CMAKE_CURRENT_LIST_DIR}/ResourcesAutogen.hpp.in ${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.hpp @ONLY)
if (WIN32)
if (NOT PROJECT_VERSION_TWEAK)
set(PROJECT_VERSION_TWEAK 0)
endif()
string(TIMESTAMP CURRENT_YEAR "%Y")
configure_file(${CMAKE_CURRENT_LIST_DIR}/windows.rc.in ${CMAKE_BINARY_DIR}/autogen/windows.rc @ONLY)
list(APPEND RES_AUTOGEN_FILES "${CMAKE_BINARY_DIR}/autogen/windows.rc")
endif ()
list(APPEND RES_AUTOGEN_FILES
"${CMAKE_SOURCE_DIR}/resources/resources_autogenerated.qrc"
"${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.cpp"
"${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.hpp"
)