#include "../lib/alpm/manager.h" #include "../lib/alpm/utilities.h" #include "../lib/alpm/config.h" #include "../lib/alpm/resolvebuildorder.h" #include "../lib/alpm/mingwbundle.h" #include "../lib/network/server.h" #include #include #include #include #include #include using namespace std; using namespace ApplicationUtilities; using namespace RepoIndex; int main(int argc, char *argv[]) { // check whether shell syntax is enabled for(char **arg = argv, **end = argv + argc; arg != end; ++arg) { if(strcmp(*arg, "--sh-syntax") == 0) { useShSyntax = true; shchar = "# "; break; } } // setup the argument parser ArgumentParser parser; ConfigArgs configArgs(parser); parser.setIgnoreUnknownArguments(false); // parse command line arguments try { parser.parseArgs(argc, argv); } catch (const Failure &e) { cerr << shchar << "Unable to parse arguments: " << e.what() << endl; return 2; } try { // load configuration Config config; config.loadFromConfigFile(configArgs); config.loadFromArgs(configArgs); if(find_if(parser.mainArguments().cbegin(), parser.mainArguments().cend(), [&configArgs] (const Argument *arg) { return arg != &configArgs.helpArg && arg->isPresent(); }) != parser.mainArguments().cend()) { // create app QCoreApplication application(argc, argv); // setup manager Manager manager(config); cerr << shchar << "Loading databases ..." << endl; if(config.areReposFromPacmanConfEnabled()) { manager.addDataBasesFromPacmanConfig(); } manager.addDatabasesFromRepoIndexConfig(); manager.initAlpmDataBases(); cerr << shchar << "Restoring cache ... "; manager.restoreCache(); cerr << shchar << "DONE" << endl; if(configArgs.serverArg.isPresent()) { // setup the server Server server(manager, manager.config()); manager.setAutoCacheMaintenanceEnabled(true); manager.setAutoUpdateEnabled(true); QObject::connect(&server, &Server::closed, &application, &QCoreApplication::quit); return application.exec(); } else if(configArgs.buildOrderArg.isPresent()) { BuildOrderResolverCli resolver(manager, configArgs.packagesArg.values(), configArgs.addSourceOnlyDepsArg.isPresent(), configArgs.requireSourcesArg.isPresent()); return resolver.exec(); } else if(configArgs.mingwBundleArg.isPresent()) { MingwBundle bundle(manager, configArgs.packagesArg.values(), configArgs.iconThemesArg.values(), configArgs.extraPackagesArg.values(), configArgs.qtPluginsArg.values()); bundle.createBundle(configArgs.targetDirArg.isPresent() ? configArgs.targetDirArg.values().front() : string("."), configArgs.targetNameArg.values().front(), configArgs.targetFormatArg.isPresent() ? configArgs.targetFormatArg.values().front() : string("zip"), configArgs.defaultIconThemeArg.isPresent() ? configArgs.defaultIconThemeArg.values().front() : string()); } else if(configArgs.upgradeLookupArg.isPresent()) { UpgradeLookupCli upgradeLookup(manager, configArgs.upgradeLookupArg.values().front()); return application.exec(); } } else if(!configArgs.helpArg.isPresent()) { if(useShSyntax) { cerr << "export REPOINDEX_ERROR='No command line arguments specified. See --help for available commands.'" << endl; } else { cerr << "No command line arguments specified. See --help for available commands." << endl; } } } catch (const exception &ex) { Utilities::printError(ex); return 1; } }