diff options
| -rw-r--r-- | host/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/lib/load_modules.cpp | 34 | 
2 files changed, 30 insertions, 5 deletions
| diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt index bf8d71b21..c309af7e5 100644 --- a/host/CMakeLists.txt +++ b/host/CMakeLists.txt @@ -68,7 +68,6 @@ IF(WIN32)      ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) #minimum version required is windows xp      ADD_DEFINITIONS(-DNOMINMAX) #disables stupidity and enables std::min and std::max      ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS) #avoid warnings from boost::split -    ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) #avoid warnings from std::getenv      ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc  ENDIF(WIN32) diff --git a/host/lib/load_modules.cpp b/host/lib/load_modules.cpp index ef633325d..d6bfe1369 100644 --- a/host/lib/load_modules.cpp +++ b/host/lib/load_modules.cpp @@ -20,10 +20,11 @@  #include <boost/foreach.hpp>  #include <boost/algorithm/string.hpp>  #include <boost/filesystem.hpp> +#include <boost/program_options.hpp>  #include <iostream>  #include <stdexcept> -#include <cstdlib> +namespace po = boost::program_options;  namespace fs = boost::filesystem;  /*********************************************************************** @@ -100,14 +101,39 @@ static void load_path(const fs::path &path){      }  } +//! The string constant for the module path environment variable +static const std::string MODULE_PATH_KEY = "UHD_MODULE_PATH"; + +/*! + * Name mapper function for the environment variable parser. + * Map environment variable names (that we use) to option names. + * \param the variable name + * \return the option name or blank string + */ +static std::string name_mapper(const std::string &var_name){ +    if (var_name == MODULE_PATH_KEY) return var_name; +    return ""; +} +  /*!   * Load all the modules given by the module path enviroment variable.   * The path variable may be several paths split by path separators.   */  UHD_STATIC_BLOCK(load_modules){ -    //get the environment variable module path -    char *env_module_path = std::getenv("UHD_MODULE_PATH"); -    if (env_module_path == NULL) return; +    //register the options +    std::string env_module_path; +    po::options_description desc("UHD Module Options"); +    desc.add_options() +        (MODULE_PATH_KEY.c_str(), po::value<std::string>(&env_module_path)->default_value("")) +    ; + +    //parse environment variables +    po::variables_map vm; +    po::store(po::parse_environment(desc, &name_mapper), vm); +    po::notify(vm); + +    if (env_module_path == "") return; +    //std::cout << "env_module_path: " << env_module_path << std::endl;      //split the path at the path separators      std::vector<std::string> module_paths; | 
