Autodetect nasm
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
_____
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-05-29
11:42:46 UTC (rev 15655)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.cpp 2005-05-29
11:51:37 UTC (rev 15656)
@@ -301,6 +301,7 @@
MingwBackend::Process ()
{
DetectCompiler ();
+ DetectNetwideAssembler ();
DetectPipeSupport ();
DetectPCHSupport ();
CreateMakefile ();
@@ -486,6 +487,9 @@
fprintf ( fMakefile,
"PREFIX := %s\n",
compilerPrefix.c_str () );
+ fprintf ( fMakefile,
+ "nasm := %s\n",
+ nasmCommand.c_str () );
GenerateGlobalCFlagsAndProperties ( "=", ProjectNode.non_if_data
);
GenerateProjectGccOptions ( "=", ProjectNode.non_if_data );
@@ -683,8 +687,9 @@
MingwBackend::TryToDetectThisCompiler ( const string& compiler )
{
string command = ssprintf (
- "%s -v 2>%s",
+ "%s -v 1>%s 2>%s",
compiler.c_str (),
+ NUL,
NUL );
int exitcode = system ( command.c_str () );
return (exitcode == 0);
@@ -723,7 +728,39 @@
printf ( "not detected\n" );
}
+bool
+MingwBackend::TryToDetectThisNetwideAssembler ( const string& assembler
)
+{
+ string command = ssprintf (
+ "%s -h 1>%s 2>%s",
+ assembler.c_str (),
+ NUL,
+ NUL );
+ int exitcode = system ( command.c_str () );
+ return (exitcode == 0);
+}
+
void
+MingwBackend::DetectNetwideAssembler ()
+{
+ printf ( "Detecting netwide assembler..." );
+
+ nasmCommand = "nasm";
+ bool detectedNasm = TryToDetectThisNetwideAssembler (
nasmCommand );
+#if defined(WIN32)
+ if ( !detectedNasm )
+ {
+ nasmCommand = "nasmw";
+ detectedNasm = TryToDetectThisNetwideAssembler (
nasmCommand );
+ }
+#endif
+ if ( detectedNasm )
+ printf ( "detected (%s)\n", nasmCommand.c_str () );
+ else
+ printf ( "not detected\n" );
+}
+
+void
MingwBackend::DetectPipeSupport ()
{
printf ( "Detecting compiler -pipe support..." );
@@ -732,10 +769,11 @@
string pipe_detectionObjectFilename = ReplaceExtension (
pipe_detection,
".o" );
string command = ssprintf (
- "%s -pipe -c %s -o %s 2>%s",
+ "%s -pipe -c %s -o %s 1>%s 2>%s",
compilerCommand.c_str (),
pipe_detection.c_str (),
pipe_detectionObjectFilename.c_str (),
+ NUL,
NUL );
int exitcode = system ( command.c_str () );
FILE* f = fopen ( pipe_detectionObjectFilename.c_str (), "rb" );
@@ -761,9 +799,10 @@
string path = "tools" SSEP "rbuild" SSEP "backend" SSEP
"mingw"
SSEP "pch_detection.h";
string cmd = ssprintf (
- "%s -c %s 2>%s",
+ "%s -c %s 1>%s 2>%s",
compilerCommand.c_str (),
path.c_str (),
+ NUL,
NUL );
system ( cmd.c_str () );
path += ".gch";
_____
Modified: trunk/reactos/tools/rbuild/backend/mingw/mingw.h
--- trunk/reactos/tools/rbuild/backend/mingw/mingw.h 2005-05-29
11:42:46 UTC (rev 15655)
+++ trunk/reactos/tools/rbuild/backend/mingw/mingw.h 2005-05-29
11:51:37 UTC (rev 15656)
@@ -53,6 +53,7 @@
Directory* directoryTree );
std::string compilerPrefix;
std::string compilerCommand;
+ std::string nasmCommand;
bool usePipe;
Directory* intermediateDirectory;
Directory* outputDirectory;
@@ -87,6 +88,8 @@
bool IncludeDirectoryTarget ( const std::string& directory )
const;
bool TryToDetectThisCompiler ( const std::string& compiler );
void DetectCompiler ();
+ bool TryToDetectThisNetwideAssembler ( const std::string&
assembler );
+ void DetectNetwideAssembler ();
void DetectPipeSupport ();
void DetectPCHSupport ();
void ProcessModules ();
_____
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-05-29 11:42:46 UTC (rev 15655)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
2005-05-29 11:51:37 UTC (rev 15656)
@@ -899,7 +899,7 @@
fprintf ( fMakefile, "\t$(ECHO_NASM)\n" );
fprintf ( fMakefile,
"\t%s -f win32 $< -o $@ %s\n",
- "$(Q)nasm",
+ "$(Q)${nasm}",
nasmflagsMacro.c_str () );
}