/** * Restore the std out to this object to what it was before the last call to * beginStdouRedirect */ void PythonScript::endStdoutRedirect() { if (!redirectStdOut()) return; PyDict_SetItemString(interp()->sysDict(), "stdout", stdoutSave); Py_XDECREF(stdoutSave); PyDict_SetItemString(interp()->sysDict(), "stderr", stderrSave); Py_XDECREF(stderrSave); }
/** * Redirect the std out to this object */ void PythonScript::beginStdoutRedirect() { if (!redirectStdOut()) return; stdoutSave = PyDict_GetItemString(interp()->sysDict(), "stdout"); Py_XINCREF(stdoutSave); stderrSave = PyDict_GetItemString(interp()->sysDict(), "stderr"); Py_XINCREF(stderrSave); interp()->setQObject(this, "stdout", interp()->sysDict()); interp()->setQObject(this, "stderr", interp()->sysDict()); }
void SofaConfiguration::saveConfiguration() { std::ofstream out((path + std::string("/sofa-local.cfg")).c_str()); std::string currentCategory; std::vector< CONDITION > currentConditions; for (unsigned int i=0; i<options.size(); ++i) { DEFINES &option=options[i]->option; bool differentConditions=false; if (currentConditions.size() != option.conditions.size()) differentConditions=true; else { for (unsigned int c=0; c<currentConditions.size() && !differentConditions; ++c) { if (currentConditions[c] != option.conditions[c]) differentConditions=true; } } if (differentConditions) { for (unsigned int c=0; c<currentConditions.size(); ++c) out << "}\n"; currentConditions = option.conditions; } if (currentCategory != option.category) { if (!currentCategory.empty()) out << "\n\n"; currentCategory = option.category; out << "########################################################################\n"; out << "# " << currentCategory << "\n"; out << "########################################################################\n"; } if (differentConditions) { for (unsigned int c=0; c<currentConditions.size(); ++c) { if (!currentConditions[c].presence) out << "!"; switch( currentConditions[c].type) { case OPTION: out << "contains(DEFINES," << currentConditions[c].option << "){\n"; break; case ARCHI: out << currentConditions[c].option << "{\n"; break; } } } if (option.typeOption) { std::string description=option.description; for (unsigned int position=0; position<description.size(); ++position) { if (description[position] == '\n') description.insert(position+1, "# "); } out << "\n# Uncomment " << description << "\n"; if (!option.value) out << "# "; out << "DEFINES += " << option.name << "\n"; } else { if (!option.value) out << "# "; out << option.name << " " << option.description << "\n"; } } for (unsigned int c=0; c<currentConditions.size(); ++c) out << "}\n"; out.close(); std::set< QWidget *>::iterator it; if (!optionsModified.empty()) { std::vector<QString> listDir; listDir.push_back(QString("/applications")); listDir.push_back(QString("/modules")); listDir.push_back(QString("/framework")); //listDir.push_back(QString("/extlibs")); std::set< QWidget *>::iterator it; std::cout << "Touch file containing option :"; for (it=optionsModified.begin(); it!=optionsModified.end(); it++) std::cout << "\"" << (*it)->name() << "\" "; std::cout << "in [ "; for (unsigned int i=0; i<listDir.size(); ++i) std::cout << listDir[i].ascii() << " "; std::cout << "]" << std::endl; for (unsigned int i=0; i<listDir.size(); ++i) { std::cout << " Searching in " << listDir[i].ascii() << "\n"; processDirectory(listDir[i]); } } QStringList argv; #ifdef WIN32 argv << QString("cmd.exe"); argv << QString("/c"); argv << QString(QString(projectVC->text()) ); #elif defined (__APPLE__) argv << QString("sh"); argv << QString("Project MacOS.sh"); #else #if SOFA_QT4 argv << QString("qmake-qt4"); #else argv << QString("qmake"); #endif #endif p = new Q3Process(argv,this); p->setWorkingDirectory(QDir(QString(path.c_str()))); connect( p, SIGNAL( readyReadStdout() ), this, SLOT( redirectStdOut() ) ); connect( p, SIGNAL( readyReadStderr() ), this, SLOT( redirectStdErr() ) ); connect( p, SIGNAL( processExited() ), this, SLOT( saveConfigurationDone() ) ); p->start(); this->saveButton->setEnabled(false); }