An extended set of Python bindings for libclang
Project description
Sealang is an improved set of Python bindings for libclang.
The upstream maintainers of libclang have not been especially responsive to patches that address issues like Python 3 compatibility, and the significant omissions in the API (such as extracting literals and operators).
This package is a fork of the official Python bindings for libclang, patched to correct these problems.
Installation
To compile Sealang, you’ll need to:
Install LLVM (with clang)
Set some environment variables
Install Sealang
The exact commands needed will vary between platforms.
OS X
Although OS X provides Clang, it doesn’t provide all the development headers, so you’ll need to . Homebrew is the easiest way to do this. Follow the installation instructions on the Homebrew homepage; once you’ve got Homebrew installed, you can run:
$ brew install llvm --with-clang --with-asan
to get a working install of llvm with clang.
Then, you’ll need to set the following environment variables:
$ export LLVM_HOME=/usr/local/opt/llvm $ export DYLD_LIBRARY_PATH=$LLVM_HOME/lib
Lastly, you can install Sealang:
$ pip install sealang
Ubuntu 14.04 (Trusty)
To compile under Ubuntu 14.04 (Trusty), you’ll need to get an updated version of LLVM:
$ sudo apt-get install libclang-3.6 clang-3.6 -y
Then, you’ll need to set the following environment variables:
$ export LLVM_HOME=/usr/lib/llvm-3.6 $ export LD_LIBRARY_PATH=$LLVM_HOME/lib
Lastly, you can install Sealang:
$ pip install sealang
Other platforms
The instructions for installing on other platforms should be analogous. If you develop build instructions for a platform, please submit a pull request.
Usage
Sealang provides a superset of the functionality provided by libclang. Those features are:
Cursor objects have 4 additional attributes:
literal - the value of a literal expression. Available on IntegerLiteral, FloatingLiteral, StringLiteral, CharacterLiteral, and CXXBooleanLiteral nodes.
operator - the printable version of an operator. Only available on BinaryOperator, UnaryOperator, and CompoundAssignOperator cursor nodes.
binary_operator - an enumeration value describing a BinaryOperator or CompoundAssignOperator node.
unary_operator - an enumeration value describing a UnaryOperator node.
BinaryOperator - An enumeration for the types of binary operators:
BinaryOperator.INVALID
BinaryOperator.PTRMEMD
BinaryOperator.PTRMEMI
BinaryOperator.MUL
BinaryOperator.DIV
BinaryOperator.REM
BinaryOperator.ADD
BinaryOperator.SUB
BinaryOperator.SHL
BinaryOperator.SHR
BinaryOperator.LT
BinaryOperator.GT
BinaryOperator.LE
BinaryOperator.GE
BinaryOperator.EQ
BinaryOperator.NE
BinaryOperator.AND
BinaryOperator.XOR
BinaryOperator.OR
BinaryOperator.LAND
BinaryOperator.LOR
BinaryOperator.ASSIGN
BinaryOperator.MULASSIGN
BinaryOperator.DIVASSIGN
BinaryOperator.REMASSIGN
BinaryOperator.ADDASSIGN
BinaryOperator.SUBASSIGN
BinaryOperator.SHLASSIGN
BinaryOperator.SHRASSIGN
BinaryOperator.ANDASSIGN
BinaryOperator.XORASSIGN
BinaryOperator.ORASSIGN
BinaryOperator.COMMA
BinaryOperator.UNKNOWN
UnaryOperator - An enumeration for the types of binary operators:
UnaryOperator.INVALID
UnaryOperator.POSTINC
UnaryOperator.POSTDEC
UnaryOperator.PREINC
UnaryOperator.PREDEC
UnaryOperator.ADDROF
UnaryOperator.DEREF
UnaryOperator.PLUS
UnaryOperator.MINUS
UnaryOperator.NOT
UnaryOperator.LNOT
UnaryOperator.REAL
UnaryOperator.IMAG
UnaryOperator.EXTENSION
UnaryOperator.UNKNOWN
How it works
Sealang is a bit of a nasty hack. libclang is a set of C bindings to a C++ API; Python ctypes are then used to wrap the C API. However, while the C++ API is quite rich, libclang is less so.
Sealang bridges this gap by providing C wrappers around the C++ calls that provide the useful functionality. This library of C functions is wrapped up as a Python C module for delivery purposes - this C module contains no exposed Python objects or methods, but because it’s a module, the underlying compiled sealang.so file is easy to find. ctypes are then used to expose the sealang wrapper functions;
Internally, Sealang reproduces some minor pieces of the libclang API; these are methods (such as the string creation and manipulation methods) that aren’t exposed as symbols for third-party use.
All this functionality is potentially a candidate to be passed upstream to libclang.
Relationship to Clang
This project aims to mirror what is currently available in the Python bindings to libclang. The version number for this project is drawn from the version and SVN revision of the official clang repository.
Any changes made upstream to libclang will be mirrored here; any changes made here will, where possible, be pushed upstream to libclang.
Community
Sealang is part of the BeeWare suite. You can talk to the community through:
The BeeWare Users Mailing list, for questions about how to use the BeeWare suite.
The BeeWare Developers Mailing list, for discussing the development of new features in the BeeWare suite, and ideas for new tools for the suite.
Contributing
If you experience problems with Sealang, log them on GitHub. If you want to contribute code, please fork the code and submit a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file sealang-3.9.dev259721.tar.gz
.
File metadata
- Download URL: sealang-3.9.dev259721.tar.gz
- Upload date:
- Size: 49.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f87d7722336994f37235f49c48b5b2215fc228e997e804ca74fbaf0b42c153c |
|
MD5 | e2663b8e01fe5c1a8fabed122f8f82de |
|
BLAKE2b-256 | 8e12307ae395d142858dd6f13e7a4c43d98717776560e1ac37f1f74a54a94788 |
File details
Details for the file sealang-3.9.dev259721-cp34-cp34m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: sealang-3.9.dev259721-cp34-cp34m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.4m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5164c33f4846130788d4d68e9b3ceac3fb72f226a54e853d53e42d3c89b6b28 |
|
MD5 | 88335f7caa6b4121dd3edc5737ceaac4 |
|
BLAKE2b-256 | 48f0b5fe30d394c49bb8b8c5929e98e89176d1274fbfc4ba2ef04bce486032c3 |
File details
Details for the file sealang-3.9.dev259721-cp27-none-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: sealang-3.9.dev259721-cp27-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 2.7, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76cee81699238f770bb4a199212108abf72d4cb4dafdb47c354bb239623224e5 |
|
MD5 | 9a1078ddfa3b58d92039bb4635c947cf |
|
BLAKE2b-256 | 7545b43d1938d235bc47b75f6faa531b1a0b7917fa2f5b21d3e8c5d1f35bc0b6 |