| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 | 
							- /*=========================================================================
 
-   Program:   Insight Segmentation & Registration Toolkit
 
-   Module:    $RCSfile$
 
-   Language:  C++
 
-   Date:      $Date$
 
-   Version:   $Revision$
 
- Copyright (c) 2001 Insight Consortium
 
- All rights reserved.
 
- Redistribution and use in source and binary forms, with or without
 
- modification, are permitted provided that the following conditions are met:
 
-  * Redistributions of source code must retain the above copyright notice,
 
-    this list of conditions and the following disclaimer.
 
-  * Redistributions in binary form must reproduce the above copyright notice,
 
-    this list of conditions and the following disclaimer in the documentation
 
-    and/or other materials provided with the distribution.
 
-  * The name of the Insight Consortium, nor the names of any consortium members,
 
-    nor of any contributors, may be used to endorse or promote products derived
 
-    from this software without specific prior written permission.
 
-   * Modified source versions must be plainly marked as such, and must not be
 
-     misrepresented as being the original software.
 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
 
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
 
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
- =========================================================================*/
 
- #include "cmake.h"
 
- #include "cmCacheManager.h"
 
- // include the generator
 
- #if defined(_WIN32) && !defined(__CYGWIN__)
 
- #include "cmMSProjectGenerator.h"
 
- #include "cmBorlandMakefileGenerator.h"
 
- #else
 
- #include "cmUnixMakefileGenerator.h"
 
- #endif
 
- cmake::cmake()
 
- {
 
-   m_Verbose = false;
 
- #if defined(_WIN32) && !defined(__CYGWIN__)  
 
-   cmMakefileGenerator::RegisterGenerator(new cmMSProjectGenerator);
 
-   cmMakefileGenerator::RegisterGenerator(new cmBorlandMakefileGenerator);
 
- #else
 
-   cmMakefileGenerator::RegisterGenerator(new cmUnixMakefileGenerator);
 
- #endif
 
- }
 
- void cmake::Usage(const char* program)
 
- {
 
-   std::cerr << "cmake version " << cmMakefile::GetMajorVersion()
 
-             << "." << cmMakefile::GetMinorVersion() << "\n";
 
-   std::cerr << "Usage: " << program << " srcdir \n" 
 
-             << "Where cmake is run from the directory where you want the object files written\n";
 
-   std::cerr << "[-GgeneratorName] (where generator name can be: ";
 
-   std::vector<std::string> names;
 
-   cmMakefileGenerator::GetRegisteredGenerators(names);
 
-   for(std::vector<std::string>::iterator i =names.begin();
 
-       i != names.end(); ++i)
 
-     {
 
-     std::cerr << i->c_str() << " ";
 
-     }
 
-   std::cerr << ")\n";
 
- }
 
- // Parse the args
 
- void cmake::SetArgs(cmMakefile& builder, const std::vector<std::string>& args)
 
- {
 
-   m_Local = false;
 
-   bool directoriesSet = false;
 
-   // watch for cmake and cmake srcdir invocations
 
-   if (args.size() <= 2)
 
-     {
 
-     directoriesSet = true;
 
-     builder.SetHomeOutputDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     builder.SetStartOutputDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     if (args.size() == 2)
 
-       {
 
-       builder.SetHomeDirectory
 
- 	(cmSystemTools::CollapseFullPath(args[1].c_str()).c_str());
 
-       builder.SetStartDirectory
 
- 	(cmSystemTools::CollapseFullPath(args[1].c_str()).c_str());
 
-       }
 
-     else
 
-       {
 
-       builder.SetHomeDirectory
 
- 	(cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-       builder.SetStartDirectory
 
- 	(cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-       }
 
-     }
 
-   for(unsigned int i=1; i < args.size(); ++i)
 
-     {
 
-     std::string arg = args[i];
 
-     if(arg.find("-H",0) == 0)
 
-       {
 
-       directoriesSet = true;
 
-       std::string path = arg.substr(2);
 
-       builder.SetHomeDirectory(path.c_str());
 
-       }
 
-     else if(arg.find("-S",0) == 0)
 
-       {
 
-       directoriesSet = true;
 
-       m_Local = true;
 
-       std::string path = arg.substr(2);
 
-       builder.SetStartDirectory(path.c_str());
 
-       }
 
-     else if(arg.find("-O",0) == 0)
 
-       {
 
-       directoriesSet = true;
 
-       std::string path = arg.substr(2);
 
-       builder.SetStartOutputDirectory(path.c_str());
 
-       }
 
-     else if(arg.find("-B",0) == 0)
 
-       {
 
-       directoriesSet = true;
 
-       std::string path = arg.substr(2);
 
-       builder.SetHomeOutputDirectory(path.c_str());
 
-       }
 
-     else if(arg.find("-D",0) == 0)
 
-       {
 
- 	std::string value = arg.substr(2);
 
- 	builder.AddDefinition(value.c_str(), true);
 
-       }
 
-     else if(arg.find("-V",0) == 0)
 
-       {
 
- 	m_Verbose = true;
 
-       }
 
-     else if(arg.find("-G",0) == 0)
 
-       {
 
-       std::string value = arg.substr(2);
 
-       cmMakefileGenerator* gen = 
 
-         cmMakefileGenerator::CreateGenerator(value.c_str());
 
-       if(!gen)
 
-         {
 
-         cmSystemTools::Error("Could not create named generator ",
 
-                              value.c_str());
 
-         }
 
-       else
 
-         {
 
-         builder.SetMakefileGenerator(gen);
 
-         }
 
-       }
 
-     // no option assume it is the path to the source
 
-     else
 
-       {
 
-       directoriesSet = true;
 
-       builder.SetHomeOutputDirectory
 
-         (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-       builder.SetStartOutputDirectory
 
-         (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-       builder.SetHomeDirectory
 
-         (cmSystemTools::CollapseFullPath(args[1].c_str()).c_str());
 
-       builder.SetStartDirectory
 
-         (cmSystemTools::CollapseFullPath(args[1].c_str()).c_str());
 
-       }
 
-     }
 
-   if(!directoriesSet)
 
-     {
 
-     builder.SetHomeOutputDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     builder.SetStartOutputDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     builder.SetHomeDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     builder.SetStartDirectory
 
-       (cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-     }
 
-   if (!m_Local)
 
-     {
 
-     builder.SetStartDirectory(builder.GetHomeDirectory());
 
-     builder.SetStartOutputDirectory(builder.GetHomeOutputDirectory());
 
-     }
 
- }
 
- // at the end of this CMAKE_ROOT and CMAKE_COMMAND should be added to the cache
 
- void cmake::AddCMakePaths(const std::vector<std::string>& args)
 
- {
 
-   // Find our own executable.
 
-   std::string cMakeSelf = args[0];
 
-   cmSystemTools::ConvertToUnixSlashes(cMakeSelf);
 
-   cMakeSelf = cmSystemTools::FindProgram(cMakeSelf.c_str());
 
-   if(!cmSystemTools::FileExists(cMakeSelf.c_str()))
 
-     {
 
- #ifdef CMAKE_BUILD_DIR
 
-     cMakeSelf = CMAKE_BUILD_DIR;
 
-     cMakeSelf += "/Source/cmake";
 
- #endif
 
-     }
 
- #ifdef CMAKE_PREFIX
 
-   if(!cmSystemTools::FileExists(cMakeSelf.c_str()))
 
-     {
 
-     cMakeSelf = CMAKE_PREFIX "/bin/cmake";
 
-     }
 
- #endif
 
-   if(!cmSystemTools::FileExists(cMakeSelf.c_str()))
 
-     {
 
-     cmSystemTools::Error("CMAKE can not find the command line program cmake. "
 
-                          "Attempted path: ", cMakeSelf.c_str());
 
-     return;
 
-     }
 
-   // Save the value in the cache
 
-   cmCacheManager::GetInstance()->AddCacheEntry
 
-     ("CMAKE_COMMAND",
 
-      cmSystemTools::EscapeSpaces(cMakeSelf.c_str()).c_str(),
 
-      "Path to CMake executable.",
 
-      cmCacheManager::INTERNAL);
 
-   
 
-   // do CMAKE_ROOT, look for the environment variable first
 
-   std::string cMakeRoot;
 
-   std::string modules;
 
-   if (getenv("CMAKE_ROOT"))
 
-     {
 
-     cMakeRoot = getenv("CMAKE_ROOT");
 
-     modules = cMakeRoot + "/Modules/FindVTK.cmake";
 
-     }
 
-   if(!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // next try exe/..
 
-     cMakeRoot  = cmSystemTools::GetProgramPath(cMakeSelf.c_str());
 
-     std::string::size_type slashPos = cMakeRoot.rfind("/");
 
-     if(slashPos != std::string::npos)      
 
-       {
 
-       cMakeRoot = cMakeRoot.substr(0, slashPos);
 
-       }
 
-     // is there no Modules direcory there?
 
-     modules = cMakeRoot + "/Modules/FindVTK.cmake"; 
 
-     }
 
-   
 
-   if (!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // try exe/../share/cmake
 
-     cMakeRoot += "/share/CMake";
 
-     modules = cMakeRoot + "/Modules/FindVTK.cmake";
 
-     }
 
- #ifdef CMAKE_ROOT_DIR
 
-   if (!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // try compiled in root directory
 
-     cMakeRoot = CMAKE_ROOT_DIR;
 
-     modules = cMakeRoot + "/Modules/FindVTK.cmake";
 
-     }
 
- #endif
 
- #ifdef CMAKE_PREFIX
 
-   if (!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // try compiled in install prefix
 
-     cMakeRoot = CMAKE_PREFIX "/share/CMake";
 
-     modules = cMakeRoot + "/Modules/FindVTK.cmake";
 
-     }
 
- #endif
 
-   if (!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // try 
 
-     cMakeRoot  = cmSystemTools::GetProgramPath(cMakeSelf.c_str());
 
-     cMakeRoot += "/share/CMake";
 
-     modules = cMakeRoot +  "/Modules/FindVTK.cmake";
 
-     }
 
-   if (!cmSystemTools::FileExists(modules.c_str()))
 
-     {
 
-     // couldn't find modules
 
-     cmSystemTools::Error("Could not find CMAKE_ROOT !!!\n", 
 
-                          "Modules directory not in directory:\n",
 
-                          modules.c_str());
 
-     return;  
 
-     }
 
-   cmCacheManager::GetInstance()->AddCacheEntry
 
-     ("CMAKE_ROOT", cMakeRoot.c_str(),
 
-      "Path to CMake installation.", cmCacheManager::INTERNAL);
 
- }
 
-  
 
- int cmake::Generate(const std::vector<std::string>& args, bool buildMakefiles)
 
- {
 
-   if(args.size() == 1 && !cmSystemTools::FileExists("CMakeLists.txt"))
 
-     {
 
-     this->Usage(args[0].c_str());
 
-     return -1;
 
-     }
 
-   // look for obvious request for help
 
-   for(unsigned int i=1; i < args.size(); ++i)
 
-     {
 
-     std::string arg = args[i];
 
-     if(arg.find("-help",0) != std::string::npos ||
 
-        arg.find("--help",0) != std::string::npos ||
 
-        arg.find("/?",0) != std::string::npos ||
 
-        arg.find("-usage",0) != std::string::npos)
 
-       {
 
-       this->Usage(args[0].c_str());
 
-       return -1;
 
-       }
 
-     }
 
-   // Create a makefile
 
-   cmMakefile mf;
 
-   // extract the directory arguments, could create a Generator
 
-   this->SetArgs(mf, args);
 
-   // Read and parse the input makefile
 
-   mf.MakeStartDirectoriesCurrent();
 
-   cmCacheManager::GetInstance()->LoadCache(&mf);
 
-   // no generator specified on the command line
 
-   if(!mf.GetMakefileGenerator())
 
-     {
 
-     cmMakefileGenerator* gen;
 
-     const char* genName = mf.GetDefinition("CMAKE_GENERATOR");
 
-     if(genName)
 
-       {
 
-       gen = cmMakefileGenerator::CreateGenerator(genName);
 
-       }
 
-     else
 
-       {
 
- #if defined(__BORLANDC__)
 
-       gen = new cmBorlandMakefileGenerator;
 
- #elif defined(_WIN32) && !defined(__CYGWIN__)  
 
-       gen = new cmMSProjectGenerator;
 
- #else
 
-       gen = new cmUnixMakefileGenerator;
 
- #endif
 
-       }
 
-     if(!gen)
 
-       {
 
-       cmSystemTools::Error("Could not create generator");
 
-       return -1;
 
-       }
 
-     mf.SetMakefileGenerator(gen);
 
-     // add the 
 
-     }
 
-   cmMakefileGenerator* gen = mf.GetMakefileGenerator();
 
-   gen->SetLocal(m_Local);
 
-   if(!mf.GetDefinition("CMAKE_GENERATOR"))
 
-     {
 
-     mf.AddCacheDefinition("CMAKE_GENERATOR",
 
-                           gen->GetName(),
 
-                           "Name of generator.",
 
-                           cmCacheManager::INTERNAL);
 
-     }
 
-   
 
-   // setup CMAKE_ROOT and CMAKE_COMMAND
 
-   this->AddCMakePaths(args);
 
-   // compute system info
 
-   gen->ComputeSystemInfo();
 
-   // Transfer the cache into the makefile's definitions.
 
-   cmCacheManager::GetInstance()->DefineCache(&mf);
 
-   std::string lf = mf.GetStartDirectory();
 
-   lf +=  "/CMakeLists.txt";
 
-   if(!mf.ReadListFile(lf.c_str()))
 
-     {
 
-     this->Usage(args[0].c_str());
 
-     return -1;
 
-     }
 
-   // if buildMakefiles, then call GenerateMakefile
 
-   if(buildMakefiles)
 
-     {
 
-     mf.GenerateMakefile();
 
-     }
 
-   else  // do not build, but let the commands finalize
 
-     {
 
-     std::vector<cmMakefile*> makefiles;
 
-     mf.FindSubDirectoryCMakeListsFiles(makefiles);
 
-     for(std::vector<cmMakefile*>::iterator i = makefiles.begin();
 
-       i != makefiles.end(); ++i)
 
-       {
 
-       cmMakefile* mf = *i;
 
-       mf->FinalPass();
 
-       delete mf;
 
-       }
 
-     mf.FinalPass();
 
-     }
 
-   
 
-   
 
-   // Before saving the cache
 
-   // if the project did not define one of the entries below, add them now
 
-   // so users can edit the values in the cache:
 
-   // LIBRARY_OUTPUT_PATH
 
-   // EXECUTABLE_OUTPUT_PATH
 
-   if(!cmCacheManager::GetInstance()->GetCacheValue("LIBRARY_OUTPUT_PATH"))
 
-     {
 
-     cmCacheManager::GetInstance()->AddCacheEntry("LIBRARY_OUTPUT_PATH", "",
 
-                                                  "Single output directory for building all libraries.",
 
-                                                  cmCacheManager::PATH);
 
-     } 
 
-   if(!cmCacheManager::GetInstance()->GetCacheValue("EXECUTABLE_OUTPUT_PATH"))
 
-     {
 
-     cmCacheManager::GetInstance()->AddCacheEntry("EXECUTABLE_OUTPUT_PATH", "",
 
-                                                  "Single output directory for building all executables.",
 
-                                                  cmCacheManager::PATH);
 
-     }  
 
-   
 
-   cmCacheManager::GetInstance()->SaveCache(&mf);
 
-   
 
-   if(m_Verbose)
 
-     {
 
-     cmCacheManager::GetInstance()->PrintCache(std::cout);
 
-     }
 
-   
 
-   if(cmSystemTools::GetErrorOccuredFlag())
 
-     {
 
-     return -1;
 
-     }
 
-   return 0;
 
- }
 
 
  |