Skip to content

Commit

Permalink
Make sure launching external processes works after switch to qt6
Browse files Browse the repository at this point in the history
  • Loading branch information
jonjenssen committed Oct 15, 2024
1 parent eeb5f29 commit 2fe432b
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ void RicRunFaultReactModelingFeature::onActionTriggered( bool isChecked )

RimProcess process;
process.setCommand( command );
process.setParameters( parameters );
process.addParameters( parameters );

if ( !process.execute() )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ void RicRunWellIntegrityAnalysisFeature::onActionTriggered( bool isChecked )

RimProcess process;
process.setCommand( command );
process.setParameters( parameters );
process.addParameters( parameters );

if ( !process.execute() )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ bool RicImportSeismicFeature::runSEGYConversion( RimSEGYConvertOptions* options
}

process.setCommand( command );
process.setParameters( parameters );
process.addParameters( parameters );

bool showStdOut = false;
bool showStdErr = true;
Expand Down
62 changes: 41 additions & 21 deletions ApplicationLibCode/ProjectDataModel/ProcessControl/RimProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,6 @@
#include <QProcess>
#include <QProcessEnvironment>

// Disable deprecation warning for QProcess::start()
#ifdef _MSC_VER
#pragma warning( disable : 4996 )
#endif
#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif

CAF_PDM_SOURCE_INIT( RimProcess, "RimProcess" );

int RimProcess::m_nextProcessId = 1;
Expand Down Expand Up @@ -83,9 +75,8 @@ void RimProcess::addParameter( QString paramStr )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProcess::setParameters( QStringList parameterList )
void RimProcess::addParameters( QStringList parameterList )
{
m_arguments.clear();
for ( int i = 0; i < parameterList.size(); i++ )
{
addParameter( parameterList[i] );
Expand All @@ -97,7 +88,16 @@ void RimProcess::setParameters( QStringList parameterList )
//--------------------------------------------------------------------------------------------------
void RimProcess::setCommand( QString cmdStr )
{
m_command = cmdStr;
m_command = cmdStr.trimmed();

QString shell = optionalCommandInterpreter();
if ( shell.isEmpty() ) return;

QString preParam = optionalPreParameters();
if ( !preParam.isEmpty() ) m_arguments.append( preParam );

m_arguments.append( cmdStr.trimmed() );
m_command = shell;
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -156,7 +156,8 @@ bool RimProcess::execute( bool enableStdOut, bool enableStdErr )
}
proc->setProcessEnvironment( env );

proc->start( cmd );
proc->start( m_command, m_arguments );
auto error = proc->errorString();
if ( proc->waitForStarted( -1 ) )
{
while ( !proc->waitForFinished( 500 ) )
Expand All @@ -167,7 +168,7 @@ bool RimProcess::execute( bool enableStdOut, bool enableStdErr )
}
else
{
RiaLogging::error( QString( "Failed to start process %1." ).arg( m_id ) );
RiaLogging::error( QString( "Failed to start process %1. %2." ).arg( m_id ).arg( error ) );
}

proc->deleteLater();
Expand All @@ -182,31 +183,50 @@ QString RimProcess::optionalCommandInterpreter() const
{
if ( m_command.value().isNull() ) return "";

if ( m_command.value().endsWith( ".cmd", Qt::CaseInsensitive ) || m_command.value().endsWith( ".bat", Qt::CaseInsensitive ) )
if ( isWindowsBatchFile() )
{
return "cmd.exe /c ";
return "cmd.exe";
}
if ( m_command.value().endsWith( ".sh", Qt::CaseInsensitive ) )
{
return "bash ";
return "bash";
}
if ( m_command.value().endsWith( ".csh", Qt::CaseInsensitive ) )
{
return "csh ";
return "csh";
}
return "";
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimProcess::commandLine() const
QString RimProcess::optionalPreParameters() const
{
QString cmdline;
if ( m_command.value().isNull() ) return "";

if ( isWindowsBatchFile() )
{
return "/c";
}

return "";
}

cmdline += optionalCommandInterpreter();
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimProcess::isWindowsBatchFile() const
{
return ( m_command.value().endsWith( ".cmd", Qt::CaseInsensitive ) || m_command.value().endsWith( ".bat", Qt::CaseInsensitive ) );
}

cmdline += handleSpaces( m_command );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimProcess::commandLine() const
{
QString cmdline = handleSpaces( m_command );

for ( int i = 0; i < m_arguments.size(); i++ )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class RimProcess : public caf::PdmObject
void setDescription( QString desc );
void setCommand( QString cmdStr );
void addParameter( QString paramStr );
void setParameters( QStringList parameterList );
void addParameters( QStringList parameterList );

void addEnvironmentVariable( QString name, QString value );

Expand All @@ -57,8 +57,11 @@ class RimProcess : public caf::PdmObject

private:
QString optionalCommandInterpreter() const;
QString optionalPreParameters() const;
QString handleSpaces( QString argument ) const;

bool isWindowsBatchFile() const;

caf::PdmField<QString> m_command;
QStringList m_arguments;
caf::PdmField<QString> m_description;
Expand Down

0 comments on commit 2fe432b

Please sign in to comment.