Generate reactos.cab

svn path=/branches/xmlbuildsystem/; revision=13470
This commit is contained in:
Casper Hornstrup 2005-02-08 22:21:16 +00:00
parent 0dd134f1a2
commit d441fe88f2
7 changed files with 75 additions and 67 deletions

View file

@ -161,12 +161,12 @@ MingwBackend::GenerateProjectLFLAGS () const
void
MingwBackend::GenerateGlobalVariables () const
{
#ifdef WIN32
fprintf ( fMakefile, "host_gcc = gcc\n" );
fprintf ( fMakefile, "host_gpp = g++\n" );
fprintf ( fMakefile, "host_ld = ld\n" );
fprintf ( fMakefile, "host_ar = ar\n" );
fprintf ( fMakefile, "host_objcopy = objcopy\n" );
#ifdef WIN32
fprintf ( fMakefile, "rm = del /f /q\n" );
fprintf ( fMakefile, "gcc = gcc\n" );
fprintf ( fMakefile, "gpp = g++\n" );
@ -176,11 +176,6 @@ MingwBackend::GenerateGlobalVariables () const
fprintf ( fMakefile, "dlltool = dlltool\n" );
fprintf ( fMakefile, "windres = windres\n" );
#else
fprintf ( fMakefile, "host_gcc = gcc\n" );
fprintf ( fMakefile, "host_gpp = g++\n" );
fprintf ( fMakefile, "host_ld = ld\n" );
fprintf ( fMakefile, "host_ar = ar\n" );
fprintf ( fMakefile, "host_objcopy = objcopy\n" );
fprintf ( fMakefile, "rm = rm -f\n" );
fprintf ( fMakefile, "gcc = mingw32-gcc\n" );
fprintf ( fMakefile, "gpp = mingw32-g++\n" );
@ -190,12 +185,12 @@ MingwBackend::GenerateGlobalVariables () const
fprintf ( fMakefile, "dlltool = mingw32-dlltool\n" );
fprintf ( fMakefile, "windres = mingw32-windres\n" );
#endif
fprintf ( fMakefile, "mkdir = tools%crmkdir\n", CSEP );
fprintf ( fMakefile, "mkdir = tools" SSEP "rmkdir" EXEPOSTFIX "\n" );
fprintf ( fMakefile, "NUL=NUL\n" );
fprintf ( fMakefile, "winebuild = tools" SSEP "winebuild" SSEP "winebuild\n" );
fprintf ( fMakefile, "bin2res = tools" SSEP "bin2res" SSEP "bin2res\n" );
fprintf ( fMakefile, "cabman = tools" SSEP "cabman" SSEP "cabman\n" );
fprintf ( fMakefile, "cdmake = tools" SSEP "cdmake" SSEP "cdmake\n" );
fprintf ( fMakefile, "winebuild = tools" SSEP "winebuild" SSEP "winebuild" EXEPOSTFIX "\n" );
fprintf ( fMakefile, "bin2res = tools" SSEP "bin2res" SSEP "bin2res" EXEPOSTFIX "\n" );
fprintf ( fMakefile, "cabman = tools" SSEP "cabman" SSEP "cabman" EXEPOSTFIX "\n" );
fprintf ( fMakefile, "cdmake = tools" SSEP "cdmake" SSEP "cdmake" EXEPOSTFIX "\n" );
fprintf ( fMakefile, "\n" );
GenerateGlobalCFlagsAndProperties (
"=",

View file

@ -55,7 +55,7 @@ MingwModuleHandler::~MingwModuleHandler()
const string &
MingwModuleHandler::PassThruCacheDirectory ( const string &file ) const
{
directory_set.insert( ReplaceExtension( GetDirectory( file ), "" ) );
directory_set.insert ( GetDirectory ( file ) );
return file;
}
@ -86,16 +86,6 @@ MingwModuleHandler::GetWorkingDirectory () const
return ".";
}
string
MingwModuleHandler::GetDirectory ( const string& filename )
{
size_t index = filename.find_last_of ( CSEP );
if (index == string::npos)
return ".";
else
return filename.substr ( 0, index );
}
string
MingwModuleHandler::GetBasename ( const string& filename ) const
{
@ -248,8 +238,7 @@ MingwModuleHandler::GetObjectFilename ( const string& sourceFilename )
newExtension = ".stubs.o";
else
newExtension = ".o";
return FixupTargetFilename (
ReplaceExtension ( sourceFilename, newExtension ) );
return FixupTargetFilename ( ReplaceExtension ( sourceFilename, newExtension ) );
}
string
@ -271,8 +260,11 @@ MingwModuleHandler::GetObjectFilenames ( const Module& module ) const
void
MingwModuleHandler::GenerateDirectoryTargets () const
{
if ( directory_set.size () == 0 )
return;
set_string::iterator i;
fprintf( fMakefile, "ifneq ($(ROS_INTERMEDIATE),)\ndirectories::" );
fprintf ( fMakefile, "directories::" );
for ( i = directory_set.begin ();
i != directory_set.end ();
@ -291,10 +283,7 @@ MingwModuleHandler::GenerateDirectoryTargets() const
}
fprintf ( fMakefile,
"::\n\t${mkdir} $@\n\n"
"else\n"
"directories::\n\n"
"endif\n\n" );
"::\n\t${mkdir} $@\n\n" );
directory_set.clear ();
}
@ -1264,6 +1253,8 @@ MingwModuleHandler::GetLinkingDependencies ( const Module& module ) const
bool
MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) const
{
if ( module.HasFileWithExtensions ( ".cc", ".CC" ) )
return true;
if ( module.HasFileWithExtensions ( ".cxx", ".CXX" ) )
return true;
if ( module.HasFileWithExtensions ( ".cpp", ".CPP" ) )
@ -1949,28 +1940,37 @@ MingwIsoModuleHandler::Process ( const Module& module )
void
MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module )
{
string isoboot = "$(ROS_INTERMEDIATE)" + FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" );
string bootcdDirectory = "cd";
string isoboot = FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" );
string bootcdReactosNoFixup = bootcdDirectory + "/reactos";
string bootcdReactos = FixupTargetFilename ( bootcdReactosNoFixup );
PassThruCacheDirectory ( bootcdReactos + SSEP );
string reactosInf = FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" );
string reactosDff = NormalizeFilename ( "bootdata/packages/reactos.dff" );
fprintf ( fMakefile, ".PHONY: %s\n\n",
module.name.c_str ());
fprintf ( fMakefile,
"%s: all %s\n",
"%s: all %s %s\n",
module.name.c_str (),
isoboot.c_str () );
isoboot.c_str (),
bootcdReactos.c_str () );
fprintf ( fMakefile,
"\t${cabman} /C %s /L $(ROS_INTERMEDIATE)%s /I\n",
FixupTargetFilename ( "bootdata/packages/reactos.dff" ).c_str (),
FixupTargetFilename ( "bootcd/reactos" ).c_str () );
"\t${cabman} /C %s /L %s /I\n",
reactosDff.c_str (),
bootcdReactos.c_str () );
fprintf ( fMakefile,
"\t${cabman} /C %s /RC $(ROS_INTERMEDIATE)%s /L $(BOOTCD_DIR)reactos /N\n",
FixupTargetFilename ( "bootdata/packages/reactos.dff" ).c_str (),
FixupTargetFilename ( "bootcd/reactos/reactos.inf" ).c_str () );
"\t${cabman} /C %s /RC %s /L %s /N\n",
reactosDff.c_str (),
reactosInf.c_str (),
bootcdReactos.c_str () );
fprintf ( fMakefile,
"\t- ${rm} $(ROS_INTERMEDIATE)%s\n",
FixupTargetFilename ( "bootcd/reactos/reactos.inf" ).c_str () );
"\t- ${rm} %s\n",
reactosInf.c_str () );
fprintf ( fMakefile,
"\t${cdmake} -v -m -b %s $(ROS_INTERMEDIATE)bootcd REACTOS ReactOS.iso\n",
isoboot.c_str () );
"\t${cdmake} -v -m -b %s %s REACTOS ReactOS.iso\n",
isoboot.c_str (),
bootcdDirectory.c_str () );
fprintf ( fMakefile,
"\n" );
}

View file

@ -23,7 +23,6 @@ public:
virtual void Process ( const Module& module ) = 0;
void GenerateDirectoryTargets () const;
static std::string GetObjectFilename ( const std::string& sourceFilename );
static std::string GetDirectory ( const std::string& filename );
protected:
const std::string &PassThruCacheDirectory ( const std::string &f ) const;
std::string GetWorkingDirectory () const;

View file

@ -31,6 +31,16 @@ GetExtension ( const string& filename )
return "";
}
string
GetDirectory ( const string& filename )
{
size_t index = filename.find_last_of ( CSEP );
if ( index == string::npos )
return filename;
else
return filename.substr ( 0, index );
}
string
NormalizeFilename ( const string& filename )
{

View file

@ -439,6 +439,9 @@ FixSeparator ( const std::string& s );
extern std::string
GetExtension ( const std::string& filename );
extern std::string
GetDirectory ( const std::string& filename );
extern std::string
NormalizeFilename ( const std::string& filename );

View file

@ -10,14 +10,12 @@
#include <sys/types.h>
#endif
#ifdef UNIX_PATHS
#define DIR_SEPARATOR_CHAR '/'
#define DIR_SEPARATOR_STRING "/"
#else
#ifdef DOS_PATHS
#if defined(WIN32)
#define DIR_SEPARATOR_CHAR '\\'
#define DIR_SEPARATOR_STRING "\\"
#endif
#else
#define DIR_SEPARATOR_CHAR '/'
#define DIR_SEPARATOR_STRING "/"
#endif
char* convert_path(char* origpath)

View file

@ -19,3 +19,6 @@
<directory name="winebuild">
<xi:include href="winebuild/winebuild.xml" />
</directory>
<module name="rmkdir" type="buildtool">
<file>rmkdir.c</file>
</module>