Merge topic 'TheRealAutomocIncludeDirFix'
acc2240 Automoc: get include dirs without stripping implicit include dirs off
This commit is contained in:
commit
7b20f893c2
@ -1329,7 +1329,9 @@ std::string cmLocalGenerator::GetIncludeFlags(
|
|||||||
void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
|
void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
|
||||||
cmGeneratorTarget* target,
|
cmGeneratorTarget* target,
|
||||||
const char* lang,
|
const char* lang,
|
||||||
const char *config)
|
const char *config,
|
||||||
|
bool stripImplicitInclDirs
|
||||||
|
)
|
||||||
{
|
{
|
||||||
// Need to decide whether to automatically include the source and
|
// Need to decide whether to automatically include the source and
|
||||||
// binary directories at the beginning of the include path.
|
// binary directories at the beginning of the include path.
|
||||||
@ -1404,18 +1406,21 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load implicit include directories for this language.
|
if (stripImplicitInclDirs)
|
||||||
std::string impDirVar = "CMAKE_";
|
|
||||||
impDirVar += lang;
|
|
||||||
impDirVar += "_IMPLICIT_INCLUDE_DIRECTORIES";
|
|
||||||
if(const char* value = this->Makefile->GetDefinition(impDirVar.c_str()))
|
|
||||||
{
|
{
|
||||||
std::vector<std::string> impDirVec;
|
// Load implicit include directories for this language.
|
||||||
cmSystemTools::ExpandListArgument(value, impDirVec);
|
std::string impDirVar = "CMAKE_";
|
||||||
for(std::vector<std::string>::const_iterator i = impDirVec.begin();
|
impDirVar += lang;
|
||||||
i != impDirVec.end(); ++i)
|
impDirVar += "_IMPLICIT_INCLUDE_DIRECTORIES";
|
||||||
|
if(const char* value = this->Makefile->GetDefinition(impDirVar.c_str()))
|
||||||
{
|
{
|
||||||
emitted.insert(*i);
|
std::vector<std::string> impDirVec;
|
||||||
|
cmSystemTools::ExpandListArgument(value, impDirVec);
|
||||||
|
for(std::vector<std::string>::const_iterator i = impDirVec.begin();
|
||||||
|
i != impDirVec.end(); ++i)
|
||||||
|
{
|
||||||
|
emitted.insert(*i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +212,8 @@ public:
|
|||||||
/** Get the include flags for the current makefile and language. */
|
/** Get the include flags for the current makefile and language. */
|
||||||
void GetIncludeDirectories(std::vector<std::string>& dirs,
|
void GetIncludeDirectories(std::vector<std::string>& dirs,
|
||||||
cmGeneratorTarget* target,
|
cmGeneratorTarget* target,
|
||||||
const char* lang = "C", const char *config = 0);
|
const char* lang = "C", const char *config = 0,
|
||||||
|
bool stripImplicitInclDirs = true);
|
||||||
|
|
||||||
/** Compute the language used to compile the given source file. */
|
/** Compute the language used to compile the given source file. */
|
||||||
const char* GetSourceFileLanguage(const cmSourceFile& source);
|
const char* GetSourceFileLanguage(const cmSourceFile& source);
|
||||||
|
@ -212,36 +212,11 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* qtIncDir = 0;
|
|
||||||
const char* qtCoreIncDir = 0;
|
|
||||||
|
|
||||||
// check whether ${QT_INCLUDE_DIR} is part of the implicit include dirs,
|
|
||||||
// see http://public.kitware.com/Bug/view.php?id=13667
|
|
||||||
bool qtIncludeDirMayHaveBeenRemoved = false;
|
|
||||||
if (makefile->IsSet("QT_INCLUDE_DIR"))
|
|
||||||
{
|
|
||||||
qtIncDir = makefile->GetDefinition("QT_INCLUDE_DIR");
|
|
||||||
std::string s =
|
|
||||||
makefile->GetSafeDefinition("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES");
|
|
||||||
std::vector<std::string> implIncDirs;
|
|
||||||
cmSystemTools::ExpandListArgument(s, implIncDirs);
|
|
||||||
if (std::find(implIncDirs.begin(), implIncDirs.end(),std::string(qtIncDir))
|
|
||||||
!= implIncDirs.end())
|
|
||||||
{
|
|
||||||
qtIncludeDirMayHaveBeenRemoved = true;
|
|
||||||
if (makefile->IsSet("QT_QTCORE_INCLUDE_DIR"))
|
|
||||||
{
|
|
||||||
qtCoreIncDir = makefile->GetDefinition("QT_QTCORE_INCLUDE_DIR");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool haveQtCoreIncDir = false;
|
|
||||||
bool haveQtIncDir = false;
|
|
||||||
|
|
||||||
std::vector<std::string> includeDirs;
|
std::vector<std::string> includeDirs;
|
||||||
cmGeneratorTarget gtgt(target);
|
cmGeneratorTarget gtgt(target);
|
||||||
localGen->GetIncludeDirectories(includeDirs, >gt, "CXX");
|
// Get the include dirs for this target, without stripping the implicit
|
||||||
|
// include dirs off, see http://public.kitware.com/Bug/view.php?id=13667
|
||||||
|
localGen->GetIncludeDirectories(includeDirs, >gt, "CXX", 0, false);
|
||||||
std::string _moc_incs = "";
|
std::string _moc_incs = "";
|
||||||
const char* sep = "";
|
const char* sep = "";
|
||||||
for(std::vector<std::string>::const_iterator incDirIt = includeDirs.begin();
|
for(std::vector<std::string>::const_iterator incDirIt = includeDirs.begin();
|
||||||
@ -251,37 +226,6 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
|
|||||||
_moc_incs += sep;
|
_moc_incs += sep;
|
||||||
sep = ";";
|
sep = ";";
|
||||||
_moc_incs += *incDirIt;
|
_moc_incs += *incDirIt;
|
||||||
|
|
||||||
if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir) // #13667
|
|
||||||
{
|
|
||||||
if (*incDirIt == qtIncDir)
|
|
||||||
{
|
|
||||||
haveQtIncDir = true;
|
|
||||||
qtIncludeDirMayHaveBeenRemoved = false; // it's here, i.e. not removed
|
|
||||||
}
|
|
||||||
if (*incDirIt == qtCoreIncDir)
|
|
||||||
{
|
|
||||||
haveQtCoreIncDir = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Some projects (kdelibs, phonon) query the compiler for its default
|
|
||||||
// include search dirs, and add those to
|
|
||||||
// CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES.
|
|
||||||
// These may include e.g./usr/lib/qt/include . This is typically also part
|
|
||||||
// of ${QT_INCLUDES}. If this directory is then contained in the implicit
|
|
||||||
// include dirs, it is removed from the include dirs returned from the
|
|
||||||
// target above. So we add ${QT_INCLUDE_DIR} manually for moc if we detected
|
|
||||||
// that ${QT_QTCORE_INCLUDE_DIR} is among the include dirs (there shouldn't
|
|
||||||
// be a way to use Qt4 without using ${QT_QTCORE_INCLUDE_DIR} I think.
|
|
||||||
// See #13646 and #13667.
|
|
||||||
if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir
|
|
||||||
&& (haveQtCoreIncDir == true) && (haveQtIncDir == false))
|
|
||||||
{
|
|
||||||
_moc_incs += sep;
|
|
||||||
sep = ";";
|
|
||||||
_moc_incs += qtIncDir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* tmp = target->GetProperty("COMPILE_DEFINITIONS");
|
const char* tmp = target->GetProperty("COMPILE_DEFINITIONS");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user