clang

Version, currently 0.3.03 versions

github.com/crystal-lang/clang.cr

Bindings for libclang

52 stars
2 dependents
License: Apache-2.0

Installation

# Add this to your shard.yml
dependencies:
  clang:
    github: crystal-lang/clang.cr
    version: ~> 0.3.0

Then run:

shards install

shard.yml

Crystal
no constraint declared
License
Apache-2.0
Author
Julien Portalier <julien@portalier.com>
Target
  • c2cr from samples/c2cr.cr

Dependencies

This version declares no dependencies.

README

# libclang bindings for Crystal

Usage:

```crystal
require "clang"

index = Clang::Index.new

files = [
  #Clang::UnsavedFile.new("input.c", "#include <pcre.h>\n"),
  Clang::UnsavedFile.new("input.c", "#include <clang/Basic/ABI.h>\n"),
]
tu = Clang::TranslationUnit.from_source(index, files, [
  "-I/usr/include",
  "-I/usr/lib/llvm-5.0/include",
])

tu.cursor.visit_children do |cursor|
  p cursor

  Clang::ChildVisitResult::Continue
end
```

## Samples

See the `samples` folder for some example usages:

- `samples/debug.cr` will print the AST of C or C++ headers as they are parsed;
- `samples/c2cr.cr` will automatically generate Crystal bindings for a C header.

For example:

```sh
$ shards build --release

$ bin/c2cr -I/usr/lib/llvm-5.0/include llvm-c/Core.h \
    --remove-enum-prefix=LLVM --remove-enum-suffix > llvm-c/Core.cr

$ bin/c2cr -I/usr/lib/llvm-5.0/include clang-c/Index.h \
    --remove-enum-prefix > clang-c/Index.cr

$ bin/c2cr gtk-2.0/gtk/gtkenums.h --remove-enum-prefix > gtk/enums.cr
```

## Reference

- [C interface to Clang](http://clang.llvm.org/doxygen/group__CINDEX.html)

## License

Distributed under the Apache 2.0 license.