| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | 
							- /*=========================================================================
 
-   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 "cmSourceFile.h"
 
- #include "cmSystemTools.h"
 
- // Set the name of the class and the full path to the file.
 
- // The class must be found in dir and end in name.cxx, name.txx, 
 
- // name.c or it will be considered a header file only class
 
- // and not included in the build process
 
- bool cmSourceFile::SetName(const char* name, const char* dir,
 
-                            const std::vector<std::string>& sourceExts,
 
-                            const std::vector<std::string>& headerExts,
 
-                            const char* target)
 
- {
 
-   this->SetProperty("HEADER_FILE_ONLY","1");
 
-   this->SourceNameWithoutLastExtension = "";
 
-   // Save the original name given.
 
-   this->SourceName = name;
 
-   // Convert the name to a full path in case the given name is a
 
-   // relative path.
 
-   std::string pathname = cmSystemTools::CollapseFullPath(name, dir);
 
-   // First try and see whether the listed file can be found
 
-   // as is without extensions added on.
 
-   std::string hname = pathname;
 
-   if(cmSystemTools::FileExists(hname.c_str()))
 
-     {
 
-     this->SourceName = cmSystemTools::GetFilenamePath(name);
 
-     if ( this->SourceName.size() > 0 )
 
-       {
 
-       this->SourceName += "/";
 
-       }
 
-     this->SourceName += cmSystemTools::GetFilenameWithoutLastExtension(name);
 
-     std::string::size_type pos = hname.rfind('.');
 
-     if(pos != std::string::npos)
 
-       {
 
-       this->SourceExtension = hname.substr(pos+1, hname.size()-pos);
 
-       if ( cmSystemTools::FileIsFullPath(name) )
 
-         {
 
-         std::string::size_type pos2 = hname.rfind('/');
 
-         if(pos2 != std::string::npos)
 
-           {
 
-           this->SourceName = hname.substr(pos2+1, pos - pos2-1);
 
-           }
 
-         }
 
-       }
 
-     // See if the file is a header file
 
-     if(std::find( headerExts.begin(), headerExts.end(), this->SourceExtension ) ==
 
-       headerExts.end())
 
-       {
 
-       this->SetProperty("HEADER_FILE_ONLY","0");
 
-       }
 
-     this->FullPath = hname;
 
-     // Mark this as an external object file if it has the proper
 
-     // extension.  THIS CODE IS DUPLICATED IN THE OTHER SetName METHOD.
 
-     // THESE METHODS SHOULD BE MERGED.
 
-     if ( this->SourceExtension == "obj" || this->SourceExtension == "o" ||
 
-       this->SourceExtension == "lo" )
 
-       {
 
-       this->SetProperty("EXTERNAL_OBJECT", "1");
 
-       }
 
-     return true;
 
-     }
 
-   
 
-   // Next, try the various source extensions
 
-   for( std::vector<std::string>::const_iterator ext = sourceExts.begin();
 
-        ext != sourceExts.end(); ++ext )
 
-     {
 
-     hname = pathname;
 
-     hname += ".";
 
-     hname += *ext;
 
-     if(cmSystemTools::FileExists(hname.c_str()))
 
-       {
 
-       this->SourceExtension = *ext;
 
-       this->SetProperty("HEADER_FILE_ONLY","0");
 
-       this->FullPath = hname;
 
-       return true;
 
-       }
 
-     }
 
-   // Finally, try the various header extensions
 
-   for( std::vector<std::string>::const_iterator ext = headerExts.begin();
 
-        ext != headerExts.end(); ++ext )
 
-     {
 
-     hname = pathname;
 
-     hname += ".";
 
-     hname += *ext;
 
-     if(cmSystemTools::FileExists(hname.c_str()))
 
-       {
 
-       this->SourceExtension = *ext;
 
-       this->FullPath = hname;
 
-       return true;
 
-       }
 
-     }
 
-   cmOStringStream e;
 
-   e << "Cannot find source file \"" << pathname << "\"";
 
-   if(target)
 
-     {
 
-     e << " for target \"" << target << "\"";
 
-     }
 
-   e << "\n\nTried extensions";
 
-   for( std::vector<std::string>::const_iterator ext = sourceExts.begin();
 
-        ext != sourceExts.end(); ++ext )
 
-     {
 
-     e << " ." << *ext;
 
-     }
 
-   for( std::vector<std::string>::const_iterator ext = headerExts.begin();
 
-        ext != headerExts.end(); ++ext )
 
-     {
 
-     e << " ." << *ext;
 
-     }
 
-   cmSystemTools::Error(e.str().c_str());
 
-   return false;
 
- }
 
- void cmSourceFile::SetName(const char* name, const char* dir, const char *ext,
 
-                            bool hfo)
 
- {
 
-   this->SetProperty("HEADER_FILE_ONLY",(hfo ? "1" : "0"));
 
-   this->SourceNameWithoutLastExtension = "";
 
-   this->SourceName = name;
 
-   std::string fname = this->SourceName;
 
-   if(ext && strlen(ext))
 
-     {
 
-     fname += ".";
 
-     fname += ext;
 
-     }
 
-   this->FullPath = cmSystemTools::CollapseFullPath(fname.c_str(), dir);
 
-   cmSystemTools::ConvertToUnixSlashes(this->FullPath);
 
-   this->SourceExtension = ext;
 
-   // Mark this as an external object file if it has the proper
 
-   // extension.  THIS CODE IS DUPLICATED IN THE OTHER SetName METHOD.
 
-   // THESE METHODS SHOULD BE MERGED.
 
-   if ( this->SourceExtension == "obj" || this->SourceExtension == "o" ||
 
-        this->SourceExtension == "lo" )
 
-     {
 
-     this->SetProperty("EXTERNAL_OBJECT", "1");
 
-     }
 
-   return;
 
- }
 
- void cmSourceFile::Print() const
 
- {
 
-   std::cerr << "this->FullPath: " <<  this->FullPath << "\n";
 
-   std::cerr << "this->SourceName: " << this->SourceName << std::endl;
 
-   std::cerr << "this->SourceExtension: " << this->SourceExtension << "\n";
 
- }
 
- void cmSourceFile::SetProperty(const char* prop, const char* value)
 
- {
 
-   if (!prop)
 
-     {
 
-     return;
 
-     }
 
-   if (!value)
 
-     {
 
-     value = "NOTFOUND";
 
-     }
 
-   this->Properties[prop] = value;
 
- }
 
- const char *cmSourceFile::GetProperty(const char* prop) const
 
- {
 
-   // watch for special "computed" properties that are dependent on other
 
-   // properties or variables, always recompute them
 
-   if (!strcmp(prop,"LOCATION"))
 
-     {
 
-     return this->FullPath.c_str();
 
-     }
 
-   std::map<cmStdString,cmStdString>::const_iterator i = 
 
-     this->Properties.find(prop);
 
-   if (i != this->Properties.end())
 
-     {
 
-     return i->second.c_str();
 
-     }
 
-   return 0;
 
- }
 
- bool cmSourceFile::GetPropertyAsBool(const char* prop) const
 
- {
 
-   std::map<cmStdString,cmStdString>::const_iterator i = 
 
-     this->Properties.find(prop);
 
-   if (i != this->Properties.end())
 
-     {
 
-     return cmSystemTools::IsOn(i->second.c_str());
 
-     }
 
-   return false;
 
- }
 
- void cmSourceFile::SetCustomCommand(cmCustomCommand* cc)
 
- {
 
-   if(this->CustomCommand)
 
-     {
 
-     delete this->CustomCommand;
 
-     }
 
-   this->CustomCommand = cc;
 
- }
 
- const std::string& cmSourceFile::GetSourceNameWithoutLastExtension()
 
- {
 
-   if ( this->SourceNameWithoutLastExtension.empty() )
 
-     {
 
-     this->SourceNameWithoutLastExtension = 
 
-       cmSystemTools::GetFilenameWithoutLastExtension(this->FullPath);
 
-     }
 
-   return this->SourceNameWithoutLastExtension;
 
- }
 
 
  |