QtAutogen: Always run autogen step even when rcc is enabled (#15608)

In commit v3.2.0-rc1~480^2 (QtAutogen: Regenerate qrc files if their input
changes, 2014-09-17) the "cmake -E cmake_autogen" rule was switched from
always running to running as a custom command with dependencies if rcc
is enabled.  This is not correct because automoc always needs to re-run.
Switch back to always running the command.
This commit is contained in:
Brad King 2015-06-19 09:38:04 -04:00
parent 664156c231
commit 0e346427a2
8 changed files with 77 additions and 21 deletions

View File

@ -466,31 +466,11 @@ bool cmQtAutoGenerators::InitializeAutogenTarget(cmTarget* target)
else else
#endif #endif
{ {
cmTarget* autogenTarget = 0; cmTarget* autogenTarget = makefile->AddUtilityCommand(
if (!rcc_output.empty() && !isNinja)
{
std::vector<std::string> no_byproducts;
makefile->AddCustomCommandToOutput(rcc_output, no_byproducts,
depends, "",
commandLines, 0,
workingDirectory.c_str(),
false, false);
cmCustomCommandLines no_commands;
autogenTarget = makefile->AddUtilityCommand(
autogenTargetName, true,
workingDirectory.c_str(), rcc_output,
no_commands, false, autogenComment.c_str());
}
else
{
autogenTarget = makefile->AddUtilityCommand(
autogenTargetName, true, autogenTargetName, true,
workingDirectory.c_str(), workingDirectory.c_str(),
/*byproducts=*/rcc_output, depends, /*byproducts=*/rcc_output, depends,
commandLines, false, autogenComment.c_str()); commandLines, false, autogenComment.c_str());
}
// Set target folder // Set target folder
const char* autogenFolder = makefile->GetState() const char* autogenFolder = makefile->GetState()

View File

@ -167,3 +167,26 @@ file(TIMESTAMP "${qrc_file1}" file1_step1 "${timeformat}")
if (NOT file1_step1 GREATER file1_before) if (NOT file1_step1 GREATER file1_before)
message(SEND_ERROR "file1 (${qrc_file1}) should have changed in the first step!") message(SEND_ERROR "file1 (${qrc_file1}) should have changed in the first step!")
endif() endif()
#-----------------------------------------------------------------------------
try_compile(MOC_RERUN
"${CMAKE_CURRENT_BINARY_DIR}/automoc_rerun"
"${CMAKE_CURRENT_SOURCE_DIR}/automoc_rerun"
automoc_rerun
CMAKE_FLAGS "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}" "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_PREFIX_PATH=${Qt_PREFIX_DIR}"
OUTPUT_VARIABLE output
)
if (NOT MOC_RERUN)
message(SEND_ERROR "Initial build of automoc_rerun failed. Output: ${output}")
endif()
configure_file(automoc_rerun/test1.h.in2 automoc_rerun/test1.h COPYONLY)
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/automoc_rerun"
RESULT_VARIABLE automoc_rerun_result
)
if (automoc_rerun_result)
message(SEND_ERROR "Second build of automoc_rerun failed.")
endif()

View File

@ -0,0 +1,27 @@
cmake_minimum_required(VERSION 3.1)
project(automoc_rerun CXX)
if (QT_TEST_VERSION STREQUAL 4)
find_package(Qt4 REQUIRED)
set(QT_CORE_TARGET Qt4::QtCore)
else()
if (NOT QT_TEST_VERSION STREQUAL 5)
message(SEND_ERROR "Invalid Qt version specified.")
endif()
find_package(Qt5Core REQUIRED)
set(QT_CORE_TARGET Qt5::Core)
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
configure_file(test1.h.in1 test1.h COPYONLY)
add_executable(test1
${CMAKE_CURRENT_BINARY_DIR}/test1.h
test1.cpp
res1.qrc
)
target_include_directories(test1 PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(test1 ${QT_CORE_TARGET})

View File

@ -0,0 +1 @@
Res1 input.

View File

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>input.txt</file>
</qresource>
</RCC>

View File

@ -0,0 +1,5 @@
#include "test1.h"
int main()
{
return 0;
}

View File

@ -0,0 +1,8 @@
#include <QObject>
class test1 : public QObject
{
Q_OBJECT
public slots:
void onTst1() {}
void onTst2() {}
};

View File

@ -0,0 +1,7 @@
#include <QObject>
class test1 : public QObject
{
Q_OBJECT
public slots:
void onTst1() {}
};