Merge topic 'autogen-fixes'

e3c97a19 QtAutogen: Process all ui files in a source file (#14981).
b8877b1d QtAutogen: Add source files to target when only AUTORCC is used.
This commit is contained in:
Brad King 2014-09-22 09:13:01 -04:00 committed by CMake Topic Stage
commit e6f0bb7b15
8 changed files with 176 additions and 31 deletions

View File

@ -392,7 +392,8 @@ void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget const* target)
std::map<std::string, std::string> configUicOptions;
if (target->GetPropertyAsBool("AUTOMOC")
|| target->GetPropertyAsBool("AUTOUIC"))
|| target->GetPropertyAsBool("AUTOUIC")
|| target->GetPropertyAsBool("AUTORCC"))
{
this->SetupSourceFiles(target);
}
@ -1304,8 +1305,8 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
const std::vector<std::string>& headerExtensions =
makefile->GetHeaderExtensions();
std::map<std::string, std::string> includedUis;
std::map<std::string, std::string> skippedUis;
std::map<std::string, std::vector<std::string> > includedUis;
std::map<std::string, std::vector<std::string> > skippedUis;
std::vector<std::string> uicSkipped;
cmSystemTools::ExpandListArgument(this->SkipUic, uicSkipped);
@ -1315,7 +1316,7 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
{
const bool skipUic = std::find(uicSkipped.begin(), uicSkipped.end(), *it)
!= uicSkipped.end();
std::map<std::string, std::string>& uiFiles
std::map<std::string, std::vector<std::string> >& uiFiles
= skipUic ? skippedUis : includedUis;
const std::string &absFilename = *it;
if (this->Verbose)
@ -1376,12 +1377,17 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
{
this->GenerateMoc(it->first, it->second);
}
for(std::map<std::string, std::string>::const_iterator
for(std::map<std::string, std::vector<std::string> >::const_iterator
it = includedUis.begin();
it != includedUis.end();
++it)
{
this->GenerateUi(it->first, it->second);
for (std::vector<std::string>::const_iterator nit = it->second.begin();
nit != it->second.end();
++nit)
{
this->GenerateUi(it->first, *nit);
}
}
if(!this->RccExecutable.empty())
@ -1456,9 +1462,9 @@ bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile)
void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string> &includedUis)
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::vector<std::string> > &includedUis)
{
cmsys::RegularExpression mocIncludeRegExp(
"[\n][ \t]*#[ \t]*include[ \t]+"
@ -1644,9 +1650,9 @@ void cmQtAutoGenerators::ParseCppFile(const std::string& absFilename,
void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& includedUis)
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::vector<std::string> >& includedUis)
{
cmsys::RegularExpression mocIncludeRegExp(
"[\n][ \t]*#[ \t]*include[ \t]+"
@ -1764,7 +1770,7 @@ void cmQtAutoGenerators::StrictParseCppFile(const std::string& absFilename,
void cmQtAutoGenerators::ParseForUic(const std::string& absFilename,
std::map<std::string, std::string>& includedUis)
std::map<std::string, std::vector<std::string> >& includedUis)
{
if (this->UicExecutable.empty())
{
@ -1782,8 +1788,8 @@ void cmQtAutoGenerators::ParseForUic(const std::string& absFilename,
void cmQtAutoGenerators::ParseForUic(const std::string& absFilename,
const std::string& contentsString,
std::map<std::string, std::string>& includedUis)
const std::string& contentsString,
std::map<std::string, std::vector<std::string> >& includedUis)
{
if (this->UicExecutable.empty())
{
@ -1813,7 +1819,7 @@ void cmQtAutoGenerators::ParseForUic(const std::string& absFilename,
// finding the correct header, so we need to remove the ui_ part
basename = basename.substr(3);
includedUis[realName] = basename;
includedUis[realName].push_back(basename);
matchOffset += uiIncludeRegExp.end();
} while(uiIncludeRegExp.find(contentsString.c_str() + matchOffset));
@ -1859,9 +1865,9 @@ cmQtAutoGenerators::SearchHeadersForCppFile(const std::string& absFilename,
void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders,
const std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& notIncludedMocs,
std::map<std::string, std::string>& includedUis)
const std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& notIncludedMocs,
std::map<std::string, std::vector<std::string> >& includedUis)
{
for(std::set<std::string>::const_iterator hIt=absHeaders.begin();
hIt!=absHeaders.end();

View File

@ -51,28 +51,28 @@ private:
bool GenerateUi(const std::string& realName, const std::string& uiFileName);
bool GenerateQrc();
void ParseCppFile(const std::string& absFilename,
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& includedUis);
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::vector<std::string> >& includedUis);
void StrictParseCppFile(const std::string& absFilename,
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& includedUis);
const std::vector<std::string>& headerExtensions,
std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::vector<std::string> >& includedUis);
void SearchHeadersForCppFile(const std::string& absFilename,
const std::vector<std::string>& headerExtensions,
std::set<std::string>& absHeaders);
void ParseHeaders(const std::set<std::string>& absHeaders,
const std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& notIncludedMocs,
std::map<std::string, std::string>& includedUis);
const std::map<std::string, std::string>& includedMocs,
std::map<std::string, std::string>& notIncludedMocs,
std::map<std::string, std::vector<std::string> >& includedUis);
void ParseForUic(const std::string& fileName,
const std::string& contentsString,
std::map<std::string, std::string>& includedUis);
const std::string& contentsString,
std::map<std::string, std::vector<std::string> >& includedUis);
void ParseForUic(const std::string& fileName,
std::map<std::string, std::string>& includedUis);
std::map<std::string, std::vector<std::string> >& includedUis);
void Init();

View File

@ -37,6 +37,9 @@ else()
endif()
add_executable(rcconly rcconly.cpp second_resource.qrc)
set_property(TARGET rcconly PROPERTY AUTORCC ON)
target_link_libraries(rcconly ${QT_QTCORE_TARGET})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
@ -71,6 +74,7 @@ if (CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]" AND NOT CMAKE_CONFIGURATION_
endif()
add_executable(QtAutogen main.cpp calwidget.cpp second_widget.cpp foo.cpp blub.cpp bar.cpp abc.cpp
multiplewidgets.cpp
xyz.cpp yaf.cpp gadget.cpp $<TARGET_OBJECTS:privateSlot>
test.qrc second_resource.qrc resourcetester.cpp generated.cpp ${debug_srcs}
)

View File

@ -0,0 +1,19 @@
#include "multiplewidgets.h"
#include "ui_widget1.h"
#include "ui_widget2.h"
Widget1::Widget1(QWidget *parent)
: QWidget(parent),
ui(new Ui::Widget1)
{
ui->setupUi(this);
}
Widget2::Widget2(QWidget *parent)
: QWidget(parent),
ui(new Ui::Widget2)
{
ui->setupUi(this);
}

View File

@ -0,0 +1,33 @@
#ifndef MULTIPLEWIDGETS_H
#define MULTIPLEWIDGETS_H
#include <QWidget>
namespace Ui {
class Widget1;
}
class Widget1 : public QWidget
{
Q_OBJECT
public:
Widget1(QWidget *parent = 0);
private:
Ui::Widget1 *ui;
};
namespace Ui {
class Widget2;
}
class Widget2 : public QWidget
{
Q_OBJECT
public:
Widget2(QWidget *parent = 0);
private:
Ui::Widget2 *ui;
};
#endif

View File

@ -0,0 +1,9 @@
extern int qInitResources_second_resource();
int main(int, char**)
{
// Fails to link if the symbol is not present.
qInitResources_second_resource();
return 0;
}

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget1</class>
<widget class="QWidget" name="Widget1">
<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>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>140</x>
<y>80</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>190</x>
<y>170</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget2</class>
<widget class="QWidget" name="Widget1">
<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>
<widget class="QListWidget" name="listWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>256</width>
<height>192</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>