Move -nice handling to CommandLineModuleManager
authorTeemu Murtola <teemu.murtola@gmail.com>
Fri, 22 Aug 2014 04:02:55 +0000 (07:02 +0300)
committerTeemu Murtola <teemu.murtola@gmail.com>
Fri, 22 Aug 2014 04:55:45 +0000 (07:55 +0300)
Now also the tools written using the C++ framework support the -nice
command-line option.  The system also behaves more consistently, as now
all programs except mdrun and gmx-view default to -nice 19.  Previously,
there was no really consistent logic for where PCA_BE_NICE was set and
where not.

Remove PCA_BE_NICE as it is no longer used.  parse_common_args() no
longer has any options that it unconditionally adds, which completes one
step in full migration to the wrapper binary.

Change-Id: I35a464d3263bc20e98ad1d381e93fdc2749931a2

78 files changed:
src/contrib/do_multiprot.c
src/contrib/do_shift.c
src/contrib/ehole.c
src/contrib/g_anavel.c
src/contrib/gen_table.c
src/contrib/gmx_sdf.c
src/gromacs/commandline/cmdlinehelpmodule.h
src/gromacs/commandline/cmdlinemodule.cpp [new file with mode: 0644]
src/gromacs/commandline/cmdlinemodule.h
src/gromacs/commandline/cmdlinemodulemanager-impl.h
src/gromacs/commandline/cmdlinemodulemanager.cpp
src/gromacs/commandline/pargs.cpp
src/gromacs/commandline/pargs.h
src/gromacs/commandline/tests/cmdlinemodulemanager.cpp
src/gromacs/gmxana/gmx_anaeig.c
src/gromacs/gmxana/gmx_angle.c
src/gromacs/gmxana/gmx_bundle.c
src/gromacs/gmxana/gmx_chi.c
src/gromacs/gmxana/gmx_cluster.c
src/gromacs/gmxana/gmx_clustsize.c
src/gromacs/gmxana/gmx_confrms.c
src/gromacs/gmxana/gmx_covar.c
src/gromacs/gmxana/gmx_density.c
src/gromacs/gmxana/gmx_densmap.c
src/gromacs/gmxana/gmx_dielectric.c
src/gromacs/gmxana/gmx_dipoles.cpp
src/gromacs/gmxana/gmx_disre.c
src/gromacs/gmxana/gmx_do_dssp.c
src/gromacs/gmxana/gmx_dos.c
src/gromacs/gmxana/gmx_dyecoupl.c
src/gromacs/gmxana/gmx_eneconv.c
src/gromacs/gmxana/gmx_enemat.c
src/gromacs/gmxana/gmx_energy.c
src/gromacs/gmxana/gmx_filter.c
src/gromacs/gmxana/gmx_genion.c
src/gromacs/gmxana/gmx_gyrate.c
src/gromacs/gmxana/gmx_h2order.c
src/gromacs/gmxana/gmx_hbond.c
src/gromacs/gmxana/gmx_helix.c
src/gromacs/gmxana/gmx_helixorient.c
src/gromacs/gmxana/gmx_hydorder.c
src/gromacs/gmxana/gmx_lie.c
src/gromacs/gmxana/gmx_mdmat.c
src/gromacs/gmxana/gmx_mindist.c
src/gromacs/gmxana/gmx_msd.c
src/gromacs/gmxana/gmx_nmeig.c
src/gromacs/gmxana/gmx_nmens.c
src/gromacs/gmxana/gmx_nmtraj.c
src/gromacs/gmxana/gmx_order.c
src/gromacs/gmxana/gmx_polystat.c
src/gromacs/gmxana/gmx_potential.c
src/gromacs/gmxana/gmx_principal.c
src/gromacs/gmxana/gmx_rama.c
src/gromacs/gmxana/gmx_rdf.c
src/gromacs/gmxana/gmx_rms.c
src/gromacs/gmxana/gmx_rmsdist.c
src/gromacs/gmxana/gmx_rmsf.c
src/gromacs/gmxana/gmx_rotacf.c
src/gromacs/gmxana/gmx_rotmat.c
src/gromacs/gmxana/gmx_saltbr.c
src/gromacs/gmxana/gmx_sans.c
src/gromacs/gmxana/gmx_saxs.c
src/gromacs/gmxana/gmx_sham.c
src/gromacs/gmxana/gmx_sorient.c
src/gromacs/gmxana/gmx_spol.c
src/gromacs/gmxana/gmx_tcaf.c
src/gromacs/gmxana/gmx_traj.c
src/gromacs/gmxana/gmx_trjcat.c
src/gromacs/gmxana/gmx_trjconv.c
src/gromacs/gmxana/gmx_trjorder.c
src/gromacs/gmxana/gmx_vanhove.c
src/gromacs/gmxana/gmx_velacc.c
src/gromacs/gmxana/gmx_wham.cpp
src/gromacs/gmxana/gmx_wheel.c
src/gromacs/gmxpreprocess/insert-molecules.cpp
src/gromacs/gmxpreprocess/solvate.cpp
src/gromacs/trajectoryanalysis/cmdlinerunner.cpp
src/programs/legacymodules.cpp

index 16e7a44d46c85e0a137a42d22b61bd5394310e80..80474afb71aa50254b82b340ac4b8a854b94cec7 100644 (file)
@@ -223,7 +223,7 @@ int main(int argc,char *argv[])
 #define NFILE asize(fnm)
     
     CopyRight(stderr,argv[0]);
-    parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE ,
+    parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT,
                      NFILE,fnm, asize(pa),pa, asize(desc),desc,
                      asize(bugs),bugs,&oenv
        );
index 60c21642e1763c5a91dc0b00ec118c7c97b95f8a..fce2869ebb926dfdd4b76b03f1098ab510307429 100644 (file)
@@ -119,7 +119,7 @@ int main(int argc,char *argv[])
 #define NFILE asize(fnm)
 
   CopyRight(stdout,argv[0]);
-  parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE ,NFILE,fnm,
+  parse_common_args(&argc,argv,PCA_CAN_TIME,NFILE,fnm,
                    asize(pa),pa,asize(desc),desc,asize(bugs),bugs);
                    
   top=read_top(ftp2fn(efTPX,NFILE,fnm));
index 1509e83088251423a6ef40db91117e12f6767fc6..d5510ecb5d3a3fc88d1b06d2ee6b3aac84ae1431 100644 (file)
@@ -672,7 +672,7 @@ int main(int argc,char *argv[])
   int seed;
   
   CopyRight(stdout,argv[0]);
-  parse_common_args(&argc,argv,PCA_BE_NICE,NFILE,fnm,
+  parse_common_args(&argc,argv,0,NFILE,fnm,
                    NPA,pa,asize(desc),desc,0,NULL);
   please_cite(stdout,"Timneanu2004a");
   
index 96da5c85bb9f0e0437ac0afa585377eca967c6cb..5646ab9a865a352f3a5c18c3f4ba0fe0379ccf1c 100644 (file)
@@ -91,7 +91,7 @@ int main(int argc,char *argv[])
 
   
   CopyRight(stderr,argv[0]);
-  parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE ,NFILE,fnm,
+  parse_common_args(&argc,argv,PCA_CAN_TIME,NFILE,fnm,
                    asize(pa),pa,asize(desc),desc,0,NULL);
 
   top    = read_top(ftp2fn(efTPX,NFILE,fnm));
index 95d8f6457da6036a32c97a6e959cbb27172cb54a..6c8f1bc7fab4a801314c4540755d8922b01f2dd0 100644 (file)
@@ -759,7 +759,7 @@ int main(int argc,char *argv[])
   int  eel=0,m=0;
   
   CopyRight(stderr,argv[0]);
-  parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+  parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME,
                    NFILE,fnm,NPA,pa,asize(desc),desc,0,NULL);
   
   if (strcmp(opt[0],"cut") == 0) 
index 9e003626bd754cc94a8ef0b6d6c2c7b39f18719e..6950dd02d02294c589a0dc1b1e9dee43bb229edf 100644 (file)
@@ -721,7 +721,7 @@ int gmx_sdf(int argc,char *argv[])
 #define NFILE asize(fnm)
   
   CopyRight(stderr,argv[0]);
-  parse_common_args(&argc,argv,PCA_CAN_TIME | PCA_BE_NICE,
+  parse_common_args(&argc,argv,PCA_CAN_TIME,
                     NFILE,fnm,NPA,pa,asize(desc),desc,0,NULL,&oenv);
 
 
index fa120c732e3498e7e384f3a5c89f03727d9f192d..9fa23b9f31ba9d0ea50fcf3e1e9acac5fa9cce04 100644 (file)
@@ -128,6 +128,10 @@ class CommandLineHelpModule : public CommandLineModuleInterface
             return "Print help information";
         }
 
+        virtual void init(CommandLineModuleSettings *settings)
+        {
+            settings->setDefaultNiceLevel(0);
+        }
         virtual int run(int argc, char *argv[]);
         virtual void writeHelp(const CommandLineHelpContext &context) const;
 
diff --git a/src/gromacs/commandline/cmdlinemodule.cpp b/src/gromacs/commandline/cmdlinemodule.cpp
new file mode 100644 (file)
index 0000000..0019a32
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2014, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \internal \file
+ * \brief
+ * Implements classes from cmdlinemodule.h.
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ * \ingroup module_commandline
+ */
+#include "gmxpre.h"
+
+#include "cmdlinemodule.h"
+
+#include "gromacs/commandline/cmdlinehelpcontext.h"
+
+namespace gmx
+{
+
+class CommandLineModuleSettings::Impl
+{
+    public:
+        Impl() : defaultNiceLevel_(19) {}
+
+        int defaultNiceLevel_;
+};
+
+CommandLineModuleSettings::CommandLineModuleSettings()
+    : impl_(new Impl)
+{
+}
+
+CommandLineModuleSettings::~CommandLineModuleSettings()
+{
+}
+
+int CommandLineModuleSettings::defaultNiceLevel() const
+{
+    return impl_->defaultNiceLevel_;
+}
+
+void CommandLineModuleSettings::setDefaultNiceLevel(int niceLevel)
+{
+    impl_->defaultNiceLevel_ = niceLevel;
+}
+
+//! \cond libapi
+void writeCommandLineHelpCMain(
+        const CommandLineHelpContext &context, const char *name,
+        int (*mainFunction)(int argc, char *argv[]))
+{
+    char *argv[2];
+    int   argc = 1;
+    // TODO: The constness should not be cast away.
+    argv[0] = const_cast<char *>(name);
+    argv[1] = NULL;
+    GlobalCommandLineHelpContext global(context);
+    mainFunction(argc, argv);
+}
+//! \endcond
+
+} // namespace gmx
index cfe908addb92125ac95c17b53b51b1e29a231730..2e4b1ae8c624defb29e9d7bd6694094146ab1342 100644 (file)
@@ -34,7 +34,7 @@
  */
 /*! \file
  * \brief
- * Declares gmx::CommandLineModuleInterface.
+ * Declares gmx::CommandLineModuleInterface and supporting classes.
  *
  * \author Teemu Murtola <teemu.murtola@gmail.com>
  * \inpublicapi
 #ifndef GMX_COMMANDLINE_CMDLINEMODULE_H
 #define GMX_COMMANDLINE_CMDLINEMODULE_H
 
+#include "gromacs/utility/common.h"
+
 namespace gmx
 {
 
 class CommandLineHelpContext;
 
+/*! \brief
+ * Settings to pass information between a module and the general runner.
+ *
+ * Methods in this class do not throw, except that construction may throw
+ * std::bad_alloc.
+ *
+ * \inpublicapi
+ * \ingroup module_commandline
+ */
+class CommandLineModuleSettings
+{
+    public:
+        CommandLineModuleSettings();
+        ~CommandLineModuleSettings();
+
+        //! Returns the default nice level for this module.
+        int defaultNiceLevel() const;
+
+        /*! \brief
+         * Sets the default nice level for this module.
+         *
+         * If not called, the module will be niced.
+         */
+        void setDefaultNiceLevel(int niceLevel);
+
+    private:
+        class Impl;
+
+        PrivateImplPointer<Impl> impl_;
+};
+
 /*! \brief
  * Module that can be run from command line using CommandLineModuleManager.
  *
@@ -66,6 +99,13 @@ class CommandLineModuleInterface
         //! Returns a one-line description of the module.
         virtual const char *shortDescription() const = 0;
 
+        /*! \brief
+         * Initializes the module and provides settings for the runner.
+         *
+         * This will be called before run(), and can be used to adjust
+         * initialization that the runner does.
+         */
+        virtual void init(CommandLineModuleSettings *settings) = 0;
         /*! \brief
          * Runs the module with the given arguments.
          *
@@ -92,6 +132,22 @@ class CommandLineModuleInterface
         virtual void writeHelp(const CommandLineHelpContext &context) const = 0;
 };
 
+//! \cond libapi
+/*! \libinternal \brief
+ * Helper to implement CommandLineModuleInterface::writeHelp() with a C-like
+ * main() function that calls parse_common_args().
+ *
+ * \param[in] context      Context object for writing the help.
+ * \param[in] name         Name of the module.
+ * \param[in] mainFunction C-like main() function that calls parse_common_args().
+ *
+ * \ingroup module_commandline
+ */
+void writeCommandLineHelpCMain(
+        const CommandLineHelpContext &context, const char *name,
+        int (*mainFunction)(int argc, char *argv[]));
+//! \endcond
+
 } // namespace gmx
 
 #endif
index c4c23c59640c3f8c62afb5bf744a26332b3ccafc..5a56b68f5c4643f9afed62b66fadae4889438667 100644 (file)
@@ -154,6 +154,9 @@ class CommandLineCommonOptionsHolder
          */
         bool finishOptions();
 
+        //! Adjust defaults based on module settings.
+        void adjustFromSettings(const CommandLineModuleSettings &settings);
+
         //! Returns the internal Options object.
         Options *options() { return &options_; }
         //! Returns the settings for printing startup information.
@@ -180,6 +183,8 @@ class CommandLineCommonOptionsHolder
             return bQuiet_ && !bVersion_;
         }
 
+        //! Returns the nice level.
+        int niceLevel() const { return niceLevel_; }
         //! Returns the debug level.
         int debugLevel() const { return debugLevel_; }
 
@@ -195,6 +200,7 @@ class CommandLineCommonOptionsHolder
         bool                         bQuiet_;
         bool                         bVersion_;
         bool                         bCopyright_;
+        int                          niceLevel_;
         int                          debugLevel_;
 
         GMX_DISALLOW_COPY_AND_ASSIGN(CommandLineCommonOptionsHolder);
index 18e44a07f955e0d261f7780a5952063cc0965052..ac5f422d332e10ec9314c46f24854cefd39ab64f 100644 (file)
 #include <string>
 #include <utility>
 
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "gromacs/legacyheaders/copyrite.h"
 
 #include "gromacs/commandline/cmdlinehelpcontext.h"
@@ -65,9 +71,6 @@
 #include "gromacs/utility/gmxassert.h"
 #include "gromacs/utility/stringutil.h"
 
-// For GMX_BINARY_SUFFIX
-#include "config.h"
-
 namespace gmx
 {
 
@@ -117,26 +120,22 @@ class CMainCommandLineModule : public CommandLineModuleInterface
             return shortDescription_;
         }
 
+        virtual void init(CommandLineModuleSettings * /*settings*/)
+        {
+        }
         virtual int run(int argc, char *argv[])
         {
             return mainFunction_(argc, argv);
         }
         virtual void writeHelp(const CommandLineHelpContext &context) const
         {
-            char *argv[2];
-            int   argc = 1;
-            // TODO: The constness should not be cast away.
-            argv[0] = const_cast<char *>(name_);
-            argv[1] = NULL;
-            GlobalCommandLineHelpContext global(context);
-            mainFunction_(argc, argv);
+            writeCommandLineHelpCMain(context, name_, mainFunction_);
         }
 
     private:
         const char             *name_;
         const char             *shortDescription_;
         CMainFunction           mainFunction_;
-
 };
 
 //! \}
@@ -149,7 +148,8 @@ class CMainCommandLineModule : public CommandLineModuleInterface
 
 CommandLineCommonOptionsHolder::CommandLineCommonOptionsHolder()
     : options_(NULL, NULL), bHelp_(false), bHidden_(false),
-      bQuiet_(false), bVersion_(false), bCopyright_(true), debugLevel_(0)
+      bQuiet_(false), bVersion_(false), bCopyright_(true),
+      niceLevel_(19), debugLevel_(0)
 {
     binaryInfoSettings_.copyright(true);
 }
@@ -171,6 +171,8 @@ void CommandLineCommonOptionsHolder::initOptions()
                            .description("Print extended version information and quit"));
     options_.addOption(BooleanOption("copyright").store(&bCopyright_)
                            .description("Print copyright information on startup"));
+    options_.addOption(IntegerOption("nice").store(&niceLevel_)
+                           .description("Set the nicelevel (default depends on command)"));
     options_.addOption(IntegerOption("debug").store(&debugLevel_)
                            .hidden().defaultValueIfSet(1)
                            .description("Write file with debug information, "
@@ -187,6 +189,15 @@ bool CommandLineCommonOptionsHolder::finishOptions()
     return !bVersion_;
 }
 
+void CommandLineCommonOptionsHolder::adjustFromSettings(
+        const CommandLineModuleSettings &settings)
+{
+    if (!options_.isSet("nice"))
+    {
+        niceLevel_ = settings.defaultNiceLevel();
+    }
+}
+
 /********************************************************************
  * CommandLineModuleManager::Impl
  */
@@ -549,7 +560,12 @@ int CommandLineModuleManager::run(int argc, char *argv[])
     {
         return 0;
     }
-    /* Open the debug file */
+
+    CommandLineModuleSettings settings;
+    module->init(&settings);
+    optionsHolder.adjustFromSettings(settings);
+
+    // Open the debug file.
     if (optionsHolder.debugLevel() > 0)
     {
         std::string filename(impl_->programContext_.programName());
@@ -562,6 +578,22 @@ int CommandLineModuleManager::run(int argc, char *argv[])
         fprintf(stderr, "Will write debug log file: %s\n", filename.c_str());
         gmx_init_debug(optionsHolder.debugLevel(), filename.c_str());
     }
+#if defined(HAVE_UNISTD_H) && !defined(GMX_NO_NICE)
+    // Set the nice level unless disabled in the configuration.
+    if (optionsHolder.niceLevel() != 0)
+    {
+        static bool bNiceSet = false; // Only set it once.
+        if (!bNiceSet)
+        {
+            if (nice(optionsHolder.niceLevel()) == -1)
+            {
+                // Do nothing, but use the return value to avoid warnings.
+            }
+            bNiceSet = true;
+        }
+    }
+#endif
+
     int rc = 0;
     if (!(module == impl_->helpModule_ && !bMaster))
     {
index b7018901dae7dd951630ecbf25396180971dbaa8..7b0f9ba2399765744378878f5f6b7e9a3daba218 100644 (file)
 #include <algorithm>
 #include <list>
 
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "thread_mpi/threads.h"
-
 #include "gromacs/commandline/cmdlinehelpcontext.h"
 #include "gromacs/commandline/cmdlinehelpwriter.h"
 #include "gromacs/commandline/cmdlineparser.h"
@@ -486,7 +480,6 @@ gmx_bool parse_common_args(int *argc, char *argv[], unsigned long Flags,
 
     try
     {
-        int                        nicelevel = 0;
         double                     tbegin    = 0.0, tend = 0.0, tdelta = 0.0;
         bool                       bView     = false;
         int                        xvgFormat = 0;
@@ -500,11 +493,6 @@ gmx_bool parse_common_args(int *argc, char *argv[], unsigned long Flags,
         options.addManager(&fileOptManager);
         options.setDescription(gmx::constArrayRefFromArray<const char *>(desc, ndesc));
 
-        options.addOption(
-                gmx::IntegerOption("nice").store(&nicelevel)
-                    .defaultValue(FF(PCA_BE_NICE) ? 19 : 0)
-                    .description("Set the nicelevel"));
-
         if (FF(PCA_CAN_SET_DEFFNM))
         {
             fileOptManager.addDefaultFileNameOption(&options, "deffnm");
@@ -589,28 +577,6 @@ gmx_bool parse_common_args(int *argc, char *argv[], unsigned long Flags,
                         (time_unit_t)(timeUnitManager.timeUnit() + 1), bView,
                         (xvg_format_t)(xvgFormat + 1), 0);
 
-        /* Set the nice level */
-#ifdef HAVE_UNISTD_H
-#ifndef GMX_NO_NICE
-        /* The some system, e.g. the catamount kernel on cray xt3 do not have nice(2). */
-        if (nicelevel != 0)
-        {
-            static gmx_bool            nice_set   = FALSE; /* only set it once */
-            static tMPI_Thread_mutex_t init_mutex = TMPI_THREAD_MUTEX_INITIALIZER;
-            tMPI_Thread_mutex_lock(&init_mutex);
-            if (!nice_set)
-            {
-                if (nice(nicelevel) == -1)
-                {
-                    /* Do nothing, but use the return value to avoid warnings. */
-                }
-                nice_set = TRUE;
-            }
-            tMPI_Thread_mutex_unlock(&init_mutex);
-        }
-#endif
-#endif
-
         timeUnitManager.scaleTimeOptions(&options);
 
         /* Extract Time info from arguments */
index ee912a1399abdc65373bbe48c40fae13f32203de..f6a2ab680cc0f5f23605ab15365b06aa5816e237 100644 (file)
@@ -230,8 +230,6 @@ gmx_bool opt2parg_bSet(const char *option, int nparg, t_pargs pa[]);
 #define PCA_CAN_SET_DEFFNM (1<<10)
 /** Do not raise a fatal error when invalid options are encountered. */
 #define PCA_NOEXIT_ON_ARGS (1<<11)
-/** Default to low priority. */
-#define PCA_BE_NICE        (1<<13)
 /** Is this node not reading: for parallel all nodes but the master */
 #define PCA_NOT_READ_NODE  (1<<16)
 /** Don't do any special processing for ffREAD files */
index eaa8ecfdd6b734d2123f38874f9503424fd51699..0d8f4fc4cc35f463cf8afc5d92be1c4794639b5f 100644 (file)
@@ -83,6 +83,7 @@ class MockModule : public gmx::CommandLineModuleInterface
         virtual const char *name() const { return name_; }
         virtual const char *shortDescription() const { return descr_; }
 
+        MOCK_METHOD1(init, void(gmx::CommandLineModuleSettings *settings));
         MOCK_METHOD2(run, int(int argc, char *argv[]));
         MOCK_CONST_METHOD1(writeHelp, void(const gmx::CommandLineHelpContext &context));
 
@@ -93,6 +94,11 @@ class MockModule : public gmx::CommandLineModuleInterface
         }
 
     private:
+        //! Disable nice() calls for tests.
+        void disableNice(gmx::CommandLineModuleSettings *settings)
+        {
+            settings->setDefaultNiceLevel(0);
+        }
         //! Checks the context passed to writeHelp().
         void checkHelpContext(const gmx::CommandLineHelpContext &context) const;
 
@@ -107,6 +113,8 @@ MockModule::MockModule(const char *name, const char *description)
     using ::testing::_;
     using ::testing::Invoke;
     using ::testing::WithArg;
+    ON_CALL(*this, init(_))
+        .WillByDefault(WithArg<0>(Invoke(this, &MockModule::disableNice)));
     ON_CALL(*this, writeHelp(_))
         .WillByDefault(WithArg<0>(Invoke(this, &MockModule::checkHelpContext)));
 }
@@ -209,6 +217,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModule)
     using ::testing::_;
     using ::testing::Args;
     using ::testing::ElementsAreArray;
+    EXPECT_CALL(mod1, init(_));
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
     int rc = 0;
@@ -312,6 +321,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModuleBasedOnBinaryName)
     using ::testing::_;
     using ::testing::Args;
     using ::testing::ElementsAreArray;
+    EXPECT_CALL(mod1, init(_));
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
     int rc = 0;
@@ -331,6 +341,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModuleBasedOnBinaryNameWithPathAndSuffi
     using ::testing::_;
     using ::testing::Args;
     using ::testing::ElementsAreArray;
+    EXPECT_CALL(mod1, init(_));
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
     int rc = 0;
@@ -350,6 +361,7 @@ TEST_F(CommandLineModuleManagerTest, HandlesConflictingBinaryAndModuleNames)
     using ::testing::_;
     using ::testing::Args;
     using ::testing::ElementsAreArray;
+    EXPECT_CALL(mod1, init(_));
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
     int rc = 0;
index f594138563f973bb7da63acd9eceda3fda9160a4..937d857f1872d06ce573aacbbfab77cce5c24a4a 100644 (file)
@@ -1104,7 +1104,7 @@ int gmx_anaeig(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 137d636708ead29f7e761eeb3bbbf6531af4ff64..83abe0aab7c93073385abaddf6ddfe5cbb1d4699 100644 (file)
@@ -181,7 +181,7 @@ int gmx_g_angle(int argc, char *argv[])
 
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, asize(bugs), bugs,
                            &oenv))
     {
index 140850583ff0f86e7866e6fb50a619ed21d2db04..9cb602d93a71dd7f5a1659b362c29dce9bc4526f 100644 (file)
@@ -260,7 +260,7 @@ int gmx_bundle(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 49ed9850d5eb550a05f5940b96956faad45e264a..3ee3ceabe03e9e8366ed5d771ff0a43aa70ebd3a 100644 (file)
@@ -1391,7 +1391,7 @@ int gmx_chi(int argc, char *argv[])
 
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, asize(bugs), bugs,
                            &oenv))
     {
index 17a480a4954c6dc5377a0403333b976f05713bce..1b099c411cc87cfedac04d49662fa1b8e408a820 100644 (file)
@@ -1525,7 +1525,7 @@ int gmx_cluster(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
                            &oenv))
     {
index fff7aa361c3a743c7aef65b10d629d28a4f84f43..538d21a1d4368fc3e56223573362449a03d86930 100644 (file)
@@ -505,7 +505,7 @@ int gmx_clustsize(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 9c939ead5ca560e7b15611812d15877011cab0ca..9d4e9407786e1756d2c4686603a16bec6fa08bda 100644 (file)
@@ -554,7 +554,7 @@ int gmx_confrms(int argc, char *argv[])
     real    *msds;
 
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE | PCA_CAN_VIEW,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 51d29e38ef8454c0518d66acba40022ed6ce6895..12e4fcfca5e165dbd9036b2bc737967b5eb96898 100644 (file)
@@ -161,7 +161,7 @@ int gmx_covar(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index b50a4304c279177a43029a18237f94b25eaaecef..5ebf4b74dc60d00cc5dae044792a6e2172b7b1c6 100644 (file)
@@ -680,7 +680,7 @@ int gmx_density(int argc, char *argv[])
 
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs,
                            &oenv))
     {
index e4158880e9c514835514919c0f3ae522659ce80e..eec8ef00532c9b8f5476de079f805c1a9b4ff389 100644 (file)
@@ -161,7 +161,7 @@ int gmx_densmap(int argc, char *argv[])
 
     npargs = asize(pa);
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, npargs, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index ccc35446b1a8bdd38edb944ee42f2e8e37a3fd4b..db2607a2ef0bcbfdd0ce5ede3a4beddc5342d0e8 100644 (file)
@@ -301,7 +301,7 @@ int gmx_dielectric(int argc, char *argv[])
           "Number of points for smoothing" }
     };
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index ae7a8ac8d7b26eb4036e54cc196bc97a26336d13..3ca706f979a2cf0c5a30907e5662242acc8fa53e 100644 (file)
@@ -1615,7 +1615,7 @@ int gmx_dipoles(int argc, char *argv[])
 
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 904dd8e50a76ddd096f32dd0ec54a5f47aba46bb..5bf8dfa13f178dc1591f3fb140581976a2b1f085 100644 (file)
@@ -734,7 +734,7 @@ int gmx_disre(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 909bcd700d4c62de6c1dbd05cbcc2a9da2195527..45e7a876631c25ccf6d8895976d6f9e1d266698e 100644 (file)
@@ -524,7 +524,7 @@ int gmx_do_dssp(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_TIME | PCA_CAN_VIEW | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 767525eaa465c1761ccccb64a591e3cb6100aba5..99deca2849309c5881a4710e966ba23873dbc2d1 100644 (file)
@@ -323,7 +323,7 @@ int gmx_dos(int argc, char *argv[])
 
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc,
                            asize(bugs), bugs, &oenv))
     {
index c495cf2e75f89a452ff3ae51a026639bd398ae7f..424c73842e1e7fc2bb30cfa2e9d2f073ad7e4252 100644 (file)
@@ -129,7 +129,8 @@ int gmx_dyecoupl(int argc, char *argv[])
                 rrange, krange, rincr, kincr, Rfrac;
     int         rkcount = 0, rblocksallocated = 0, kblocksallocated = 0;
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW | PCA_TIME_UNIT | PCA_BE_NICE, NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
+    if (!parse_common_args(&argc, argv, PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW | PCA_TIME_UNIT,
+                           NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
     }
index 750e91ed0856ed1171f2553413c4403ec6bbee02..9dd61c8d94e78f31d47bd9b6439a248e4c1264d0 100644 (file)
@@ -573,7 +573,7 @@ int gmx_eneconv(int argc, char *argv[])
           "Stop on errors in the file" }
     };
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa),
+    if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa),
                            pa, asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index 8426aef8d625d8dd38348e180051f5ecb341c2c7..4633ca3fe340a9a0a45e84a21d90fc6506fe4fb6 100644 (file)
@@ -180,7 +180,7 @@ int gmx_enemat(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 7b339fc4159cda5320f506c50abbd636f7802d69..c5c8447dc7ce2f13afe65277da1593337158a1a7 100644 (file)
@@ -2051,7 +2051,7 @@ int gmx_energy(int argc, char *argv[])
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 13955d0c676b4f7ab2e9b15c0675254115133776..a16c630b6df276b256c51e56135520a6738a836c 100644 (file)
@@ -121,7 +121,7 @@ int gmx_filter(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 00bf735f4c3a93c1d62f83ed57347a02d4fae360..494514571deb3f77c440a157fc467bc34dccae3f 100644 (file)
@@ -404,7 +404,7 @@ int gmx_genion(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+    if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
                            asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index d4ab33fb523dd36f65642b66c9e8cd627dfa0ed2..4408617022e549af711a049982fb10d3b9ec907e 100644 (file)
@@ -235,7 +235,7 @@ int gmx_gyrate(int argc, char *argv[])
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 96ab2b82f26d44b05f253fe39b088976ee146185..ca338f90151ff0fd02c621b997afda93adf7ee79 100644 (file)
@@ -313,7 +313,7 @@ int gmx_h2order(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE, NFILE,
+                           PCA_CAN_VIEW | PCA_CAN_TIME, NFILE,
                            fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index 4d421b1cf04d6fa0ccd2b69754ccf66492a6ab87..53fe4fac9a0fdf53040fb82a8f918a6a45b9e750 100644 (file)
@@ -3709,7 +3709,7 @@ int gmx_hbond(int argc, char *argv[])
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE, NFILE, fnm, npargs,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT, NFILE, fnm, npargs,
                            ppa, asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index 9b3a0dcf349555263f9d7e5261e729558ce56a0a..b6af91893c313ad3ce5b6daba67e6d3df068092d 100644 (file)
@@ -166,7 +166,7 @@ int gmx_helix(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 89727f537e6d0b4731992be774f5e182b9b6e9a0..c8504946efa80b045b8165c7acdd45418aeb99ce 100644 (file)
@@ -165,7 +165,7 @@ int gmx_helixorient(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 8cb65d7f6821c284a39e1b1efc132556374833c1..284a99bc3158e4b9f1ca5625d57ff97fe1b20aa6 100644 (file)
@@ -643,7 +643,7 @@ int gmx_hydorder(int argc, char *argv[])
     int          nfspect, nfxpm, nfraw;
     output_env_t oenv;
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index e48ff5eac607a635c7c5707f4c96ea16a185e383..290f3d2b8497f72e6e6013cc4b3e27d9b5a74cc3 100644 (file)
@@ -182,7 +182,7 @@ int gmx_lie(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 2f4716086081c92adb875e10bc6694c7b9aa331c..6b24575bcae4ddb88977aed89ea8bb03368a82bc 100644 (file)
@@ -227,7 +227,7 @@ int gmx_mdmat(int argc, char *argv[])
     output_env_t   oenv;
     gmx_rmpbc_t    gpbc = NULL;
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE, NFILE, fnm,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME, NFILE, fnm,
                            asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 8ca072ecb837347e6a206bf3295a52c830d608d0..adc023494e72650df46b567568d78450e0e8ea72 100644 (file)
@@ -713,7 +713,7 @@ int gmx_mindist(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 69421e61bca9a89ab12197792ecaa002b7660255..e5fb4cd24eb44565cc36d3c9891f99fadbeff9f9 100644 (file)
@@ -1128,7 +1128,7 @@ int gmx_msd(int argc, char *argv[])
     output_env_t    oenv;
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_BEGIN | PCA_CAN_END | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index fdacf8662eb3ced77062b601a251f1af1f7ef0a9..f27e781c8b4b315461ca51bf1e5f7741bdeaa5e3 100644 (file)
@@ -355,7 +355,7 @@ int gmx_nmeig(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, 0,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 66814b62e50b5227abfcaa6e212f5a7593aa4adc..949ca6c48de57bc1ce42bcab762b159417c672ba 100644 (file)
@@ -122,7 +122,7 @@ int gmx_nmens(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, 0,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index a100bf4b0423935595ea3e2d47643dbf3ae25d4d..5633baebef5bf2160a10be0614ccb674d35eacc9 100644 (file)
@@ -139,7 +139,7 @@ int gmx_nmtraj(int argc, char *argv[])
 
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, 0,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index b73f747f598489c6cff87e70c9519afe131d676c..5decb2224fcbf1832bd93568d04987a8304861d3 100644 (file)
@@ -979,7 +979,7 @@ int gmx_order(int argc, char *argv[])
     const char   *sgfnm, *skfnm, *ndxfnm, *tpsfnm, *trxfnm;
     output_env_t  oenv;
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 3e0443128d8cf56fc2892b907c140eb689277045..5cccbf94631feb89bc35d5835df508ca0426aca5 100644 (file)
@@ -179,7 +179,7 @@ int gmx_polystat(int argc, char *argv[])
     gmx_rmpbc_t  gpbc = NULL;
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_CAN_VIEW | PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 95a79ae2f1747c9f298072ba5fac233d9701ce11..989eadad9549002f3f44bda576c7e445ed29925c 100644 (file)
@@ -469,7 +469,7 @@ int gmx_potential(int argc, char *argv[])
 
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, asize(bugs), bugs,
                            &oenv))
     {
index 9b8d2d4e341505786377d7999be3352109e280aa..b4828409b5af045c1ebbab6aa9ce18bee9413405 100644 (file)
@@ -119,7 +119,7 @@ int gmx_principal(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 89efb681cb16bb520062e744ac7e41bd193e939b..037517f15885d78515f990f5357694bcc502f44f 100644 (file)
@@ -87,7 +87,7 @@ int gmx_rama(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, 0, NULL, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 62a75a122015ce4d44eadb96c6c90e1cc189f2e0..ca54a4def4946371e9cf223299d42e877a97cd87 100644 (file)
@@ -904,7 +904,7 @@ int gmx_rdf(int argc, char *argv[])
         { efXVG, "-hq", "hq",     ffOPTWR },
     };
 #define NFILE asize(fnm)
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 72f2df8ac40cba68d636d8acf80550cdf4874fed..468cc3f377d5b6bc5c926bc55b89b60a4844a454 100644 (file)
@@ -270,8 +270,8 @@ int gmx_rms(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW
-                           | PCA_BE_NICE, NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
+                           NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL,
                            &oenv))
     {
         return 0;
index b89fc27633022d99c5be9d42372dd224a6d85d26..b7fdfca625ec70fd2f453847deecbf62bb25549f 100644 (file)
@@ -707,7 +707,7 @@ int gmx_rmsdist(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 2cf9302095ba913fd50d54d0c9248f84259cc785..535feb5c7bcc76ac5cb4685762363f409f1ee810 100644 (file)
@@ -279,7 +279,7 @@ int gmx_rmsf(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pargs), pargs, asize(desc), desc, 0, NULL,
                            &oenv))
     {
index eade0cfb546c288d8192217afde398fe98ea01fd..073d131e518e4c1b721235f9fd14f70edb0cc6ed 100644 (file)
@@ -115,7 +115,7 @@ int gmx_rotacf(int argc, char *argv[])
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index fee97eae34b4fab063fa3aa09f31556a00d39202..54f012416dcf6a102f5a0d4f0cc919a2e1d8c862 100644 (file)
@@ -240,7 +240,7 @@ int gmx_rotmat(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index d6048c2fc485823af3c079ade8ce61cc645c55f3..440769985d8e139264a18b93472f9c444c903f6c 100644 (file)
@@ -185,7 +185,7 @@ int gmx_saltbr(int argc, char *argv[])
     matrix             box;
     output_env_t       oenv;
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 4adcefb7ef21174782d960e281d54b5c0929be71..6838d272a3fa2cb15d8d11fda3578300b31d0b3c 100644 (file)
@@ -158,7 +158,7 @@ int gmx_sans(int argc, char *argv[])
 
     nthreads = gmx_omp_get_max_threads();
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_TIME_UNIT,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 531786db03ce199f78246f20524d820f59d1fa94..9b23bde9849c4d7983c89571aadff47cf76e6163 100644 (file)
@@ -82,7 +82,7 @@ int gmx_saxs(int argc, char *argv[])
         { efXVG, "-sq", "sq",      ffWRITE },
     };
 #define NFILE asize(fnm)
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
                            NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index fab870832badfff5fb29b0c18818b8bda68465f0..85837ed10834f37fa3ebb6340b969622bc60bda1 100644 (file)
@@ -990,7 +990,7 @@ int gmx_sham(int argc, char *argv[])
     int     npargs;
 
     npargs = asize(pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW,
                            NFILE, fnm, npargs, pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 4723f9a130e3aade2f4a2f95a0a648c9dea1d3e1..5c963b771a890155a42c600981429847862cf67f 100644 (file)
@@ -195,7 +195,7 @@ int gmx_sorient(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index bc7895724aa3807c362d2aed46ca78f7a395b7ac..c9b160be13e771a9d359984e88477907f89c3276 100644 (file)
@@ -213,7 +213,7 @@ int gmx_spol(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 4505de841eb64ec3bd586d88bb76bc0b3d178067..9c66c0a7811b5a612d917240012ff5a972daf1fc 100644 (file)
@@ -340,7 +340,7 @@ int gmx_tcaf(int argc, char *argv[])
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 779d07ff61c355abe470632264bd41f9cccbcd83..6b1297e122cdb1019e6c5438cac04eb689441223 100644 (file)
@@ -704,7 +704,7 @@ int gmx_traj(int argc, char *argv[])
 #define NFILE asize(fnm)
 
     if (!parse_common_args(&argc, argv,
-                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW | PCA_BE_NICE,
+                           PCA_CAN_TIME | PCA_TIME_UNIT | PCA_CAN_VIEW,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 84939f36d9393565ce5d6ddbcfe4d34631b5f28f..fcfce74a3ecff24d46eaaf336482e3800d75f45f 100644 (file)
@@ -505,7 +505,7 @@ int gmx_trjcat(int argc, char *argv[])
 
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE | PCA_TIME_UNIT, NFILE, fnm,
+    if (!parse_common_args(&argc, argv, PCA_TIME_UNIT, NFILE, fnm,
                            asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 5ee96528d286d2dc8629f7a1ecbaae9d6261bd7e..a0e38488d781c5147810a1c28aa460f12a51c8de 100644 (file)
@@ -926,7 +926,7 @@ int gmx_trjconv(int argc, char *argv[])
 
     if (!parse_common_args(&argc, argv,
                            PCA_CAN_BEGIN | PCA_CAN_END | PCA_CAN_VIEW |
-                           PCA_TIME_UNIT | PCA_BE_NICE,
+                           PCA_TIME_UNIT,
                            NFILE, fnm, NPA, pa, asize(desc), desc,
                            0, NULL, &oenv))
     {
index 3d9c647c6b73f0fd7cc36f2bad83dbd848e612ec..0a13b114104dc9c97ff405de91c51fce20f519bc 100644 (file)
@@ -151,7 +151,7 @@ int gmx_trjorder(int argc, char *argv[])
     };
 #define NFILE asize(fnm)
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index f399578dd9f4996a70d0e8b557f45998cd218755..bef1db6432e5282fd6e2738254b5a3208ffcdaef 100644 (file)
@@ -149,7 +149,7 @@ int gmx_vanhove(int argc, char *argv[])
     FILE        *fp;
     t_rgb        rlo = {1, 1, 1}, rhi = {0, 0, 0};
 
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index fe148a17bb57c6b060eeed7dbc21c74ce6ba0a7c..0130410ab20b48091c5fdd3f993fdfb8d93f8d57 100644 (file)
@@ -237,7 +237,7 @@ int gmx_velacc(int argc, char *argv[])
 
     npargs = asize(pa);
     ppa    = add_acf_pargs(&npargs, pa);
-    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_CAN_TIME,
                            NFILE, fnm, npargs, ppa, asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index 8d93fb6c41fec03bcd6a77d99944d62ebcfc4ccf..1c8f173a0ff3e6cfce4d5b9d08ac78ba18f4d034 100644 (file)
@@ -3381,7 +3381,7 @@ int gmx_wham(int argc, char *argv[])
     opt.stepchange            = 100;
     opt.stepUpdateContrib     = 100;
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE,
+    if (!parse_common_args(&argc, argv, 0,
                            NFILE, fnm, asize(pa), pa, asize(desc), desc, 0, NULL, &opt.oenv))
     {
         return 0;
index 3bb86d9cc8f43878e7e0a3c43c8e70d2d0f4d01d..73d9de4759c2533b72a03cedac4c0dcd6d28b968 100644 (file)
@@ -247,7 +247,7 @@ int gmx_wheel(int argc, char *argv[])
     int    i, nres;
     char **resnm;
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+    if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
                            asize(desc), desc, 0, NULL, &oenv))
     {
         return 0;
index f17357e2a10d8dd7b010f9c67afbe7579ffd044d..f1fd79b70432ff35fcd07593185cbab759a4347e 100644 (file)
@@ -369,7 +369,7 @@ int gmx_insert_molecules(int argc, char *argv[])
           "Avoid momory leaks during neighbor searching with option -ci. May be slow for large systems." },
     };
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+    if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
                            asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index b29018ea2b0302634095796616c199a1b4e82121..46fd66c06dc188596c42cc92f29b371b472ba0f8 100644 (file)
@@ -722,7 +722,7 @@ int gmx_solvate(int argc, char *argv[])
           "Keep velocities from input solute and solvent" },
     };
 
-    if (!parse_common_args(&argc, argv, PCA_BE_NICE, NFILE, fnm, asize(pa), pa,
+    if (!parse_common_args(&argc, argv, 0, NFILE, fnm, asize(pa), pa,
                            asize(desc), desc, asize(bugs), bugs, &oenv))
     {
         return 0;
index 944945b99dded824428f9796ce0f245889df3d3e..e67418744d128430ed71e25d2669bebcf4bd21ca 100644 (file)
@@ -307,6 +307,7 @@ class TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule
         virtual const char *name() const { return name_; }
         virtual const char *shortDescription() const { return description_; };
 
+        virtual void init(CommandLineModuleSettings *settings);
         virtual int run(int argc, char *argv[]);
         virtual void writeHelp(const CommandLineHelpContext &context) const;
 
@@ -318,6 +319,11 @@ class TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule
         GMX_DISALLOW_COPY_AND_ASSIGN(RunnerCommandLineModule);
 };
 
+void TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule::init(
+        CommandLineModuleSettings * /*settings*/)
+{
+}
+
 int TrajectoryAnalysisCommandLineRunner::Impl::RunnerCommandLineModule::run(
         int argc, char *argv[])
 {
index 92e3d317af877ef0a566f22f7dc0358d259d5006..52eaafb075d8bfaf93d352c91d3fdf2ce597b4e1 100644 (file)
@@ -88,6 +88,9 @@ class ObsoleteToolModule : public gmx::CommandLineModuleInterface
             return NULL;
         }
 
+        virtual void init(gmx::CommandLineModuleSettings * /*settings*/)
+        {
+        }
         virtual int run(int /*argc*/, char * /*argv*/[])
         {
             printMessage();
@@ -109,7 +112,58 @@ class ObsoleteToolModule : public gmx::CommandLineModuleInterface
         }
 
         const char             *name_;
+};
+
+// TODO: Consider removing duplication with CMainCommandLineModule from
+// cmdlinemodulemanager.cpp.
+class NoNiceModule : public gmx::CommandLineModuleInterface
+{
+    public:
+        //! \copydoc gmx::CommandLineModuleManager::CMainFunction
+        typedef gmx::CommandLineModuleManager::CMainFunction CMainFunction;
 
+        /*! \brief
+         * Creates a wrapper module for the given main function.
+         *
+         * \param[in] name             Name for the module.
+         * \param[in] shortDescription One-line description for the module.
+         * \param[in] mainFunction     Main function to wrap.
+         *
+         * Does not throw.
+         */
+        NoNiceModule(const char *name, const char *shortDescription,
+                     CMainFunction mainFunction)
+            : name_(name), shortDescription_(shortDescription),
+              mainFunction_(mainFunction)
+        {
+        }
+
+        virtual const char *name() const
+        {
+            return name_;
+        }
+        virtual const char *shortDescription() const
+        {
+            return shortDescription_;
+        }
+
+        virtual void init(gmx::CommandLineModuleSettings *settings)
+        {
+            settings->setDefaultNiceLevel(0);
+        }
+        virtual int run(int argc, char *argv[])
+        {
+            return mainFunction_(argc, argv);
+        }
+        virtual void writeHelp(const gmx::CommandLineHelpContext &context) const
+        {
+            writeCommandLineHelpCMain(context, name_, mainFunction_);
+        }
+
+    private:
+        const char             *name_;
+        const char             *shortDescription_;
+        CMainFunction           mainFunction_;
 };
 
 /*! \brief
@@ -127,6 +181,24 @@ void registerModule(gmx::CommandLineModuleManager                *manager,
     manager->addModuleCMain(name, shortDescription, mainFunction);
 }
 
+/*! \brief
+ * Convenience function for creating and registering a module that defaults to
+ * -nice 0.
+ *
+ * \param[in] manager          Module manager to which to register the module.
+ * \param[in] mainFunction     Main function to wrap.
+ * \param[in] name             Name for the new module.
+ * \param[in] shortDescription One-line description for the new module.
+ */
+void registerModuleNoNice(gmx::CommandLineModuleManager                *manager,
+                          gmx::CommandLineModuleManager::CMainFunction  mainFunction,
+                          const char *name, const char *shortDescription)
+{
+    gmx::CommandLineModulePointer module(
+            new NoNiceModule(name, shortDescription, mainFunction));
+    manager->addModule(move(module));
+}
+
 /*! \brief
  * Convenience function for registering a module for an obsolete tool.
  *
@@ -162,8 +234,8 @@ void registerLegacyModules(gmx::CommandLineModuleManager *manager)
     registerModule(manager, &gmx_x2top, "x2top",
                    "Generate a primitive topology from coordinates");
 
-    registerModule(manager, &gmx_mdrun, "mdrun",
-                   "Perform a simulation, do a normal mode analysis or an energy minimization");
+    registerModuleNoNice(manager, &gmx_mdrun, "mdrun",
+                         "Perform a simulation, do a normal mode analysis or an energy minimization");
 
     // Modules from gmx_ana.h.
     registerModule(manager, &gmx_do_dssp, "do_dssp",
@@ -334,8 +406,8 @@ void registerLegacyModules(gmx::CommandLineModuleManager *manager)
                    "Perform weighted histogram analysis after umbrella sampling");
     registerModule(manager, &gmx_wheel, "wheel",
                    "Plot helical wheels");
-    registerModule(manager, &gmx_view, "view",
-                   "View a trajectory on an X-Windows terminal");
+    registerModuleNoNice(manager, &gmx_view, "view",
+                         "View a trajectory on an X-Windows terminal");
 
     {
         gmx::CommandLineModuleGroup group =