package ctypes-foreign

  1. Overview
  2. Docs
Dynamic access to foreign C libraries using Ctypes

Install

Dune Dependency

Authors

Maintainers

Sources

0.22.0.tar.gz
md5=8a301a3e3b79156448a6659859ad506c

Description

This installs the ctypes-foreign interface which uses libffi to provide dynamic access to foreign libraries.

Tags

org:mirage

Published: 19 Feb 2024

README

README.md

ctypes is a library for binding to C libraries using pure OCaml. The primary aim is to make writing C extensions as straightforward as possible.

The core of ctypes is a set of combinators for describing the structure of C types -- numeric types, arrays, pointers, structs, unions and functions. You can use these combinators to describe the types of the functions that you want to call, then bind directly to those functions -- all without writing or generating any C!

Usage

Suppose you want to bind to the following C functions:

   int sigemptyset(sigset_t *set);
   int sigfillset(sigset_t *set);
   int sigaddset(sigset_t *set, int signum);
   int sigdelset(sigset_t *set, int signum);
   int sigismember(const sigset_t *set, int signum);

Using ctypes you can describe the interfaces to these functions as follows:

   let sigemptyset = foreign "sigemptyset" (ptr sigset_t @-> returning int)
   let sigfillset = foreign "sigfillset" (ptr sigset_t @-> returning int)
   let sigaddset = foreign "sigaddset" (ptr sigset_t @-> int @-> returning int)
   let sigdelset = foreign "sigdelset" (ptr sigset_t @-> int @-> returning int)
   let sigismember = foreign "sigismember" (ptr sigset_t @-> int @-> returning int)

The names bound by this code have the types you might expect:

   val sigemptyset : sigset_t ptr -> int
   val sigfillset : sigset_t ptr -> int
   val sigaddset : sigset_t ptr -> int -> int
   val sigdelset : sigset_t ptr -> int -> int
   val sigismember : sigset_t ptr -> int -> int

That's all there is to it. Unlike the usual way of writing C extensions, there are no C "stub" functions to write, so there's much less opportunity for error.

The documentation and source distribution contain more complex examples, involving structs, unions, arrays, callback functions, and so on, and show how to create and use C values (like instances of sigset_t ptr) in OCaml.

Links

Dependencies (6)

  1. conf-libffi >= "2.0.0"
  2. conf-pkg-config
  3. dune-configurator
  4. ctypes = version
  5. ocaml >= "4.03.0"
  6. dune >= "2.9"

Dev Dependencies (7)

  1. odoc with-doc
  2. conf-fts with-test & os != "win32"
  3. stdlib-shims with-test
  4. conf-ncurses with-test
  5. ounit2 with-test
  6. lwt with-test & >= "2.4.7"
  7. integers with-test & >= "0.2.2"

Used by (90)

  1. arakoon >= "1.8.6" & < "1.8.12"
  2. argon2
  3. async_ssl != "112.24.02" & < "113.33.05" | >= "v0.10.0"
  4. avroc
  5. bimage-unix
  6. bls12-381 = "0.3.15"
  7. bls12-381-legacy < "0.4.4"
  8. bls12-381-unix < "1.0.2"
  9. cf
  10. cmark
  11. cmarker
  12. ctypes >= "0.7.0" & < "0.21.1"
  13. ctypes-zarith
  14. directories < "0.3"
  15. extism
  16. flock
  17. gccjit
  18. gdal >= "0.3.0"
  19. gobject-introspection
  20. gpiod
  21. gr
  22. gsasl
  23. guile
  24. hacl-star-raw < "0.4.4"
  25. hardcaml-llvmsim
  26. hardcaml-vpi
  27. hardcaml_c
  28. hardcaml_verilator
  29. hdr_histogram
  30. iocaml >= "0.4.3"
  31. iocaml-kernel >= "0.4.4"
  32. libdash
  33. libirmin
  34. libudev
  35. lilv
  36. llama-cpp-ocaml
  37. lmdb < "1.0"
  38. lp-glpk < "0.4.0"
  39. lp-gurobi
  40. mariadb < "1.1.4"
  41. memtrace_viewer < "v0.15.0"
  42. mmdb
  43. mpg123
  44. nanomsg
  45. nebula
  46. netlink >= "0.2.1"
  47. ocephes >= "0.8.1"
  48. octez-l2-libs
  49. opasswd >= "0.9.3"
  50. opencc < "transition"
  51. opencc0
  52. opencc1
  53. opencc1_1
  54. orocksdb
  55. osbx < "1.1.1"
  56. osx-cf
  57. osx-secure-transport
  58. pari
  59. pari-bindings
  60. pg_query
  61. pkcs11 < "0.9.0"
  62. pkcs11-driver
  63. pkcs11-rev
  64. portaudio_c_bindings
  65. portmidi
  66. posix-getopt < "2.0.0"
  67. py
  68. qcstm >= "0.1.1"
  69. reed-solomon-erasure
  70. sarek >= "20210823"
  71. sattools
  72. sodium >= "0.2.0" & < "0.3.0"
  73. spoc >= "20170724"
  74. srt >= "0.2.2"
  75. stk_iconv
  76. swipl
  77. tensorflow
  78. tezos-sapling >= "10.2" & < "13.0"
  79. tezos-wasmer
  80. tgls >= "0.8.3"
  81. torch
  82. tsdl >= "0.8.1"
  83. tsdl-image
  84. tsdl-mixer
  85. tsdl-ttf
  86. unix-type-representations < "0.1.1"
  87. wasmer
  88. wasmtime
  89. yara
  90. yices2_bindings

Conflicts

None