|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2006 by Andras Mantia *
|
|
|
|
* amantia@kde.org *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#include "setuphelper.h"
|
|
|
|
#include "blockingkprocess.h"
|
|
|
|
#include "driver.h"
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include "tdetempfile.h" /* defines [function] KTempDir */
|
|
|
|
#include "kstandarddirs.h" /* defines [function] locateLocal */
|
|
|
|
#include "tqdir.h" /* defines TQDir */
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
namespace SetupHelper {
|
|
|
|
|
|
|
|
TQString getGccIncludePath(bool *ok)
|
|
|
|
{
|
|
|
|
*ok = true;
|
|
|
|
TQString processStdout;
|
|
|
|
BlockingTDEProcess proc;
|
|
|
|
proc << "gcc" ;
|
|
|
|
proc << "-print-file-name=include" ;
|
|
|
|
if ( !proc.start(TDEProcess::NotifyOnExit, TDEProcess::Stdout) ) {
|
|
|
|
kdWarning(9007) << "Couldn't start gcc" << endl;
|
|
|
|
*ok = false;
|
|
|
|
return TQString();
|
|
|
|
}
|
|
|
|
processStdout = proc.stdOut();
|
|
|
|
|
|
|
|
return processStdout;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString getVerboseGccIncludePath(bool *ok)
|
|
|
|
{
|
|
|
|
*ok = false;
|
|
|
|
///Create temp file
|
|
|
|
KTempFile tempFile(locateLocal("tmp", "tdevelop_temp"), ".cpp");
|
|
|
|
tempFile.setAutoDelete(true);
|
|
|
|
if( tempFile.status() != 0 )
|
|
|
|
return TQString();//Failed to create temp file
|
|
|
|
|
|
|
|
TQString path = tempFile.name();
|
|
|
|
TQFileInfo pathInfo( path );
|
|
|
|
|
|
|
|
char fileText[] = "//This source-file is empty";
|
|
|
|
fwrite(fileText, strlen(fileText), 1, tempFile.fstream() );
|
|
|
|
tempFile.close();
|
|
|
|
|
|
|
|
BlockingTDEProcess proc;
|
|
|
|
proc.setUseShell(true);
|
|
|
|
proc.setWorkingDirectory(pathInfo.dir(true).path());
|
|
|
|
proc << "gcc -v " + pathInfo.fileName() + " 2>&1";
|
|
|
|
if ( !proc.start(TDEProcess::NotifyOnExit, TDEProcess::Stdout) ) {
|
|
|
|
kdWarning(9007) << "Couldn't start gcc" << endl;
|
|
|
|
*ok = false;
|
|
|
|
return TQString();
|
|
|
|
}
|
|
|
|
*ok = true;
|
|
|
|
return proc.stdOut();
|
|
|
|
}
|
|
|
|
|
|
|
|
TQStringList getGccMacros(bool *ok)
|
|
|
|
{
|
|
|
|
*ok = true;
|
|
|
|
TQString processStdout;
|
|
|
|
BlockingTDEProcess proc;
|
|
|
|
proc << "gcc";
|
|
|
|
proc << "-E";
|
|
|
|
proc << "-dM";
|
|
|
|
proc << "-ansi" ;
|
|
|
|
proc << "-";
|
|
|
|
if ( !proc.start(TDEProcess::NotifyOnExit, TDEProcess::Stdout) ) {
|
|
|
|
kdWarning(9007) << "Couldn't start gcc" << endl;
|
|
|
|
*ok = false;
|
|
|
|
return TQStringList();
|
|
|
|
}
|
|
|
|
proc.closeStdin();
|
|
|
|
processStdout = proc.stdOut();
|
|
|
|
TQStringList lines = TQStringList::split('\n', processStdout);
|
|
|
|
return lines;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|