Salome HOME
Porting to the Qt-5.6.x.
[modules/gui.git] / adm_local / cmake_files / UseQtExt.cmake
index 95985b7b794f8d1de948984bbe6347c1742c63a5..db787c6acde8dc875bd4db026bee5a4e6ea2a0b7 100644 (file)
@@ -47,7 +47,47 @@ MACRO(QT_WRAP_MOC)
 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)