/*************************************************************************** * 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 #include "tdetempfile.h" /* defines [function] KTempDir */ #include "kstandarddirs.h" /* defines [function] locateLocal */ #include "tqdir.h" /* defines TQDir */ #include 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; } }