1
0
Fork 0

Fix the --version option

1) Paths and the FG_SCENERY paths list are now printed like:

     FG_ROOT=/home/flo/flightgear/src/fgdata

   instead of:

     FG_ROOT=Path "/home/flo/flightgear/src/fgdata"

   Moreover, FG_SCENERY is now correctly printed (without 'Path ""'
   wrapping, without Terrain, Objects and markers instead of the actual
   scenery paths) regardless of the position of --version relatively to
   --fg-scenery, --terrasync-dir, etc. Of course, the values given to
   these options do influence the output of --version.

   Simplify printing of FG_SCENERY via SGPath::join() and use the
   correct, OS-dependent separator between paths, SGPath::pathListSep.

   Write the --version output to stdout, as already done for --help;
   then it can be easily piped to $PAGER and doesn't get mixed with the
   output of SG_LOG (which is on stderr). This is of course backward
   incompatible for programs reading the stderr output of
   'fgfs --version', but has been agreed upon on FlightGear-devel (cf.
   <https://sourceforge.net/p/flightgear/mailman/message/35461619/>).

2) Don't write explicit values in the OptionResult enum: they don't
   matter, but giving them is error-prone in case one does a copy-paste
   to add a new member to the enum and forgets to change the value.
This commit is contained in:
Florent Rougon 2016-10-30 17:25:06 +01:00
parent c7c66d7a3b
commit bbf5ac6406
2 changed files with 32 additions and 35 deletions

View file

@ -1339,31 +1339,6 @@ fgOptParking( const char *arg )
return FG_OPTIONS_OK;
}
static int
fgOptVersion( const char *arg )
{
cerr << "FlightGear version: " << FLIGHTGEAR_VERSION << endl;
cerr << "Revision: " << REVISION << endl;
cerr << "Build-Id: " << HUDSON_BUILD_ID << endl;
cerr << "FG_ROOT=" << globals->get_fg_root() << endl;
cerr << "FG_HOME=" << globals->get_fg_home() << endl;
cerr << "FG_SCENERY=";
int didsome = 0;
PathList scn = globals->get_fg_scenery();
for (PathList::const_iterator it = scn.begin(); it != scn.end(); it++)
{
if (didsome) cerr << ":";
didsome++;
cerr << *it;
}
cerr << endl;
cerr << "SimGear version: " << SG_STRINGIZE(SIMGEAR_VERSION) << endl;
cerr << "OSG version: " << osgGetVersion() << endl;
cerr << "PLIB version: " << PLIB_VERSION << endl;
return FG_OPTIONS_EXIT;
}
static int
fgOptCallSign(const char * arg)
{
@ -1733,7 +1708,7 @@ struct OptionDesc {
{"livery", true, OPTION_FUNC, "", false, "", fgOptLivery },
{"ai-scenario", true, OPTION_FUNC | OPTION_MULTI, "", false, "", fgOptScenario },
{"parking-id", true, OPTION_FUNC, "", false, "", fgOptParking },
{"version", false, OPTION_FUNC, "", false, "", fgOptVersion },
{"version", false, OPTION_IGNORE, "", false, "", 0 },
{"enable-fpe", false, OPTION_IGNORE, "", false, "", 0},
{"fgviewer", false, OPTION_IGNORE, "", false, "", 0},
{"no-default-config", false, OPTION_IGNORE, "", false, "", 0},
@ -2331,7 +2306,7 @@ OptionResult Options::processOptions()
// out quickly, but rely on aircraft / root settings
if (p->showHelp) {
showUsage();
return FG_OPTIONS_EXIT;
return FG_OPTIONS_EXIT;
}
// processing order is complicated. We must process groups LIFO, but the
@ -2430,6 +2405,11 @@ OptionResult Options::processOptions()
globals->append_fg_scenery(root);
}
if (isOptionSet("version")) {
showVersion();
return FG_OPTIONS_EXIT;
}
return FG_OPTIONS_OK;
}
@ -2565,6 +2545,22 @@ void Options::showUsage() const
#endif
}
void Options::showVersion() const
{
cout << "FlightGear version: " << FLIGHTGEAR_VERSION << endl;
cout << "Revision: " << REVISION << endl;
cout << "Build-Id: " << HUDSON_BUILD_ID << endl;
cout << "FG_ROOT=" << globals->get_fg_root().utf8Str() << endl;
cout << "FG_HOME=" << globals->get_fg_home().utf8Str() << endl;
cout << "FG_SCENERY=";
PathList scn = globals->get_unmangled_fg_scenery();
cout << SGPath::join(scn, &SGPath::pathListSep) << endl;
cout << "SimGear version: " << SG_STRINGIZE(SIMGEAR_VERSION) << endl;
cout << "OSG version: " << osgGetVersion() << endl;
cout << "PLIB version: " << PLIB_VERSION << endl;
}
#if defined(__CYGWIN__)
SGPath Options::platformDefaultRoot() const
{

View file

@ -50,13 +50,13 @@ namespace flightgear
enum OptionResult
{
FG_OPTIONS_OK = 0,
FG_OPTIONS_HELP = 1,
FG_OPTIONS_ERROR = 2,
FG_OPTIONS_EXIT = 3,
FG_OPTIONS_VERBOSE_HELP = 4,
FG_OPTIONS_SHOW_AIRCRAFT = 5,
FG_OPTIONS_SHOW_SOUND_DEVICES = 6,
FG_OPTIONS_NO_DEFAULT_CONFIG = 7
FG_OPTIONS_HELP,
FG_OPTIONS_ERROR,
FG_OPTIONS_EXIT,
FG_OPTIONS_VERBOSE_HELP,
FG_OPTIONS_SHOW_AIRCRAFT,
FG_OPTIONS_SHOW_SOUND_DEVICES,
FG_OPTIONS_NO_DEFAULT_CONFIG
};
class Options
@ -151,7 +151,8 @@ public:
SGPath platformDefaultRoot() const;
private:
void showUsage() const;
void showVersion() const;
int parseOption(const std::string& s);
void processArgResult(int result);