@@ -380,8 +380,20 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
380380 // default to --check-level=normal from CLI for now
381381 mSettings .setCheckLevel (Settings::CheckLevel::normal);
382382
383+ // TODO: this is duplicated in gui/mainwindows.cpp
384+ {
385+ // load config to determine if we are premium - do not apply any other settings
386+ Settings s;
387+ s.exename = mSettings .exename ;
388+ Suppressions supprs;
389+ // TODO: errorhandling
390+ Settings::loadCppcheckCfg (s, supprs, mSettings .debuglookup || mSettings .debuglookupConfig );
391+ mSettings .cppcheckCfgProductName = s.cppcheckCfgProductName ;
392+ mSettings .premium = startsWith (mSettings .cppcheckCfgProductName , " Cppcheck Premium" );
393+ }
394+
383395 if (argc <= 1 ) {
384- printHelp ();
396+ printHelp (mSettings . premium );
385397 return Result::Exit;
386398 }
387399
@@ -418,7 +430,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
418430
419431 // Print help
420432 if (std::strcmp (argv[i], " -h" ) == 0 || std::strcmp (argv[i], " --help" ) == 0 ) {
421- printHelp ();
433+ printHelp (mSettings . premium );
422434 return Result::Exit;
423435 }
424436
@@ -1086,7 +1098,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
10861098 }
10871099
10881100 // Special Cppcheck Premium options
1089- else if ((std::strncmp (argv[i], " --premium=" , 10 ) == 0 || std::strncmp (argv[i], " --premium-" , 10 ) == 0 ) && isCppcheckPremium () ) {
1101+ else if ((std::strncmp (argv[i], " --premium=" , 10 ) == 0 || std::strncmp (argv[i], " --premium-" , 10 ) == 0 ) && mSettings . premium ) {
10901102 // valid options --premium=..
10911103 const std::set<std::string> valid{
10921104 " autosar" ,
@@ -1616,13 +1628,15 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
16161628 return Result::Success;
16171629}
16181630
1619- void CmdLineParser::printHelp () const
1631+ void CmdLineParser::printHelp (bool premium ) const
16201632{
1621- const std::string manualUrl (isCppcheckPremium () ?
1622- " https://cppcheck.sourceforge.io/manual.pdf" :
1623- " https://files.cppchecksolutions.com/manual.pdf" );
1633+ // TODO: fetch URL from config like product name?
1634+ const std::string manualUrl (premium ?
1635+ " https://files.cppchecksolutions.com/manual.pdf" :
1636+ " https://cppcheck.sourceforge.io/manual.pdf" );
16241637
16251638 std::ostringstream oss;
1639+ // TODO: display product name
16261640 oss << " Cppcheck - A tool for static C/C++ code analysis\n "
16271641 " \n "
16281642 " Syntax:\n "
@@ -1820,7 +1834,7 @@ void CmdLineParser::printHelp() const
18201834 " --plist-output=<path>\n "
18211835 " Generate Clang-plist output files in folder.\n " ;
18221836
1823- if (isCppcheckPremium () ) {
1837+ if (premium ) {
18241838 oss <<
18251839 " --premium=<option>\n "
18261840 " Coding standards:\n "
@@ -1994,6 +2008,7 @@ void CmdLineParser::printHelp() const
19942008}
19952009
19962010std::string CmdLineParser::getVersion () const {
2011+ // TODO: this should not contain the version - it should set the extraVersion
19972012 if (!mSettings .cppcheckCfgProductName .empty ())
19982013 return mSettings .cppcheckCfgProductName ;
19992014 const char * const extraVersion = CppCheck::extraVersion ();
@@ -2002,12 +2017,6 @@ std::string CmdLineParser::getVersion() const {
20022017 return std::string (" Cppcheck " ) + CppCheck::version ();
20032018}
20042019
2005- bool CmdLineParser::isCppcheckPremium () const {
2006- if (mSettings .cppcheckCfgProductName .empty ())
2007- Settings::loadCppcheckCfg (mSettings , mSuppressions , mSettings .debuglookup || mSettings .debuglookupConfig );
2008- return startsWith (mSettings .cppcheckCfgProductName , " Cppcheck Premium" );
2009- }
2010-
20112020bool CmdLineParser::tryLoadLibrary (Library& destination, const std::string& basepath, const char * filename, bool debug)
20122021{
20132022 const Library::Error err = destination.load (basepath.c_str (), filename, debug);
@@ -2100,8 +2109,12 @@ bool CmdLineParser::loadAddons(Settings& settings)
21002109
21012110bool CmdLineParser::loadCppcheckCfg ()
21022111{
2103- if (!mSettings .cppcheckCfgProductName .empty ())
2104- return true ;
2112+ if (!mSettings .settingsFiles .empty ())
2113+ {
2114+ // should never happen - programming error
2115+ mLogger .printError (" cppcheck.cfg has already been loaded from " + mSettings .settingsFiles [0 ]);
2116+ return false ;
2117+ }
21052118 const std::string cfgErr = Settings::loadCppcheckCfg (mSettings , mSuppressions , mSettings .debuglookup || mSettings .debuglookupConfig );
21062119 if (!cfgErr.empty ()) {
21072120 mLogger .printError (" could not load cppcheck.cfg - " + cfgErr);
0 commit comments