mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
This patch makes include() and find_package() prefer cmake files located in CMAKE_ROOT over those in CMAKE_MODULE_PATH. This makes sure that the including file gets that file included which it expects, i.e. the one from cmake with which it was tested. It only changes behaviour when such an included file exists both in CMAKE_MODULE_PATH and in CMAKE_ROOT. This comes together with a new policy CMP0017, with default behaviour it behaves as it always did, but warns. With NEW behaviour it includes the file from CMAKE_ROOT instead from CMAKE_MODULE_PATH. This fixes (if CMP0017 is set) building KDE 4.5 with cmake >= 2.8.3. Also a basic test for this policy in included.
94 lines
3.0 KiB
C++
94 lines
3.0 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmIncludeCommand_h
|
|
#define cmIncludeCommand_h
|
|
|
|
#include "cmCommand.h"
|
|
|
|
/** \class cmIncludeCommand
|
|
* \brief
|
|
*
|
|
* cmIncludeCommand defines a list of distant
|
|
* files that can be "included" in the current list file.
|
|
* In almost every sense, this is identical to a C/C++
|
|
* #include command. Arguments are first expended as usual.
|
|
*/
|
|
class cmIncludeCommand : public cmCommand
|
|
{
|
|
public:
|
|
/**
|
|
* This is a virtual constructor for the command.
|
|
*/
|
|
virtual cmCommand* Clone()
|
|
{
|
|
return new cmIncludeCommand;
|
|
}
|
|
|
|
/**
|
|
* This is called when the command is first encountered in
|
|
* the CMakeLists.txt file.
|
|
*/
|
|
virtual bool InitialPass(std::vector<std::string> const& args,
|
|
cmExecutionStatus &status);
|
|
|
|
/**
|
|
* This determines if the command is invoked when in script mode.
|
|
*/
|
|
virtual bool IsScriptable() { return true; }
|
|
|
|
/**
|
|
* The name of the command as specified in CMakeList.txt.
|
|
*/
|
|
virtual const char* GetName() {return "include";}
|
|
|
|
/**
|
|
* Succinct documentation.
|
|
*/
|
|
virtual const char* GetTerseDocumentation()
|
|
{
|
|
return "Read CMake listfile code from the given file.";
|
|
}
|
|
|
|
/**
|
|
* More documentation.
|
|
*/
|
|
virtual const char* GetFullDocumentation()
|
|
{
|
|
return
|
|
" include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>]\n"
|
|
" [NO_POLICY_SCOPE])\n"
|
|
"Reads CMake listfile code from the given file. Commands in the file "
|
|
"are processed immediately as if they were written in place of the "
|
|
"include command. If OPTIONAL is present, then no error "
|
|
"is raised if the file does not exist. If RESULT_VARIABLE is given "
|
|
"the variable will be set to the full filename which "
|
|
"has been included or NOTFOUND if it failed.\n"
|
|
"If a module is specified instead of a file, the file with name "
|
|
"<modulename>.cmake is searched first in CMAKE_MODULE_PATH, then in the "
|
|
"CMake module directory. There is one exception to this: if the file "
|
|
"which calls include() is located itself in the CMake module directory, "
|
|
"then first the CMake module directory is searched and "
|
|
"CMAKE_MODULE_PATH afterwards. This behaviour is controlled by policy "
|
|
"CMP0017."
|
|
"\n"
|
|
"See the cmake_policy() command documentation for discussion of the "
|
|
"NO_POLICY_SCOPE option."
|
|
;
|
|
}
|
|
|
|
cmTypeMacro(cmIncludeCommand, cmCommand);
|
|
};
|
|
|
|
|
|
|
|
#endif
|