# a path separator at the end. The variable defaults to the current
# directory.
#
+# ROS_INSTALL
+# This variable controls where to install output files to when using
+# 'make install'. N.B. Don't put a path separator at the end. The variable
+# defaults to .\reactos.
+#
# ROS_BUILDMAP
# This variable controls if map files are to be generated for executable
# output files. Map files have the extension .map. The value can be either
endif
endif
ifeq ($(HALFVERBOSEECHO),yes)
+ ECHO_CP =@echo [COPY] $@
ECHO_MKDIR =@echo [MKDIR] $@
ECHO_BUILDNO =@echo [BUILDNO] $@
ECHO_INVOKE =@echo [INVOKE] $<
ECHO_REGTESTS=@echo [REGTESTS] $@
ECHO_TEST =@echo [TEST] $@
else
+ ECHO_CP =
ECHO_MKDIR =
ECHO_BUILDNO =
ECHO_INVOKE =
<directory name="drivers">\r
<xi:include href="drivers/directory.xml" />\r
</directory>\r
+<directory name="fonts">\r
+ <xi:include href="fonts/fonts.xml" />\r
+</directory>\r
+<directory name="inf">\r
+ <xi:include href="inf/inf.xml" />\r
+</directory>\r
<directory name="nls">\r
<xi:include href="nls/nls.xml" />\r
</directory>\r
<cdfile base="reactos">services</cdfile>\r
+<installfile base="system32/drivers/etc">services</installfile>\r
--- /dev/null
+<installfile base="media/fonts">c0419bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0582bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0583bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0611bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0632bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0633bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0648bt_.ttf</installfile>\r
+<installfile base="media/fonts">c0649bt_.ttf</installfile>\r
+<installfile base="media/fonts">cour.ttf</installfile>\r
+<installfile base="media/fonts">courb.ttf</installfile>\r
+<installfile base="media/fonts">courbi.ttf</installfile>\r
+<installfile base="media/fonts">helb____.ttf</installfile>\r
+<installfile base="media/fonts">TGMarlett.ttf</installfile>\r
+<installfile base="media/fonts">timr____.ttf</installfile>\r
+<installfile base="media/fonts">UTB_____.ttf</installfile>\r
+<installfile base="media/fonts">UTBI____.ttf</installfile>\r
+<installfile base="media/fonts">UTI_____.ttf</installfile>\r
+<installfile base="media/fonts">UTRG____.ttf</installfile>\r
+<installfile base="media/fonts">Vera.ttf</installfile>\r
+<installfile base="media/fonts">VeraBd.ttf</installfile>\r
+<installfile base="media/fonts">VeraBI.ttf</installfile>\r
+<installfile base="media/fonts">VeraIt.ttf</installfile>\r
+<installfile base="media/fonts">VeraMoBd.ttf</installfile>\r
+<installfile base="media/fonts">VeraMoBI.ttf</installfile>\r
+<installfile base="media/fonts">VeraMoIt.ttf</installfile>\r
+<installfile base="media/fonts">VeraMono.ttf</installfile>\r
+<installfile base="media/fonts">VeraSe.ttf</installfile>\r
+<installfile base="media/fonts">VeraSeBd.ttf</installfile>\r
--- /dev/null
+<installfile base="system32/inf">layout.inf</installfile>\r
+<installfile base="system32/inf">NET_NIC.inf</installfile>\r
+<installfile base="system32/inf">scsi.inf</installfile>\r
+<installfile base="system32/inf">syssetup.inf</installfile>\r
<cdfile base="reactos">c_437.nls</cdfile>\r
<cdfile base="reactos">c_1252.nls</cdfile>\r
<cdfile base="reactos">l_intl.nls</cdfile>\r
+\r
+<installfile base="system32">c_037.nls</installfile>\r
+<installfile base="system32">c_037.nls</installfile>\r
+<installfile base="system32">c_10000.nls</installfile>\r
+<installfile base="system32">c_10006.nls</installfile>\r
+<installfile base="system32">c_10007.nls</installfile>\r
+<installfile base="system32">c_10029.nls</installfile>\r
+<installfile base="system32">c_1006.nls</installfile>\r
+<installfile base="system32">c_10079.nls</installfile>\r
+<installfile base="system32">c_10081.nls</installfile>\r
+<installfile base="system32">c_1026.nls</installfile>\r
+<installfile base="system32">c_1250.nls</installfile>\r
+<installfile base="system32">c_1251.nls</installfile>\r
+<installfile base="system32" newname="ansi.nls">c_1252.nls</installfile>\r
+<installfile base="system32">c_1253.nls</installfile>\r
+<installfile base="system32">c_1254.nls</installfile>\r
+<installfile base="system32">c_1255.nls</installfile>\r
+<installfile base="system32">c_1256.nls</installfile>\r
+<installfile base="system32">c_1257.nls</installfile>\r
+<installfile base="system32">c_1258.nls</installfile>\r
+<installfile base="system32">c_20866.nls</installfile>\r
+<installfile base="system32">c_28591.nls</installfile>\r
+<installfile base="system32">c_28592.nls</installfile>\r
+<installfile base="system32">c_28593.nls</installfile>\r
+<installfile base="system32">c_28594.nls</installfile>\r
+<installfile base="system32">c_28595.nls</installfile>\r
+<installfile base="system32">c_28596.nls</installfile>\r
+<installfile base="system32">c_28597.nls</installfile>\r
+<installfile base="system32">c_28598.nls</installfile>\r
+<installfile base="system32">c_28599.nls</installfile>\r
+<installfile base="system32">c_424.nls</installfile>\r
+<installfile base="system32" newname="oem.nls">c_437.nls</installfile>\r
+<installfile base="system32">c_500.nls</installfile>\r
+<installfile base="system32">c_737.nls</installfile>\r
+<installfile base="system32">c_775.nls</installfile>\r
+<installfile base="system32">c_850.nls</installfile>\r
+<installfile base="system32">c_852.nls</installfile>\r
+<installfile base="system32">c_855.nls</installfile>\r
+<installfile base="system32">c_856.nls</installfile>\r
+<installfile base="system32">c_857.nls</installfile>\r
+<installfile base="system32">c_860.nls</installfile>\r
+<installfile base="system32">c_861.nls</installfile>\r
+<installfile base="system32">c_862.nls</installfile>\r
+<installfile base="system32">c_863.nls</installfile>\r
+<installfile base="system32">c_864.nls</installfile>\r
+<installfile base="system32">c_865.nls</installfile>\r
+<installfile base="system32">c_866.nls</installfile>\r
+<installfile base="system32">c_869.nls</installfile>\r
+<installfile base="system32">c_874.nls</installfile>\r
+<installfile base="system32">c_875.nls</installfile>\r
+<installfile base="system32">c_878.nls</installfile>\r
+<installfile base="system32">c_932.nls</installfile>\r
+<installfile base="system32">c_936.nls</installfile>\r
+<installfile base="system32">c_949.nls</installfile>\r
+<installfile base="system32">c_950.nls</installfile>\r
+<installfile base="system32" newname="casemap.nls">l_intl.nls</installfile>\r
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
class Directory;\r
class MingwModuleHandler;\r
\r
+extern std::string\r
+v2s ( const string_list& v, int wrap_at );\r
+\r
class MingwBackend : public Backend\r
{\r
public:\r
void DetectPipeSupport ();\r
void DetectPCHSupport ();\r
void ProcessModules ();\r
+ std::string GetNonModuleInstallDirectories ( const std::string& installDirectory );\r
+ std::string GetInstallDirectories ( const std::string& installDirectory );\r
+ void GetNonModuleInstallFiles ( std::vector<std::string>& out ) const;\r
+ void GetInstallFiles ( std::vector<std::string>& out ) const;\r
+ void OutputInstallfileCopyCommands ( const std::string& installDirectory );\r
+ void GenerateInstallTarget ();\r
FILE* fMakefile;\r
bool use_pch;\r
Directory *int_directories, *out_directories;\r
return out;\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
string\r
GetTargetMacro ( const Module& module, bool with_dollar )\r
{\r
}\r
}\r
\r
+\r
MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( const Module& module_ )\r
: MingwModuleHandler ( module_ )\r
{\r
{\r
string targetFilenameNoFixup ( bootcdDirectory + SSEP + m.bootstrap->base + SSEP + m.bootstrap->nameoncd );\r
string targetFilename ( GetTargetMacro ( module ) );\r
+ fprintf ( fMakefile,\r
+ "\t$(ECHO_CP)\n" );\r
fprintf ( fMakefile,\r
"\t${cp} %s %s\n",\r
m.GetPath ().c_str (),\r
{\r
const CDFile& cdfile = *module.project.cdfiles[i];\r
string targetFilenameNoFixup = bootcdDirectory + SSEP + cdfile.base + SSEP + cdfile.nameoncd;\r
- string targetFilename = GetTargetMacro(module);\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
cdfile.GetPath ().c_str (),\r
--- /dev/null
+#include "pch.h"\r
+#include <assert.h>\r
+\r
+#include "rbuild.h"\r
+\r
+using std::string;\r
+\r
+InstallFile::InstallFile ( const Project& project_,\r
+ const XMLElement& installfileNode,\r
+ const string& path )\r
+ : project ( project_ ),\r
+ node ( installfileNode )\r
+{\r
+ const XMLAttribute* att = node.GetAttribute ( "base", false );\r
+ if ( att != NULL )\r
+ base = att->value;\r
+ else\r
+ base = "";\r
+\r
+ att = node.GetAttribute ( "newname", false );\r
+ if ( att != NULL )\r
+ newname = att->value;\r
+ else\r
+ newname = node.value;\r
+ name = node.value;\r
+ this->path = path;\r
+}\r
+\r
+InstallFile::~InstallFile ()\r
+{\r
+}\r
+\r
+string\r
+InstallFile::GetPath () const\r
+{\r
+ return path + SSEP + name;\r
+}\r
+\r
+void\r
+InstallFile::ProcessXML()\r
+{\r
+}\r
delete linkerFlags[i];\r
for ( i = 0; i < cdfiles.size (); i++ )\r
delete cdfiles[i];\r
+ for ( i = 0; i < installfiles.size (); i++ )\r
+ delete installfiles[i];\r
delete head;\r
}\r
\r
non_if_data.ProcessXML ();\r
for ( i = 0; i < cdfiles.size (); i++ )\r
cdfiles[i]->ProcessXML ();\r
+ for ( i = 0; i < installfiles.size (); i++ )\r
+ installfiles[i]->ProcessXML ();\r
}\r
\r
void\r
cdfiles.push_back ( cdfile );\r
subs_invalid = true;\r
}\r
+ else if ( e.name == "installfile" )\r
+ {\r
+ InstallFile* installfile = new InstallFile ( *this, e, path );\r
+ installfiles.push_back ( installfile );\r
+ subs_invalid = true;\r
+ }\r
else if ( e.name == "directory" )\r
{\r
const XMLAttribute* att = e.GetAttribute ( "name", true );\r
class AutomaticDependency;\r
class Bootstrap;\r
class CDFile;\r
+class InstallFile;\r
class PchFile;\r
class StubbedComponent;\r
class StubbedSymbol;\r
std::vector<Module*> modules;\r
std::vector<LinkerFlag*> linkerFlags;\r
std::vector<CDFile*> cdfiles;\r
+ std::vector<InstallFile*> installfiles;\r
IfableData non_if_data;\r
\r
Project ( const std::string& filename );\r
};\r
\r
\r
+class InstallFile\r
+{\r
+public:\r
+ const Project& project;\r
+ const XMLElement& node;\r
+ std::string name;\r
+ std::string base;\r
+ std::string newname;\r
+ std::string path;\r
+\r
+ InstallFile ( const Project& project,\r
+ const XMLElement& bootstrapNode,\r
+ const std::string& path );\r
+ ~InstallFile ();\r
+ void ProcessXML ();\r
+ std::string GetPath () const;\r
+};\r
+\r
+\r
class PchFile\r
{\r
public:\r
define.cpp \\r
exception.cpp \\r
include.cpp \\r
+ installfile.cpp \\r
linkerflag.cpp \\r
module.cpp \\r
project.cpp \\r
$(ECHO_CC)\r
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@\r
\r
+$(RBUILD_INT_)installfile.o: $(RBUILD_BASE_)installfile.cpp $(RBUILD_INT)\r
+ $(ECHO_CC)\r
+ ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@\r
+\r
$(RBUILD_INT_)linkerflag.o: $(RBUILD_BASE_)linkerflag.cpp $(RBUILD_INT)\r
$(ECHO_CC)\r
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@\r
None.\r
\r
\r
+Installfile element\r
+-------------------\r
+An installfile element specifies the name of a file that is to be installed when using 'make install'.\r
+\r
+Syntax:\r
+ <installfile base="reactos" newname="ReadMe.txt">ReadMe.txt</installfile>\r
+\r
+Attributes:\r
+ base - Put file in this directory within the install directory. This attribute is optional.\r
+ newname - Name of file within the install directory. This attribute is optional.\r
+\r
+Value:\r
+ Name of file.\r
+\r
+Elements:\r
+ None.\r
+\r
+\r
Invoke element\r
--------------\r
An invoke element specifies the name of a module which is to be executed before the current module is processed.\r