package ctypes

  1. Overview
  2. Docs
Combinators for binding to C libraries without writing any C

Install

Dune Dependency

Authors

Maintainers

Sources

0.23.0.tar.gz
sha256=cae47d815b27dd4c824a007f1145856044542fe2588d23a443ef4eefec360bf1
md5=b1af973ec9cf7867a63714e92df82f2a

CHANGES.md.html

ctypes 0.23.0

  • Support for 'const' and 'volatile'
    https://github.com/yallop/ocaml-ctypes/pull/780

  • Make string a view of ptr (const char), not ptr char
    https://github.com/yallop/ocaml-ctypes/pull/782

  • Add CArray.iteri
    https://github.com/yallop/ocaml-ctypes/pull/775

Thanks to Antoine Provot (@Ant1-Provot) and @prgbln for contributions to this release.

ctypes 0.22.0

  • Support for OCaml 5.2.0
    https://github.com/yallop/ocaml-ctypes/pull/764

Thanks to Nick Roberts (@ncik-roberts) and Danny Willems (@dannywillems) for contributions to this release.

ctypes 0.21.1

  • Add missing version information to dune-project

ctypes 0.21.0

  • Switch to dune
    https://github.com/yallop/ocaml-ctypes/pull/588

Thanks to Anil Madhavapeddy (@avsm) and Etienne Millon (@emillon) for contributing to this release.

ctypes 0.20.2

  • Restore compilation of cmxs for 5.0
    https://github.com/yallop/ocaml-ctypes/pull/727

  • Update build rules to make .o files a dependency of cmxs
    https://github.com/yallop/ocaml-ctypes/pull/723

  • update CArray.of_string comment to accurately reflect the length
    https://github.com/yallop/ocaml-ctypes/pull/716

Thanks to @houseofsuns, @ygrek, Alpha Diallo (@moyodiallo), François Bobot (@bobot) and Alfredo Tupone (@atupone) for contributions to this release.

ctypes 0.20.1

  • Fix warning 9 [missing-record-field-pattern] in generated OCaml code
    https://github.com/yallop/ocaml-ctypes/pull/700

Thanks to Antonin Décimo (@MisterDA) for contributing to this release.

ctypes 0.20.0

  • Remove naked pointers from the Dl library
    https://github.com/yallop/ocaml-ctypes/pull/681

  • Avoid running a full GC cycle on every FFI closure allocation
    https://github.com/yallop/ocaml-ctypes/pull/694

  • Check output of brew ls --versions when detecting homebrew
    https://github.com/yallop/ocaml-ctypes/pull/697

Thanks to Martin Kletzander (@nertpinx) and Arseniy Alekseyev (@aalekseyev) for contributions to this release.

ctypes 0.19.1

  • Fix use of CAMLdrop in generated code
    https://github.com/yallop/ocaml-ctypes/pull/680

ctypes 0.19.0

  • Drop compatibility with 4.02, and improve compatibility with Multicore OCaml
    https://github.com/yallop/ocaml-ctypes/pull/673

Thanks to Kate Deplaix (@kit-ty-kate) for contributing to this release.

ctypes 0.18.0

  • Remove the Unix dependency by using bigarray-compat
    https://github.com/yallop/ocaml-ctypes/pull/660

  • Remove the threaded/unthreaded split in ctypes-foreign
    https://github.com/yallop/ocaml-ctypes/pull/651

  • Eliminate some const warnings in generated code
    https://github.com/yallop/ocaml-ctypes/pull/646
    https://github.com/yallop/ocaml-ctypes/pull/638

  • Speed-up CArray.make with initial value
    https://github.com/yallop/ocaml-ctypes/pull/644

  • Fix complex allocation size
    https://github.com/yallop/ocaml-ctypes/pull/642

  • Report names of missing symbols also under windows
    https://github.com/yallop/ocaml-ctypes/pull/641

  • Remove a level of boxing from struct and union values
    https://github.com/yallop/ocaml-ctypes/pull/640

  • Fix a markup issue in the funptr docstring
    https://github.com/yallop/ocaml-ctypes/pull/633

  • Move conf-pkg-config dependency to ctypes-foreign
    https://github.com/yallop/ocaml-ctypes/pull/631

Thanks to Andreas Hauptmann (@fdopen), Anil Madhavapeddy (@avsm), Anton Bachin (@aantron), Calascibetta Romain (@dinosaure), Sora Morimoto (@smorimoto) and and Stéphane Glondu (@glondu) for contributions to this release.

ctypes 0.17.1

  • Hide the managed component in pointer values
    https://github.com/yallop/ocaml-ctypes/pull/629
    (This is an internal-only change that addresses a problem introduced in 0.17.0)

ctypes 0.17.0

  • ocaml_bytes now corresponds to 'unsigned char *', not 'char *'
    https://github.com/yallop/ocaml-ctypes/pull/625

  • Distinguish bytes and string in generated stub code
    https://github.com/yallop/ocaml-ctypes/pull/622

  • Reflect "managed" status in the types of fat pointers
    https://github.com/yallop/ocaml-ctypes/pull/619
    (This is an internal-only change.)

ctypes 0.16.0

  • Add Foreign.dynamic_funptr, a variant of Foreign.funptr with explicit life cycle management.
    https://github.com/yallop/ocaml-ctypes/pull/595

  • fix ctypes-foreign depexts to work with opam 2
    https://github.com/yallop/ocaml-ctypes/pull/617

  • Build with -strict-sequence
    https://github.com/yallop/ocaml-ctypes/pull/613

Thanks to Andreas Hauptmann (@fdopen), Andrew Ray (@andrewray), Anil Madhavapeddy (@avsm), Armaël Guéneau (@Armael) and Matthias Horn (@tiash) for contributions to this release.

ctypes 0.15.1

  • Fix <complex.h>-related compilation issues on FreeBSD
    https://github.com/yallop/ocaml-ctypes/pull/608

ctypes 0.15.0

  • Avoid unaligned stores/loads
    https://github.com/yallop/ocaml-ctypes/pull/584

  • Fix LDouble.to_int bug resulting from upstream Val_long change
    https://github.com/yallop/ocaml-ctypes/pull/583

  • use CMPLX[FL]? macros instead of I
    https://github.com/yallop/ocaml-ctypes/pull/585

  • Various Windows fixes
    https://github.com/yallop/ocaml-ctypes/pull/586

  • Drop OCaml 4.01 support
    https://github.com/yallop/ocaml-ctypes/pull/577

  • Eliminate uses of <complex.h> on Android
    https://github.com/yallop/ocaml-ctypes/pull/579

Thanks to Anton Bachin (@aantron), Andreas Hauptmann (@fdopen) and @ygrek for contributions to this release.

ctypes 0.14.0

  • Add CArray.of_string
    https://github.com/yallop/ocaml-ctypes/pull/562
    https://github.com/yallop/ocaml-ctypes/pull/563

  • Attach ocaml_integers.h to the cstubs subpackage
    https://github.com/yallop/ocaml-ctypes/pull/557

  • fix custom operations of ComplexL
    https://github.com/yallop/ocaml-ctypes/pull/549

Thanks to Andreas Hauptmann (@fdopen), Rudi Grinberg (@rgrinberg) and Marcello Seri (@mseri) for contributions to this release.

ctypes 0.13.1

  • Add -no-keep-locs to the foreign-(un)?threaded build rules.
    https://github.com/yallop/ocaml-ctypes/pull/553

ctypes 0.13.0

  • Print typedefed enums correctly
    https://github.com/yallop/ocaml-ctypes/pull/547

  • Move the TYPE and FOREIGN signatures from cstubs to ctypes
    https://github.com/yallop/ocaml-ctypes/pull/544
    https://github.com/yallop/ocaml-ctypes/pull/537

Thanks to Leo White (@lpw25) for contributing to this release.

ctypes 0.12.1

  • Preserve intermediate values from views across foreign calls.
    https://github.com/yallop/ocaml-ctypes/pull/531

ctypes 0.12.0

  • Support for Fortran-layout bigarrays
    https://github.com/yallop/ocaml-ctypes/pull/523

  • Use the integers package for signed and unsigned integer support
    https://github.com/yallop/ocaml-ctypes/pull/515

  • Add support for binding enums defined without tags
    https://github.com/yallop/ocaml-ctypes/pull/510

Thanks to Bertrand Bonnefoy-Claudet (@bbc2) and Leo White (@lpw25) for contributions to this release.

ctypes 0.11.4

  • Fix function pointer support on no-exec platforms
    https://github.com/yallop/ocaml-ctypes/pull/511

Thanks to Matthias Horn (@tiash) for contributing to this release.

ctypes 0.11.3

  • Stub out some long double functions that are not supported on NetBSD and OpenBSD
    https://github.com/yallop/ocaml-ctypes/pull/503

  • Fix the build when shared libraries are not available
    https://github.com/yallop/ocaml-ctypes/pull/495

Thanks to Andreas Hauptmann (@fdopen) and Peter Zotov (@whitequark) for contributions to this release.

ctypes 0.11.2

Bug fixes

  • Fix truncation in UInt64.of_int; remove other uses of Val_int/Int_val
    https://github.com/yallop/ocaml-ctypes/pull/492

ctypes 0.11.1

Bug fixes

  • Stub out some long double complex functions that are not supported on Android
    https://github.com/yallop/ocaml-ctypes/pull/486

Thanks to Peter Zotov (@whitequark) and Jeremie Dimino (@diml) for contributions to this release.

ctypes 0.11.0

Features

  • Support for the long double and long double complex types
    https://github.com/yallop/ocaml-ctypes/pull/475

  • Support for binding foreign arrays
    https://github.com/yallop/ocaml-ctypes/pull/470

  • Improved printing for structs and unions without tags
    https://github.com/yallop/ocaml-ctypes/pull/467

  • Added a function is_null
    https://github.com/yallop/ocaml-ctypes/pull/463

Bug fixes

  • Custom operations (namely deserializing) for unsigned integers registered
    https://github.com/yallop/ocaml-ctypes/pull/480

  • All objects kept live when the runtime lock is released
    https://github.com/yallop/ocaml-ctypes/pull/473

Thanks to Andrew Ray (@andrewray) and Yunxing Dai (@yunxing) for contributions to this release.

ctypes 0.10.2

Bug fixes

  • Fix generated code for Lwt jobs where the return type is void.
    https://github.com/yallop/ocaml-ctypes/pull/460

Thanks to David Sheets (@dsheets) for contributions to this release.

ctypes 0.10.1

Bug fixes

  • Always extend integers returned from closures to full word size
    (Fixes incorrectly-promoted integers returned from callbacks on ARM and MIPS)
    https://github.com/yallop/ocaml-ctypes/pull/456

Thanks to Andreas Hauptmann (@fdopen) for contributions to this release.

ctypes 0.10.0

Features

  • Windows support for registration of C threads from callbacks
    https://github.com/yallop/ocaml-ctypes/issues/450

  • Auto-load custom printers in the OCaml toplevel
    https://github.com/yallop/ocaml-ctypes/issues/448

  • Add some extra CArray functions: sub, copy, fold_right, fold_left, mapi, map, iter
    https://github.com/yallop/ocaml-ctypes/pull/323

Bug fixes

  • Build fix for OpenBSD
    https://github.com/yallop/ocaml-ctypes/issues/454

  • Fix for platforms (e.g. NetBSD) where standard integer types are defined as macros
    https://github.com/yallop/ocaml-ctypes/issues/453

  • Add missing bounds check in CArray
    https://github.com/yallop/ocaml-ctypes/issues/447

Compatibility

  • Dl.dlsym now returns nativeint, not Ctypes_ptr.voidp
    https://github.com/yallop/ocaml-ctypes/issues/445

Thanks to Andreas Hauptmann (@fdopen) for contributions to this release.

ctypes 0.9.2

Bug fixes

  • Revert a ctypes-foreign build regression in 0.9.1
    https://github.com/yallop/ocaml-ctypes/pull/443

ctypes 0.9.1

Bug fixes

  • Fix build rules on OpenBSD
    https://github.com/yallop/ocaml-ctypes/issues/428

  • Fix a memory leak that occurs when passing closures to C
    https://github.com/yallop/ocaml-ctypes/issues/436

Thanks to Enguerrand Decorne (@engil) for contributing to this release.

ctypes 0.9.0

Features

  • NetBSD support

  • Support for releasing the runtime lock in generated stubs
    https://github.com/yallop/ocaml-ctypes/issues/429

  • Support for Lwt_preemptive
    https://github.com/yallop/ocaml-ctypes/issues/430

Thanks to Martin Lucina (@mato) for contributing to this release.

ctypes 0.8.0

Features

  • Use unboxed types for uint8_t and uint16_t
    https://github.com/yallop/ocaml-ctypes/issues/413

  • Reset errno in Lwt jobs before invoking job function
    https://github.com/yallop/ocaml-ctypes/issues/426

  • Add a ~thread_registration argument to funptr to support registering C threads with the OCaml runtime.
    https://github.com/yallop/ocaml-ctypes/issues/420

Bug fixes

  • Use -opaque for module interfaces whose cmx files are not installed.
    https://github.com/yallop/ocaml-ctypes/issues/423

  • Install cstubs cmx files.
    https://github.com/yallop/ocaml-ctypes/issues/424

Thanks to David Sheets (@dsheets) and Demi Obenour (@DemiMarie) for contributions to this release.

ctypes 0.7.0

Features

  • Add support for bytecode-only architectures
    https://github.com/yallop/ocaml-ctypes/issues/410

  • Add a new sint type corresponding to a full-range C integer and update errno support to use sint
    https://github.com/yallop/ocaml-ctypes/issues/411

Bug fixes

  • Handle small integer return types correctly on big-endian platforms
    https://github.com/yallop/ocaml-ctypes/issues/404 https://github.com/yallop/ocaml-ctypes/issues/405

  • Fix a bug with callbacks that return small types (less than a word)
    https://github.com/yallop/ocaml-ctypes/issues/405

Thanks to Stephane Glondu (@glondu) for contributions to this release.

ctypes 0.6.2

Bug fixes

  • Fix for argument quoting in the Windows build after new cross compilation support
    https://github.com/yallop/ocaml-ctypes/pull/399

  • Improve Lwt jobs support for functions with many or no arguments
    https://github.com/yallop/ocaml-ctypes/pull/400

Thanks to Andreas Hauptmann (@fdopen) for contributing to this release.

ctypes 0.6.1

Bug fixes

  • Fix constructor qualification in code generated for inverted stubs:
    https://github.com/yallop/ocaml-ctypes/pull/397

ctypes 0.6.0

Features

  • The Cstubs.FOREIGN interface has been extended with returning and @->, and some new types.
    See the pull request for details:
    https://github.com/yallop/ocaml-ctypes/pull/389

    NB: code that generates bindings using Cstubs may need to be updated to select return and @-> from the bindings functor argument rather than from the Ctypes module. Code that needs to be updated will fail to compile with the new interface. The pull request shows how to update your code, if necessary.

  • The Cstubs module can now generate asynchronous bindings to C functions using the Lwt jobs framework.
    See the pull request for details:
    https://github.com/yallop/ocaml-ctypes/pull/391

  • The Cstubs module now supports optionally returning errno alongside the return value of bound C functions.
    See the pull request for details:
    https://github.com/yallop/ocaml-ctypes/pull/392

  • Cross-compilation support is improved: the configuration step no longer runs binaries on the host.
    See the pull request for details:
    https://github.com/yallop/ocaml-ctypes/pull/383

  • The Unsigned.S interface has new of_int64 and to_int64 functions.

Compatibility

  • The deprecated *:* and +:+ functions have been removed. Use Ctypes.field instead.

  • OCaml 4.00.* is no longer supported. The earliest supported OCaml release is 4.01.0

Thanks to Spiros Eliopoulos (@seliopou), @orbitz, Leonid Rozenberg (@rleonid) and Peter Zotov (@whitequark) for contributions to this release.

ctypes 0.5.1

Bug fixes

  • Use a C function, not Pervasives.ignore, to keep values alive.

ctypes 0.5.0

Thanks to Andreas Hauptmann (@fdopen), David Sheets (@dsheets), Etienne Millon (@emillon), Goswin von Brederlow (@mrvn), Leonid Rozenberg (@rleonid), @orbitz, Max Mouratov (@cakeplus), and Peter Zotov (@whitequark) for contributions to this release.

Features

  • Build and install *.cmt and *.cmti files.

  • Expose time_t as an unsigned value

  • Expose larger interfaces for POSIX types known to be integer types.

  • Add support for 1- and 2-byte unsigned integer typedefs.

  • Add support for 1-byte and 2-byte integer typedefs.

  • Add a Signed.Int module.

  • Expose more information in the Uncoercible exception.

  • allocate_n now defaults to zeroing its memory.

  • Add public root management interface.

    NB: the interface is experimental and subject to change.

  • Look through views to add fields to structs and unions.

  • Support signed arithmetic operations for ssize_t.

  • Add support for ptrdiff_t as a typedef for a signed integer type.

  • Support intptr_t and uintptr_t as typedefs

  • Support coercions between object and function pointers.

  • Add public funptr_of_raw_address function.

  • Support static_funptr coercions

  • Add function pointers to the core type language

    (See the Ctypes_static.static_funptr type, on which Foreign.funptr and Foreign.foreign are now based.)

  • Better support for functions returning void with inverted stubs.

  • Add support for releasing runtime lock to Cstubs_inverted.

Bug fixes

  • Fix: inconsistent use of caml_stat_* functions

  • Fix: a memory leak in ctypes_caml_roots_release

ctypes 0.4.2

  • Fix a bug involving access to local roots while the runtime lock was not held.

ctypes 0.4.1

Thanks to Etienne Millon (@emillon) for contributing to this release.

  • Fix placement of docstring titles

  • Add funptr's optional arguments to funptr_opt

  • Fix a typo in libffi detection code

  • Synchronize foreign.mli files (documentation)

ctypes 0.4

Thanks to A. Hauptmann (@fdopen), David Sheets (@dsheets), Maverick Woo (@maverickwoo), Peter Zotov (@whitequark), David Kaloper (@pqwy), Ramkumar Ramachandra (@artagnon), Thomas Braibant (@braibant), Hugo Heuzard (@hhugo) and Edwin Török (@edwintorok) for contributions to this release.

Major features

  • Support for the C99 bool type

  • Typedef support

  • Enum support

  • Support for accessing C globals with foreign_value in generated stubs

  • Support for retrieving #define and enum constants from C

  • Windows support

    There is now support for Windows (32-bit and 64-bit, using MinGW) and automatic building and testing on Windows using Appveyor.

  • Support for releasing the runtime lock in C calls

    The new release_runtime_lock argument to Foreign.foreign indicates whether the OCaml runtime lock should be released during the call to the bound C function, allowing other threads to run.

  • Support for acquiring the runtime lock in callbacks

    There is a new runtime_lock argument to Foreign.funptr. Setting runtime_lock to true indicates that the OCaml runtime lock should be acquired during calls from C to OCaml and released during calls through function pointers from OCaml to C.

  • Support for passing 'bytes' values directly to C

    See the relevant section of the FAQ.

  • Add support for custom printers in views.

  • Optionally obtain struct and union layout from C

Other changes
  • string_opt wraps char *, not void *.

  • Remove some poorly-supported POSIX types

  • Use nativeint to represent pointers

  • Support zero-argument callbacks

  • findlib package naming: ctypes.foreign-base ~> ctypes.foreign.base &c.

  • Make it possible to print a field name

  • Better exception handling when using RTLD_NOLOAD

  • RTLD_LOCAL support

  • Changed the #include path to $(ocamlfind query ctypes)

  • Renamed some internal modules to avoid name clashes

ctypes 0.3.4

Bug fixes

Thanks to Yakov Zaytsev (@ysz) for contributing to this release.

  • fix printing for nullary function stubs

ctypes 0.3.3

Bug fixes
  • respect pbyte_offset with cstubs

ctypes 0.3.2

  • Add bytes to the META "requires" field

ctypes 0.3.1

New features
  • Support for 'bytes'

Bug fixes
  • Avoid invalidated pointer access

ctypes 0.3

Thanks to Peter Zotov (@whitequark), David Sheets (@dsheets), Mike McClurg (@mcclurmc) and Anil Madhavapeddy (@avsm) for contributions to this release.

Major features
Support for passing OCaml strings directly to C

(Patch by Peter Zotov.)

The implications are discussed in the FAQ.

Support for generating C stubs from names and type declarations.

There are various examples available of packages which use stub support: see the fts example in the distribution (which uses a custom Makefile), this fork of async_ssl (which uses OCamlMakefile), and the cstubs branch of ocaml-lz4 (which uses oasis and ocamlbuild).

Support for turning OCaml modules into C libraries.

See the ocaml-ctypes-inverted-stubs-example repository for a sample project which exposes a part of Xmlm's API to C.

Other changes
Backwards incompatibilities
  • Array has been renamed to CArray.

ctypes 0.2.3

Bug fixes
  • Fix GC-related bug that shows up on OS X.

ctypes 0.2.2

  • Don't install ctypes-foreign cmx files.

ctypes 0.2.1

  • Bump META version

ctypes 0.2

Thanks to Ivan Gotovchits, Greg Perkins, Daniel Bünzli, Rob Hoes and Anil Madhavapeddy for contributions to this release.

Major features
Bigarray support.

See Bigarray types and Bigarray values for details.

Give the user control over the lifetime of closures passed to C.

See the FAQ for details.

Top level printing for C values and types

Loading the new findlib package ctypes.top in the toplevel will install custom printers for C types and values.

Other changes

ctypes 0.1.1

Bug fixes
  • Remove hard-coded alloc size

ctypes 0.1

initial release

OCaml

Innovation. Community. Security.