Generate proxy makefiles in output tree.

svn path=/trunk/; revision=15808
This commit is contained in:
Casper Hornstrup 2005-06-05 15:59:18 +00:00
parent 4c7bbd9c39
commit 2163a01133
9 changed files with 106 additions and 11 deletions

View file

@ -54,6 +54,7 @@
# -c Clean as you go. Delete generated files as soon as they are not needed anymore.
# -d Disable automatic dependencies.
# -mi Let make handle creation of install directories. Rbuild will not generate the directories.
# -ps Generate proxy makefiles in source tree instead of the output tree.
.PHONY: all
.PHONY: clean

View file

@ -5,6 +5,8 @@
class XMLElement;
extern std::string working_directory;
void
InitWorkingDirectory();

View file

@ -645,12 +645,22 @@ MingwBackend::GenerateTestSupportCode ()
printf ( "done\n" );
}
string
MingwBackend::GetProxyMakefileTree () const
{
if ( configuration.GenerateProxyMakefilesInSourceTree )
return "";
else
return Environment::GetOutputPath ();
}
void
MingwBackend::GenerateProxyMakefiles ()
{
printf ( "Generating proxy makefiles..." );
ProxyMakefile proxyMakefile ( ProjectNode );
proxyMakefile.GenerateProxyMakefiles ( configuration.Verbose );
proxyMakefile.GenerateProxyMakefiles ( configuration.Verbose,
GetProxyMakefileTree () );
printf ( "done\n" );
}
@ -929,8 +939,8 @@ MingwBackend::OutputModuleInstallTargets ()
NormalizeFilename ( module.GetPath () ),
outputDirectory );
OutputInstallTarget ( sourceFilename,
module.installName,
module.installBase );
module.installName,
module.installBase );
}
}
}

View file

@ -83,6 +83,7 @@ private:
std::string GetBin2ResExecutable ();
void UnpackWineResources ();
void GenerateTestSupportCode ();
std::string GetProxyMakefileTree () const;
void GenerateProxyMakefiles ();
void CheckAutomaticDependencies ();
bool IncludeDirectoryTarget ( const std::string& directory ) const;
@ -122,12 +123,15 @@ class ProxyMakefile
public:
ProxyMakefile ( const Project& project );
~ProxyMakefile ();
void GenerateProxyMakefiles ( bool verbose );
void GenerateProxyMakefiles ( bool verbose,
std::string outputTree );
private:
std::string GeneratePathToParentDirectory ( int numberOfParentDirectories );
std::string GetPathToTopDirectory ( Module& module );
bool GenerateProxyMakefile ( Module& module );
void GenerateProxyMakefileForModule ( Module& module,
bool verbose );
bool verbose,
std::string outputTree );
const Project& project;
};

View file

@ -15,13 +15,26 @@ ProxyMakefile::~ProxyMakefile ()
{
}
bool
ProxyMakefile::GenerateProxyMakefile ( Module& module )
{
return module.GenerateInOutputTree ();
}
void
ProxyMakefile::GenerateProxyMakefiles ( bool verbose )
ProxyMakefile::GenerateProxyMakefiles ( bool verbose,
string outputTree )
{
for ( size_t i = 0; i < project.modules.size (); i++ )
{
GenerateProxyMakefileForModule ( *project.modules[i],
verbose );
Module& module = *project.modules[i];
if ( !module.enabled )
continue;
if ( !GenerateProxyMakefile ( module ) )
continue;
GenerateProxyMakefileForModule ( module,
verbose,
outputTree );
}
}
@ -53,7 +66,8 @@ ProxyMakefile::GetPathToTopDirectory ( Module& module )
void
ProxyMakefile::GenerateProxyMakefileForModule ( Module& module,
bool verbose )
bool verbose,
string outputTree )
{
char* buf;
char* s;
@ -64,8 +78,20 @@ ProxyMakefile::GenerateProxyMakefileForModule ( Module& module,
module.name.c_str () );
}
string proxyMakefile = NormalizeFilename ( module.GetBasePath () + SSEP "makefile" );
string pathToTopDirectory = GetPathToTopDirectory ( module );
string base;
string pathToTopDirectory;
if ( outputTree.length () > 0 )
{
base = outputTree + SSEP + module.GetBasePath ();
Path path;
pathToTopDirectory = working_directory;
}
else
{
base = module.GetBasePath ();
pathToTopDirectory = GetPathToTopDirectory ( module );
}
string proxyMakefile = NormalizeFilename ( base + SSEP "makefile" );
string defaultTarget = module.name;
buf = (char*) malloc ( 10*1024 );

View file

@ -9,6 +9,7 @@ Configuration::Configuration ()
CleanAsYouGo = false;
AutomaticDependencies = true;
MakeHandlesInstallDirectories = false;
GenerateProxyMakefilesInSourceTree = false;
}
Configuration::~Configuration ()

View file

@ -667,6 +667,36 @@ Module::IsDLL () const
__LINE__ );
}
bool
Module::GenerateInOutputTree () const
{
switch ( type )
{
case Kernel:
case KernelModeDLL:
case NativeDLL:
case Win32DLL:
case KernelModeDriver:
case NativeCUI:
case Win32CUI:
case Test:
case Win32GUI:
case BuildTool:
case BootLoader:
case BootSector:
case Iso:
case LiveIso:
return true;
case StaticLibrary:
case ObjectLibrary:
case RpcServer:
case RpcClient:
return false;
}
throw InvalidOperationException ( __FILE__,
__LINE__ );
}
string
Module::GetTargetName () const
{

View file

@ -36,6 +36,22 @@ ParseMakeSwitch ( char switchChar2 )
return true;
}
bool
ParseProxyMakefileSwitch ( char switchChar2 )
{
switch ( switchChar2 )
{
case 's':
configuration.GenerateProxyMakefilesInSourceTree = true;
break;
default:
printf ( "Unknown switch -p%c",
switchChar2 );
return false;
}
return true;
}
bool
ParseSwitch ( int argc, char** argv, int index )
{
@ -57,6 +73,8 @@ ParseSwitch ( int argc, char** argv, int index )
break;
case 'm':
return ParseMakeSwitch ( switchChar2 );
case 'p':
return ParseProxyMakefileSwitch ( switchChar2 );
default:
printf ( "Unknown switch -%c",
switchChar );
@ -98,6 +116,7 @@ main ( int argc, char** argv )
printf ( " -d Disable automatic dependencies.\n" );
printf ( " -rfile.xml Name of the root xml file. Default is ReactOS.xml.\n" );
printf ( " -mi Let make handle creation of install directories. Rbuild will not generate the directories.\n" );
printf ( " -ps Generate proxy makefiles in source tree instead of the output tree.\n" );
printf ( "\n" );
printf ( " buildsystem Target build system. Can be one of:\n" );
printf ( " mingw MinGW\n" );

View file

@ -77,6 +77,7 @@ public:
bool CleanAsYouGo;
bool AutomaticDependencies;
bool MakeHandlesInstallDirectories;
bool GenerateProxyMakefilesInSourceTree;
};
class Environment
@ -222,6 +223,7 @@ public:
const XMLAttribute& attribute );
bool HasImportLibrary () const;
bool IsDLL () const;
bool GenerateInOutputTree () const;
std::string GetTargetName () const;
std::string GetDependencyPath () const;
std::string GetBasePath () const;