automoc: default to strict mode, use CMAKE_AUTOMOC_RELAXED_MODE

automoc now defaults to strict mode, also with Qt4, i.e. it behaves as
the documentation says by default. I also inverted the switch
CMAKE_AUTOMOC_STRICT_MODE to CMAKE_AUTOMOC_RELAXED_MODE.
Docs and test adapted accordingly.

Alex
This commit is contained in:
Alex Neundorf 2011-12-13 22:11:47 +01:00
parent 3c101429a4
commit 96fc5d5d07
6 changed files with 14 additions and 16 deletions

View File

@ -13,4 +13,4 @@ set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/")
set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" ) set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" )
set(AM_Qt5Core_VERSION_MAJOR "@Qt5Core_VERSION_MAJOR@" ) set(AM_Qt5Core_VERSION_MAJOR "@Qt5Core_VERSION_MAJOR@" )
set(AM_TARGET_NAME "@_moc_target_name@") set(AM_TARGET_NAME "@_moc_target_name@")
set(AM_STRICT_MODE "@_moc_strict_mode@") set(AM_RELAXED_MODE "@_moc_relaxed_mode@")

View File

@ -508,16 +508,15 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Variables That Change Behavior"); "Variables That Change Behavior");
cm->DefineProperty cm->DefineProperty
("CMAKE_AUTOMOC_STRICT_MODE", cmProperty::VARIABLE, ("CMAKE_AUTOMOC_RELAXED_MODE", cmProperty::VARIABLE,
"Switch between strict and relaxed automoc mode.", "Switch between strict and relaxed automoc mode.",
"When TRUE, automoc behaves exactly as described in the documentation " "By default, automoc behaves exactly as described in the documentation "
"of the AUTOMOC target property. " "of the AUTOMOC target property. "
"When set to FALSE, it accepts more input and tries to find the correct " "When set to TRUE, it accepts more input and tries to find the correct "
"input file for moc even if it differs from the documented behaviour. " "input file for moc even if it differs from the documented behaviour. "
"In this mode it e.g. also checks whether a header file is intended to " "In this mode it e.g. also checks whether a header file is intended to "
"be processed by moc when a \"foo.moc\" file has been included.\n" "be processed by moc when a \"foo.moc\" file has been included.\n"
"When using Qt4, CMAKE_AUTOMOC_STRICT_MODE is initialized to FALSE. " "Relaxed mode has to be enabled for KDE4 compatibility.",
"It also has to be set to FALSE for KDE4 compatibility.",
false, false,
"Variables That Change Behavior"); "Variables That Change Behavior");

View File

@ -119,11 +119,7 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
return; return;
} }
bool strictMode = (qtMajorVersion == "5"); bool relaxedMode = makefile->IsOn("CMAKE_AUTOMOC_RELAXED_MODE");
if (makefile->IsDefinitionSet("CMAKE_AUTOMOC_STRICT_MODE"))
{
strictMode = makefile->IsOn("CMAKE_AUTOMOC_STRICT_MODE");
}
// create a custom target for running automoc at buildtime: // create a custom target for running automoc at buildtime:
std::string automocTargetName = targetName; std::string automocTargetName = targetName;
@ -213,7 +209,7 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
makefile->AddDefinition("_moc_options", _moc_options.c_str()); makefile->AddDefinition("_moc_options", _moc_options.c_str());
makefile->AddDefinition("_moc_files", _moc_files.c_str()); makefile->AddDefinition("_moc_files", _moc_files.c_str());
makefile->AddDefinition("_moc_headers", _moc_headers.c_str()); makefile->AddDefinition("_moc_headers", _moc_headers.c_str());
makefile->AddDefinition("_moc_strict_mode", strictMode ? "TRUE" : "FALSE"); makefile->AddDefinition("_moc_relaxed_mode", relaxedMode ? "TRUE" : "FALSE");
const char* cmakeRoot = makefile->GetSafeDefinition("CMAKE_ROOT"); const char* cmakeRoot = makefile->GetSafeDefinition("CMAKE_ROOT");
std::string inputFile = cmakeRoot; std::string inputFile = cmakeRoot;
@ -313,7 +309,7 @@ bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile,
this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR"); this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR");
this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME"); this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME");
this->StrictMode = makefile->IsOn("AM_STRICT_MODE"); this->RelaxedMode = makefile->IsOn("AM_RELAXED_MODE");
return true; return true;
} }
@ -509,7 +505,7 @@ bool cmQtAutomoc::RunAutomoc()
{ {
std::cout << "AUTOMOC: Checking " << absFilename << std::endl; std::cout << "AUTOMOC: Checking " << absFilename << std::endl;
} }
if (this->StrictMode == false) if (this->RelaxedMode)
{ {
this->ParseCppFile(absFilename, headerExtensions, includedMocs); this->ParseCppFile(absFilename, headerExtensions, includedMocs);
} }

View File

@ -85,7 +85,7 @@ private:
bool ColorOutput; bool ColorOutput;
bool RunMocFailed; bool RunMocFailed;
bool GenerateAll; bool GenerateAll;
bool StrictMode; bool RelaxedMode;
}; };

View File

@ -162,7 +162,7 @@ void cmTarget::DefineProperties(cmake *cm)
"CMAKE_AUTOMOC if it is set when a target is created.\n" "CMAKE_AUTOMOC if it is set when a target is created.\n"
"Additional command line options for moc can be set via the " "Additional command line options for moc can be set via the "
"AUTOMOC_MOC_OPTIONS property.\n" "AUTOMOC_MOC_OPTIONS property.\n"
"By setting the CMAKE_AUTOMOC_STRICT_MODE variable to FALSE the rules " "By setting the CMAKE_AUTOMOC_RELAXED_MODE variable to TRUE the rules "
"for searching the files which will be processed by moc can be relaxed. " "for searching the files which will be processed by moc can be relaxed. "
"See the documentation for this variable for more details."); "See the documentation for this variable for more details.");

View File

@ -10,6 +10,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_definitions(-DFOO) add_definitions(-DFOO)
# enable relaxed mode so automoc can handle all the special cases:
set(CMAKE_AUTOMOC_RELAXED_MODE TRUE)
# create an executable and a library target, both requiring automoc: # create an executable and a library target, both requiring automoc:
add_library(codeeditorLib STATIC codeeditor.cpp) add_library(codeeditorLib STATIC codeeditor.cpp)