Generate make rules for creating directories if they don't exist Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-05-12 19:31:10 UTC (rev 15243) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-05-12 19:32:15 UTC (rev 15244) @@ -179,7 +179,7 @@
{ string path;
- if ( parent.size() ) + if ( parent.size () > 0 ) { char buf[256]; @@ -191,11 +191,62 @@ 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->GenerateTree ( path, verbose ); + i->second->CreateRule ( f, path ); } }
@@ -302,6 +353,7 @@ GenerateXmlBuildFilesMacro (); ProcessModules (); GenerateInstallTarget (); + GenerateDirectoryTargets (); GenerateDirectories (); CheckAutomaticDependencies (); CloseMakefile (); @@ -723,7 +775,7 @@ NormalizeFilename ( targetDirectory ), installDirectory ); fprintf ( fMakefile, - "%s: %s %s\n", + "%s: %s | %s\n", normalizedTargetFilename.c_str (), sourceFilename.c_str (), normalizedTargetDirectory.c_str () ); @@ -832,3 +884,11 @@ fprintf ( fMakefile, "\n" ); } + +void +MingwBackend::GenerateDirectoryTargets () +{ + intermediateDirectory->CreateRule ( fMakefile, "" ); + outputDirectory->CreateRule ( fMakefile, "" ); + installDirectory->CreateRule ( fMakefile, "" ); +} _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-05-12 19:31:10 UTC (rev 15243) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/mingw.h 2005-05-12 19:32:15 UTC (rev 15244) @@ -34,6 +34,9 @@
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, @@ -105,6 +108,7 @@ std::string GetRegistryTargetFiles (); void OutputRegistryInstallTarget (); void GenerateInstallTarget (); + void GenerateDirectoryTargets (); FILE* fMakefile; bool use_pch; }; _____
Modified: branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp --- branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-05-12 19:31:10 UTC (rev 15243) +++ branches/xmlbuildsystem/reactos/tools/rbuild/backend/mingw/modulehandler .cpp 2005-05-12 19:32:15 UTC (rev 15244) @@ -129,7 +129,7 @@
{ string target = PassThruCacheDirectory ( NormalizeFilename ( module.GetPath () ), - backend->intermediateDirectory ); + GetTargetDirectoryTree ( module ) ); if ( pclean_files ) { string_list& clean_files = *pclean_files;