Skip to content

Commit

Permalink
[cmake] RP_FindQt4andKDE4.cmake: Preserve the config-specific CFLAGS/…
Browse files Browse the repository at this point in the history
…CXXFLAGS variables.

KDE4's CMake files overwrite these variables with its own flags, which
breaks the debug build due to the use of GLIBCXX debug iterators:

[ 52%] Linking CXX shared module ../../../lib/rom-properties-kde4.so
CMakeFiles/rom-properties-kde4.dir/__/rp_create_thumbnail.cpp.o: In function `rp_create_thumbnail2':
src/kde/rp_create_thumbnail.cpp:194: undefined reference to `LibRpBase::RpPngWriter::write_tEXt(std::vector<std::pair<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)'
CMakeFiles/rom-properties-kde4.dir/__/RomDataView.cpp.o: In function `RomDataViewPrivate::updateMulti(unsigned int)':
src/kde/RomDataView.cpp:793: undefined reference to `LibRpBase::RomFields::getFromStringMulti(std::map<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const*, unsigned int, unsigned int)'
CMakeFiles/rom-properties-kde4.dir/__/RomDataView.cpp.o: In function `RomDataViewPrivate::initAgeRatings(QLabel*, LibRpBase::RomFields::Field const&)':
src/kde/RomDataView.cpp:719: undefined reference to `LibRpBase::RomFields::ageRatingsDecode[abi:cxx11](std::array<unsigned short, 16u> const*, bool)'
CMakeFiles/rom-properties-kde4.dir/__/config/CacheCleaner.cpp.o: In function `CacheCleaner::run()':
src/kde/config/CacheCleaner.cpp:98: undefined reference to `LibRpFile::recursiveScan(char const*, std::forward_list<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned char>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned char> > >&)'
collect2: error: ld returned 1 exit status
src/kde/kde4/CMakeFiles/rom-properties-kde4.dir/build.make:1357: recipe for target 'lib/rom-properties-kde4.so' failed

The debug build now uses std::debug:: variants of the containers, so we
need to preserve the GLIBCXX defines properly.
  • Loading branch information
GerbilSoft committed Jan 5, 2025
1 parent d470035 commit 9d5fb09
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions cmake/libs/RP_FindQt4andKDE4.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Find Qt4 and KDE4.
MACRO(FIND_QT4_AND_KDE4)
# NOTE: KDE4's .cmake files overwrite the per-configuration CFLAGS/CXXFLAGS variables.
# We'll need to preserve them here.
FOREACH(_config RELWITHDEBINFO RELEASE DEBUG DEBUGFULL PROFILE DEBIAN)
SET(OLD_CMAKE_C_FLAGS_${_config} "${CMAKE_C_FLAGS_${_config}}")
SET(OLD_CMAKE_CXX_FLAGS_${_config} "${CMAKE_CXX_FLAGS_${_config}}")
ENDFOREACH(_config)

SET(ENV{QT_SELECT} qt4)
SET(QT_DEFAULT_MAJOR_VERSION 4)
SET(QT_NO_CREATE_VERSIONLESS_TARGETS TRUE)
Expand Down Expand Up @@ -45,4 +52,14 @@ MACRO(FIND_QT4_AND_KDE4)
# Qt4 not found.
SET(BUILD_KDE4 OFF CACHE INTERNAL "Build the KDE4 plugin." FORCE)
ENDIF(QT4_FOUND)

# NOTE: KDE4's .cmake files overwrite the per-configuration CFLAGS/CXXFLAGS variables.
# We'll need to preserve them here.
FOREACH(_config RELWITHDEBINFO RELEASE DEBUG DEBUGFULL PROFILE DEBIAN)
SET(CMAKE_C_FLAGS_${_config} "${OLD_CMAKE_C_FLAGS_${_config}}")
SET(CMAKE_CXX_FLAGS_${_config} "${OLD_CMAKE_CXX_FLAGS_${_config}}")

UNSET(OLD_CMAKE_C_FLAGS_${_config})
UNSET(OLD_CMAKE_CXX_FLAGS_${_config})
ENDFOREACH(_config)
ENDMACRO(FIND_QT4_AND_KDE4)

0 comments on commit 9d5fb09

Please sign in to comment.