diff --git a/Source/cmIncludeCommand.cxx b/Source/cmIncludeCommand.cxx index bfbcb0558..1b440dec9 100644 --- a/Source/cmIncludeCommand.cxx +++ b/Source/cmIncludeCommand.cxx @@ -20,18 +20,26 @@ // cmIncludeCommand bool cmIncludeCommand::InitialPass(std::vector& args) { - if (args.size()< 1) + if (args.size()< 1 || args.size() > 2) { - this->SetError("called with wrong number of arguments."); + this->SetError("called with wrong number of arguments. " + "Include only takes one file."); } - for( unsigned int i=0; i< args.size(); i++) + m_Makefile->ExpandVariablesInString( args[0]); + bool exists = cmSystemTools::FileExists(args[0].c_str()); + if(args.size() == 2 && args[1] == "OPTIONAL" && !exists) { - m_Makefile->ExpandVariablesInString( args[i]); - m_Makefile->ReadListFile( m_Makefile->GetCurrentListFile(), - args[i].c_str()); + return true; } - + if(!exists) + { + std::string error = "Include file not found: " + args[0]; + this->SetError(error.c_str()); + return false; + } + m_Makefile->ReadListFile( m_Makefile->GetCurrentListFile(), + args[0].c_str()); return true; } diff --git a/Source/cmIncludeCommand.h b/Source/cmIncludeCommand.h index 99f9bd131..c60fbefb2 100644 --- a/Source/cmIncludeCommand.h +++ b/Source/cmIncludeCommand.h @@ -69,7 +69,8 @@ public: virtual const char* GetFullDocumentation() { return - "INCLUDE(file1 file2)\n"; + "INCLUDE(file1 [OPTIONAL])\nIf OPTIONAL is present, then do not complain " + "if the file does not exist."; } cmTypeMacro(cmIncludeCommand, cmCommand);