From: <sv...@va...> - 2010-03-11 21:55:04
|
Author: cerion Date: 2010-03-11 21:54:47 +0000 (Thu, 11 Mar 2010) New Revision: 491 Log: valgrind & valkyrie option checks + cleanup & comments Modified: branches/valkyrie_qt4port/doc/options_dialog.html branches/valkyrie_qt4port/help/help_handbook.cpp branches/valkyrie_qt4port/help/help_urls.cpp branches/valkyrie_qt4port/help/help_urls.h branches/valkyrie_qt4port/mainwindow.cpp branches/valkyrie_qt4port/objects/helgrind_object.cpp branches/valkyrie_qt4port/objects/helgrind_object.h branches/valkyrie_qt4port/objects/memcheck_object.cpp branches/valkyrie_qt4port/objects/memcheck_object.h branches/valkyrie_qt4port/objects/tool_object.h branches/valkyrie_qt4port/objects/valgrind_object.cpp branches/valkyrie_qt4port/objects/valgrind_object.h branches/valkyrie_qt4port/objects/valkyrie_object.cpp branches/valkyrie_qt4port/objects/valkyrie_object.h branches/valkyrie_qt4port/objects/vk_objects.cpp branches/valkyrie_qt4port/objects/vk_objects.h branches/valkyrie_qt4port/options/memcheck_options_page.cpp branches/valkyrie_qt4port/options/valkyrie_options_page.cpp branches/valkyrie_qt4port/options/vk_option.cpp branches/valkyrie_qt4port/options/vk_option.h branches/valkyrie_qt4port/options/vk_options_page.cpp branches/valkyrie_qt4port/options/vk_options_page.h branches/valkyrie_qt4port/options/vk_parse_cmdline.cpp branches/valkyrie_qt4port/options/widgets/opt_base_widget.cpp branches/valkyrie_qt4port/options/widgets/opt_ck_widget.cpp branches/valkyrie_qt4port/options/widgets/opt_lb_widget.cpp branches/valkyrie_qt4port/toolview/memcheckview.cpp branches/valkyrie_qt4port/utils/vglog.cpp branches/valkyrie_qt4port/utils/vglog.h branches/valkyrie_qt4port/utils/vk_messages.cpp Modified: branches/valkyrie_qt4port/doc/options_dialog.html =================================================================== --- branches/valkyrie_qt4port/doc/options_dialog.html 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/doc/options_dialog.html 2010-03-11 21:54:47 UTC (rev 491) @@ -127,6 +127,14 @@ Example: "./".<br> Example: "/home/myself/valkyrie_working_dir".</p></dd> <dt> +<a name="project_file"></a><span><b class="command">Project File:</b></span> +</dt> +<dd><p>This option specifies a project file for Valkyrie to use. + All settings needed by Valkyrie will be read from this file, + and all settings that the user changes will be saved to this file. + The file must have the extension ".conf".<br> + Example: "myVkProject.conf".</p></dd> +<dt> <a name="user_font_general"></a><span><b class="command">General Font:</b></span> </dt> <dd><p>This is the general application font. Modified: branches/valkyrie_qt4port/help/help_handbook.cpp =================================================================== --- branches/valkyrie_qt4port/help/help_handbook.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/help/help_handbook.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -19,7 +19,6 @@ ****************************************************************************/ #include "help/help_handbook.h" -//#include "tb_handbook_icons.h" #include "utils/vk_config.h" //#include "vk_messages.h" #include "utils/vk_utils.h" Modified: branches/valkyrie_qt4port/help/help_urls.cpp =================================================================== --- branches/valkyrie_qt4port/help/help_urls.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/help/help_urls.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -52,6 +52,7 @@ const char* browser = "options_dialog.html#browser"; const char* logDir = "options_dialog.html#log_dir"; const char* workingDir = "options_dialog.html#working_dir"; +const char* projectFile = "options_dialog.html#project_file"; const char* userFontGen = "options_dialog.html#user_font_general"; const char* userFontTool = "options_dialog.html#user_font_tool"; const char* palette = "options_dialog.html#palette"; Modified: branches/valkyrie_qt4port/help/help_urls.h =================================================================== --- branches/valkyrie_qt4port/help/help_urls.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/help/help_urls.h 2010-03-11 21:54:47 UTC (rev 491) @@ -52,6 +52,7 @@ extern const char* browser; extern const char* logDir; extern const char* workingDir; +extern const char* projectFile; extern const char* userFontGen; extern const char* userFontTool; extern const char* palette; Modified: branches/valkyrie_qt4port/mainwindow.cpp =================================================================== --- branches/valkyrie_qt4port/mainwindow.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/mainwindow.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -865,7 +865,9 @@ */ void MainWindow::runTool( int procId ) { - cerr << "MainWindow::runTool( " << procId << " )" << endl; + VGTOOL::ToolID tId = toolViewStack->currentToolId(); + cerr << "MainWindow::runTool( tool: " << tId + << ", proc: " << procId << " )" << endl; vk_assert( procId >= 0 ); @@ -876,35 +878,17 @@ return; } - //TODO: checks -#if 0 - // last process might not be done ... - if ( !valkyrie->queryToolDone( m_viewStack->visibleId() ) ) { + if ( !valkyrie->queryToolDone( tId ) ) { cerr << "Warning: Last process not finished" << endl; return; } - /* if running valgrind, make sure there's a valid binary - just 'cos it made it into the config doesn't mean it's valid */ - if ( runState == VkRunState::VALGRIND ) { - int errval = PARSED_OK; - QString bin = vkConfig->rdEntry( "binary", "valkyrie" ); - fileCheck( &errval, bin, false, false, true ); - - if ( errval != PARSED_OK ) { - vkError( this, "Run Tool", "Invalid Binary: Please set a valid binary in Options::Valkyrie." ); - return; - } - } - -#endif - - if ( !valkyrie->runTool( toolViewStack->currentToolId(), procId ) ) { + if ( !valkyrie->runTool( tId, procId ) ) { //TODO: make sure all fail cases have given a message to the user already VK_DEBUG( "Failed to complete execution for toolId (%d), procId (%d)", - toolViewStack->currentToolId(), procId ); + tId, procId ); } } Modified: branches/valkyrie_qt4port/objects/helgrind_object.cpp =================================================================== --- branches/valkyrie_qt4port/objects/helgrind_object.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/helgrind_object.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -77,6 +77,12 @@ } +bool Helgrind::queryDone() +{ + return true; +} + + VkOptionsPage* Helgrind::createVkOptionsPage() { return ( VkOptionsPage* )new HelgrindOptionsPage( this ); Modified: branches/valkyrie_qt4port/objects/helgrind_object.h =================================================================== --- branches/valkyrie_qt4port/objects/helgrind_object.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/helgrind_object.h 2010-03-11 21:54:47 UTC (rev 491) @@ -52,6 +52,8 @@ void setupOptions(); ToolView* createView( QWidget* parent ); + bool queryDone(); + unsigned int maxOptId() { return HELGRIND::NUM_OPTS; } Modified: branches/valkyrie_qt4port/objects/memcheck_object.cpp =================================================================== --- branches/valkyrie_qt4port/objects/memcheck_object.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/memcheck_object.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -305,22 +305,20 @@ bool Memcheck::queryDone() { vk_assert( getToolView() != 0 ); -#if 0 - /* if current process is not yet finished, ask user if they really - want to close */ + // if current process busy, ask user if they really want to close if ( isRunning() ) { int ok = vkQuery( getToolView(), "Process Running", "&Abort;&Cancel", "<p>The current process is not yet finished.</p>" "<p>Do you want to abort it ?</p>" ); - /* Note: process may have finished while waiting for user */ + // Note: process may have finished while waiting for user if ( ok == MsgBox::vkYes ) { - stopProcess(); /* abort */ + stopProcess(); // abort vk_assert( !isRunning() ); } else if ( ok == MsgBox::vkNo ) { - return false; /* continue */ + return false; // continue } } @@ -328,7 +326,6 @@ return false; // not saved: procrastinate. } -#endif return true; } Modified: branches/valkyrie_qt4port/objects/memcheck_object.h =================================================================== --- branches/valkyrie_qt4port/objects/memcheck_object.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/memcheck_object.h 2010-03-11 21:54:47 UTC (rev 491) @@ -69,7 +69,6 @@ // returns the ToolView window (memcheckView) for this tool ToolView* createView( QWidget* parent ); - // called by MainWin::closeToolView() bool queryDone(); bool start( int procId, QStringList vgflags ); Modified: branches/valkyrie_qt4port/objects/tool_object.h =================================================================== --- branches/valkyrie_qt4port/objects/tool_object.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/tool_object.h 2010-03-11 21:54:47 UTC (rev 491) @@ -56,10 +56,9 @@ // creates and init's this tool's ToolView window virtual ToolView* createView( QWidget* parent ) = 0; + virtual bool queryDone() = 0; /* - // called by MainWin::closeToolView() - virtual bool queryDone() = 0; - virtual void deleteView(); + virtual void deleteView(); */ ToolView* view(); Modified: branches/valkyrie_qt4port/objects/valgrind_object.cpp =================================================================== --- branches/valkyrie_qt4port/objects/valgrind_object.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/valgrind_object.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -525,7 +525,7 @@ { // exception: multiple suppressions are allowed if ( optid == VALGRIND::SUPPS_SEL ) { - //TODO: concat, don't overwrite + //TODO: concat supps, don't overwrite // vkConfig->value( vk_opt->configKey() ); // argval = cfg_argval + argval } @@ -540,22 +540,19 @@ */ int Valgrind::checkOptArg( int optid, QString& argval ) { - optid = optid; - argval = argval; - // vk_assert( optid >= 0 && optid < NUM_OPTS ); + vk_assert( optid >= 0 && optid < VALGRIND::NUM_OPTS ); + VkOption* opt = getOption( optid ); int errval = PARSED_OK; + + QChar sep = vkConfig->vkSepChar; -#if 0 - Option* opt = findOption( optid ); - QString sep = vkConfig->sepChar(); + switch ( (VALGRIND::vgOptId)optid ) { - switch (( Valgrind::vgOpts )optid ) { - case VALGRIND::TOOL: - /* Note: gui option disabled, so only reaches here from cmdline */ + // Note: gui option disabled, so only reaches here from cmdline errval = PERROR_BADOPT; - vkPrintErr( "Option disabled '--%s'", opt->m_longFlag.latin1() ); + vkPrintErr( "Option disabled '--%s'", qPrintable( opt->longFlag ) ); vkPrintErr( " - Valkyrie currently only supports Memcheck." ); break; @@ -578,27 +575,31 @@ case VALGRIND::ERROR_LIMIT: case VALGRIND::DB_COMMAND: case VALGRIND::DB_ATTACH: - /* Note: gui option disabled, so only reaches here from cmdline */ + // Note: gui option disabled, so only reaches here from cmdline errval = PERROR_BADOPT; - vkPrintErr( "Option disabled '--%s'", opt->m_longFlag.latin1() ); + vkPrintErr( "Option disabled '--%s'", qPrintable( opt->longFlag ) ); vkPrintErr( " - Valgrind presets these options for XML output." ); vkPrintErr( " - See valgrind/docs/internals/xml_output.txt." ); break; case VALGRIND::XML_COMMENT: - /* don't wan't xml in comment: escape '<','&',etc */ + // don't wan't xml in comment: escape '<','&',etc argval = escapeEntities( argval ); break; - case VALGRIND::SUPPS_DIRS: { /* not popt: only reaches here from gui */ - /* check all entries are valid dirs */ - QStringList dirs = QStringList::split( sep, argval ); //, QString::SkipEmptyParts + case VALGRIND::SUPPS_DIRS: { + // not popt: only reaches here from gui + vk_assert( opt->argType == VkOPT::NOT_POPT ); + + // check all entries are valid dirs, + // and update dirs to absolute paths + QStringList dirs = argval.split( sep, QString::SkipEmptyParts ); + QStringList::iterator it = dirs.begin(); - for ( ; it != dirs.end(); ++it ) { - /* check dirs ok */ - *it = dirCheck( &errval, *it, true, false ); - + // check dir ok and has at least RX permissions + *it = dirCheck( &errval, *it, true, false, true ); + if ( errval != PARSED_OK ) { break; } @@ -608,23 +609,26 @@ } break; - case VALGRIND::SUPPS_AVAIL: /* not popt: only reaches here from gui */ - case VALGRIND::SUPPS_SEL: { /* is popt: --suppressions */ - QStringList files = QStringList::split( sep, argval ); //, QString::SkipEmptyParts + case VALGRIND::SUPPS_AVAIL: { + // not popt: only reaches here from gui + vk_assert( opt->argType == VkOPT::NOT_POPT ); + } // fall through to next case. + case VALGRIND::SUPPS_SEL: { + QStringList files = argval.split( sep, QString::SkipEmptyParts ); + QStringList::iterator it = files.begin(); - for ( ; it != files.end(); ++it ) { - /* check files ok & readable */ - *it = fileCheck( &errval, *it, true, false ); + // check file ok and has at least R permissions + *it = fileCheck( &errval, *it, true ); if ( errval != PARSED_OK ) { break; } - /* TODO: do we care if it doesn't end in .supp? - - breaks the suppression widgets a little, as only lists those ending in .supp ... */ + // TODO: do we care if it doesn't end in .supp? + // - breaks the suppression widgets a little, as only lists those ending in .supp ... - /* TODO: ? check valid suppression files */ + // TODO: ? check valid suppression files } argval = files.join( sep ); @@ -696,34 +700,30 @@ case VALGRIND::KERN_VAR: break; - /* logging options */ - /* all tools use an internal logging option, - all logging options are therefore ignored */ + // Logging options: + // All tool objects use a logging option to generate/read Vg output. + // All logging options are therefore ignored. case VALGRIND::LOG_FILE: case VALGRIND::LOG_FD: case VALGRIND::LOG_SOCKET: - /* Note: gui options disabled, so only reaches here from cmdline */ + // Note: gui options disabled, so only reaches here from cmdline errval = PERROR_BADOPT; - vkPrintErr( "Option disabled '--%s'", opt->m_longFlag.latin1() ); + vkPrintErr( "Option disabled '--%s'", qPrintable( opt->longFlag ) ); vkPrintErr( " - Valkyrie sets its own logging options to gather data from Valgrind." ); break; - - /* Not yet implemented */ + // Not yet implemented case VALGRIND::INPUT_FD: - /* Note: gui option disabled, so only reaches here from cmdline */ + // Note: gui option disabled, so only reaches here from cmdline errval = PERROR_BADOPT; // vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1()); // vkPrintErr(" - Not yet implemented."); break; default: - assert( true ); - // vk_assert_never_reached(); + vk_assert_never_reached(); } -#endif - return errval; } Modified: branches/valkyrie_qt4port/objects/valgrind_object.h =================================================================== --- branches/valkyrie_qt4port/objects/valgrind_object.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/valgrind_object.h 2010-03-11 21:54:47 UTC (rev 491) @@ -33,7 +33,7 @@ */ enum vgOptId { TOOL, // --tool - /* common options relevant to all tools */ + // common options relevant to all tools VERBOSITY, // --verbosity TRACE_CH, // --trace-children SILENT_CH, // --child-silent-after-fork @@ -43,27 +43,27 @@ LOG_FILE, // --log-file LOG_SOCKET, // --log-socket - /* uncommon options relevant to all tools */ + // uncommon options relevant to all tools RUN_LIBC, // --run-libc-freeres SIM_HINTS, // --sim-hints KERN_VAR, // --kernel-variant EM_WARNS, // --show-emwarns SMC_CHECK, // --smc-check - /* options relevant to error-reporting tools */ + // options relevant to error-reporting tools XML_OUTPUT, // --xml - XML_COMMENT, // -- xml-user-comment + XML_COMMENT, // --xml-user-comment DEMANGLE, // --demangle NUM_CALLERS, // --num-callers ERROR_LIMIT, // --error-limit SHOW_BELOW, // --show-below-main - /* suppressions hackery */ + // suppressions hackery SUPPS_DIRS, // list of suppfile dirs - feeds SUPPS_AVAIL list SUPPS_AVAIL, // fake opt: dyname list of available supp files SUPPS_SEL, // the currently selected suppression(s) - /* misc */ + // misc GEN_SUPP, // --gen-suppressions DB_ATTACH, // --db-attach DB_COMMAND, // --db-command @@ -96,8 +96,9 @@ public: // ToolObject access ToolObjList getToolObjList(); + ToolObject* getToolObj( VGTOOL::ToolID tid ); +//TODO: needed? // int getToolObjId( const QString& name ); - ToolObject* getToolObj( VGTOOL::ToolID tid ); // ToolObject* getToolObj( const QString& name ); private: Modified: branches/valkyrie_qt4port/objects/valkyrie_object.cpp =================================================================== --- branches/valkyrie_qt4port/objects/valkyrie_object.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/valkyrie_object.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -77,42 +77,42 @@ "", "", "", - "show this help message and exit", + "show this message", urlNone, VkOPT::ARG_NONE, VkOPT::WDG_NONE ); options.addOpt( - VALKYRIE::OPT_VERSION, + VALKYRIE::VGHELP, this->objectName(), - "version", - 'v', + "valgrind-opts", + 'V', "", "", - PACKAGE_VERSION, "", - "display version information and exit", + "", + "show this message, plus valgrind options", urlNone, VkOPT::ARG_NONE, VkOPT::WDG_NONE ); options.addOpt( - VALKYRIE::VGHELP, + VALKYRIE::OPT_VERSION, this->objectName(), - "valgrind-opts", - 'V', + "version", + 'v', "", "", "", "", - "show valgrind options too, and exit", + "show version", urlNone, VkOPT::ARG_NONE, VkOPT::WDG_NONE ); - + options.addOpt( VALKYRIE::TOOLTIP, this->objectName(), @@ -248,21 +248,23 @@ VkOPT::WDG_LEDIT ); + QString projfile = QString("<project.") + VK_CFG_EXT + ">"; options.addOpt( - VALKYRIE::DFLT_LOGDIR, + VALKYRIE::PROJ_FILE, this->objectName(), - "default-logdir", - '\0', + "project-file", + 'f', + projfile, "", "", - VkConfig::vkTmpDir(), - "Tmp Log Dir:", "", - urlValkyrie::logDir, - VkOPT::NOT_POPT, + "use " + projfile + " for project settings", + urlValkyrie::projectFile, + VkOPT::ARG_STRING, VkOPT::WDG_LEDIT ); + options.addOpt( VALKYRIE::WORKING_DIR, this->objectName(), @@ -277,25 +279,9 @@ VkOPT::ARG_STRING, VkOPT::WDG_LEDIT ); - + + // path to valgrind executable (maybe found by configure) options.addOpt( - VALKYRIE::PROJ_FILE, - this->objectName(), - "proj-file", - 'f', - "<project.vk>", - "", - "", - "", - "use settings from project file", - urlValkyrie::workingDir, - VkOPT::ARG_STRING, - VkOPT::WDG_LEDIT - ); - - - /* path to valgrind executable (maybe found by configure) */ - options.addOpt( VALKYRIE::VG_EXEC, this->objectName(), "vg-exec", @@ -355,8 +341,23 @@ VkOPT::WDG_NONE ); + options.addOpt( + VALKYRIE::DFLT_LOGDIR, + this->objectName(), + "default-logdir", + '\0', + "", + "", + VkConfig::vkTmpDir(), + "Tmp Log Dir:", + "", + urlValkyrie::logDir, + VkOPT::NOT_POPT, + VkOPT::WDG_LEDIT + ); + + - // Internal configuration options.addOpt( VALKYRIE::MW_SIZE, this->objectName(), "mainwindow_size", @@ -524,21 +525,18 @@ /*! Check \a argval for the option given by \a optid, updating if necessary. */ -int Valkyrie::checkOptArg( int optid, QString& /*argval*/ ) +int Valkyrie::checkOptArg( int optid, QString& argval ) { vk_assert( optid >= 0 && optid < VALKYRIE::NUM_OPTS ); -#if 0 // TODO VkOption* opt = getOption( optid ); - int errval = PARSED_OK; - // Option* opt = findOption( optid ); switch ( optid ) { - - /* these options are _only_ set via the gui, and are either (a) - limited to a set of available values, or (b) have already been - checked, so no need to re-check them. */ + + // the following options are _only_ set via the gui, and are either + // a) limited to a set of available values, or + // b) have already been checked, so no need to re-check them. case VALKYRIE::TOOLTIP: case VALKYRIE::PALETTE: case VALKYRIE::ICONTXT: @@ -546,134 +544,100 @@ case VALKYRIE::FNT_GEN_USR: case VALKYRIE::FNT_TOOL_USR: case VALKYRIE::SRC_LINES: - case VALKYRIE::BROWSER: - return errval; - break; + case VALKYRIE::BROWSER: { + vk_assert( opt->argType == VkOPT::NOT_POPT ); + return errval; + } break; + // dir options: check for rwx permissions case VALKYRIE::DFLT_LOGDIR: case VALKYRIE::WORKING_DIR: { - // see if we have an dir with rx permissions - ( void ) dirCheck( &errval, argval, true, true ); - } - break; + ( void ) dirCheck( &errval, argval, true, true, true ); + } break; case VALKYRIE::SRC_EDITOR: { - QString ed_file = QStringList::split( " ", argval ).first(); //, QString::SkipEmptyParts - QString ed = binaryCheck( &errval, ed_file ); - argval.replace( ed_file, ed ); - } - break; - -#if 0 //TODO: return ok, but give warning. - - // if no "%n", give warning - if ( argval.indexOf( "%n" ) == -1 ) { - QFileInfo fi( argval.split( " ", QString::SkipEmptyParts ).first() ); + // source editor executable: check for at least X permissions + QString ed_file = argval.split( " " ).first(); + QString ed = fileCheck( &errval, ed_file, false, false, true ); + argval.replace( ed_file, ed ); + argval = argval.simplified(); + } break; - if ( !fi.fileName().startsWith( "emacs" ) && !fi.fileName().startsWith( "nedit" ) ) { - vkInfo( this, "Unknown Source Editor", - "If possible, set an editor flag to allow the " - "editor to be opened at a target line-number, " - "where %%n will be replaced with the line-number." ); - } - } - -#endif - case VALKYRIE::PROJ_FILE: { -#if 0 // TODO: review this + // check file exists and has RW perms + argval = fileCheck( &errval, argval, true, true ); + if ( errval != PARSED_OK ) { + return errval; + } - // TODO: check filname format: ( dir + "/" + proj_name + "." + VK_CFG_EXT ) - - // TODO: check dir exists & perms ok - - // check owner read/write perms ok - if ( QFile::exists( proj_filename ) ) { - QFile::Permissions perms = QFile::permissions( proj_filename ); - - if (( perms & QFile::WriteOwner ) != QFile::WriteOwner || - ( perms & QFile::ReadOwner ) != QFile::ReadOwner ) { - // TODO: vkError perms + // check filename format: ".*\.VK_CFG_EXT$" + if ( !argval.contains( QRegExp( QString(".*\\.") + VK_CFG_EXT + "$" ) ) ) { + return PERROR_BADFILENAME; } - } - -#endif - } - break; + + } break; case VALKYRIE::VG_EXEC: { - // see if we have an executable with rx permissions - argval = binaryCheck( &errval, argval ); - - if ( errval != PARSED_OK ) { - return errval; - } - - // check the version - QString cmd = argval + " --version 2>&1"; - FILE* fp; - char line[50]; - fp = popen(( const char* )cmd, "r" ); - - if ( !fp ) { - pclose( fp ); - return PERROR_BADFILE; - } - - fgets( line, sizeof( line ), fp ); - - int result = pclose( fp ); - - if ( !WIFEXITED( result ) ) { // cmd exit error? - return PERROR_BADFILE; - } - - QString vg_version = QString( line ).simplifyWhiteSpace(); - - if ( !vg_version.startsWith( "valgrind" ) ) { - return PERROR_BADFILE; - } - - // compare with minimum req'd version - int versionVg = strVersion2hex( vg_version ); - int versionVgReqd = strVersion2hex( pchVersionVgMin ); - - if ( versionVg == -1 || versionVgReqd == -1 ) { - return PERROR_BADFILE; - } - - if ( versionVg < versionVgReqd ) { - return PERROR_BADVERSION; - } - - // if we get here, we're fine. - } - break; - + // see if we have a valgrind exec with at least X permissions: + argval = fileCheck( &errval, argval, false, false, true ); + if ( errval != PARSED_OK ) { + return errval; + } + + // check the version + QString cmd_qstr = argval + " --version 2>&1"; + const char* cmd = cmd_qstr.toLatin1().constData(); + FILE* fp = popen( cmd, "r" ); + if ( !fp ) { + pclose( fp ); + return PERROR_BADFILE; + } + + char line[50]; + if ( fgets( line, sizeof( line ), fp ) == NULL ) { + return PERROR_BADFILE; + } + + if ( pclose( fp ) == -1 ) { + return PERROR_BADFILE; + } + + // we have a string from the executable: is it what we hope? + QString vg_version = QString( line ).simplified(); + + if ( !vg_version.startsWith( "valgrind" ) ) { + return PERROR_BADFILE; + } + + // compare with minimum req'd version + int versionVg = strVersion2hex( vg_version ); + int versionVgReqd = strVersion2hex( pchVersionVgMin ); + + if ( versionVg == -1 || versionVgReqd == -1 ) { + return PERROR_BADFILE; + } + + if ( versionVg < versionVgReqd ) { + return PERROR_BADVERSION; + } + + // if we get here, we're fine. + } break; + case VALKYRIE::VIEW_LOG: - argval = fileCheck( &errval, argval, true, false ); - - if ( errval == PARSED_OK ) { - m_startRunState = VkRunState::TOOL1; - } - - break; - + if ( !argval.isEmpty() ) { + // see if we have a logfile with at least R permissions: + argval = fileCheck( &errval, argval, true ); + } break; + case VALKYRIE::BINARY: - if ( !argval.isEmpty() ) { - argval = binaryCheck( &errval, argval ); - } - - if ( errval == PARSED_OK ) { - m_startRunState = VkRunState::VALGRIND; - } - - break; - - + // see if we have a binary with at least X permissions: + argval = fileCheck( &errval, argval, false, false, true ); + } break; + case VALKYRIE::BIN_FLAGS: - // Can't test this. + // Can't (easily) test this. break; // ignore these opts @@ -687,8 +651,6 @@ } return errval; -#endif - return 0; } @@ -781,6 +743,19 @@ /*! + find out if tool is running or not. +*/ +bool Valkyrie::queryToolDone( VGTOOL::ToolID tId ) +{ + vk_assert( tId != VGTOOL::ID_NULL ); + ToolObject* tool = valgrind()->getToolObj( tId ); + vk_assert( tool != 0 ); + + return tool->queryDone(); +} + + +/*! Run the tool with given process id. */ bool Valkyrie::runTool( VGTOOL::ToolID tId, int procId ) Modified: branches/valkyrie_qt4port/objects/valkyrie_object.h =================================================================== --- branches/valkyrie_qt4port/objects/valkyrie_object.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/valkyrie_object.h 2010-03-11 21:54:47 UTC (rev 491) @@ -30,33 +30,48 @@ { /*! enum identification of all options for this object + Note: command-line output order depends on this order */ enum vkOptId { - HELP, - OPT_VERSION, - VGHELP, - TOOLTIP, - PALETTE, - ICONTXT, - FNT_GEN_SYS, - FNT_GEN_USR, - FNT_TOOL_USR, - SRC_EDITOR, - SRC_LINES, - BROWSER, - DFLT_LOGDIR, - WORKING_DIR, - PROJ_FILE, - VG_EXEC, // path to valgrind executable - BINARY, // user-binary to be valgrindised - BIN_FLAGS, // flags for user-binary - VIEW_LOG, - MW_SIZE, - MW_POS, - HB_HIST, - HB_BKMK, - HB_MXHIST, - HB_MXBKMK, + + // basic command-line options + HELP, // show cmdline help + VGHELP, // show extended cmdline help + OPT_VERSION, // show version + + // look 'n feel options + TOOLTIP, // show tooltips + PALETTE, // use valkyrie's palette + ICONTXT, // show toolbar text labels + FNT_GEN_SYS, // use system default or user-specific general-font + FNT_GEN_USR, // choose user-specific general-font + FNT_TOOL_USR, // choose font for tools + + // general options + SRC_EDITOR, // editor to use to edit source + SRC_LINES, // extra lines shown above/below target + BROWSER, // browser for external links + PROJ_FILE, // project file for valkyrie settings + + // valgrind related flags + WORKING_DIR, // where to run valgrind + VG_EXEC, // path to valgrind executable + BINARY, // user-binary to be valgrindised + BIN_FLAGS, // flags for user-binary + VIEW_LOG, // parse and view a valgrind logfile + DFLT_LOGDIR, // where to put our temporary logs + + // internal-config: mainwindow + MW_SIZE, // mainwindow size + MW_POS, // mainwindow position + + // internal-config: handbook + HB_HIST, // handbook history (urls) + HB_BKMK, // handbook bookmarks (urls) + HB_MXHIST, // handbook max num history items + HB_MXBKMK, // handbook max num bookmarks + + // internal-config: colours COL_BKGD, COL_BASE, COL_DKGR, @@ -64,6 +79,7 @@ COL_HILT, COL_NULL, COL_TEXT, + NUM_OPTS }; @@ -83,9 +99,7 @@ bool runTool( VGTOOL::ToolID tId, int procId ); void stopTool( VGTOOL::ToolID tId ); -#if 0 // TODO - bool queryToolDone( int tId ); -#endif + bool queryToolDone( VGTOOL::ToolID tId ); unsigned int maxOptId() { return VALKYRIE::NUM_OPTS; @@ -107,10 +121,12 @@ virtual void setConfigDefaults(); VkOption* findOption( QString& optKey ); +//TODO: needed? // VkOption* findOption( QString& optGrp, int optid ); // list of all objects const VkObjectList vkObjList(); +//TODO: needed? // VkObject* vkObject( int objId ); private: Modified: branches/valkyrie_qt4port/objects/vk_objects.cpp =================================================================== --- branches/valkyrie_qt4port/objects/vk_objects.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/vk_objects.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -78,7 +78,7 @@ /*! - Setup factory defaults + Setup factory defaults for this object */ void VkObject::setConfigDefaults() { Modified: branches/valkyrie_qt4port/objects/vk_objects.h =================================================================== --- branches/valkyrie_qt4port/objects/vk_objects.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/objects/vk_objects.h 2010-03-11 21:54:47 UTC (rev 491) @@ -53,7 +53,6 @@ virtual void updateConfig( int optid, QString& argval ); - /*! Set default config entries for thies object */ virtual void setConfigDefaults(); virtual VkOptionsPage* createVkOptionsPage() = 0; @@ -67,13 +66,6 @@ }; - -//TODO: cleanup -// VkOption* opt = options.getOption( "include" ); -// cerr << "url: " << opt->urlAddress.toLatin1().data() << endl; - - - #endif // __VK_OBJECT_H Modified: branches/valkyrie_qt4port/options/memcheck_options_page.cpp =================================================================== --- branches/valkyrie_qt4port/options/memcheck_options_page.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/memcheck_options_page.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -23,17 +23,10 @@ #include "help/help_context.h" #include "help/help_urls.h" #include "objects/memcheck_object.h" -//#include "utils/vk_messages.h" -//#include "utils/vk_utils.h" - - -#include "help/help_context.h" -#include "help/help_urls.h" //#include "utils/vk_config.h" //#include "utils/vk_messages.h" #include "utils/vk_utils.h" -//#include "objects/memcheck_object.h" #include "options/widgets/opt_base_widget.h" //#include "options/widgets/opt_le_widget.h" //#include "options/widgets/opt_lb_widget.h" Modified: branches/valkyrie_qt4port/options/valkyrie_options_page.cpp =================================================================== --- branches/valkyrie_qt4port/options/valkyrie_options_page.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/valkyrie_options_page.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -181,6 +181,16 @@ grid->addWidget( fontToolLedit->widget(), i++, 1, 1, 3 ); vk_assert( m_itemList.count() <= VALKYRIE::NUM_OPTS ); + + + // ------------------------------------------------------------ + // tooltips + QString tip_editor = tr( "Tip: \"%n\" will be replaced with " + "the source code line number.<br>" + "Set the appropriate editor flag to support " + "opening the source at this line." ); + editLedit->button()->setToolTip( tip_editor ); + editLedit->widget()->setToolTip( tip_editor ); } Modified: branches/valkyrie_qt4port/options/vk_option.cpp =================================================================== --- branches/valkyrie_qt4port/options/vk_option.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/vk_option.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -72,6 +72,8 @@ return "Invalid directory"; case PERROR_BADFILE: return "Invalid file"; + case PERROR_BADFILENAME: + return "Invalid filename"; case PERROR_BADNUMFILES: return "Invalid number of files ( max == 10 )"; case PERROR_BADFILERD: @@ -162,8 +164,10 @@ */ VkOption* VkOptionHash::getOption( int optid ) { - // TODO: check for non-existent options - + if ( !optionHash.contains( optid ) ) { + VK_DEBUG( "Warning: optid (%d) not found in options.", optid ); + return NULL; + } return optionHash.value( optid ); } Modified: branches/valkyrie_qt4port/options/vk_option.h =================================================================== --- branches/valkyrie_qt4port/options/vk_option.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/vk_option.h 2010-03-11 21:54:47 UTC (rev 491) @@ -39,8 +39,8 @@ { /*! Argument type: tells us how to parse and test the argument value. - NO_CMDLINE: ignore this option in cmdline option parsing - ARG_* : arg type for this option (ARG_NONE = no args) + NOT_POPT: ignore this option in cmdline option parsing + ARG_* : arg type for this option (ARG_NONE = no args) */ enum ArgType { NOT_POPT = -1, @@ -69,29 +69,30 @@ // ============================================================ // Error return values -#define PARSED_OK 0 /* value passed the parsing checks */ -#define PERROR_DEFAULT - 1 /* don't print parseError() */ -#define PERROR_NODASH - 2 /* don't use '=' for short opts */ -#define PERROR_NOARG -10 /* missing argument */ -#define PERROR_BADOPT -11 /* unknown option */ -#define PERROR_BADARG -12 /* bad argument given */ -#define PERROR_BADQUOTE -15 /* error in paramter quoting */ -#define PERROR_BADNUMBER -17 /* invalid numeric value */ -#define PERROR_OUTOFRANGE -18 /* outside min|max values */ -#define PERROR_OVERFLOW -19 /* number too large or too small */ -#define PERROR_BADOPERATION -20 /* mutually exclusive logical operations requested */ -#define PERROR_NULLARG -21 /* opt->arg should not be NULL */ -#define PERROR_MALLOC -22 /* memory allocation failed */ -#define PERROR_BADDIR -23 /* dir does not exist */ -#define PERROR_BADFILE -24 /* file does not exist */ -#define PERROR_BADNUMFILES -25 /* invalid no. of files */ -#define PERROR_BADFILERD -26 /* user hasn't got rd permission */ -#define PERROR_BADFILEWR -27 /* user hasn't got wr permission */ -#define PERROR_BADEXEC -28 /* user hasn't got exec permission */ -#define PERROR_DB_CONFLICT -29 /* db-attach -v- trace-children */ -#define PERROR_DB_OUTPUT -30 /* using db-attach, but not sending output to stderr */ -#define PERROR_POWER_OF_TWO -31 /* number not a power of two */ -#define PERROR_BADVERSION -32 /* bad program version */ +#define PARSED_OK 0 // value passed the parsing checks +#define PERROR_DEFAULT - 1 // don't print parseError() +#define PERROR_NODASH - 2 // don't use '=' for short opts +#define PERROR_NOARG -10 // missing argument +#define PERROR_BADOPT -11 // unknown option +#define PERROR_BADARG -12 // bad argument given +#define PERROR_BADQUOTE -15 // error in paramter quoting +#define PERROR_BADNUMBER -17 // invalid numeric value +#define PERROR_OUTOFRANGE -18 // outside min|max values +#define PERROR_OVERFLOW -19 // number too large or too small +#define PERROR_BADOPERATION -20 // mutually exclusive logical operations requested +#define PERROR_NULLARG -21 // opt->arg should not be NULL +#define PERROR_MALLOC -22 // memory allocation failed +#define PERROR_BADDIR -23 // dir does not exist +#define PERROR_BADFILE -24 // file does not exist +#define PERROR_BADFILENAME -25 // filename un-good +#define PERROR_BADNUMFILES -26 // invalid no. of files +#define PERROR_BADFILERD -27 // user hasn't got rd permission +#define PERROR_BADFILEWR -28 // user hasn't got wr permission +#define PERROR_BADEXEC -29 // user hasn't got exec permission +#define PERROR_DB_CONFLICT -30 // db-attach -v- trace-children +#define PERROR_DB_OUTPUT -31 // using db-attach, but not sending output to stderr +#define PERROR_POWER_OF_TWO -32 // number not a power of two +#define PERROR_BADVERSION -33 // bad program version const char* parseErrString( const int error ); Modified: branches/valkyrie_qt4port/options/vk_options_page.cpp =================================================================== --- branches/valkyrie_qt4port/options/vk_options_page.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/vk_options_page.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -20,14 +20,6 @@ ** ****************************************************************************/ -#include "utils/vk_utils.h" - -#if 0 -#include "vk_utils.h" -#include "vk_config.h" -#include "vk_messages.h" -#endif - #include "options/vk_options_page.h" #include "options/widgets/opt_base_widget.h" #include "options/widgets/opt_cb_widget.h" @@ -37,6 +29,7 @@ #include "options/widgets/opt_sp_widget.h" #include "utils/vk_config.h" #include "utils/vk_messages.h" +#include "utils/vk_utils.h" #include <QList> @@ -75,15 +68,9 @@ } -#if 0// TODO -int VkOptionsPage::optId() -{ - vk_assert( m_vkObj != 0 ); - return m_vkObj->objId(); -} -#endif - - +/*! + Provides a default seperator UI element +*/ QFrame* VkOptionsPage::sep( QWidget* parent ) { QFrame* line = new QFrame( parent ); @@ -190,8 +177,6 @@ { vk_assert( optId < m_vkObj->maxOptId() ); - //TODO: allow for warnings: vkobj should give string back for message - QString argval = m_itemList[optId]->currValue(); // Note: argval may be altered by checkOptArg() int errval = m_vkObj->checkOptArg( optId, argval ); Modified: branches/valkyrie_qt4port/options/vk_options_page.h =================================================================== --- branches/valkyrie_qt4port/options/vk_options_page.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/vk_options_page.h 2010-03-11 21:54:47 UTC (rev 491) @@ -68,15 +68,6 @@ return m_mod; } -#if 0 // TODO - // init page on open - virtual void init() { - /*do nothing*/ - } - - int optId(); -#endif - signals: void modified(); void apply(); Modified: branches/valkyrie_qt4port/options/vk_parse_cmdline.cpp =================================================================== --- branches/valkyrie_qt4port/options/vk_parse_cmdline.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/vk_parse_cmdline.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -55,8 +55,6 @@ VkName.toLatin1().constData(), vkConfig->vkCopyright.toLatin1().constData(), vkConfig->vkAuthor.toLatin1().constData() ); - //TODO - // printf("Valgrind is copyright %s\n\n", vkConfig->vgCopyright.toLatin1().constData() ); break; default: @@ -195,24 +193,6 @@ vkPoptOption allOpts[num_objs+1/*null end*/]; getAllOptions( objList, allOpts ); -#if 0 // TODO: rm when done debugging - cerr << "PRINTOUT" << endl; - - for ( int i = 0; i < num_objs; i++ ) { - vkPoptOption* opt = &allOpts[i]; - cerr << "TABLE: " << opt->optGrp << endl; - - opt = opt->arg; - - while ( opt && opt->optId != -1 ) { - cerr << opt->optGrp << ", " << opt->optId << ", " << opt->longFlag << endl; - opt++; - } - } - -#endif - - // -------------------------------------------------- // context for parsing cmd-line opts vkPoptContext optCon = Modified: branches/valkyrie_qt4port/options/widgets/opt_base_widget.cpp =================================================================== --- branches/valkyrie_qt4port/options/widgets/opt_base_widget.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/widgets/opt_base_widget.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -21,9 +21,9 @@ #include "options/widgets/opt_base_widget.h" #include "options/vk_option.h" // for listbox fileCheck() #include "utils/vk_config.h" +#include "utils/vk_utils.h" #if 0 -#include "vk_utils.h" #include "vk_messages.h" #endif @@ -108,7 +108,7 @@ combos, spinboxes and lineedits have their own way of doings things */ QHBoxLayout* OptionWidget::hlayout() { - //vk_assert( m_wLabel != 0 ); + vk_assert( m_wLabel != 0 ); m_hBox = new QHBoxLayout(); m_hBox->addWidget( m_wLabel ); @@ -120,7 +120,7 @@ QVBoxLayout* OptionWidget::vlayout() { - // vk_assert( m_wLabel != 0 ); + vk_assert( m_wLabel != 0 ); m_vBox = new QVBoxLayout(); m_vBox->addWidget( m_wLabel ); Modified: branches/valkyrie_qt4port/options/widgets/opt_ck_widget.cpp =================================================================== --- branches/valkyrie_qt4port/options/widgets/opt_ck_widget.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/widgets/opt_ck_widget.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -62,7 +62,7 @@ m_currentValue = ( on ) ? m_opt->possValues[0] : m_opt->possValues[1]; bool edited = m_currentValue != m_initialValue; emit valueChanged( edited, this ); - /* for dis/enabling associated widgets */ + // for dis/enabling associated widgets emit changed( on ); emit clicked( m_opt->optid ); } Modified: branches/valkyrie_qt4port/options/widgets/opt_lb_widget.cpp =================================================================== --- branches/valkyrie_qt4port/options/widgets/opt_lb_widget.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/options/widgets/opt_lb_widget.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -170,7 +170,7 @@ { switch ( m_mode ) { case LbWidget::LB_SUPPAVAIL: - /* Never test this widget's editedness - holds a dynamic list */ + // Never test this widget's editedness - holds a dynamic list break; case LbWidget::LB_SUPPDIRS: @@ -232,7 +232,7 @@ case LbWidget::LB_SUPPAVAIL: emit itemSelected( lb_item->text() ); - /* Not removing item - list recalculated in valgrind opts page */ + // Not removing item - list recalculated in valgrind opts page break; default: @@ -268,12 +268,13 @@ { vk_assert( m_mode == LbWidget::LB_SUPPSEL ); - if ( !lb_item ) { /* m_lbox is empty, so nothing to do */ + if ( !lb_item ) { // m_lbox is empty, so nothing to do return; } QAction deselectAct( "Deselect File", this ); - + +//TODO: check this if ( !( lb_item->isSelected() ) ) { // || lb_item->isCurrent()) ) { deselectAct.setEnabled( false ); } Modified: branches/valkyrie_qt4port/toolview/memcheckview.cpp =================================================================== --- branches/valkyrie_qt4port/toolview/memcheckview.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/toolview/memcheckview.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -556,7 +556,5 @@ // item ok: contract / expand it VgOutputItem* vgItem = (VgOutputItem*)item; actMC_OpenClose_item->setEnabled( vgItem->getIsExpandable() ); - - //TODO: for leaves, default to closing parent item? } } Modified: branches/valkyrie_qt4port/utils/vglog.cpp =================================================================== --- branches/valkyrie_qt4port/utils/vglog.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/utils/vglog.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -1279,6 +1279,11 @@ } +/*! + merge given log into this log. + + TODO: handle merge of incomplete logs: - errors with no errorcount, ... +*/ bool VgLog::merge( VgLog& slave ) { /* clean master of leaks before status_end */ Modified: branches/valkyrie_qt4port/utils/vglog.h =================================================================== --- branches/valkyrie_qt4port/utils/vglog.h 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/utils/vglog.h 2010-03-11 21:54:47 UTC (rev 491) @@ -193,8 +193,6 @@ QString toString( int indent = 2 ); /* xml output */ QString toPlainTxt(); /* plain text output */ - /* TODO: handle merge of incomplete logs: - - errors with no errorcount, ... */ bool merge( VgLog& slave ); VgStatus::StateType state(); Modified: branches/valkyrie_qt4port/utils/vk_messages.cpp =================================================================== --- branches/valkyrie_qt4port/utils/vk_messages.cpp 2010-03-11 19:42:35 UTC (rev 490) +++ branches/valkyrie_qt4port/utils/vk_messages.cpp 2010-03-11 21:54:47 UTC (rev 491) @@ -20,8 +20,6 @@ #include "utils/vk_messages.h" #include "utils/vk_config.h" -//#include "valkyrie_xpm.h" -//#include "msgbox_icons.h" #include <stdarg.h> /* va_start, va_end */ #include <stdlib.h> /* exit errno */ @@ -33,9 +31,7 @@ #include <QPixmap> #include <QStyle> -#include <iostream> - /***************************************************************************/ /*! message dialogs |