Windows: small adjustments to new aspell management.
This commit is contained in:
parent
7310709e08
commit
d1058dc676
@ -250,8 +250,6 @@ bool Aspell::buildDict(Rcl::Db &db, string &reason)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const unsigned int ldatadiroptsz = strlen("--local-data-dir=");
|
|
||||||
|
|
||||||
bool Aspell::make_speller(string& reason)
|
bool Aspell::make_speller(string& reason)
|
||||||
{
|
{
|
||||||
if (!ok())
|
if (!ok())
|
||||||
@ -259,7 +257,7 @@ bool Aspell::make_speller(string& reason)
|
|||||||
if (m_data->m_speller.getChildPid() > 0)
|
if (m_data->m_speller.getChildPid() > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// aspell --lang=[lang] --encoding=utf-8 --master=[dicPath()] --sug-mode=fast pipe
|
// aspell --lang=[lang] --encoding=utf-8 --master=[dicPath()] --sug-mode=fast --mode=none pipe
|
||||||
|
|
||||||
string cmdstring(m_data->m_exec);
|
string cmdstring(m_data->m_exec);
|
||||||
|
|
||||||
@ -276,11 +274,6 @@ bool Aspell::make_speller(string& reason)
|
|||||||
args.push_back(string("--data-dir=") + m_data->m_datadir);
|
args.push_back(string("--data-dir=") + m_data->m_datadir);
|
||||||
cmdstring += string(" ") + args.back();
|
cmdstring += string(" ") + args.back();
|
||||||
#endif
|
#endif
|
||||||
if (m_data->m_addCreateParam.size() > ldatadiroptsz) {
|
|
||||||
args.push_back(
|
|
||||||
string("--local-data-dir=") + m_data->m_addCreateParam.substr(ldatadiroptsz));
|
|
||||||
cmdstring += string(" ") + args.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_data->m_addCreateParam.empty()) {
|
if (!m_data->m_addCreateParam.empty()) {
|
||||||
args.push_back(m_data->m_addCreateParam);
|
args.push_back(m_data->m_addCreateParam);
|
||||||
@ -293,24 +286,21 @@ bool Aspell::make_speller(string& reason)
|
|||||||
args.push_back(string("--sug-mode=fast"));
|
args.push_back(string("--sug-mode=fast"));
|
||||||
cmdstring += string(" ") + args.back();
|
cmdstring += string(" ") + args.back();
|
||||||
|
|
||||||
|
args.push_back(string("--mode=none"));
|
||||||
|
cmdstring += string(" ") + args.back();
|
||||||
|
|
||||||
args.push_back("pipe");
|
args.push_back("pipe");
|
||||||
cmdstring += string(" ") + args.back();
|
cmdstring += string(" ") + args.back();
|
||||||
|
|
||||||
// Keep stderr by default when querying?
|
|
||||||
bool keepStderr = true;
|
|
||||||
m_config->getConfParam("aspellKeepStderr", &keepStderr);
|
|
||||||
if (!keepStderr)
|
|
||||||
m_data->m_speller.setStderr("/dev/null");
|
|
||||||
|
|
||||||
LOGDEB("Starting aspell command [" << cmdstring << "]\n");
|
LOGDEB("Starting aspell command [" << cmdstring << "]\n");
|
||||||
if (m_data->m_speller.startExec(m_data->m_exec, args, true, true) != 0) {
|
if (m_data->m_speller.startExec(m_data->m_exec, args, true, true) != 0) {
|
||||||
LOGERR("Can't start aspell\n");
|
reason += "Can't start aspell: " + cmdstring;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Read initial line from aspell: version etc.
|
// Read initial line from aspell: version etc.
|
||||||
string line;
|
string line;
|
||||||
if (m_data->m_speller.getline(line, 2) <= 0) {
|
if (m_data->m_speller.getline(line, 2) <= 0) {
|
||||||
LOGERR("rclaspell: failed reading initial aspell line. Command was " << cmdstring << "\n");
|
reason += "Aspell: failed reading initial line";
|
||||||
m_data->m_speller.zapChild();
|
m_data->m_speller.zapChild();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -760,7 +760,7 @@ int ExecCmd::startExec(const string &cmd, const vector<string>& args,
|
|||||||
if (!m->preparePipes(has_input, &hInputRead, has_output,
|
if (!m->preparePipes(has_input, &hInputRead, has_output,
|
||||||
&hOutputWrite, &hErrorWrite)) {
|
&hOutputWrite, &hErrorWrite)) {
|
||||||
LOGERR("ExecCmd::startExec: preparePipes failed\n");
|
LOGERR("ExecCmd::startExec: preparePipes failed\n");
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
STARTUPINFOW siStartInfo;
|
STARTUPINFOW siStartInfo;
|
||||||
@ -820,7 +820,7 @@ int ExecCmd::startExec(const string &cmd, const vector<string>& args,
|
|||||||
if (bSuccess) {
|
if (bSuccess) {
|
||||||
cleaner.inactivate();
|
cleaner.inactivate();
|
||||||
}
|
}
|
||||||
return bSuccess;
|
return bSuccess ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send data to the child.
|
// Send data to the child.
|
||||||
@ -1011,6 +1011,29 @@ int ExecCmd::getline(string& data)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class GetlineWatchdog : public ExecCmdAdvise {
|
||||||
|
public:
|
||||||
|
GetlineWatchdog(int secs) : m_secs(secs), tstart(time(0)) {}
|
||||||
|
void newData(int) {
|
||||||
|
if (time(0) - tstart >= m_secs) {
|
||||||
|
throw std::runtime_error("getline timeout");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int m_secs;
|
||||||
|
time_t tstart;
|
||||||
|
};
|
||||||
|
|
||||||
|
int ExecCmd::getline(string& data, int timeosecs)
|
||||||
|
{
|
||||||
|
GetlineWatchdog gwd(timeosecs);
|
||||||
|
setAdvise(&gwd);
|
||||||
|
try {
|
||||||
|
return getline(data);
|
||||||
|
} catch (...) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int ExecCmd::wait()
|
int ExecCmd::wait()
|
||||||
{
|
{
|
||||||
// If killRequest was set, we don't perform the normal
|
// If killRequest was set, we don't perform the normal
|
||||||
|
|||||||
@ -55,9 +55,7 @@ else
|
|||||||
export PATH
|
export PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# We use the mingw-compiled aspell program in both cases. When
|
# We use the mingw-compiled aspell program in both cases, it's only executed as a command
|
||||||
# compiling with msvc, we copy the msvc dll to the recoll top dir (and
|
|
||||||
# don't use the exec, we keep the already tested mingw one).
|
|
||||||
ASPELL=${RCLDEPS}/mingw/aspell-0.60.7/aspell-installed
|
ASPELL=${RCLDEPS}/mingw/aspell-0.60.7/aspell-installed
|
||||||
|
|
||||||
# Where to find libgcc_s_dw2-1.dll et all for progs compiled with
|
# Where to find libgcc_s_dw2-1.dll et all for progs compiled with
|
||||||
@ -316,9 +314,6 @@ copyaspell()
|
|||||||
chkcp $MINGWBIN/libgcc_s_dw2-1.dll $DEST
|
chkcp $MINGWBIN/libgcc_s_dw2-1.dll $DEST
|
||||||
chkcp $MINGWBIN/libstdc++-6.dll $DEST
|
chkcp $MINGWBIN/libstdc++-6.dll $DEST
|
||||||
chkcp $MINGWBIN/libwinpthread-1.dll $DEST
|
chkcp $MINGWBIN/libwinpthread-1.dll $DEST
|
||||||
if test $BUILD = MSVC ; then
|
|
||||||
chkcp $RCLDEPS/mingw/build-libaspell-Desktop_Qt_5_14_2_MSVC2017_32bit-Release/release/aspell.dll $DESTDIR/libaspell-15.dll
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Recoll python package. Only when compiled with msvc as this is what
|
# Recoll python package. Only when compiled with msvc as this is what
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user