Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

cmt_project.cxx File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "cmt_project.h"
#include "cmt_database.h"
#include "cmt_system.h"
#include "cmt_awk.h"
#include "cmt_syntax.h"
#include "cmt_tag.h"
#include "cmt_error.h"

Include dependency graph for cmt_project.cxx:

Include dependency graph

Go to the source code of this file.

Classes

class  ProjectPatcher
class  ProjectReader
class  VisitorForFillCMTPATH
class  VisitorForShowPaths

Functions

bool get_release_from_path (const CmtSystem::cmt_string_vector &items, const cmt_string &path, const cmt_string &name, cmt_string &real_name, cmt_string &release)


Function Documentation

bool get_release_from_path const CmtSystem::cmt_string_vector items,
const cmt_string path,
const cmt_string name,
cmt_string real_name,
cmt_string release
[static]
 

Definition at line 97 of file cmt_project.cxx.

References CmtSystem::basename(), CmtSystem::cmt_string_vector, CmtSystem::dirname(), CmtSystem::file_separator(), and cmt_vector< T >::size().

Referenced by ProjectFactory::create_project().

00102 {
00103   bool result = false;
00104 
00105   release = "";
00106   real_name = "";
00107 
00108   cmt_string p = path;
00109 
00110   if ((items.size () == 0) && (name == ""))
00111     {
00112       // There is no CMTPROJECTPATH and no expected project name.
00113       // We have no way to find a project structure
00114       // So we only expect a 2-level structure.
00115 
00116       CmtSystem::basename (p, release);
00117       CmtSystem::dirname (p, p);
00118       CmtSystem::basename (p, real_name);
00119       
00120       return (false);
00121     }
00122 
00123   for (;;)
00124     {
00125       if (p == "")
00126         {
00127           // Protection: we found no matching project name
00128           // and path was outside any CMTPROJECTPATH
00129 
00130           p = path;
00131 
00132           CmtSystem::basename (p, release);
00133           CmtSystem::dirname (p, p);
00134           CmtSystem::basename (p, real_name);
00135 
00136           return (false);
00137         }
00138 
00139       cmt_string n;
00140 
00141       CmtSystem::basename (p, n);
00142       CmtSystem::dirname (p, p);
00143 
00144       if (n == name)
00145         {
00146           real_name = name;
00147           result = true;
00148           break;
00149         }
00150 
00151       CmtSystem::basename (p, real_name);
00152 
00153       for (int i = 0; i < items.size (); i++)
00154         {
00155           const cmt_string& item = items[i];
00156           if (p == item)
00157             {
00158               // We have reached an item of CMTPROJECTPATH, no need to continue
00159               return (false);
00160             }
00161         }
00162 
00163       if (release == "")
00164         {
00165           release = n;
00166         }
00167       else
00168         {
00169           cmt_string r;
00170 
00171           r = n;
00172           r += CmtSystem::file_separator ();
00173           r += release;
00174           release = r;
00175         }
00176     }
00177 
00178   //cerr << "$CMT> GRFP> path=" << path << " name=" << name << " rel=" << release << endl;
00179 
00180   return (result);
00181 }


Generated on Mon May 2 10:25:17 2005 for CMT by doxygen 1.3.5