[rbuild] Remove distinction between Iso/IsoRegTest, and LiveIso/LiveIsoRegTest module types

Better dependency tracking for iso module type

svn path=/trunk/; revision=42575
This commit is contained in:
Hervé Poussineau 2009-08-09 22:03:04 +00:00
parent 17db8cf603
commit 10692515b0
12 changed files with 69 additions and 92 deletions

View file

@ -1,5 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="bootcdregtest" type="isoregtest" output="ReactOS-RegTest.iso"> <module name="bootcdregtest" type="iso" output="ReactOS-RegTest.iso">
<bootsector>isobtrt</bootsector> <bootsector>isobtrt</bootsector>
<cdfile installbase="$(CDOUTPUT)">unattend.inf</cdfile>
</module> </module>

View file

@ -11,7 +11,7 @@
<cdfile installbase="$(CDOUTPUT)" nameoncd="hivesft.inf">hivesft_$(ARCH).inf</cdfile> <cdfile installbase="$(CDOUTPUT)" nameoncd="hivesft.inf">hivesft_$(ARCH).inf</cdfile>
<cdfile installbase="$(CDOUTPUT)" nameoncd="hivesys.inf">hivesys_$(ARCH).inf</cdfile> <cdfile installbase="$(CDOUTPUT)" nameoncd="hivesys.inf">hivesys_$(ARCH).inf</cdfile>
<cdfile installbase="$(CDOUTPUT)">txtsetup.sif</cdfile> <cdfile installbase="$(CDOUTPUT)">txtsetup.sif</cdfile>
<cdfile installbase="$(CDOUTPUT)">unattend.inf</cdfile> <cdfile installbase="$(CDOUTPUT)" nameoncd="unattend.inf.sample">unattend.inf</cdfile>
<directory name="bootcd"> <directory name="bootcd">
<xi:include href="bootcd/bootcd.rbuild" /> <xi:include href="bootcd/bootcd.rbuild" />

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="livecdregtest" type="liveisoregtest" output="ReactOS-LiveCD-RegTest.iso"> <module name="livecdregtest" type="liveiso" output="ReactOS-LiveCD-RegTest.iso">
<bootsector>isobtrt</bootsector> <bootsector>isobtrt</bootsector>
</module> </module>

View file

@ -317,9 +317,7 @@ CBBackend::_generate_workspace ( FILE* OUT )
Module& module = *p->second; Module& module = *p->second;
if ((module.type != Iso) && if ((module.type != Iso) &&
(module.type != LiveIso) && (module.type != LiveIso))
(module.type != IsoRegTest) &&
(module.type != LiveIsoRegTest))
{ {
std::string Cbp_file = CbpFileName ( module ); std::string Cbp_file = CbpFileName ( module );
fprintf ( OUT, "\t\t<Project filename=\"%s\">\r\n", Cbp_file.c_str()); fprintf ( OUT, "\t\t<Project filename=\"%s\">\r\n", Cbp_file.c_str());
@ -384,8 +382,6 @@ CBBackend::_generate_cbproj ( const Module& module )
{ {
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
return; return;
default: default:
break; break;

View file

@ -98,9 +98,7 @@ DepMapBackend::_generate_depmap ( FILE* OUT )
{ {
Module& module = *p->second; Module& module = *p->second;
if ((module.type != Iso) && if ((module.type != Iso) &&
(module.type != LiveIso) && (module.type != LiveIso))
(module.type != IsoRegTest) &&
(module.type != LiveIsoRegTest))
{ {
vector<const IfableData*> ifs_list; vector<const IfableData*> ifs_list;
ifs_list.push_back ( &module.project.non_if_data ); ifs_list.push_back ( &module.project.non_if_data );

View file

@ -59,8 +59,6 @@ const struct ModuleHandlerInformations ModuleHandlerInformations[] = {
{ HostFalse, "", "", "" }, // Win32SCR { HostFalse, "", "", "" }, // Win32SCR
{ HostFalse, "", "", "" }, // IdlHeader { HostFalse, "", "", "" }, // IdlHeader
{ HostFalse, "", "", "" }, // IdlInterface { HostFalse, "", "", "" }, // IdlInterface
{ HostFalse, "", "", "" }, // IsoRegTest
{ HostFalse, "", "", "" }, // LiveIsoRegTest
{ HostFalse, "", "", "" }, // EmbeddedTypeLib { HostFalse, "", "", "" }, // EmbeddedTypeLib
{ HostFalse, "", "", "" }, // ElfExecutable { HostFalse, "", "", "" }, // ElfExecutable
{ HostFalse, "", "", "" }, // RpcProxy { HostFalse, "", "", "" }, // RpcProxy
@ -544,10 +542,6 @@ MingwBackend::IncludeInAllTarget ( const Module& module ) const
return false; return false;
if ( module.type == LiveIso ) if ( module.type == LiveIso )
return false; return false;
if ( module.type == IsoRegTest )
return false;
if ( module.type == LiveIsoRegTest )
return false;
if ( module.type == Test ) if ( module.type == Test )
return false; return false;
if ( module.type == Alias ) if ( module.type == Alias )

View file

@ -234,12 +234,6 @@ MingwModuleHandler::InstanciateHandler (
case LiveIso: case LiveIso:
handler = new MingwLiveIsoModuleHandler ( module ); handler = new MingwLiveIsoModuleHandler ( module );
break; break;
case IsoRegTest:
handler = new MingwIsoModuleHandler ( module );
break;
case LiveIsoRegTest:
handler = new MingwLiveIsoModuleHandler ( module );
break;
case Test: case Test:
handler = new MingwTestModuleHandler ( module ); handler = new MingwTestModuleHandler ( module );
break; break;
@ -2973,7 +2967,8 @@ MingwIsoModuleHandler::Process ()
void void
MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( MingwIsoModuleHandler::OutputBootstrapfileCopyCommands (
const string& bootcdDirectory ) const string& bootcdDirectory,
vector<FileLocation>& destinations )
{ {
for ( std::map<std::string, Module*>::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p ) for ( std::map<std::string, Module*>::const_iterator p = module.project.modules.begin (); p != module.project.modules.end (); ++ p )
{ {
@ -2987,14 +2982,16 @@ MingwIsoModuleHandler::OutputBootstrapfileCopyCommands (
? bootcdDirectory + sSep + m.bootstrap->base ? bootcdDirectory + sSep + m.bootstrap->base
: bootcdDirectory, : bootcdDirectory,
m.bootstrap->nameoncd ); m.bootstrap->nameoncd );
OutputCopyCommand ( *m.output, targetFile ); OutputCopyCommandSingle ( *m.output, targetFile );
destinations.push_back ( targetFile );
} }
} }
} }
void void
MingwIsoModuleHandler::OutputCdfileCopyCommands ( MingwIsoModuleHandler::OutputCdfileCopyCommands (
const string& bootcdDirectory ) const string& bootcdDirectory,
std::vector<FileLocation>& destinations )
{ {
for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) for ( size_t i = 0; i < module.project.cdfiles.size (); i++ )
{ {
@ -3004,7 +3001,19 @@ MingwIsoModuleHandler::OutputCdfileCopyCommands (
? bootcdDirectory + sSep + cdfile.target->relative_path ? bootcdDirectory + sSep + cdfile.target->relative_path
: bootcdDirectory, : bootcdDirectory,
cdfile.target->name ); cdfile.target->name );
OutputCopyCommand ( *cdfile.source, targetFile ); OutputCopyCommandSingle ( *cdfile.source, targetFile );
destinations.push_back ( targetFile );
}
for ( size_t i = 0; i < module.cdfiles.size (); i++ )
{
const CDFile& cdfile = *module.cdfiles[i];
FileLocation targetFile ( OutputDirectory,
cdfile.target->relative_path.length () > 0
? bootcdDirectory + sSep + cdfile.target->relative_path
: bootcdDirectory,
cdfile.target->name );
OutputCopyCommandSingle ( *cdfile.source, targetFile );
destinations.push_back ( targetFile );
} }
} }
@ -3092,25 +3101,13 @@ void
MingwIsoModuleHandler::GenerateIsoModuleTarget () MingwIsoModuleHandler::GenerateIsoModuleTarget ()
{ {
fprintf ( fMakefile, "# ISO MODULE TARGET\n" ); fprintf ( fMakefile, "# ISO MODULE TARGET\n" );
string bootcdDirectory = "cd"; string bootcdDirectory = module.name;
FileLocation bootcd ( OutputDirectory, FileLocation bootcd ( OutputDirectory,
bootcdDirectory, bootcdDirectory,
"" ); "" );
FileLocation bootcdReactos ( OutputDirectory, FileLocation bootcdReactos ( OutputDirectory,
bootcdDirectory + sSep + Environment::GetCdOutputPath (), bootcdDirectory + sSep + Environment::GetCdOutputPath (),
"" ); "" );
vector<FileLocation> vSourceFiles, vCdFiles;
vector<FileLocation> vCdDirectories;
// unattend.inf
FileLocation srcunattend ( SourceDirectory,
"boot" + sSep + "bootdata" + sSep + "bootcdregtest",
"unattend.inf" );
FileLocation tarunattend ( bootcdReactos.directory,
bootcdReactos.relative_path,
"unattend.inf" );
if (module.type == IsoRegTest)
vSourceFiles.push_back ( srcunattend );
// bootsector // bootsector
const Module* bootModule = module.bootSector->bootSectorModule; const Module* bootModule = module.bootSector->bootSectorModule;
@ -3124,7 +3121,6 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget ()
} }
const FileLocation *isoboot = bootModule->output; const FileLocation *isoboot = bootModule->output;
vSourceFiles.push_back ( *isoboot );
// prepare reactos.dff and reactos.inf // prepare reactos.dff and reactos.inf
FileLocation reactosDff ( SourceDirectory, FileLocation reactosDff ( SourceDirectory,
@ -3134,31 +3130,18 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget ()
bootcdReactos.relative_path, bootcdReactos.relative_path,
"reactos.inf" ); "reactos.inf" );
vSourceFiles.push_back ( reactosDff );
/* /*
We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule. We use only the name and not full FileLocation(ouput) because Iso/LiveIso are an exception to the general rule.
Iso/LiveIso outputs are generated in code base root Iso/LiveIso outputs are generated in code base root
*/ */
string IsoName = module.output->name; string IsoName = module.output->name;
string sourceFiles = v2s ( backend, vSourceFiles, 5 ); fprintf ( fMakefile, ".PHONY: %s_CABINET\n\n",
module.name.c_str () );
// fill cdrom fprintf ( fMakefile, "%s_CABINET: all $(CABMAN_TARGET) %s | %s\n",
GetCdDirectories ( vCdDirectories, bootcdDirectory );
GetCdFiles ( vCdFiles );
string cdDirectories = "";//v2s ( vCdDirectories, 5 );
string cdFiles = v2s ( backend, vCdFiles, 5 );
fprintf ( fMakefile, ".PHONY: %s\n\n",
module.name.c_str ());
fprintf ( fMakefile,
"%s: all %s %s %s $(CABMAN_TARGET) $(CDMAKE_TARGET) %s\n",
module.name.c_str (), module.name.c_str (),
backend->GetFullName ( *isoboot ).c_str (), backend->GetFullName ( reactosDff ).c_str (),
sourceFiles.c_str (), backend->GetFullPath ( bootcdReactos ).c_str () );
cdFiles.c_str (),
cdDirectories.c_str () );
fprintf ( fMakefile, fprintf ( fMakefile,
"\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I -P $(OUTPUT)\n", "\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I -P $(OUTPUT)\n",
backend->GetFullName ( reactosDff ).c_str (), backend->GetFullName ( reactosDff ).c_str (),
@ -3169,13 +3152,29 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget ()
backend->GetFullName ( reactosInf ).c_str (), backend->GetFullName ( reactosInf ).c_str (),
backend->GetFullPath ( bootcdReactos ).c_str ()); backend->GetFullPath ( bootcdReactos ).c_str ());
fprintf ( fMakefile, fprintf ( fMakefile,
"\t-@${rm} %s 2>$(NUL)\n", "\t-@${rm} %s 2>$(NUL)\n\n",
backend->GetFullName ( reactosInf ).c_str () ); backend->GetFullName ( reactosInf ).c_str () );
OutputBootstrapfileCopyCommands ( bootcdDirectory );
OutputCdfileCopyCommands ( bootcdDirectory );
if (module.type == IsoRegTest) std::vector<FileLocation> sourceFiles;
OutputCopyCommand ( srcunattend, tarunattend ); OutputBootstrapfileCopyCommands ( bootcdDirectory, sourceFiles );
OutputCdfileCopyCommands ( bootcdDirectory, sourceFiles );
fprintf( fMakefile,
"\n%s_OBJS := %s\n\n",
module.name.c_str (),
v2s ( backend, sourceFiles, 5 ).c_str () );
fprintf ( fMakefile, ".PHONY: %s\n\n",
module.name.c_str ());
fprintf ( fMakefile,
"%s: $(%s_OBJS) %s_CABINET %s $(CDMAKE_TARGET) | %s\n",
module.name.c_str (),
module.name.c_str (),
module.name.c_str (),
backend->GetFullName ( *isoboot ).c_str (),
backend->GetFullPath ( FileLocation ( OutputDirectory,
bootcdDirectory,
"" ) ).c_str () );
fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" ); fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" );
fprintf ( fMakefile, fprintf ( fMakefile,

View file

@ -323,8 +323,10 @@ private:
void GetBootstrapCdFiles ( std::vector<FileLocation>& out ) const; void GetBootstrapCdFiles ( std::vector<FileLocation>& out ) const;
void GetNonModuleCdFiles ( std::vector<FileLocation>& out ) const; void GetNonModuleCdFiles ( std::vector<FileLocation>& out ) const;
void GetCdFiles ( std::vector<FileLocation>& out ) const; void GetCdFiles ( std::vector<FileLocation>& out ) const;
void OutputBootstrapfileCopyCommands ( const std::string& bootcdDirectory ); void OutputBootstrapfileCopyCommands ( const std::string& bootcdDirectory,
void OutputCdfileCopyCommands ( const std::string& bootcdDirectory ); std::vector<FileLocation>& destinations );
void OutputCdfileCopyCommands ( const std::string& bootcdDirectory,
std::vector<FileLocation>& destinations );
}; };

View file

@ -96,9 +96,7 @@ VReportBackend::GenerateReport ( FILE* OUT )
{ {
Module& module = *p->second; Module& module = *p->second;
if ((module.type != Iso) && if ((module.type != Iso) &&
(module.type != LiveIso) && (module.type != LiveIso))
(module.type != IsoRegTest) &&
(module.type != LiveIsoRegTest))
{ {
Module& module = *p->second; Module& module = *p->second;

View file

@ -63,8 +63,6 @@ Bootstrap::IsSupportedModuleType ( ModuleType type )
case ObjectLibrary: case ObjectLibrary:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case Test: case Test:
case RpcServer: case RpcServer:
case RpcClient: case RpcClient:

View file

@ -525,6 +525,8 @@ Module::~Module ()
delete linkerFlags[i]; delete linkerFlags[i];
for ( i = 0; i < stubbedComponents.size(); i++ ) for ( i = 0; i < stubbedComponents.size(); i++ )
delete stubbedComponents[i]; delete stubbedComponents[i];
for ( i = 0; i < cdfiles.size (); i++ )
delete cdfiles[i];
if ( linkerScript ) if ( linkerScript )
delete linkerScript; delete linkerScript;
if ( pch ) if ( pch )
@ -917,6 +919,12 @@ Module::ProcessXMLSubElement ( const XMLElement& e,
autoRegister = new AutoRegister ( project, this, e ); autoRegister = new AutoRegister ( project, this, e );
subs_invalid = true; subs_invalid = true;
} }
else if ( e.name == "cdfile" )
{
CDFile* cdfile = new CDFile ( project, e, subpath );
cdfiles.push_back ( cdfile );
subs_invalid = true;
}
if ( subs_invalid && e.subElements.size() > 0 ) if ( subs_invalid && e.subElements.size() > 0 )
{ {
throw XMLInvalidBuildFileException ( throw XMLInvalidBuildFileException (
@ -924,6 +932,8 @@ Module::ProcessXMLSubElement ( const XMLElement& e,
"<%s> cannot have sub-elements", "<%s> cannot have sub-elements",
e.name.c_str() ); e.name.c_str() );
} }
for ( size_t i = 0; i < cdfiles.size (); i++ )
cdfiles[i]->ProcessXML ();
for ( size_t i = 0; i < e.subElements.size (); i++ ) for ( size_t i = 0; i < e.subElements.size (); i++ )
ProcessXMLSubElement ( *e.subElements[i], subdirectory, subpath, parseContext ); ProcessXMLSubElement ( *e.subElements[i], subdirectory, subpath, parseContext );
parseContext.compilationUnit = pOldCompilationUnit; parseContext.compilationUnit = pOldCompilationUnit;
@ -972,10 +982,6 @@ Module::GetModuleType ( const string& location, const XMLAttribute& attribute )
return Iso; return Iso;
if ( attribute.value == "liveiso" ) if ( attribute.value == "liveiso" )
return LiveIso; return LiveIso;
if ( attribute.value == "isoregtest" )
return IsoRegTest;
if ( attribute.value == "liveisoregtest" )
return LiveIsoRegTest;
if ( attribute.value == "test" ) if ( attribute.value == "test" )
return Test; return Test;
if ( attribute.value == "rpcserver" ) if ( attribute.value == "rpcserver" )
@ -1026,8 +1032,6 @@ Module::GetTargetDirectoryTree () const
case BootProgram: case BootProgram:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case ElfExecutable: case ElfExecutable:
case Cabinet: case Cabinet:
return OutputDirectory; return OutputDirectory;
@ -1089,8 +1093,6 @@ Module::GetDefaultModuleExtension () const
return ".o"; return ".o";
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
return ".iso"; return ".iso";
case Test: case Test:
return ".exe"; return ".exe";
@ -1149,8 +1151,6 @@ Module::GetDefaultModuleEntrypoint () const
case BootSector: case BootSector:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case RpcServer: case RpcServer:
case RpcClient: case RpcClient:
case RpcProxy: case RpcProxy:
@ -1202,8 +1202,6 @@ Module::GetDefaultModuleBaseaddress () const
case BootSector: case BootSector:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case RpcServer: case RpcServer:
case RpcClient: case RpcClient:
case RpcProxy: case RpcProxy:
@ -1259,8 +1257,6 @@ Module::GetDefaultModuleCRT () const
case BootSector: case BootSector:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case RpcServer: case RpcServer:
case RpcClient: case RpcClient:
case RpcProxy: case RpcProxy:
@ -1317,8 +1313,6 @@ Module::IsDLL () const
case BootProgram: case BootProgram:
case Iso: case Iso:
case LiveIso: case LiveIso:
case IsoRegTest:
case LiveIsoRegTest:
case RpcServer: case RpcServer:
case RpcClient: case RpcClient:
case RpcProxy: case RpcProxy:
@ -1762,9 +1756,7 @@ bool
Bootsector::IsSupportedModuleType ( ModuleType type ) Bootsector::IsSupportedModuleType ( ModuleType type )
{ {
if ( type == Iso || if ( type == Iso ||
type == LiveIso || type == LiveIso )
type == IsoRegTest ||
type == LiveIsoRegTest )
{ {
return true; return true;
} }

View file

@ -315,8 +315,6 @@ enum ModuleType
Win32SCR, Win32SCR,
IdlHeader, IdlHeader,
IdlInterface, IdlInterface,
IsoRegTest,
LiveIsoRegTest,
EmbeddedTypeLib, EmbeddedTypeLib,
ElfExecutable, ElfExecutable,
RpcProxy, RpcProxy,
@ -392,6 +390,7 @@ public:
std::vector<CompilerFlag*> compilerFlags; std::vector<CompilerFlag*> compilerFlags;
std::vector<LinkerFlag*> linkerFlags; std::vector<LinkerFlag*> linkerFlags;
std::vector<StubbedComponent*> stubbedComponents; std::vector<StubbedComponent*> stubbedComponents;
std::vector<CDFile*> cdfiles;
LinkerScript* linkerScript; LinkerScript* linkerScript;
PchFile* pch; PchFile* pch;
bool cplusplus; bool cplusplus;