+ const string &mode = config.get_option("staticlibs").value;
+ if(mode=="force")
+ return FORCE_STATIC;
+ else if(mode=="prefer")
+ return STATIC;
+ else if(mode=="avoid")
+ return DYNAMIC;
+ else if(mode=="reject")
+ return FORCE_DYNAMIC;
+ else
+ throw runtime_error("unknown library mode");
+}
+
+string SourcePackage::expand_string(const string &str) const
+{
+ string result = str;
+ string::size_type dollar = 0;
+ unsigned n = 0;
+ while((dollar = result.find('$'))!=string::npos)
+ {
+ if(n>1000)
+ throw bad_expansion("nested too deep");
+
+ string::size_type end;
+ string var;
+ if(dollar+1<result.size() && result[dollar+1]=='{')
+ {
+ end = result.find('}', dollar+2);
+ if(end==string::npos)
+ throw bad_expansion("unterminated variable reference");
+ var = result.substr(dollar+2, end-dollar-2);
+ ++end;
+ }
+ else