mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Generate proxy makefiles in output tree.
svn path=/trunk/; revision=15808
This commit is contained in:
parent
4c7bbd9c39
commit
2163a01133
9 changed files with 106 additions and 11 deletions
|
@ -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
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
class XMLElement;
|
||||
|
||||
extern std::string working_directory;
|
||||
|
||||
void
|
||||
InitWorkingDirectory();
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -9,6 +9,7 @@ Configuration::Configuration ()
|
|||
CleanAsYouGo = false;
|
||||
AutomaticDependencies = true;
|
||||
MakeHandlesInstallDirectories = false;
|
||||
GenerateProxyMakefilesInSourceTree = false;
|
||||
}
|
||||
|
||||
Configuration::~Configuration ()
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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" );
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue