Move Directory class to its own file
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
Added: trunk/reactos/tools/rbuild/directory.cpp
Modified: trunk/reactos/tools/rbuild/rbuild.h
Modified: trunk/reactos/tools/rbuild/rbuild.mak

Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp	2005-11-22 21:32:11 UTC (rev 19468)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp	2005-11-22 21:58:50 UTC (rev 19469)
@@ -19,20 +19,8 @@
 
 #include "mingw.h"
 #include <assert.h>
-#ifdef _MSC_VER
-#define popen _popen
-#define pclose _pclose
-#else
-#include <dirent.h>
-#endif//_MSC_VER
 #include "modulehandler.h"
 
-#ifdef WIN32
-#define MKDIR(s) mkdir(s)
-#else
-#define MKDIR(s) mkdir(s, 0755)
-#endif
-
 using std::string;
 using std::vector;
 using std::set;
@@ -62,180 +50,6 @@
 }
 
 
-Directory::Directory ( const string& name_ )
-	: name(name_)
-{
-}
-
-void
-Directory::Add ( const char* subdir )
-{
-	size_t i;
-	string s1 = string ( subdir );
-	if ( ( i = s1.find ( '$' ) ) != string::npos )
-	{
-		throw InvalidOperationException ( __FILE__,
-		                                  __LINE__,
-		                                  "No environment variables can be used here. Path was %s",
-		                                  subdir );
-	}
-
-	const char* p = strpbrk ( subdir, "/\\" );
-	if ( !p )
-		p = subdir + strlen(subdir);
-	string s ( subdir, p-subdir );
-	if ( subdirs.find(s) == subdirs.end() )
-		subdirs[s] = new Directory(s);
-	if ( *p && *++p )
-		subdirs[s]->Add ( p );
-}
-
-bool
-Directory::mkdir_p ( const char* path )
-{
-#ifndef _MSC_VER
-	DIR *directory;
-	directory = opendir ( path );
-	if ( directory != NULL )
-	{
-		closedir ( directory );
-		return false;
-	}
-#endif//_MSC_VER
-
-	if ( MKDIR ( path ) != 0 )
-	{
-#ifdef _MSC_VER
-		if ( errno == EEXIST )
-			return false;
-#endif//_MSC_VER
-		throw AccessDeniedException ( string ( path ) );
-	}
-	return true;
-}
-
-bool
-Directory::CreateDirectory ( string path )
-{
-	size_t index = 0;
-	size_t nextIndex;
-	if ( isalpha ( path[0] ) && path[1] == ':' && path[2] == cSep )
-	{
-		nextIndex = path.find ( cSep, 3);
-	}
-	else
-		nextIndex = path.find ( cSep );
-
-	bool directoryWasCreated = false;
-	while ( nextIndex != string::npos )
-	{
-		nextIndex = path.find ( cSep, index + 1 );
-		directoryWasCreated = mkdir_p ( path.substr ( 0, nextIndex ).c_str () );
-		index = nextIndex;
-	}
-	return directoryWasCreated;
-}
-
-string
-Directory::ReplaceVariable ( string name,
-                             string value,
-                             string path )
-{
-	size_t i = path.find ( name );
-	if ( i != string::npos )
-		return path.replace ( i, name.length (), value );
-	else
-		return path;
-}
-
-void
-Directory::ResolveVariablesInPath ( char* buf,
-                                    string path )
-{
-	string s = ReplaceVariable ( "$(INTERMEDIATE)", Environment::GetIntermediatePath (), path );
-	s = ReplaceVariable ( "$(OUTPUT)", Environment::GetOutputPath (), s );
-	s = ReplaceVariable ( "$(INSTALL)", Environment::GetInstallPath (), s );
-	strcpy ( buf, s.c_str () );
-}
-
-void
-Directory::GenerateTree ( const string& parent,
-                          bool verbose )
-{
-	string path;
-
-	if ( parent.size () > 0 )
-	{
-		char buf[256];
-		
-		path = parent + sSep + name;
-		ResolveVariablesInPath ( buf, path );
-		if ( CreateDirectory ( buf ) && verbose )
-			printf ( "Created %s\n", buf );
-	}
-	else
-		path = name;
-
-	for ( directory_map::iterator i = subdirs.begin ();
-		i != subdirs.end ();
-		++i )
-	{
-		i->second->GenerateTree ( path, verbose );
-	}
-}
-
-string
-Directory::EscapeSpaces ( string path )
-{
-	string newpath;
-	char* p = &path[0];
-	while ( *p != 0 )
-	{
-		if ( *p == ' ' )
-			newpath = newpath + "\\ ";
-		else
-			newpath = newpath + *p;
-		*p++;
-	}
-	return newpath;
-}
-
-void
-Directory::CreateRule ( FILE* f,
-                        const string& parent )
-{
-	string path;
-
-	if ( parent.size() > 0 )
-	{
-		string escapedParent = EscapeSpaces ( parent );
-		fprintf ( f,
-			"%s%c%s: | %s\n",
-			escapedParent.c_str (),
-			cSep,
-			EscapeSpaces ( name ).c_str (),
-			escapedParent.c_str () );
-
-		fprintf ( f,
-			"\t$(ECHO_MKDIR)\n" );
-
-		fprintf ( f,
-			"\t${mkdir} $@\n" );
-
-		path = parent + sSep + name;
-	}
-	else
-		path = name;
-
-	for ( directory_map::iterator i = subdirs.begin();
-		i != subdirs.end();
-		++i )
-	{
-		i->second->CreateRule ( f, path );
-	}
-}
-
-
 static class MingwFactory : public Backend::Factory
 {
 public:

Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.h	2005-11-22 21:32:11 UTC (rev 19468)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.h	2005-11-22 21:58:50 UTC (rev 19469)
@@ -32,33 +32,7 @@
 extern std::string
 v2s ( const string_list& v, int wrap_at );
 
-typedef std::map<std::string,Directory*> directory_map;
 
-
-class Directory
-{
-public:
-	std::string name;
-	directory_map subdirs;
-	Directory ( const std::string& name );
-	void Add ( const char* subdir );
-	void GenerateTree ( const std::string& parent,
-	                    bool verbose );
-	std::string EscapeSpaces ( std::string path );
-	void CreateRule ( FILE* f,
-	                  const std::string& parent );
-private:
-	bool mkdir_p ( const char* path );
-	std::string ReplaceVariable ( std::string name,
-	                              std::string value,
-	                              std::string path );
-	std::string GetEnvironmentVariable ( const std::string& name );
-	void ResolveVariablesInPath ( char* buf,
-	                              std::string path );
-	bool CreateDirectory ( std::string path );
-};
-
-
 class MingwBackend : public Backend
 {
 public:

Added: trunk/reactos/tools/rbuild/directory.cpp
--- trunk/reactos/tools/rbuild/directory.cpp	2005-11-22 21:32:11 UTC (rev 19468)
+++ trunk/reactos/tools/rbuild/directory.cpp	2005-11-22 21:58:50 UTC (rev 19469)
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2005 Casper S. Hornstrup
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include "pch.h"
+#include <assert.h>
+
+#include "rbuild.h"
+#ifdef _MSC_VER
+#define popen _popen
+#define pclose _pclose
+#else
+#include <dirent.h>
+#endif//_MSC_VER
+
+#ifdef WIN32
+#define MKDIR(s) mkdir(s)
+#else
+#define MKDIR(s) mkdir(s, 0755)
+#endif
+
+using std::string;
+using std::vector;
+
+Directory::Directory ( const string& name_ )
+	: name(name_)
+{
+}
+
+void
+Directory::Add ( const char* subdir )
+{
+	size_t i;
+	string s1 = string ( subdir );
+	if ( ( i = s1.find ( '$' ) ) != string::npos )
+	{
+		throw InvalidOperationException ( __FILE__,
+		                                  __LINE__,
+		                                  "No environment variables can be used here. Path was %s",
+		                                  subdir );
+	}
+
+	const char* p = strpbrk ( subdir, "/\\" );
+	if ( !p )
+		p = subdir + strlen(subdir);
+	string s ( subdir, p-subdir );
+	if ( subdirs.find(s) == subdirs.end() )
+		subdirs[s] = new Directory(s);
+	if ( *p && *++p )
+		subdirs[s]->Add ( p );
+}
+
+bool
+Directory::mkdir_p ( const char* path )
+{
+#ifndef _MSC_VER
+	DIR *directory;
+	directory = opendir ( path );
+	if ( directory != NULL )
+	{
+		closedir ( directory );
+		return false;
+	}
+#endif//_MSC_VER
+
+	if ( MKDIR ( path ) != 0 )
+	{
+#ifdef _MSC_VER
+		if ( errno == EEXIST )
+			return false;
+#endif//_MSC_VER
+		throw AccessDeniedException ( string ( path ) );
+	}
+	return true;
+}
+
+bool
+Directory::CreateDirectory ( string path )
+{
+	size_t index = 0;
+	size_t nextIndex;
+	if ( isalpha ( path[0] ) && path[1] == ':' && path[2] == cSep )
+	{
+		nextIndex = path.find ( cSep, 3);
+	}
+	else
+		nextIndex = path.find ( cSep );
+
+	bool directoryWasCreated = false;
+	while ( nextIndex != string::npos )
+	{
+		nextIndex = path.find ( cSep, index + 1 );
+		directoryWasCreated = mkdir_p ( path.substr ( 0, nextIndex ).c_str () );
+		index = nextIndex;
+	}
+	return directoryWasCreated;
+}
+
+string
+Directory::ReplaceVariable ( string name,
+                             string value,
+                             string path )
+{
+	size_t i = path.find ( name );
+	if ( i != string::npos )
+		return path.replace ( i, name.length (), value );
+	else
+		return path;
+}
+
+void
+Directory::ResolveVariablesInPath ( char* buf,
+                                    string path )
+{
+	string s = ReplaceVariable ( "$(INTERMEDIATE)", Environment::GetIntermediatePath (), path );
+	s = ReplaceVariable ( "$(OUTPUT)", Environment::GetOutputPath (), s );
+	s = ReplaceVariable ( "$(INSTALL)", Environment::GetInstallPath (), s );
+	strcpy ( buf, s.c_str () );
+}
+
+void
+Directory::GenerateTree ( const string& parent,
+                          bool verbose )
+{
+	string path;
+
+	if ( parent.size () > 0 )
+	{
+		char buf[256];
+		
+		path = parent + sSep + name;
+		ResolveVariablesInPath ( buf, path );
+		if ( CreateDirectory ( buf ) && verbose )
+			printf ( "Created %s\n", buf );
+	}
+	else
+		path = name;
+
+	for ( directory_map::iterator i = subdirs.begin ();
+		i != subdirs.end ();
+		++i )
+	{
+		i->second->GenerateTree ( path, verbose );
+	}
+}
+
+string
+Directory::EscapeSpaces ( string path )
+{
+	string newpath;
+	char* p = &path[0];
+	while ( *p != 0 )
+	{
+		if ( *p == ' ' )
+			newpath = newpath + "\\ ";
+		else
+			newpath = newpath + *p;
+		*p++;
+	}
+	return newpath;
+}
+
+void
+Directory::CreateRule ( FILE* f,
+                        const string& parent )
+{
+	string path;
+
+	if ( parent.size() > 0 )
+	{
+		string escapedParent = EscapeSpaces ( parent );
+		fprintf ( f,
+			"%s%c%s: | %s\n",
+			escapedParent.c_str (),
+			cSep,
+			EscapeSpaces ( name ).c_str (),
+			escapedParent.c_str () );
+
+		fprintf ( f,
+			"\t$(ECHO_MKDIR)\n" );
+
+		fprintf ( f,
+			"\t${mkdir} $@\n" );
+
+		path = parent + sSep + name;
+	}
+	else
+		path = name;
+
+	for ( directory_map::iterator i = subdirs.begin();
+		i != subdirs.end();
+		++i )
+	{
+		i->second->CreateRule ( f, path );
+	}
+}
Property changes on: trunk/reactos/tools/rbuild/directory.cpp
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/reactos/tools/rbuild/rbuild.h
--- trunk/reactos/tools/rbuild/rbuild.h	2005-11-22 21:32:11 UTC (rev 19468)
+++ trunk/reactos/tools/rbuild/rbuild.h	2005-11-22 21:58:50 UTC (rev 19469)
@@ -66,6 +66,7 @@
 
 #define MS_VS_DEF_VERSION "7.10"
 
+class Directory;
 class Project;
 class IfableData;
 class Module;
@@ -96,6 +97,32 @@
 class SourceFileTest;
 
 
+typedef std::map<std::string,Directory*> directory_map;
+
+class Directory
+{
+public:
+	std::string name;
+	directory_map subdirs;
+	Directory ( const std::string& name );
+	void Add ( const char* subdir );
+	void GenerateTree ( const std::string& parent,
+	                    bool verbose );
+	std::string EscapeSpaces ( std::string path );
+	void CreateRule ( FILE* f,
+	                  const std::string& parent );
+private:
+	bool mkdir_p ( const char* path );
+	std::string ReplaceVariable ( std::string name,
+	                              std::string value,
+	                              std::string path );
+	std::string GetEnvironmentVariable ( const std::string& name );
+	void ResolveVariablesInPath ( char* buf,
+	                              std::string path );
+	bool CreateDirectory ( std::string path );
+};
+
+
 class Configuration
 {
 public:

Modified: trunk/reactos/tools/rbuild/rbuild.mak
--- trunk/reactos/tools/rbuild/rbuild.mak	2005-11-22 21:32:11 UTC (rev 19468)
+++ trunk/reactos/tools/rbuild/rbuild.mak	2005-11-22 21:58:50 UTC (rev 19469)
@@ -160,6 +160,7 @@
 		compilerflag.cpp \
 		configuration.cpp \
 		define.cpp \
+		directory.cpp \
 		exception.cpp \
 		filesupportcode.cpp \
 		include.cpp \
@@ -291,6 +292,10 @@
 	$(ECHO_CC)
 	${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
 
+$(RBUILD_INT_)directory.o: $(RBUILD_BASE_)directory.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
+	$(ECHO_CC)
+	${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
+
 $(RBUILD_INT_)exception.o: $(RBUILD_BASE_)exception.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
 	$(ECHO_CC)
 	${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@