| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | 
							- /*=========================================================================
 
-   Program:   CMake - Cross-Platform Makefile Generator
 
-   Module:    $RCSfile$
 
-   Language:  C++
 
-   Date:      $Date$
 
-   Version:   $Revision$
 
-   Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
 
-   See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
 
-      This software is distributed WITHOUT ANY WARRANTY; without even 
 
-      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
 
-      PURPOSE.  See the above copyright notices for more information.
 
- =========================================================================*/
 
- #include "cmAddCustomCommandCommand.h"
 
- #include "cmTarget.h"
 
- // cmAddCustomCommandCommand
 
- bool cmAddCustomCommandCommand::InitialPass(std::vector<std::string> const& args)
 
- {
 
-   /* Let's complain at the end of this function about the lack of a particular
 
-      arg. For the moment, let's say that COMMAND, and either TARGET or SOURCE
 
-      are required.
 
-   */
 
-   if (args.size() < 4)
 
-     {
 
-       this->SetError("called with wrong number of arguments.");
 
-       return false;
 
-     }
 
-   std::string source, command, target, comment, output, main_dependency;
 
-   std::vector<std::string> command_args, depends, outputs;
 
-   cmTarget::CustomCommandType cctype = cmTarget::POST_BUILD;
 
-   
 
-   enum tdoing {
 
-     doing_source,
 
-     doing_command,
 
-     doing_target,
 
-     doing_args,
 
-     doing_depends,
 
-     doing_main_dependency,
 
-     doing_output,
 
-     doing_outputs,
 
-     doing_comment,
 
-     doing_nothing
 
-   };
 
-   tdoing doing = doing_nothing;
 
-   for (unsigned int j = 0; j < args.size(); ++j)
 
-     {
 
-     std::string const& copy = args[j];
 
-     if(copy == "SOURCE")
 
-       {
 
-       doing = doing_source;
 
-       }
 
-     else if(copy == "COMMAND")
 
-       {
 
-       doing = doing_command;
 
-       }
 
-     else if(copy == "PRE_BUILD")
 
-       {
 
-       cctype = cmTarget::PRE_BUILD;
 
-       }
 
-     else if(copy == "PRE_LINK")
 
-       {
 
-       cctype = cmTarget::PRE_LINK;
 
-       }
 
-     else if(copy == "POST_BUILD")
 
-       {
 
-       cctype = cmTarget::POST_BUILD;
 
-       }
 
-     else if(copy == "TARGET")
 
-       {
 
-       doing = doing_target;
 
-       }
 
-     else if(copy == "ARGS")
 
-       {
 
-       doing = doing_args;
 
-       }
 
-     else if (copy == "DEPENDS")
 
-       {
 
-       doing = doing_depends;
 
-       }
 
-     else if (copy == "OUTPUTS")
 
-       {
 
-       doing = doing_outputs;
 
-       }
 
-     else if (copy == "OUTPUT")
 
-       {
 
-       doing = doing_output;
 
-       }
 
-     else if (copy == "MAIN_DEPENDENCY")
 
-       {
 
-       doing = doing_main_dependency;
 
-       }
 
-     else if (copy == "COMMENT")
 
-       {
 
-       doing = doing_comment;
 
-       }
 
-     else
 
-       {
 
-       switch (doing)
 
-         {
 
-         case doing_source:
 
-           source = copy;
 
-           break;
 
-         case doing_output:
 
-           output = copy;
 
-           break;
 
-         case doing_main_dependency:
 
-           main_dependency = copy;
 
-           break;
 
-         case doing_command:
 
-           command = copy;
 
-           break;
 
-         case doing_target:
 
-           target = copy;
 
-           break;
 
-         case doing_args:
 
-           command_args.push_back(copy);
 
-           break;
 
-         case doing_depends:
 
-           depends.push_back(copy);
 
-           break;
 
-         case doing_outputs:
 
-           outputs.push_back(copy);
 
-           break;
 
-         case doing_comment:
 
-           comment = copy;
 
-           break;
 
-         default:
 
-           this->SetError("Wrong syntax. Unknown type of argument.");
 
-           return false;
 
-         }
 
-       }
 
-     }
 
-   /* At this point we could complain about the lack of arguments.
 
-      For the moment, let's say that COMMAND, TARGET are always 
 
-      required.
 
-   */
 
-   if (output.empty() && target.empty())
 
-     {
 
-     this->SetError("Wrong syntax. A TARGET or OUTPUT must be specified.");
 
-     return false;
 
-     }
 
-   if (source.empty() 
 
-       && !target.empty() 
 
-       && !output.empty())
 
-     {
 
-     this->SetError("Wrong syntax. A TARGET and OUTPUT can not both be specified.");
 
-     return false;
 
-     }
 
-   
 
-   // If source is empty, use the target 
 
-   if(source.empty() && output.empty())
 
-     {
 
-     m_Makefile->AddCustomCommandToTarget(target.c_str(), 
 
-                                          command.c_str(), 
 
-                                          command_args, 
 
-                                          cctype,
 
-                                          comment.c_str());
 
-     return true;
 
-     }
 
-   // If target is empty, use the output
 
-   if(target.empty())
 
-     {
 
-     m_Makefile->AddCustomCommandToOutput(output.c_str(), 
 
-                                          command.c_str(), 
 
-                                          command_args, 
 
-                                          main_dependency.c_str(),
 
-                                          depends, 
 
-                                          comment.c_str());
 
-     return true;
 
-     }
 
-   // otherwise backwards compatiblity mode
 
-   m_Makefile->AddCustomCommand(source.c_str(), 
 
-                                command.c_str(), 
 
-                                command_args, 
 
-                                depends, 
 
-                                outputs, 
 
-                                target.c_str(),
 
-                                comment.c_str());
 
-   
 
-   return true;
 
- }
 
 
  |