diff --git a/src/backends/sage/CMakeLists.txt b/src/backends/sage/CMakeLists.txt --- a/src/backends/sage/CMakeLists.txt +++ b/src/backends/sage/CMakeLists.txt @@ -29,3 +29,9 @@ endif() install(FILES cantor_sage.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) + +install( + FILES cantor-execsage + PERMISSIONS WORLD_READ OWNER_WRITE WORLD_EXECUTE + DESTINATION ${KDE_INSTALL_DATADIR}/cantor/sagebackend +) diff --git a/src/backends/sage/cantor-execsage b/src/backends/sage/cantor-execsage new file mode 100644 --- /dev/null +++ b/src/backends/sage/cantor-execsage @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +ROOT="$($1 --root)" + +if [[ -f $ROOT"/bin/sage-env" ]]; then + . "$ROOT/bin/sage-env" >&2 +elif [[ -f $ROOT"/src/bin/sage-env" ]]; then + . "$ROOT/src/bin/sage-env" >&2 +else + exit 1 # We have a problem +fi + +exec sage-ipython -i --simple-prompt \ No newline at end of file diff --git a/src/backends/sage/sagebackend.cpp b/src/backends/sage/sagebackend.cpp --- a/src/backends/sage/sagebackend.cpp +++ b/src/backends/sage/sagebackend.cpp @@ -58,7 +58,7 @@ QString SageBackend::version() const { - return QLatin1String("Undefined"); + return QLatin1String("8.1 and 8.2"); } Cantor::Session* SageBackend::createSession() diff --git a/src/backends/sage/sagesession.cpp b/src/backends/sage/sagesession.cpp --- a/src/backends/sage/sagesession.cpp +++ b/src/backends/sage/sagesession.cpp @@ -116,7 +116,11 @@ emit loginStarted(); m_process=new KPtyProcess(this); - m_process->setProgram(SageSettings::self()->path().toLocalFile()); + + const QString& sageExecFile = SageSettings::self()->path().toLocalFile(); + const QString& sageStartScript = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("cantor/sagebackend/cantor-execsage")); + m_process->setProgram(sageStartScript, QStringList(sageExecFile)); + m_process->setOutputChannelMode(KProcess::SeparateChannels); m_process->setPtyChannels(KPtyProcess::AllChannels); m_process->pty()->setEcho(false); @@ -213,7 +217,18 @@ m_sageVersion=SageSession::VersionInfo(major, minor); - if(m_sageVersion<=SageSession::VersionInfo(5, 7)) + // We can't work with this versions, because https://github.com/ipython/ipython/issues/9816 + // Upper bound (8.0) was tested, but lower bound (7.4) was not (but Sage 7.6 already don't work for Cantor) + if(m_sageVersion <= SageSession::VersionInfo(8, 0) && m_sageVersion >= SageSession::VersionInfo(7,4)) + { + const QString message = i18n( + "Sorry, but Cantor can't work with Sage %1.%2, because this Sage version have"\ + " a bug, which can't allow Cantor work correctly", major, minor); + KMessageBox::error(nullptr, message, i18n("Cantor")); + interrupt(); + logout(); + } + else if(m_sageVersion<=SageSession::VersionInfo(5, 7)) { qDebug()<<"using an old version of sage: "<