int main(int argc, char *argv[]) { int retval; debug_set_exception_handler(); log_add_output_maxlev(&main_stderr_log_out, LMT_ACTION); log_add_output_all_levs(&main_dstream_no_stderr_log_out); log_register_thread("main"); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); if (!cmd_args_ok || cmd_args.getFlag("help") || cmd_args.exists("nonopt1")) { print_help(allowed_options); return cmd_args_ok ? 0 : 1; } if (cmd_args.getFlag("version")) { print_version(); return 0; } setup_log_params(cmd_args); porting::signal_handler_init(); porting::initializePaths(); if (!create_userdata_path()) { errorstream << "Cannot create user data directory" << std::endl; return 1; } // Initialize debug stacks debug_stacks_init(); DSTACK(__FUNCTION_NAME); // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER // List gameids if requested if (cmd_args.exists("gameid") && cmd_args.get("gameid") == "list") { list_game_ids(); return 0; } // List worlds if requested if (cmd_args.exists("world") && cmd_args.get("world") == "list") { list_worlds(); return 0; } GameParams game_params; if (!init_common(&game_params.log_level, cmd_args, argc, argv)) return 1; #ifndef __ANDROID__ // Run unit tests if (cmd_args.getFlag("run-unittests")) { run_tests(); return 0; } #endif #ifdef SERVER game_params.is_dedicated_server = true; #else game_params.is_dedicated_server = cmd_args.getFlag("server"); #endif if (!game_configure(&game_params, cmd_args)) return 1; sanity_check(game_params.world_path != ""); infostream << "Using commanded world path [" << game_params.world_path << "]" << std::endl; //Run dedicated server if asked to or no other option g_settings->set("server_dedicated", game_params.is_dedicated_server ? "true" : "false"); if (game_params.is_dedicated_server) return run_dedicated_server(game_params, cmd_args) ? 0 : 1; #ifndef SERVER ClientLauncher launcher; retval = launcher.run(game_params, cmd_args) ? 0 : 1; #else retval = 0; #endif // Update configuration file if (g_settings_path != "") g_settings->updateConfigFile(g_settings_path.c_str()); print_modified_quicktune_values(); // Stop httpfetch thread (if started) httpfetch_cleanup(); END_DEBUG_EXCEPTION_HANDLER(errorstream) return retval; }
int main(int argc, char **argv) { QCoreApplication::setOrganizationName(QStringLiteral("KDAB")); QCoreApplication::setOrganizationDomain(QStringLiteral("kdab.com")); QCoreApplication::setApplicationName(QStringLiteral("GammaRay")); installSignalHandler(); QStringList args; args.reserve(argc); for (int i = 1; i < argc; ++i) { args.push_back(QString::fromLocal8Bit(argv[i])); } #ifdef HAVE_QT_WIDGETS QApplication app(argc, argv); // for style inspector #else QCoreApplication app(argc, argv); #endif Paths::setRelativeRootPath(GAMMARAY_INVERSE_BIN_DIR); QStringList builtInArgs = QStringList() << QStringLiteral("-style") << QStringLiteral("-stylesheet") << QStringLiteral("-graphicssystem"); LaunchOptions options; while (!args.isEmpty() && args.first().startsWith('-')) { const QString arg = args.takeFirst(); if ((arg == QLatin1String("-i") || arg == QLatin1String("--injector")) && !args.isEmpty()) { options.setInjectorType(args.takeFirst()); continue; } if ((arg == QLatin1String("-p") || arg == QLatin1String("--pid")) && !args.isEmpty()) { options.setPid( args.takeFirst().toInt() ); continue; } if (arg == QLatin1String("-h") || arg == QLatin1String("--help")) { usage(argv[0]); return 0; } if (arg == QLatin1String("-v") || arg == QLatin1String("--version")) { out << "GammaRay version " << GAMMARAY_VERSION_STRING << endl; out << "Copyright (C) 2010-2016 Klaralvdalens Datakonsult AB, " << "a KDAB Group company, [email protected]" << endl; return 0; } if (arg == QLatin1String("--inprocess")) { options.setUiMode(LaunchOptions::InProcessUi); } if (arg == QLatin1String("--inject-only")) { options.setUiMode(LaunchOptions::NoUi); } if (arg == QLatin1String("--listen") && !args.isEmpty()) { options.setProbeSetting(QStringLiteral("ServerAddress"), urlFromUserInput(args.takeFirst()).toString()); } if ( arg == QLatin1String("--no-listen")) { options.setProbeSetting(QStringLiteral("RemoteAccessEnabled"), false); options.setUiMode(LaunchOptions::InProcessUi); } if ( arg == QLatin1String("--list-probes")) { foreach( const ProbeABI &abi, ProbeFinder::listProbeABIs()) out << abi.id() << " (" << abi.displayString() << ")" << endl; return 0; } if ( arg == QLatin1String("--probe") && !args.isEmpty()) { const ProbeABI abi = ProbeABI::fromString(args.takeFirst()); if (!abi.isValid()) { out << "Invalid probe ABI specified, see --list-probes for valid ones." << endl; return 1; } if (ProbeFinder::findProbe(QStringLiteral(GAMMARAY_PROBE_BASENAME), abi).isEmpty()) { out << abi.id() << "is not a known probe, see --list-probes." << endl; return 1; } options.setProbeABI(abi); } if ( arg == QLatin1String("--connect") && !args.isEmpty()) { const QUrl url = urlFromUserInput(args.takeFirst()); ClientLauncher client; client.launch(url); client.waitForFinished(); return 0; } // debug/test options if (arg == QLatin1String("-filtertest")) { qputenv("GAMMARAY_TEST_FILTER", "1"); } if (arg == QLatin1String("-unittest")) { qputenv("GAMMARAY_UNITTEST", "1"); } if (arg == QLatin1String("-modeltest")) { qputenv("GAMMARAY_MODELTEST", "1"); } // built-in arguments of QApp, could be meant for us if we are showing the launcher window foreach (const QString &builtInArg, builtInArgs) { if (arg == builtInArg && !args.isEmpty()) { args.takeFirst(); } } }
int main(int argc, char **argv) { QCoreApplication::setOrganizationName(QStringLiteral("KDAB")); QCoreApplication::setOrganizationDomain(QStringLiteral("kdab.com")); QCoreApplication::setApplicationName(QStringLiteral("GammaRay")); installSignalHandler(); QStringList args; args.reserve(argc); for (int i = 1; i < argc; ++i) args.push_back(QString::fromLocal8Bit(argv[i])); #ifndef GAMMARAY_CORE_ONLY_LAUNCHER QApplication app(argc, argv); // for style inspector #else QCoreApplication app(argc, argv); #endif Paths::setRelativeRootPath(GAMMARAY_INVERSE_BIN_DIR); QStringList builtInArgs = QStringList() << QStringLiteral("-style") << QStringLiteral("-stylesheet") << QStringLiteral("-graphicssystem"); LaunchOptions options; while (!args.isEmpty() && args.first().startsWith('-')) { const QString arg = args.takeFirst(); if ((arg == QLatin1String("-i") || arg == QLatin1String("--injector")) && !args.isEmpty()) { options.setInjectorType(args.takeFirst()); continue; } if ((arg == QLatin1String("-o") || arg == QLatin1String("--injector-override")) && !args.isEmpty()) { options.setInjectorTypeExecutableOverride(args.takeFirst()); continue; } if ((arg == QLatin1String("-p") || arg == QLatin1String("--pid")) && !args.isEmpty()) { options.setPid(args.takeFirst().toInt()); continue; } if (arg == QLatin1String("-h") || arg == QLatin1String("--help")) { usage(argv[0]); return 0; } if (arg == QLatin1String("-v") || arg == QLatin1String("--version")) { out << "GammaRay version " << GAMMARAY_VERSION_STRING << endl; out << "Copyright (C) 2010-2016 Klaralvdalens Datakonsult AB, " << "a KDAB Group company, [email protected]" << endl; out << "Protocol version " << Protocol::version() << endl; out << "Broadcast version " << Protocol::broadcastFormatVersion() << endl; return 0; } if (arg == QLatin1String("--inprocess")) options.setUiMode(LaunchOptions::InProcessUi); if (arg == QLatin1String("--inject-only")) options.setUiMode(LaunchOptions::NoUi); if (arg == QLatin1String("--listen") && !args.isEmpty()) options.setProbeSetting(QStringLiteral("ServerAddress"), urlFromUserInput(args.takeFirst()).toString()); if (arg == QLatin1String("--no-listen")) { options.setProbeSetting(QStringLiteral("RemoteAccessEnabled"), false); options.setUiMode(LaunchOptions::InProcessUi); } if (arg == QLatin1String("--list-probes")) { foreach (const ProbeABI &abi, ProbeFinder::listProbeABIs()) out << abi.id() << " (" << abi.displayString() << ")" << endl; return 0; } if (arg == QLatin1String("--probe") && !args.isEmpty()) { const ProbeABI abi = ProbeABI::fromString(args.takeFirst()); if (!abi.isValid()) { out << "Invalid probe ABI specified, see --list-probes for valid ones." << endl; return 1; } if (ProbeFinder::findProbe(abi).isEmpty()) { out << abi.id() << "is not a known probe, see --list-probes." << endl; return 1; } options.setProbeABI(abi); } if (arg == QLatin1String("--connect") && !args.isEmpty()) { const QUrl url = urlFromUserInput(args.takeFirst()); ClientLauncher client; client.launch(url); client.waitForFinished(); return 0; } if (arg == QLatin1String("--self-test")) { SelfTest selfTest; #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QObject::connect(&selfTest, &SelfTest::information, [](const QString &msg) { out << msg << endl; }); QObject::connect(&selfTest, &SelfTest::error, [](const QString &msg) { err << "Error: " << msg << endl; }); #endif if (args.isEmpty() || args.first().startsWith('-')) return selfTest.checkEverything() ? 0 : 1; const auto injectorType = args.takeFirst(); return selfTest.checkInjector(injectorType) ? 0 : 1; } // debug/test options if (arg == QLatin1String("-filtertest")) qputenv("GAMMARAY_TEST_FILTER", "1"); if (arg == QLatin1String("-unittest")) qputenv("GAMMARAY_UNITTEST", "1"); // built-in arguments of QApp, could be meant for us if we are showing the launcher window foreach (const QString &builtInArg, builtInArgs) { if (arg == builtInArg && !args.isEmpty()) args.takeFirst(); } }
int main(int argc, char *argv[]) { int retval = 0; #if USE_ENET if (enet_initialize() != 0) { std::cerr << "enet failed to initialize\n"; return EXIT_FAILURE; } atexit(enet_deinitialize); #endif debug_set_exception_handler(); g_logger.registerThread("Main"); g_logger.addOutputMaxLevel(&stderr_output, LL_ACTION); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); if (!cmd_args_ok || cmd_args.getFlag("help") || cmd_args.exists("nonopt1")) { print_help(allowed_options); return cmd_args_ok ? 0 : 1; } if (cmd_args.getFlag("version")) { print_version(); return 0; } setup_log_params(cmd_args); porting::signal_handler_init(); #ifdef __ANDROID__ porting::initAndroid(); porting::initializePathsAndroid(); #else porting::initializePaths(); #endif if (!create_userdata_path()) { errorstream << "Cannot create user data directory "<< porting::path_user << std::endl; //return 1; } // Initialize debug stacks DSTACK(FUNCTION_NAME); // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER // List gameids if requested if (cmd_args.exists("gameid") && cmd_args.get("gameid") == "list") { list_game_ids(); return 0; } // List worlds if requested if (cmd_args.exists("world") && cmd_args.get("world") == "list") { list_worlds(); return 0; } if (!init_common(cmd_args, argc, argv)) return 1; // parse settings from cmdline. must be after loading settings. maybe better to move for (int i = 1; i < argc; i++) { std::string arg_name = argv[i]; if (arg_name.substr(0, 2) == "--" || arg_name[0] != '-') continue; std::string name = arg_name.substr(1); std::string value; auto vpos = name.find('='); if (vpos != std::string::npos && name.size() > vpos) { value = name.substr(vpos+1); name.resize(vpos); } else { value = "1"; } g_settings->set(name, value); continue; } #if !defined(__ANDROID__) && !defined(_MSC_VER) // Run unit tests if (cmd_args.getFlag("run-unittests")) { return run_tests(); } #endif GameParams game_params; #ifdef SERVER game_params.is_dedicated_server = true; #else game_params.is_dedicated_server = cmd_args.getFlag("server"); #endif if (!game_configure(&game_params, cmd_args)) return 1; sanity_check(!game_params.world_path.empty()); infostream << "Using commanded world path [" << game_params.world_path << "]" << std::endl; //Run dedicated server if asked to or no other option g_settings->set("server_dedicated", game_params.is_dedicated_server ? "true" : "false"); if (game_params.is_dedicated_server) return run_dedicated_server(game_params, cmd_args) ? 0 : 1; #ifndef SERVER ClientLauncher launcher; retval = launcher.run(game_params, cmd_args) ? 0 : 1; #else retval = 0; #endif // Update configuration file if (g_settings_path != "") g_settings->updateConfigFile(g_settings_path.c_str()); print_modified_quicktune_values(); // Stop httpfetch thread (if started) httpfetch_cleanup(); END_DEBUG_EXCEPTION_HANDLER return retval; }
int main(int argc, char *argv[]) { int retval; debug_set_exception_handler(); g_logger.registerThread("Main"); g_logger.addOutputMaxLevel(&stderr_output, LL_ACTION); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); if (!cmd_args_ok || cmd_args.getFlag("help") || cmd_args.exists("nonopt1")) { porting::attachOrCreateConsole(); print_help(allowed_options); return cmd_args_ok ? 0 : 1; } if (cmd_args.getFlag("console")) porting::attachOrCreateConsole(); if (cmd_args.getFlag("version")) { porting::attachOrCreateConsole(); print_version(); return 0; } setup_log_params(cmd_args); porting::signal_handler_init(); #ifdef __ANDROID__ porting::initAndroid(); porting::initializePathsAndroid(); #else porting::initializePaths(); #endif if (!create_userdata_path()) { errorstream << "Cannot create user data directory" << std::endl; return 1; } // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER // List gameids if requested if (cmd_args.exists("gameid") && cmd_args.get("gameid") == "list") { list_game_ids(); return 0; } // List worlds, world names, and world paths if requested if (cmd_args.exists("worldlist")) { if (cmd_args.get("worldlist") == "name") { list_worlds(true, false); } else if (cmd_args.get("worldlist") == "path") { list_worlds(false, true); } else { list_worlds(true, true); } return 0; } if (!init_common(cmd_args, argc, argv)) return 1; if (g_settings->getBool("enable_console")) porting::attachOrCreateConsole(); #ifndef __ANDROID__ // Run unit tests if (cmd_args.getFlag("run-unittests")) { return run_tests(); } #endif GameParams game_params; #ifdef SERVER porting::attachOrCreateConsole(); game_params.is_dedicated_server = true; #else const bool isServer = cmd_args.getFlag("server"); if (isServer) porting::attachOrCreateConsole(); game_params.is_dedicated_server = isServer; #endif if (!game_configure(&game_params, cmd_args)) return 1; sanity_check(!game_params.world_path.empty()); infostream << "Using commanded world path [" << game_params.world_path << "]" << std::endl; if (game_params.is_dedicated_server) return run_dedicated_server(game_params, cmd_args) ? 0 : 1; #ifndef SERVER ClientLauncher launcher; retval = launcher.run(game_params, cmd_args) ? 0 : 1; #else retval = 0; #endif // Update configuration file if (!g_settings_path.empty()) g_settings->updateConfigFile(g_settings_path.c_str()); print_modified_quicktune_values(); // Stop httpfetch thread (if started) httpfetch_cleanup(); END_DEBUG_EXCEPTION_HANDLER return retval; }