Accept ROS_INSTALL environment variable

svn path=/branches/xmlbuildsystem/; revision=14520
This commit is contained in:
Casper Hornstrup 2005-04-05 20:24:26 +00:00
parent dcdd51410c
commit f81cbc31f1
5 changed files with 95 additions and 79 deletions

View file

@ -178,6 +178,13 @@ else
endif
OUTPUT_ := $(OUTPUT)$(SEP)
ifneq ($(ROS_INSTALL),)
INSTALL := $(ROS_INSTALL)
else
INSTALL := reactos
endif
INSTALL_ := $(INSTALL)$(SEP)
$(INTERMEDIATE):
${mkdir} $@
@ -186,6 +193,7 @@ $(OUTPUT):
${mkdir} $@
endif
NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc
KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc
BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h

View file

@ -119,6 +119,28 @@ Directory::ReplaceVariable ( string name,
return path;
}
string
Directory::GetEnvironmentVariable ( const string& name )
{
char* value = getenv ( name.c_str () );
if ( value != NULL && strlen ( value ) > 0 )
return ssprintf ( "%s",
value );
else
return "";
}
string
Directory::GetEnvironmentVariablePathOrDefault ( const string& name,
const string& defaultValue )
{
const string& environmentVariableValue = GetEnvironmentVariable ( name );
if ( environmentVariableValue.length () > 0 )
return NormalizeFilename ( environmentVariableValue );
else
return defaultValue;
}
string
Directory::GetIntermediatePath ()
{
@ -131,12 +153,20 @@ Directory::GetOutputPath ()
return "output-i386";
}
string
Directory::GetInstallPath ()
{
return GetEnvironmentVariablePathOrDefault ( "ROS_INSTALL",
"reactos" );
}
void
Directory::ResolveVariablesInPath ( char* buf,
string path )
{
string s = ReplaceVariable ( "$(INTERMEDIATE)", GetIntermediatePath (), path );
s = ReplaceVariable ( "$(OUTPUT)", GetOutputPath (), s );
s = ReplaceVariable ( "$(INSTALL)", GetInstallPath (), s );
strcpy ( buf, s.c_str () );
}
@ -181,7 +211,8 @@ public:
MingwBackend::MingwBackend ( Project& project, bool verbose )
: Backend ( project, verbose ),
intermediateDirectory ( new Directory ("$(INTERMEDIATE)" ) ),
outputDirectory ( new Directory ( "$(OUTPUT)" ) )
outputDirectory ( new Directory ( "$(OUTPUT)" ) ),
installDirectory ( new Directory ( "$(INSTALL)" ) )
{
}
@ -189,6 +220,7 @@ MingwBackend::~MingwBackend()
{
delete intermediateDirectory;
delete outputDirectory;
delete installDirectory;
}
string
@ -514,15 +546,10 @@ MingwBackend::GenerateDirectories ()
printf ( "Creating directories..." );
intermediateDirectory->GenerateTree ( "", verbose );
outputDirectory->GenerateTree ( "", verbose );
installDirectory->GenerateTree ( "", verbose );
printf ( "done\n" );
}
string
FixupTargetFilename ( const string& targetFilename )
{
return NormalizeFilename ( targetFilename );
}
void
MingwBackend::DetectPipeSupport ()
{
@ -551,9 +578,6 @@ MingwBackend::DetectPipeSupport ()
printf ( "detected\n" );
else
printf ( "not detected\n" );
// TODO FIXME - eventually check for ROS_USE_PCH env var and
// allow that to override use_pch if true
}
void
@ -583,30 +607,25 @@ MingwBackend::DetectPCHSupport ()
printf ( "detected\n" );
else
printf ( "not detected\n" );
// TODO FIXME - eventually check for ROS_USE_PCH env var and
// allow that to override use_pch if true
}
void
MingwBackend::GetNonModuleInstallTargetFiles (
string installDirectory,
vector<string>& out ) const
{
for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )
{
const InstallFile& installfile = *ProjectNode.installfiles[i];
string targetFilenameNoFixup = installDirectory + SSEP + installfile.base + SSEP + installfile.newname;
string targetFilenameNoFixup = installfile.base + SSEP + installfile.newname;
string targetFilename = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( targetFilenameNoFixup ),
outputDirectory );
installDirectory );
out.push_back ( targetFilename );
}
}
void
MingwBackend::GetModuleInstallTargetFiles (
string installDirectory,
vector<string>& out ) const
{
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
@ -614,10 +633,10 @@ MingwBackend::GetModuleInstallTargetFiles (
const Module& module = *ProjectNode.modules[i];
if ( module.installName.length () > 0 )
{
string targetFilenameNoFixup = installDirectory + SSEP + module.installBase + SSEP + module.installName;
string targetFilenameNoFixup = module.installBase + SSEP + module.installName;
string targetFilename = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( targetFilenameNoFixup ),
outputDirectory );
installDirectory );
out.push_back ( targetFilename );
}
}
@ -625,27 +644,23 @@ MingwBackend::GetModuleInstallTargetFiles (
void
MingwBackend::GetInstallTargetFiles (
string installDirectory,
vector<string>& out ) const
{
GetNonModuleInstallTargetFiles ( installDirectory,
out );
GetModuleInstallTargetFiles ( installDirectory,
out );
GetNonModuleInstallTargetFiles ( out );
GetModuleInstallTargetFiles ( out );
}
void
MingwBackend::OutputInstallTarget ( const string& installDirectory,
const string& sourceFilename,
MingwBackend::OutputInstallTarget ( const string& sourceFilename,
const string& targetFilename,
const string& targetDirectory )
{
string normalizedTargetFilename = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( installDirectory + SSEP + targetDirectory + SSEP + targetFilename ),
outputDirectory );
NormalizeFilename ( targetDirectory + SSEP + targetFilename ),
installDirectory );
string normalizedTargetDirectory = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( installDirectory + SSEP + targetDirectory ),
outputDirectory );
NormalizeFilename ( targetDirectory ),
installDirectory );
fprintf ( fMakefile,
"%s: %s %s\n",
normalizedTargetFilename.c_str (),
@ -660,20 +675,19 @@ MingwBackend::OutputInstallTarget ( const string& installDirectory,
}
void
MingwBackend::OutputNonModuleInstallTargets ( const string& installDirectory )
MingwBackend::OutputNonModuleInstallTargets ()
{
for ( size_t i = 0; i < ProjectNode.installfiles.size (); i++ )
{
const InstallFile& installfile = *ProjectNode.installfiles[i];
OutputInstallTarget ( installDirectory,
installfile.GetPath (),
OutputInstallTarget ( installfile.GetPath (),
installfile.newname,
installfile.base );
}
}
void
MingwBackend::OutputModuleInstallTargets ( const string& installDirectory )
MingwBackend::OutputModuleInstallTargets ()
{
for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )
{
@ -683,8 +697,7 @@ MingwBackend::OutputModuleInstallTargets ( const string& installDirectory )
string sourceFilename = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( module.GetPath () ),
outputDirectory );
OutputInstallTarget ( installDirectory,
sourceFilename,
OutputInstallTarget ( sourceFilename,
module.installName,
module.installBase );
}
@ -702,11 +715,12 @@ MingwBackend::GetRegistrySourceFiles ()
}
string
MingwBackend::GetRegistryTargetFiles ( const string& installDirectory )
MingwBackend::GetRegistryTargetFiles ()
{
string system32ConfigDirectory = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( installDirectory + SSEP + "system32" + SSEP "config" ),
outputDirectory );
string system32ConfigDirectory = NormalizeFilename (
MingwModuleHandler::PassThruCacheDirectory (
"system32" SSEP "config" SSEP,
installDirectory ) );
return system32ConfigDirectory + SSEP "default " +
system32ConfigDirectory + SSEP "sam " +
system32ConfigDirectory + SSEP "security " +
@ -715,14 +729,15 @@ MingwBackend::GetRegistryTargetFiles ( const string& installDirectory )
}
void
MingwBackend::OutputRegistryInstallTarget ( const string& installDirectory )
MingwBackend::OutputRegistryInstallTarget ()
{
string system32ConfigDirectory = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( installDirectory + SSEP + "system32" + SSEP "config" ),
outputDirectory );
string system32ConfigDirectory = NormalizeFilename (
MingwModuleHandler::PassThruCacheDirectory (
"system32" SSEP "config" SSEP,
installDirectory ) );
string registrySourceFiles = GetRegistrySourceFiles ();
string registryTargetFiles = GetRegistryTargetFiles ( installDirectory );
string registryTargetFiles = GetRegistryTargetFiles ();
fprintf ( fMakefile,
"install_registry: %s\n",
registryTargetFiles.c_str () );
@ -743,22 +758,16 @@ MingwBackend::OutputRegistryInstallTarget ( const string& installDirectory )
void
MingwBackend::GenerateInstallTarget ()
{
string installDirectoryNoFixup = "reactos";
string installDirectory = MingwModuleHandler::PassThruCacheDirectory (
NormalizeFilename ( installDirectoryNoFixup ),
outputDirectory );
vector<string> vInstallTargetFiles;
GetInstallTargetFiles ( installDirectoryNoFixup,
vInstallTargetFiles );
GetInstallTargetFiles ( vInstallTargetFiles );
string installTargetFiles = v2s ( vInstallTargetFiles, 5 );
fprintf ( fMakefile,
"install: %s %s install_registry\n",
installDirectory.c_str (),
"install: %s install_registry\n",
installTargetFiles.c_str () );
OutputNonModuleInstallTargets ( installDirectoryNoFixup );
OutputModuleInstallTargets ( installDirectoryNoFixup );
OutputRegistryInstallTarget ( installDirectoryNoFixup );
OutputNonModuleInstallTargets ();
OutputModuleInstallTargets ();
OutputRegistryInstallTarget ();
fprintf ( fMakefile,
"\n" );
}

View file

@ -31,8 +31,12 @@ private:
std::string ReplaceVariable ( std::string name,
std::string value,
std::string path );
std::string GetEnvironmentVariable ( const std::string& name );
std::string GetEnvironmentVariablePathOrDefault ( const std::string& name,
const std::string& defaultValue );
std::string GetIntermediatePath ();
std::string GetOutputPath ();
std::string GetInstallPath ();
void ResolveVariablesInPath ( char* buf,
std::string path );
bool CreateDirectory ( std::string path );
@ -50,6 +54,7 @@ public:
bool usePipe;
Directory* intermediateDirectory;
Directory* outputDirectory;
Directory* installDirectory;
private:
void CreateMakefile ();
void CloseMakefile () const;
@ -75,26 +80,20 @@ private:
std::string GetInstallDirectories ( const std::string& installDirectory );
void GetNonModuleInstallFiles ( std::vector<std::string>& out ) const;
void GetInstallFiles ( std::vector<std::string>& out ) const;
void GetNonModuleInstallTargetFiles ( std::string installDirectory,
std::vector<std::string>& out ) const;
void GetModuleInstallTargetFiles ( std::string installDirectory,
std::vector<std::string>& out ) const;
void GetInstallTargetFiles ( std::string installDirectory,
std::vector<std::string>& out ) const;
void OutputInstallTarget ( const std::string& installDirectory,
const std::string& sourceFilename,
void GetNonModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
void GetModuleInstallTargetFiles ( std::vector<std::string>& out ) const;
void GetInstallTargetFiles ( std::vector<std::string>& out ) const;
void OutputInstallTarget ( const std::string& sourceFilename,
const std::string& targetFilename,
const std::string& targetDirectory );
void OutputNonModuleInstallTargets ( const std::string& installDirectory );
void OutputModuleInstallTargets ( const std::string& installDirectory );
void OutputNonModuleInstallTargets ();
void OutputModuleInstallTargets ();
std::string GetRegistrySourceFiles ();
std::string GetRegistryTargetFiles ( const std::string& installDirectory );
void OutputRegistryInstallTarget ( const std::string& installDirectory );
std::string GetRegistryTargetFiles ();
void OutputRegistryInstallTarget ();
void GenerateInstallTarget ();
FILE* fMakefile;
bool use_pch;
};
std::string FixupTargetFilename ( const std::string& targetFilename );
#endif /* MINGW_H */

View file

@ -119,7 +119,7 @@ MingwModuleHandler::GetTargetFilename (
string_list* pclean_files )
{
string target = PassThruCacheDirectory (
FixupTargetFilename ( module.GetPath () ),
NormalizeFilename ( module.GetPath () ),
backend->outputDirectory );
if ( pclean_files )
{
@ -135,7 +135,7 @@ MingwModuleHandler::GetImportLibraryFilename (
string_list* pclean_files )
{
string target = PassThruCacheDirectory (
FixupTargetFilename ( module.GetDependencyPath () ),
NormalizeFilename ( module.GetDependencyPath () ),
backend->outputDirectory );
if ( pclean_files )
{
@ -1402,11 +1402,11 @@ MingwModuleHandler::GenerateInvocations () const
invoke_targets[i].c_str () );
fprintf ( fMakefile,
": %s\n",
FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str () );
NormalizeFilename ( invoke.invokeModule->GetPath () ).c_str () );
fprintf ( fMakefile, "\t$(ECHO_INVOKE)\n" );
fprintf ( fMakefile,
"\t%s %s\n\n",
FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str (),
NormalizeFilename ( invoke.invokeModule->GetPath () ).c_str (),
invoke.GetParameters ().c_str () );
}
}
@ -1932,7 +1932,7 @@ MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ()
string extension = GetExtension ( file.name );
if ( extension == ".rc" || extension == ".RC" )
{
string resource = FixupTargetFilename ( file.name );
string resource = NormalizeFilename ( file.name );
fprintf ( fMakefile, "\t$(ECHO_BIN2RES)\n" );
fprintf ( fMakefile, "\t@:echo ${bin2res} -f -x %s\n",
resource.c_str () );
@ -2272,7 +2272,7 @@ MingwIsoModuleHandler::GetBootstrapCdFiles (
{
const Module& m = *module.project.modules[i];
if ( m.bootstrap != NULL )
out.push_back ( FixupTargetFilename ( m.GetPath () ) );
out.push_back ( NormalizeFilename ( m.GetPath () ) );
}
}
@ -2299,13 +2299,13 @@ void
MingwIsoModuleHandler::GenerateIsoModuleTarget ()
{
string bootcdDirectory = "cd";
string isoboot = FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" );
string isoboot = NormalizeFilename ( "boot/freeldr/bootsect/isoboot.o" );
string bootcdReactosNoFixup = bootcdDirectory + "/reactos";
string bootcdReactos = PassThruCacheDirectory (
NormalizeFilename ( bootcdReactosNoFixup ),
backend->outputDirectory );
CLEAN_FILE ( bootcdReactos );
string reactosInf = ros_temp + FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" );
string reactosInf = ros_temp + NormalizeFilename ( bootcdReactosNoFixup + "/reactos.inf" );
string reactosDff = NormalizeFilename ( "bootdata/packages/reactos.dff" );
string cdDirectories = GetCdDirectories ( bootcdDirectory );
vector<string> vCdFiles;

View file

@ -4,6 +4,6 @@ using std::string;
void FunctionTest::Run ()
{
string fixedupFilename = FixupTargetFilename ( "." SSEP "dir1" SSEP "dir2" SSEP ".." SSEP "filename.txt" );
string fixedupFilename = NormalizeFilename ( "." SSEP "dir1" SSEP "dir2" SSEP ".." SSEP "filename.txt" );
ARE_EQUAL ( "dir1" SSEP "filename.txt", fixedupFilename );
}