IF (QT_VERSION VERSION_LESS "5.0")
QT4_WRAP_CPP(${ARGN})
ELSE()
- QT5_WRAP_CPP(${ARGN})
+ QT5_WRAP_CPP(${ARGN})
+ # Workaround to avoid problem with bug in moc preprocessor:
+ # The problem is reproduced on Linux in case if native system Qt is installed
+ # and "-I/usr/include" parameter is presented in the moc command line before
+ # custom Qt includes. This bug takes place in Qt-5.6.0 and newer. To avoid this
+ # bug move "-I/usr/include" parameter in the "moc parameters" file to the end
+ # of the "include section".
+ IF (NOT WIN32)
+ FOREACH(IT ${ARGN})
+ GET_FILENAME_COMPONENT(IT ${IT} ABSOLUTE)
+ GET_FILENAME_COMPONENT(PFILE ${IT} NAME_WE)
+ SET(OUTFILE ${CMAKE_CURRENT_BINARY_DIR}/moc_${PFILE}.cpp_parameters)
+ IF(EXISTS ${OUTFILE})
+ SET(NEW_CONTENT)
+ SET(IS_INCLUDE_SECTION TRUE)
+ SET(HAS_SYSTEM_INC FALSE)
+ FILE(READ ${OUTFILE} CONTENT)
+ STRING(REGEX REPLACE "\n" ";" CONTENT "${CONTENT}")
+ list(REMOVE_DUPLICATES CONTENT)
+ FOREACH(S ${CONTENT})
+ IF("${S}" MATCHES "^-I")
+ IF("${S}" STREQUAL "-I/usr/include")
+ SET(HAS_SYSTEM_INC TRUE)
+ ELSE()
+ SET(NEW_CONTENT ${NEW_CONTENT} "${S}\n")
+ ENDIF()
+ ELSE()
+ SET(IS_INCLUDE_SECTION FALSE)
+ ENDIF()
+ IF(NOT IS_INCLUDE_SECTION)
+ IF(HAS_SYSTEM_INC)
+ SET(NEW_CONTENT ${NEW_CONTENT} "-I/usr/include\n")
+ SET(HAS_SYSTEM_INC FALSE)
+ ENDIF()
+ SET(NEW_CONTENT ${NEW_CONTENT} "${S}\n")
+ ENDIF()
+ ENDFOREACH()
+ FILE(WRITE ${OUTFILE} ${NEW_CONTENT})
+ ENDIF()
+ ENDFOREACH()
+ ENDIF()
ENDIF()
ENDMACRO(QT_WRAP_MOC)