Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

https://travis-ci.org/pybee/sealang.svg?branch=master

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:

  1. Install LLVM (with clang)

  2. Set some environment variables

  3. 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:

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.

Metadata

Release files for sealang 3.9.dev259721

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sealang 3.9.dev259721
File Size Uploaded
sealang-3.9.dev259721.tar.gz 49.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for sealang 3.9.dev259721
File Interpreter ABI Platform
sealang-3.9.dev259721-cp34-cp34m-macosx_10_9_x86_64.whl CPython 3.4 CPython 3.4 pymalloc macOS 10.9+ x86-64 Details
sealang-3.9.dev259721-cp27-none-macosx_10_9_x86_64.whl CPython 2.7 none macOS 10.9+ x86-64 Details

Total release size: 2.6 MB

Release files / sealang-3.9.dev259721.tar.gz

Download URL sealang-3.9.dev259721.tar.gz
Size 49.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0f87d7722336994f37235f49c48b5b2215fc228e997e804ca74fbaf0b42c153c
BLAKE2b-256 checksum
How to use checksums
8e12307ae395d142858dd6f13e7a4c43d98717776560e1ac37f1f74a54a94788
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / sealang-3.9.dev259721-cp34-cp34m-macosx_10_9_x86_64.whl

Download URL sealang-3.9.dev259721-cp34-cp34m-macosx_10_9_x86_64.whl
Size 1.3 MB
Tags CPython 3.4 CPython 3.4 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
a5164c33f4846130788d4d68e9b3ceac3fb72f226a54e853d53e42d3c89b6b28
BLAKE2b-256 checksum
How to use checksums
48f0b5fe30d394c49bb8b8c5929e98e89176d1274fbfc4ba2ef04bce486032c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / sealang-3.9.dev259721-cp27-none-macosx_10_9_x86_64.whl

Download URL sealang-3.9.dev259721-cp27-none-macosx_10_9_x86_64.whl
Size 1.3 MB
Tags CPython 2.7 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
76cee81699238f770bb4a199212108abf72d4cb4dafdb47c354bb239623224e5
BLAKE2b-256 checksum
How to use checksums
7545b43d1938d235bc47b75f6faa531b1a0b7917fa2f5b21d3e8c5d1f35bc0b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page