Add parser macro for the parsed code

This allows detection of the cppast "compiler" from the code that is
being compiled.
This commit is contained in:
Jonathan Müller 2017-06-09 19:53:27 +02:00
commit 6d261cef16
3 changed files with 14 additions and 0 deletions

View file

@ -29,6 +29,11 @@ namespace cppast
class libclang_compile_config final : public compile_config
{
public:
/// Creates the default configuration.
///
/// \effects It will set the clang binary determined by the build system,
/// as well as the libclang system include directory determined by the build system.
/// It will also define `__cppast__` with the value `"libclang"` as well as `__cppast_major__` and `__cppast_minor__`.
libclang_compile_config();
/// \effects Sets the path to the location of the `clang++` binary and the version of that binary.

View file

@ -101,6 +101,8 @@ add_library(cppast ${detail_header} ${header} ${source} ${libclang_source})
target_include_directories(cppast PUBLIC ../include)
target_link_libraries(cppast PUBLIC type_safe _cppast_tiny_process _cppast_libclang)
target_compile_definitions(cppast PUBLIC
CPPAST_VERSION_MINOR="${cppast_VERSION_MINOR}"
CPPAST_VERSION_MAJOR="${cppast_VERSION_MAJOR}"
CPPAST_VERSION_STRING="${cppast_VERSION}")
if(CPPAST_ENABLE_ASSERTIONS)
target_compile_definitions(cppast PUBLIC CPPAST_ENABLE_ASSERTIONS)

View file

@ -49,13 +49,20 @@ namespace
libclang_compile_config::libclang_compile_config() : compile_config({})
{
// set given clang binary
auto ptr = CPPAST_CLANG_VERSION_STRING;
auto major = parse_number(ptr);
auto minor = parse_number(ptr);
auto patch = parse_number(ptr);
set_clang_binary(CPPAST_CLANG_BINARY, major, minor, patch);
// set system include dir
add_include_dir(CPPAST_LIBCLANG_SYSTEM_INCLUDE_DIR);
// set macros to detect cppast
define_macro("__cppast__", "libclang");
define_macro("__cppast_version_major__", CPPAST_VERSION_MAJOR);
define_macro("__cppast_version_minor__", CPPAST_VERSION_MINOR);
}
void libclang_compile_config::do_set_flags(cpp_standard standard, compile_flags flags)