26 std::ofstream out(tmp_file_in());
28 out <<
"#if defined(__clang_major__)\n" 29 "clang __clang_major__ __clang_minor__ __clang_patchlevel__\n" 30 "#elif defined(__BCC__)\n" 33 "gcc __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__\n" 35 "default_c_standard __STDC_VERSION__\n";
42 {executable,
"-E",
"-",
"-o",
"-"},
52 std::ifstream in(tmp_file_out());
55 while(!in.fail() && std::getline(in, line))
57 if(line.empty() || line[0] ==
'#')
66 else if(split[0] ==
"bcc")
68 else if(split[0] ==
"clang")
75 else if(split.size() == 2 && split[0] ==
"default_c_standard")
77 if(split[1] ==
"199901L")
79 else if(split[1] ==
"201112L")
94 std::ofstream out(cpp_in());
95 out <<
"default_cxx_standard __cplusplus\n";
100 {executable,
"-E",
"-x",
"c++",
"-",
"-o",
"-"},
107 std::ifstream in(cpp_out());
110 while(!in.fail() && std::getline(in, line))
112 if(line.empty() || line[0] ==
'#')
117 if(split.size() == 2 && split[0] ==
"default_cxx_standard")
119 if(split[1] ==
"199711L")
121 else if(split[1] ==
"201103L")
123 else if(split[1] ==
"201402L")
135 unsigned _patchlevel)
const
enum gcc_versiont::flavort flavor
unsigned unsafe_string2unsigned(const std::string &str, int base)
int run(const std::string &what, const std::vector< std::string > &argv, const std::string &std_input, const std::string &std_output, const std::string &std_error)
void get(const std::string &executable)
bool is_at_least(unsigned v_major, unsigned v_minor=0, unsigned v_patchlevel=0) const
configt::ansi_ct::c_standardt default_c_standard
std::ostream & operator<<(std::ostream &out, const gcc_versiont &v)
void split_string(const std::string &s, char delim, std::vector< std::string > &result, bool strip, bool remove_empty)
Given a string s, split into a sequence of substrings when separated by specified delimiter...
configt::cppt::cpp_standardt default_cxx_standard