Browse Source

ENH: add optional include and only allow one file per INCLUDE

Bill Hoffman 24 years ago
parent
commit
43c2a89568
2 changed files with 17 additions and 8 deletions
  1. 15 7
      Source/cmIncludeCommand.cxx
  2. 2 1
      Source/cmIncludeCommand.h

+ 15 - 7
Source/cmIncludeCommand.cxx

@@ -20,18 +20,26 @@
 // cmIncludeCommand
 bool cmIncludeCommand::InitialPass(std::vector<std::string>& 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;
 }
 

+ 2 - 1
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);