QtAutogen: Short-circut some logic when moc is not available.

This is the case when AUTOMOC is false.  This prevents creating rules
to moc the files in the absense of moc.
This commit is contained in:
Stephen Kelly 2014-01-24 17:01:59 +01:00
parent 4b989d5f15
commit f7ae1d8ad6
5 changed files with 85 additions and 3 deletions

View File

@ -1444,6 +1444,12 @@ void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
<< std::endl; << std::endl;
return; return;
} }
this->ParseForUic(absFilename, contentsString, includedUis);
if (this->MocExecutable.empty())
{
return;
}
const std::string absPath = cmsys::SystemTools::GetFilenamePath( const std::string absPath = cmsys::SystemTools::GetFilenamePath(
cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/'; cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/';
const std::string scannedFileBasename = cmsys::SystemTools:: const std::string scannedFileBasename = cmsys::SystemTools::
@ -1572,7 +1578,6 @@ void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
matchOffset += mocIncludeRegExp.end(); matchOffset += mocIncludeRegExp.end();
} while(mocIncludeRegExp.find(contentsString.c_str() + matchOffset)); } while(mocIncludeRegExp.find(contentsString.c_str() + matchOffset));
} }
this->ParseForUic(absFilename, contentsString, includedUis);
// In this case, check whether the scanned file itself contains a Q_OBJECT. // In this case, check whether the scanned file itself contains a Q_OBJECT.
// If this is the case, the moc_foo.cpp should probably be generated from // If this is the case, the moc_foo.cpp should probably be generated from
@ -1627,6 +1632,12 @@ void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
<< std::endl; << std::endl;
return; return;
} }
this->ParseForUic(absFilename, contentsString, includedUis);
if (this->MocExecutable.empty())
{
return;
}
const std::string absPath = cmsys::SystemTools::GetFilenamePath( const std::string absPath = cmsys::SystemTools::GetFilenamePath(
cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/'; cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/';
const std::string scannedFileBasename = cmsys::SystemTools:: const std::string scannedFileBasename = cmsys::SystemTools::
@ -1705,7 +1716,6 @@ void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
matchOffset += mocIncludeRegExp.end(); matchOffset += mocIncludeRegExp.end();
} while(mocIncludeRegExp.find(contentsString.c_str() + matchOffset)); } while(mocIncludeRegExp.find(contentsString.c_str() + matchOffset));
} }
this->ParseForUic(absFilename, contentsString, includedUis);
// In this case, check whether the scanned file itself contains a Q_OBJECT. // In this case, check whether the scanned file itself contains a Q_OBJECT.
// If this is the case, the moc_foo.cpp should probably be generated from // If this is the case, the moc_foo.cpp should probably be generated from
@ -1830,7 +1840,8 @@ void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders,
const std::string& headerName = *hIt; const std::string& headerName = *hIt;
const std::string contents = ReadAll(headerName); const std::string contents = ReadAll(headerName);
if (includedMocs.find(headerName) == includedMocs.end()) if (!this->MocExecutable.empty()
&& includedMocs.find(headerName) == includedMocs.end())
{ {
if (this->Verbose) if (this->Verbose)
{ {

View File

@ -11,6 +11,11 @@ if (QT_TEST_VERSION STREQUAL 4)
include(UseQt4) include(UseQt4)
set(QT_QTCORE_TARGET Qt4::QtCore) set(QT_QTCORE_TARGET Qt4::QtCore)
macro(qtx_wrap_cpp)
qt4_wrap_cpp(${ARGN})
endmacro()
else() else()
if (NOT QT_TEST_VERSION STREQUAL 5) if (NOT QT_TEST_VERSION STREQUAL 5)
message(SEND_ERROR "Invalid Qt version specified.") message(SEND_ERROR "Invalid Qt version specified.")
@ -25,6 +30,11 @@ else()
if(Qt5_POSITION_INDEPENDENT_CODE) if(Qt5_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif() endif()
macro(qtx_wrap_cpp)
qt5_wrap_cpp(${ARGN})
endmacro()
endif() endif()
@ -77,3 +87,7 @@ set_target_properties(empty PROPERTIES AUTOMOC TRUE)
target_link_libraries(empty no_link_language) target_link_libraries(empty no_link_language)
add_library(no_link_language STATIC empty.h) add_library(no_link_language STATIC empty.h)
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE) set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
qtx_wrap_cpp(uicOnlyMoc uiconly.h)
add_executable(uiconly uiconly.cpp ${uicOnlyMoc})
target_link_libraries(uiconly ${QT_LIBRARIES})

View File

@ -0,0 +1,13 @@
#include "uiconly.h"
UicOnly::UicOnly(QWidget *parent)
: QWidget(parent), ui(new Ui::UicOnly)
{
}
int main()
{
return 0;
}

20
Tests/QtAutogen/uiconly.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef UIC_ONLY_H
#define UIC_ONLY_H
#include <QWidget>
#include <memory>
#include "ui_uiconly.h"
class UicOnly : public QWidget
{
Q_OBJECT
public:
explicit UicOnly(QWidget *parent = 0);
private:
const std::auto_ptr<Ui::UicOnly> ui;
};
#endif

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UicOnly</class>
<widget class="QWidget" name="UicOnly">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTreeView" name="treeView"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>