Browse Source

handle ppremake .

cxgeorge 24 years ago
parent
commit
2c435eebb1
2 changed files with 29 additions and 13 deletions
  1. 27 12
      ppremake/ppMain.cxx
  2. 2 1
      ppremake/ppMain.h

+ 27 - 12
ppremake/ppMain.cxx

@@ -28,6 +28,16 @@ PPMain(PPScope *global_scope) {
 
   _def_scope = (PPScope *)NULL;
   _defs = (PPCommandFile *)NULL;
+
+  // save current working dir
+  char tmp[1024];
+  string dirpath = getcwd(tmp,sizeof(tmp));
+  size_t slash_pos = dirpath.rfind('/');
+  if (slash_pos == string::npos) {
+     _original_working_dir = dirpath;
+   } else {
+     _original_working_dir = dirpath.substr(slash_pos + 1);
+   }
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -66,11 +76,11 @@ read_source(const string &root) {
     string source_file = trydir + "/" + SOURCE_FILENAME;
     if (access(source_file.c_str(), F_OK) != 0) {
       cerr << "Could not find ppremake package file " << PACKAGE_FILENAME
-	   << ".\n\n"
-	   << "This file should be present in the top of the source directory tree;\n"
-	   << "it defines implementation-specific variables to control the output\n"
-	   << "of ppremake, as well as pointing out the installed location of\n"
-	   << "important ppremake config files.\n\n";
+       << ".\n\n"
+       << "This file should be present in the top of the source directory tree;\n"
+       << "it defines implementation-specific variables to control the output\n"
+       << "of ppremake, as well as pointing out the installed location of\n"
+       << "important ppremake config files.\n\n";
       return false;
     }
     trydir += "/..";
@@ -114,11 +124,11 @@ read_source(const string &root) {
 
   if (_tree.count_source_files() == 0) {
     cerr << "Could not find any source definition files named " << SOURCE_FILENAME
-	 << ".\n\n"
-	 << "A file by this name should be present in each directory of the source\n"
-	 << "hierarchy; it defines the source files and targets that should be\n"
-	 << "built in each directory, as well as the relationships between the\n"
-	 << "directories.\n\n";
+     << ".\n\n"
+     << "A file by this name should be present in each directory of the source\n"
+     << "hierarchy; it defines the source files and targets that should be\n"
+     << "built in each directory, as well as the relationships between the\n"
+     << "directories.\n\n";
     return false;
   }
 
@@ -171,8 +181,9 @@ process_all() {
 //               output the template file indicates.
 ////////////////////////////////////////////////////////////////////
 bool PPMain::
-process(const string &dirname) {
+process(const string &dirnam) {
   string cache_filename = _def_scope->expand_variable("DEPENDENCY_CACHE_FILENAME");
+  string dirname = dirnam;
 
   if (cache_filename.empty()) {
     cerr << "Warning: no definition given for $[DEPENDENCY_CACHE_FILENAME].\n";
@@ -180,6 +191,10 @@ process(const string &dirname) {
     _tree.read_file_dependencies(cache_filename);
   }
 
+  if(dirname == ".") {
+      dirname = _original_working_dir;
+  }
+  
   PPDirectory *dir = _tree.find_dirname(dirname);
   if (dir == (PPDirectory *)NULL) {
     cerr << "Unknown directory: " << dirname << "\n";
@@ -338,7 +353,7 @@ read_global_file() {
   PPCommandFile global(_def_scope);
   if (!global.read_file(global_filename)) {
     cerr << "Error reading global definition file "
-	 << global_filename << ".\n";
+     << global_filename << ".\n";
     return false;
   }
 

+ 2 - 1
ppremake/ppMain.h

@@ -14,7 +14,7 @@ class PPScope;
 class PPCommandFile;
 
 ///////////////////////////////////////////////////////////////////
-// 	 Class : PPMain
+//   Class : PPMain
 // Description : Handles the toplevel processing in this program:
 //               holds the tree of source files, and all the scopes,
 //               etc.  Generally get the ball rolling.
@@ -51,6 +51,7 @@ private:
   PPScope *_parent_scope;
 
   static string _root;
+  string _original_working_dir;
 };
 
 #endif