[CMake] Suggestions for FindQt4: finding qmake and headers for .moc

Michael G. Hansen mikeml2 at pfna.de
Wed Oct 4 02:51:39 EDT 2006


Hi,

I have two suggestions for FindQt4.cmake:

1. FindQt4 looks for qmake before qmake-qt4. I think the other way
around would be better, because FindQt4 fails if it finds qmake and then
finds out that it is from QT3, without looking at the possibility of
using qmake-qt4. So
FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS ...
should be changed to
FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake-qt4 qmake PATHS ...

2. When looking for a header file to generate a .moc from, the extension
.h is assumed. Instead, we should test for existing .h, .hxx and .hpp:

  SET(_header FALSE)
  FOREACH(_header_loop "${_basename}.h" "${_basename}.hxx"
"${_basename}.hpp")
    IF(EXISTS "${_abs_PATH}/${_header_loop}")
      IF(_header)
        MESSAGE( FATAL_ERROR "Found more than one header for ${_abs_FILE}!")
      ENDIF(_header)
      SET(_header "${_abs_PATH}/${_header_loop}")
    ENDIF(EXISTS "${_abs_PATH}/${_header_loop}")
  ENDFOREACH(_header_loop)
  IF(NOT _header)
    MESSAGE( FATAL_ERROR "Could not find a header for ${_abs_FILE}!")
  ENDIF (NOT _header)

Attached is a diff to FindQt4.cmake from CMake version 2.4.3.

Greetings,
Mike

-- 
Michael Hansen - http://www.pfna.de/
Monheim / Germany
-------------- next part --------------
--- FindQt4.cmake.old	2006-07-31 16:49:56.000000000 +0200
+++ FindQt4.cmake	2006-10-04 08:36:08.000000000 +0200
@@ -172,7 +172,7 @@
 ENDIF(WIN32)
 
 # check for qmake
-FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS
+FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake-qt4 qmake PATHS
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin"
   $ENV{QTDIR}/bin
@@ -783,7 +783,20 @@
 
                   GET_filename_component(_basename ${_current_MOC} NAME_WE)
    #               SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h)
-                  SET(_header ${_abs_PATH}/${_basename}.h)
+#                  SET(_header ${_abs_PATH}/${_basename}.h)
+                  SET(_header FALSE)
+                  FOREACH(_header_loop "${_basename}.h" "${_basename}.hxx" "${_basename}.hpp")
+                     IF(EXISTS "${_abs_PATH}/${_header_loop}")
+                        IF(_header)
+                          MESSAGE( FATAL_ERROR "Found more than one header for ${_abs_FILE}!")
+                        ENDIF(_header)
+                        SET(_header "${_abs_PATH}/${_header_loop}")
+                     ENDIF(EXISTS "${_abs_PATH}/${_header_loop}")
+                  ENDFOREACH(_header_loop)
+                  IF(NOT _header)
+                   MESSAGE( FATAL_ERROR "Could not find a header for ${_abs_FILE}!")
+                  ENDIF (NOT _header)
+
                   SET(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
                   ADD_CUSTOM_COMMAND(OUTPUT ${_moc}
                      COMMAND ${QT_MOC_EXECUTABLE}


More information about the CMake mailing list