typedef set<string> set_string;\r
typedef map<string,Directory*> directory_map;\r
\r
+\r
+string\r
+v2s ( const string_list& v, int wrap_at )\r
+{\r
+ if ( !v.size() )\r
+ return "";\r
+ string s;\r
+ int wrap_count = 0;\r
+ for ( size_t i = 0; i < v.size(); i++ )\r
+ {\r
+ if ( !v[i].size() )\r
+ continue;\r
+ if ( wrap_at > 0 && wrap_count++ == wrap_at )\r
+ s += " \\\n\t\t";\r
+ else if ( s.size() )\r
+ s += " ";\r
+ s += v[i];\r
+ }\r
+ return s;\r
+}\r
+\r
+\r
class Directory\r
{\r
public:\r
GenerateGlobalVariables ();\r
GenerateXmlBuildFilesMacro ();\r
ProcessModules ();\r
+ GenerateInstallTarget ();\r
GenerateDirectories ();\r
CheckAutomaticDependencies ();\r
CloseMakefile ();\r
// TODO FIXME - eventually check for ROS_USE_PCH env var and\r
// allow that to override use_pch if true\r
}\r
+\r
+string\r
+MingwBackend::GetNonModuleInstallDirectories ( const string& installDirectory )\r
+{\r
+ string directories;\r
+ for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )\r
+ {\r
+ const InstallFile& installfile = *ProjectNode.installfiles[i];\r
+ string targetDirectory ( installDirectory + SSEP + installfile.base );\r
+ if ( directories.size () > 0 )\r
+ directories += " ";\r
+ directories += MingwModuleHandler::PassThruCacheDirectory (\r
+ FixupTargetFilename ( targetDirectory ),\r
+ true );\r
+ }\r
+ return directories;\r
+}\r
+\r
+string\r
+MingwBackend::GetInstallDirectories ( const string& installDirectory )\r
+{\r
+ return GetNonModuleInstallDirectories ( installDirectory );\r
+}\r
+\r
+void\r
+MingwBackend::GetNonModuleInstallFiles (\r
+ vector<string>& out ) const\r
+{\r
+ for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )\r
+ {\r
+ const InstallFile& installfile = *ProjectNode.installfiles[i];\r
+ out.push_back ( NormalizeFilename ( installfile.GetPath () ) );\r
+ }\r
+}\r
+\r
+void\r
+MingwBackend::GetInstallFiles (\r
+ vector<string>& out ) const\r
+{\r
+ GetNonModuleInstallFiles ( out );\r
+}\r
+\r
+void\r
+MingwBackend::OutputInstallfileCopyCommands ( const string& installDirectory )\r
+{\r
+ for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )\r
+ {\r
+ const InstallFile& installfile = *ProjectNode.installfiles[i];\r
+ string targetFilenameNoFixup = installDirectory + SSEP + installfile.base + SSEP + installfile.newname;\r
+ string targetFilename = MingwModuleHandler::PassThruCacheDirectory (\r
+ FixupTargetFilename ( targetFilenameNoFixup ),\r
+ true );\r
+ fprintf ( fMakefile,\r
+ "\t$(ECHO_CP)\n" );\r
+ fprintf ( fMakefile,\r
+ "\t${cp} %s %s\n",\r
+ installfile.GetPath ().c_str (),\r
+ targetFilename.c_str () );\r
+ }\r
+}\r
+\r
+void\r
+MingwBackend::GenerateInstallTarget ()\r
+{\r
+ string installDirectoryNoFixup = "reactos";\r
+ string installDirectory = MingwModuleHandler::PassThruCacheDirectory (\r
+ FixupTargetFilename ( installDirectoryNoFixup ),\r
+ true );\r
+ string installDirectories = GetInstallDirectories ( installDirectoryNoFixup );\r
+ vector<string> vInstallFiles;\r
+ GetInstallFiles ( vInstallFiles );\r
+ string installFiles = v2s ( vInstallFiles, 5 );\r
+\r
+ fprintf ( fMakefile,\r
+ "install: all %s %s %s\n",\r
+ installDirectory.c_str (),\r
+ installDirectories.c_str (),\r
+ installFiles.c_str () );\r
+ OutputInstallfileCopyCommands ( installDirectoryNoFixup );\r
+ fprintf ( fMakefile,\r
+ "\n" );\r
+}\r