[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