@@ -96,7 +96,7 @@ void ImportProject::FileSettings::setDefines(std::string defs)
9696 defines.swap (defs);
9797}
9898
99- static bool simplifyPathWithVariables (std::string &s, const std::map<std::string, std::string> &variables)
99+ static bool simplifyPathWithVariables (std::string &s, std::map<std::string, std::string> &variables)
100100{
101101 std::set<std::string> expanded;
102102 std::string::size_type start = 0 ;
@@ -109,17 +109,25 @@ static bool simplifyPathWithVariables(std::string &s, const std::map<std::string
109109 break ;
110110 expanded.insert (var);
111111 std::map<std::string, std::string>::const_iterator it1 = variables.find (var);
112- if (it1 == variables.end ())
113- break ;
114- s = s.substr (0 ,start) + it1->second + s.substr (end+1 );
112+ // variable was not found within defined variables
113+ if (it1 == variables.end ()) {
114+ const char *envValue = std::getenv (var.c_str ());
115+ if (!envValue) {
116+ // ! @TODO generate a debug/info message about undefined variable
117+ break ;
118+ }
119+ variables[var] = std::string (envValue);
120+ it1 = variables.find (var);
121+ }
122+ s = s.substr (0 , start) + it1->second + s.substr (end + 1 );
115123 }
116124 if (s.find (" $(" ) != std::string::npos)
117125 return false ;
118126 s = Path::simplifyPath (Path::fromNativeSeparators (s));
119127 return true ;
120128}
121129
122- void ImportProject::FileSettings::setIncludePaths (const std::string &basepath, const std::list<std::string> &in, const std::map<std::string, std::string> &variables)
130+ void ImportProject::FileSettings::setIncludePaths (const std::string &basepath, const std::list<std::string> &in, std::map<std::string, std::string> &variables)
123131{
124132 std::list<std::string> I;
125133 // only parse each includePath once - so remove duplicates
@@ -387,7 +395,7 @@ static void importPropertyGroup(const tinyxml2::XMLElement *node, std::map<std::
387395static void loadVisualStudioProperties (const std::string &props, std::map<std::string,std::string> *variables, std::string *includePath, const std::string &additionalIncludeDirectories, std::list<ItemDefinitionGroup> &itemDefinitionGroupList)
388396{
389397 std::string filename (props);
390- if (!simplifyPathWithVariables (filename,*variables))
398+ if (!simplifyPathWithVariables (filename, *variables))
391399 return ;
392400 tinyxml2::XMLDocument doc;
393401 if (doc.LoadFile (filename.c_str ()) != tinyxml2::XML_SUCCESS )
@@ -414,7 +422,7 @@ static void loadVisualStudioProperties(const std::string &props, std::map<std::s
414422 }
415423}
416424
417- void ImportProject::importVcxproj (const std::string &filename, std::map<std::string, std::string> variables, const std::string &additionalIncludeDirectories)
425+ void ImportProject::importVcxproj (const std::string &filename, std::map<std::string, std::string> & variables, const std::string &additionalIncludeDirectories)
418426{
419427 variables[" ProjectDir" ] = Path::simplifyPath (Path::getPathFromFilename (filename));
420428
0 commit comments