[PATCH] Adds a CMake package configuration file for libclang

Damien Buhl damien.buhl at lecbna.org
Thu Feb 21 16:27:38 PST 2013


Dear Chandler Carruth,

I'm sending you a patch today, which adds a CMake package configuration 
file for libclang. So that others CMake based project can easily find 
libclang and link to it, as we are used to with CMake :

> find_package(libclang 3.2 REQUIRED)
> link_directories(${LIBCLANG_LIBRARY_DIRS})
> include_directories(${LIBCLANG_INCLUDE_DIRS})
> add_definitions(${LIBCLANG_DEFINITIONS})

I'm sending you this patch, because I first proposed a FindLibClang to 
the CMake project, but as Brad King from Kitware told me that it would 
be better for libclang to provide a package configuration file; I 
decided to drop my FindLibClang (See the pull request : 
https://github.com/Kitware/CMake/pull/34).

The patch simply adds a configuration and install step for 
libclang-config.cmake and libclang-config-version.cmake.

The libclang-config.cmake provides the LIBCLANG_INCLUDE_DIRS, 
LIBCLANG_LIBRARY_DIRS, LIBCLANG_DEFINITIONS variables.

I decided to hardcode LIBCLANG_DEFINITIONS to "-D__STDC_LIMIT_MACROS" 
"-D__STDC_CONSTANT_MACROS", instead of using something like list(APPEND 
@LLVM_DEFINITIONS@ ...), because I think it's the more correct decision 
since clang is a separate project based on llvm, but isn't fully part of 
it (i.e. Neither the same git repository nor a git submodule of llvm).

That's why I made the supposition that it's not set in stone that both 
llvm and clang will always share the same #defines in the future. 
Perhaps I misinterpreted something here, so don't hesitate to ask me to 
change this to the non hardcoded variant.

The other file libclang-config-version.cmake simply checks that the 
requested version is totally exact (major and minor) to the one of the 
installed library. It's currently checking for exact equality, because I 
didn't find anything in the documentation telling that the API stays 
backward compatible accross minor versions. Is it the case ?

On our side we are already using this patch to integrate libclang in our 
build. We use libclang as a c++ parser for a tool generating interfaces 
and bindings between different programming languages. Until now we were 
using gcc plugins to extract the information from c++ code, but it was 
such a hell of macros and of #pragma poison, that we wanted to change to 
something cleaner, and libclang has a so nice API, that we moved.

Thank you alot for the nice work done on llvm and clang, these projects 
are drastically changing the day-to-day work of many developers I know. :)

Cheers,
--
Damien Buhl
alias daminetreg
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Adds-a-CMake-package-configuration-file-for-libclang.patch
Type: text/x-patch
Size: 4127 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130222/40c366db/attachment.bin>


More information about the cfe-commits mailing list