#include <qradiobutton.h>
#include <qbuttongroup.h>
#include <qregexp.h>
+#include <qdir.h>
#ifdef WNT
#include <iostream.h>
QString tmpDirName() { return QString( "/INSTALLWORK" ) + QString::number( getpid() ); }
#define TEMPDIRNAME tmpDirName()
+// ================================================================
+/*!
+ * Script
+ * Helper class to generate shell command
+ */
+// ================================================================
+class Script
+{
+public:
+ Script( const QString& cmd = QString::null, const QString& sep = " " ) : mySeparator( sep )
+ {
+ append( cmd );
+ }
+ void append( const QString& cmd )
+ {
+ if ( !cmd.isEmpty() ) myList.append( cmd );
+ }
+ Script& operator<<( const QString& cmd )
+ {
+ append( cmd );
+ return *this;
+ }
+ QString script() const
+ {
+ return myList.join( mySeparator );
+ }
+ void clear()
+ {
+ myList.clear();
+ }
+private:
+ QStringList myList;
+ QString mySeparator;
+};
+
// ================================================================
/*!
* ProcessThread
- * Class for executing systen commands
+ * Class for executing system commands
*/
// ================================================================
static QMutex myMutex(false);
QFileInfo fi( aDir.left( start ) );
if ( !fi.exists() ) {
// VSR: Create directory and set permissions to allow other users to remove it
- QString script = "mkdir " + fi.absFilePath();
- script += "; chmod 777 " + fi.absFilePath();
- script += " > /dev/null";
- if ( system( script.latin1() ) )
+ Script script;
+ script << "mkdir" << QUOTE( fi.absFilePath() ) << ">& /dev/null" << "&&";
+ script << "chmod 777" << QUOTE( fi.absFilePath() ) << ">& /dev/null";
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) )
return false;
// VSR: Remember the top of the created directory (to remove it in the end of the installation)
if ( theCreated.isNull() )
}
if ( !QFileInfo( aDir ).exists() ) {
// VSR: Create directory, other users should NOT have possibility to remove it!!!
- QString script = "mkdir " + aDir;
- script += " > /dev/null";
- if ( system( script.latin1() ) )
+ Script script;
+ script << "mkdir" << QUOTE( aDir ) << ">& /dev/null";
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) )
return false;
// VSR: Remember the top of the created directory (to remove it in the end of the installation)
if ( theCreated.isNull() )
.arg( __IW_VERSION_MINOR__ ) \
.arg( __IW_VERSION_PATCH__ ) );
QLabel* copyright = new QLabel( this, "copyright" );
- copyright->setText( "<b>Copyright</b> © 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE<br><br>"
- "<b>Copyright</b> © 2003-2007 OPEN CASCADE,<br>EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D,<br>LEG, PRINCIPIA R&D, BUREAU VERITAS");
+ copyright->setText( "<b>Copyright</b> © 2007-2009 CEA/DEN" );
QFont font = title->font();
font.setPointSize( (int)( font.pointSize() * 1.8 ) );
title->setFont( font );
singleDir = aSingleDir;
stateChanged = true;
- QDir appDir( qApp->applicationDirPath() );
- appDir.cdUp();
- binPath = appDir.filePath( "Products/BINARIES" );
- srcPath = appDir.filePath( "Products/SOURCES" );
+ QDir rootDir( rootDirPath() );
+ binPath = rootDir.filePath( "Products/BINARIES" );
+ srcPath = rootDir.filePath( "Products/SOURCES" );
oneProdDirName = "PRODUCTS";
commonPlatform = "Debian 3.1";
// ... get current platform
curPlatform = currentPlatform().join(" ");
//cout << "curOS = " << curPlatform << endl;
- //curPlatform = "";
refPlatform = "";
// ... check XML and platform definition
getXmlAndPlatform();
SALOME_InstallWizard::~SALOME_InstallWizard()
{
shellProcess->kill(); // kill it for sure
- QString script = "kill -9 ";
int PID = (int)shellProcess->processIdentifier();
if ( PID > 0 ) {
- script += QString::number( PID );
- script += " > /dev/null";
- ___MESSAGE___( "script: " << script.latin1() );
- if ( system( script.latin1() ) ) {
+ Script script;
+ script << "kill -9" << QString::number( PID ) << ">& /dev/null";
+ ___MESSAGE___( "script: " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
+ // error
}
}
delete myThread;
QFile file( osFileName );
if ( file.open( IO_ReadOnly ) ) {
QTextStream stream( &file );
- while( !stream.atEnd() ) {
- QString str = stream.readLine().stripWhiteSpace();
+ QStringList lines = QStringList::split( "\n", stream.read() );
+ file.close();
+ for ( uint i = 0; i < lines.count(); i++ ) {
+ QString str = lines[i];
if ( str.isEmpty() ) continue;
- file.close();
// parse line
QRegExp regvar = QRegExp( "(.*)\\s+[^\\s]*[R|r]elease[^\\s]*\\s+([\\d.]*)" );
int pos = regvar.search( str );
if ( !platArch.isEmpty() ) vals.append( platArch );
return vals;
}
+
+// ================================================================
+/*!
+ * SALOME_InstallWizard::rootDirPath
+ * Get application root dir
+ */
+// ================================================================
+QString SALOME_InstallWizard::rootDirPath()
+{
+ static QString rootDir;
+ if ( rootDir.isEmpty() ) {
+ QDir appDir( qApp->applicationDirPath() );
+ appDir.cdUp();
+ rootDir = appDir.absPath();
+ }
+ return rootDir;
+}
+
// ================================================================
/*!
* SALOME_InstallWizard::getPlatformBinPath
MapXmlFiles xmlMap;
QStringList xmlList;
if ( !aXmlFileName.isEmpty() )
- xmlList.append( aXmlFileName );
+ xmlList.append( QFileInfo( aXmlFileName ).absFilePath() );
else {
- QDir dir( QDir::currentDirPath() );
- xmlList = dir.entryList( "*.xml", QDir::Files | QDir::Readable );
+ QDir dir( rootDirPath() );
+ QStringList entries = dir.entryList( "*.xml", QDir::Files | QDir::Readable );
+ if ( entries.remove( "config.xml" ) )
+ entries.append( "config.xml" );
+ for ( uint i = 0; i < entries.count(); i++ )
+ xmlList.append( QDir( rootDirPath() ).filePath( entries[i] ) );
}
- if ( xmlList.remove( "config.xml" ) )
- xmlList.append( "config.xml" );
// XML files parsing
QFile file;
QDomDocument doc( "xml_doc" );
pageLayout->addLayout( hLayout );
// loading README file
- QString readmeFile = QDir::currentDirPath() + "/README";
+ QString readmeFile = QDir( rootDirPath() ).filePath( "README" );
QString text;
if ( readFile( readmeFile, text ) )
readme->setText( text );
return false;
}
// run script that checks available disk space for installing of products // returns 1 in case of error
+ QDir rd( rootDirPath() );
QFileInfo fi( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) );
- QString script = "./config_files/checkSize.sh '";
- script += fi.absFilePath();
- script += "' ";
- script += QString( "%1" ).arg( totSize );
- ___MESSAGE___( "script = " << script.latin1() );
- if ( system( script ) ) {
+ Script script;
+ script << QUOTE( rd.filePath( "config_files/checkSize.sh" ) );
+ script << QUOTE( fi.absFilePath() ) << QString::number( totSize );
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
QMessageBox::critical( this,
tr( "Out of space" ),
tr( "There is no available disk space for installing of selected products" ),
// run script that check available disk space for temporary files
// returns 1 in case of error
QFileInfo fit( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) );
- QString tscript = "./config_files/checkSize.sh '";
- tscript += fit.absFilePath();
- tscript += "' ";
- tscript += QString( "%1" ).arg( tempSize );
- ___MESSAGE___( "script = " << tscript.latin1() );
- if ( system( tscript ) ) {
+ Script tscript;
+ tscript << QUOTE( rd.filePath( "config_files/checkSize.sh" ) );
+ tscript << QUOTE( fit.absFilePath() ) << QString::number( tempSize );
+ ___MESSAGE___( "script = " << tscript.script().latin1() );
+ if ( system( tscript.script().latin1() ) ) {
QMessageBox::critical( this,
tr( "Out of space" ),
tr( "There is no available disk space for the temporary files" ),
}
// check installation script existence
else {
- QFileInfo fi( QString("./config_files/") + item->text(2) );
+ QDir rd( rootDirPath() );
+ QFileInfo fi( rd.filePath( QString( "config_files/%1" ).arg( item->text(2) ) ) );
if ( !fi.exists() || !fi.isExecutable() ) {
QMessageBox::warning( this,
tr( "Error" ),
- tr( "The script %1 required for %2 doesn't exist or doesn't have execute permissions.").arg("./config_files/" + item->text(2)).arg(item->text(0)),
+ tr( "The script %1 required for %2 doesn't exist or doesn't have execute permissions.").arg(fi.filePath()).arg(item->text(0)),
QMessageBox::Ok,
QMessageBox::NoButton,
QMessageBox::NoButton );
// ... update status label
statusLab->setText( tr( "Modification of *.la files of SALOME modules..." ) );
// set process arguments
- modifyLaProc->setWorkingDirectory( QDir::cleanDirPath( QFileInfo( "./config_files/" ).absFilePath() ) );
+ modifyLaProc->setWorkingDirectory( QDir( rootDirPath() ).filePath( "config_files" ) );
modifyLaProc->addArgument( "modifyLaFiles.sh" );
modifyLaProc->addArgument( "modify_la_files" );
modifyLaProc->addArgument( QDir::cleanDirPath( QFileInfo( targetFolder->text().stripWhiteSpace() ).absFilePath() ) );
// ... update status label
statusLab->setText( tr( "Check Fortran libraries..." ) );
// ... search "not found" libraries
- checkFLibProc->setWorkingDirectory( QDir::cleanDirPath( QFileInfo( "./config_files/" ).absFilePath() ) );
+ checkFLibProc->setWorkingDirectory( QDir( rootDirPath() ).filePath( "config_files" ) );
checkFLibProc->addArgument( "checkFortran.sh" );
checkFLibProc->addArgument( "find_libraries" );
checkFLibProc->addArgument( QDir::cleanDirPath( QFileInfo( targetFolder->text().stripWhiteSpace() ).absFilePath() ) );
QFileInfo fi( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) );
if ( fi.exists() ) {
diskSpaceProc->clearArguments();
- QString script = "./config_files/diskSpace.sh";
- diskSpaceProc->addArgument( script );
+ diskSpaceProc->setWorkingDirectory( QDir( rootDirPath() ).filePath( "config_files" ) );
+ diskSpaceProc->addArgument( "diskSpace.sh" );
diskSpaceProc->addArgument( fi.absFilePath() );
// run script
diskSpaceProc->start();
// fill in script parameters
shellProcess->clearArguments();
// ... script name
- shellProcess->setWorkingDirectory( QDir::cleanDirPath( QFileInfo( "./config_files/" ).absFilePath() ) );
+ shellProcess->setWorkingDirectory( QDir( rootDirPath() ).filePath( "config_files" ) );
if ( !extraProducts.contains( prodProc ) ) {
item = findItem( prodProc );
shellProcess->addArgument( item->text(2) );
if ( notInstall.contains( prodProc ) || prodProc == "gcc" ) {
shellProcess->addArgument( "try_preinstalled" );
shellProcess->addArgument( QFileInfo( tmpFolder ).absFilePath() );
- shellProcess->addArgument( QDir::currentDirPath() + "/Products" );
+ shellProcess->addArgument( QDir( rootDirPath() ).filePath( "Products" ) );
statusLab->setText( tr( "Collecting environment for '" ) + prodProc + "'..." );
}
// ... binaries ?
if ( item->isOn() && dep.pickUpEnvironment() ) {
statusLab->setText( tr( "Pick-up products environment for " ) + dep.getName().latin1() + "..." );
___MESSAGE___( "... for " << dep.getName().latin1() );
- QString script;
- script += "cd " + QUOTE( QFileInfo( QDir::cleanDirPath( "./config_files/" ) ).absFilePath() ) + "; ";
- script += item->text(2) + " ";
- script += "pickup_env ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() ) + " ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( QDir::currentDirPath() + "/Products" ) ).absFilePath() ) + " ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() ) + " ";
- script += depproducts + " ";
- script += item->text(0) + " ";
- script += QUOTE( prodSequence.join( " " ) );
- ___MESSAGE___( "... --> " << script.latin1() );
- if ( system( script.latin1() ) ) {
+ QDir rd( rootDirPath() );
+ Script script;
+ script << "cd" << QUOTE( rd.filePath( "config_files" ) ) << ";";
+ script << item->text(2) << "pickup_env";
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() );
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( QDir( rootDirPath() ).filePath( "Products" ) ) ).absFilePath() );
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() );
+ script << depproducts << item->text(0) << QUOTE( prodSequence.join( " " ) );
+ ___MESSAGE___( "... --> " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
___MESSAGE___( "ERROR" );
}
}
ButtonList::Iterator it;
for ( it = buttons.begin(); it != buttons.end(); ++it ) {
if ( (*it).button() && (*it).button() == btn ) {
- QString script;
- script += "( cd " + QUOTE( QFileInfo( QDir::cleanDirPath( "./config_files/" ) ).absFilePath() ) + "; ";
- script += + (*it).script();
- script += " execute ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() ) + " ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() ) + " ";
- script += " > /dev/null )";
- ___MESSAGE___( "script: " << script.latin1() );
- if ( (*it).script().isEmpty() || system( script.latin1() ) ) {
+ QDir rd( rootDirPath() );
+ Script script;
+ script << "cd" << QUOTE( rd.filePath( "config_files" ) ) << ";";
+ script << (*it).script() << "execute";
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() );
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() );
+ script << ">& /dev/null";
+ ___MESSAGE___( "script: " << script.script().latin1() );
+ if ( (*it).script().isEmpty() || system( script.script().latin1() ) ) {
QMessageBox::warning( this,
tr( "Error" ),
tr( "Can't perform action!"),
myWC.wakeAll();
while ( myThread->running() );
// first remove temporary files
- QString script = "cd ./config_files/; remove_tmp.sh '";
- script += tempFolder->text().stripWhiteSpace() + TEMPDIRNAME;
- script += "' ";
- script += QUOTE(getAllProducts(productsMap));
- script += " > /dev/null";
- ___MESSAGE___( "script = " << script.latin1() );
- if ( system( script.latin1() ) ) {
+ QDir rd( rootDirPath() );
+ Script script;
+ script << "cd" << QUOTE( rd.filePath( "config_files" ) ) << ";";
+ script << "remove_tmp.sh" << QUOTE( tempFolder->text().stripWhiteSpace() + TEMPDIRNAME );
+ script << QUOTE( getAllProducts( productsMap ) );
+ script << ">& /dev/null";
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
+ // error
}
// then try to remove created temporary directory
//script = "rm -rf " + QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME;
if ( rmDir && !tmpCreated.isNull() ) {
- script = "rm -rf " + tmpCreated;
- script += " > /dev/null";
- if ( system( script.latin1() ) ) {
+ script.clear();
+ script << "rm -rf" << QUOTE( tmpCreated );
+ script << ">& /dev/null";
+ if ( system( script.script().latin1() ) ) {
+ // error
}
- ___MESSAGE___( "script = " << script.latin1() );
+ ___MESSAGE___( "script = " << script.script().latin1() );
}
}
// ================================================================
ButtonList::Iterator it;
for ( it = buttons.begin(); it != buttons.end(); ++it ) {
if ( (*it).button() ) {
- QString script;
- script += "( cd " + QUOTE( QFileInfo( QDir::cleanDirPath( "./config_files/" ) ).absFilePath() ) + "; ";
- script += + (*it).script();
- script += " check_enabled ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() ) + " ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() ) + " ";
- script += " > /dev/null )";
- ___MESSAGE___( "script: " << script.latin1() );
- (*it).button()->setEnabled( !(*it).script().isEmpty() && !system( script.latin1() ) );
+ QDir rd( rootDirPath() );
+ Script script;
+ script << "cd" << QUOTE( rd.filePath( "config_files" ) ) << ";";
+ script << (*it).script() << "check_enabled";
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() );
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() );
+ script << ">& /dev/null";
+ ___MESSAGE___( "script: " << script.script().latin1() );
+ (*it).button()->setEnabled( !(*it).script().isEmpty() && !system( script.script().latin1() ) );
}
}
finishButton()->setEnabled( true );
// update status label
statusLab->setText( tr( "Check Fortran compiler..." ) );
// check Fortran compiler.
- QString script = "./config_files/checkFortran.sh find_compilers";
- script += " " + QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() );
- ___MESSAGE___( "script = " << script.latin1() );
- if ( system( script ) ) {
+ QDir rd( rootDirPath() );
+ Script script;
+ script << QUOTE( rd.filePath( "config_files/checkFortran.sh" ) ) << "find_compilers";
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( tempFolder->text().stripWhiteSpace() ) + TEMPDIRNAME ).absFilePath() );
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
QMessageBox::critical( this,
tr( "Error" ),
tr( "Fortran compiler was not found at current system!\n"
// create a backup of 'env_build.csh', 'env_build.sh', 'env_products.csh', 'env_products.sh'
// ( backup of 'salome.csh' and 'salome.sh' is made if pick-up environment is called )
- QString script = "./config_files/backupEnv.sh ";
- script += QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() );
- ___MESSAGE___( "script = " << script.latin1() );
- if ( system( script ) ) {
+ QDir rd( rootDirPath() );
+ Script script;
+ script << QUOTE( rd.filePath( "config_files/backupEnv.sh" ) );
+ script << QUOTE( QFileInfo( QDir::cleanDirPath( targetFolder->text().stripWhiteSpace() ) ).absFilePath() );
+ ___MESSAGE___( "script = " << script.script().latin1() );
+ if ( system( script.script().latin1() ) ) {
if ( QMessageBox::warning( this,
tr( "Warning" ),
tr( "Backup environment files have not been created.\n"