Author: cwittich
Date: Thu Nov 30 18:11:26 2006
New Revision: 24992
URL:
http://svn.reactos.org/svn/reactos?rev=24992&view=rev
Log:
check for compiler version
Modified:
trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
trunk/reactos/tools/rbuild/backend/mingw/mingw.h
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp Thu Nov 30 18:11:26 2006
@@ -685,10 +685,23 @@
compilerCommand = compilerPrefix + "-gcc";
detectedCompiler = TryToDetectThisCompiler ( compilerCommand );
}
+
if ( detectedCompiler )
- printf ( "detected (%s)\n", compilerCommand.c_str () );
+ {
+ string compilerVersion = GetCompilerVersion ( compilerCommand );
+ if ( IsSupportedCompilerVersion ( compilerVersion ) )
+ printf ( "detected (%s %s)\n", compilerCommand.c_str (),
compilerVersion.c_str() );
+ else
+ {
+ printf ( "detected (%s), but with unsupported version (%s)\n",
+ compilerCommand.c_str (),
+ compilerVersion.c_str () );
+ throw UnsupportedBuildToolException ( compilerCommand, compilerVersion );
+ }
+ }
else
printf ( "not detected\n" );
+
}
bool
@@ -701,6 +714,56 @@
NUL );
int exitcode = system ( command.c_str () );
return (exitcode == 0);
+}
+
+string
+MingwBackend::GetCompilerVersion ( const string& compilerCommand )
+{
+ FILE *fp;
+ int ch, i;
+ char buffer[81];
+
+ string versionCommand = ssprintf ( "%s --version gcc",
+ compilerCommand.c_str (),
+ NUL,
+ NUL );
+ fp = popen ( versionCommand.c_str () , "r" );
+ for( i = 0;
+ ( i < 80 ) &&
+ ( feof ( fp ) == 0 &&
+ ( ( ch = fgetc( fp ) ) != -1 ) );
+ i++ )
+ {
+ buffer[i] = (char) ch;
+ }
+ buffer[i] = '\0';
+ pclose ( fp );
+
+ char separators[] = " ";
+ char *token;
+ char *prevtoken = NULL;
+
+ string version;
+
+ token = strtok ( buffer, separators );
+ while ( token != NULL )
+ {
+ prevtoken = token;
+ version = string( prevtoken );
+ if ( version.find('.') != std::string::npos )
+ break;
+ token = strtok ( NULL, separators );
+ }
+ return version;
+}
+
+bool
+MingwBackend::IsSupportedCompilerVersion ( const string& compilerVersion )
+{
+ if ( strcmp ( compilerVersion.c_str (), "3.4.5") < 0 )
+ return false;
+ else
+ return true;
}
bool
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.h (original)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.h Thu Nov 30 18:11:26 2006
@@ -85,6 +85,8 @@
bool IncludeDirectoryTarget ( const std::string& directory ) const;
bool TryToDetectThisCompiler ( const std::string& compiler );
void DetectCompiler ();
+ std::string GetCompilerVersion ( const std::string& compilerCommand );
+ bool IsSupportedCompilerVersion ( const std::string& compilerVersion );
bool TryToDetectThisNetwideAssembler ( const std::string& assembler );
bool TryToDetectThisBinutils ( const std::string& binutils );
std::string GetBinutilsVersion ( const std::string& binutilsCommand );