diff --git a/hcore/include/opts.h b/hcore/include/opts.h index cd15899..8b85761 100644 --- a/hcore/include/opts.h +++ b/hcore/include/opts.h @@ -18,6 +18,7 @@ public: public: std::string senseApiLibPath; + std::vector senseApiLibs; std::string deviceSpecs; std::vector deviceSpecFiles; bool verbose, printUsage; diff --git a/hcore/opts.cpp b/hcore/opts.cpp index 639bcb6..dd0328e 100644 --- a/hcore/opts.cpp +++ b/hcore/opts.cpp @@ -4,6 +4,7 @@ #include #include #include +#include struct option OptionParser::longOptions[] = { {"devicespec", required_argument, 0, 's'}, @@ -11,6 +12,9 @@ struct option OptionParser::longOptions[] = { {"devspec", required_argument, 0, 's'}, {"devfile", required_argument, 0, 'd'}, {"devicefile", required_argument, 0, 'd'}, + {"sense-api-lib", required_argument, 0, 'a'}, + {"senseapi", required_argument, 0, 'a'}, + {"sense-api-path", required_argument, 0, 'p'}, {"verbose", no_argument, 0, 'v'}, {"help", no_argument, 0, '?'}, {0, 0, 0, 0} @@ -22,7 +26,7 @@ void OptionParser::parseArguments(int argc, char *argv[]) int optionIndex = 0; optind = 1; // Reset optind to 1 before parsing while ((opt = getopt_long( - argc, argv, "s:d:v?", longOptions, &optionIndex)) != -1) + argc, argv, "s:d:a:p:v?", longOptions, &optionIndex)) != -1) { switch (opt) { @@ -35,6 +39,30 @@ void OptionParser::parseArguments(int argc, char *argv[]) case 'd': deviceSpecFiles.push_back(optarg); break; + case 'a': + senseApiLibs.push_back(optarg); + break; + case 'p': + { + struct stat info; + + if (!senseApiLibPath.empty()) + { + std::cerr << std::string(__func__) + + " - Overwriting previous sense-api-path with: " << optarg + << '\n'; + } + + if (stat(optarg, &info) != 0 || !(info.st_mode & S_IFDIR)) + { + throw std::invalid_argument( + std::string(__func__) + " - The specified path is not a " + "directory: " + optarg); + } + + senseApiLibPath = optarg; + break; + } case 'v': verbose = true; break; @@ -42,7 +70,9 @@ void OptionParser::parseArguments(int argc, char *argv[]) printUsage = true; return; default: - throw std::invalid_argument("Invalid argument encountered: " + std::string(argv[optind - 1])); + throw std::invalid_argument( + std::string(__func__) + " - Invalid argument encountered: " + + std::string(argv[optind - 1])); } } } @@ -51,6 +81,8 @@ std::string OptionParser::getUsage() const { return "Usage: program [-s|--devicespec|--spec|--devspec ] " "[-d|--devfile|--devicefile ] " + "[-a|--sense-api-lib|--senseapi ] " + "[-p|--sense-api-path ] " "[-v|--verbose] " "[-?|--help]"; } @@ -68,4 +100,11 @@ void OptionParser::dumpOptions() const std::cout << file << " "; } std::cout << std::endl; + + std::cout << "Sense API Library Path: " << senseApiLibPath << std::endl; + std::cout << "Sense API Libraries: "; + for (const auto& lib : senseApiLibs) { + std::cout << lib << " "; + } + std::cout << std::endl; }