🔨 Automatically generate resources files with cmake (#4159)
Co-authored-by: pajlada <rasmus.karlsson@pajlada.com> Fixes https://github.com/Chatterino/chatterino2/issues/3949
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
/****************************************************************************
|
||||
** WARNING! This file is autogenerated by cmake
|
||||
** WARNING! All changes made in this file will be lost!
|
||||
*****************************************************************************/
|
||||
#include "ResourcesAutogen.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
Resources2::Resources2()
|
||||
{
|
||||
@RES_SOURCE_CONTENT@
|
||||
}
|
||||
} // namespace chatterino
|
||||
@@ -0,0 +1,17 @@
|
||||
/****************************************************************************
|
||||
** WARNING! This file is autogenerated by cmake
|
||||
** WARNING! All changes made in this file will be lost!
|
||||
*****************************************************************************/
|
||||
#include <QPixmap>
|
||||
#include "common/Singleton.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
class Resources2 : public Singleton
|
||||
{
|
||||
public:
|
||||
Resources2();
|
||||
|
||||
@RES_HEADER_CONTENT@
|
||||
};
|
||||
} // namespace chatterino
|
||||
@@ -0,0 +1,82 @@
|
||||
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
|
||||
windows.rc
|
||||
)
|
||||
|
||||
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})
|
||||
|
||||
###############################
|
||||
# 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)
|
||||
|
||||
set(RES_AUTOGEN_FILES
|
||||
"${CMAKE_SOURCE_DIR}/resources/resources_autogenerated.qrc"
|
||||
"${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.cpp"
|
||||
"${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.hpp"
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
<!--
|
||||
WARNING! This file is autogenerated by cmake
|
||||
WARNING! All changes made in this file will be lost!
|
||||
-->
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
@RES_RESOURCES_CONTENT@
|
||||
</qresource>
|
||||
</RCC>
|
||||
Reference in New Issue
Block a user