The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

hparse

DESCRIPTION

Parse function signatures for FFI from gcc4 -fdump-translation-unit

Also parses record types (union, struct) if used as arguments of the used functions.

Note that the output should be compiler independent. So you CAN use gcc for creating FFI signatures for shared libraries compiled with other compilers. Theoretically.

SYNOPSIS

  hparse.pl [OPTIONS] [header] [function-regex]

  hparse.pl stdio.h '^fprintf$'

  hparse.pl --code "int __cdecl ioctl (int __fd, int __cmd, ...)"

OPTIONS

  -t  FFI-TYPE  - dump in the given FFI format (todo)

  --cc gcc      - use given gcc
  -I            - use given include path

  --code string - parse string, not any header
  --file file   - parse file, not any header

FFI-TYPES (todo)

  * C::DynaLib
  * FFI
  * Win32::API
  * P5NCI
  * Ctypes

EXAMPLES

hparse.pl stdio.h '^fr'

frexp return=double parms=double, *int, void align=8, return-align=64

frexpf return=float parms=float, *int, void align=8, return-align=32

frexpl return=long double parms=long double, *int, void align=8, return-align=32

free return=void parms=*void, void align=8, return-align=8

freopen return=*FILE parms=const *char, const *char, *FILE, void align=8, return-align=32

fread return=size_t parms=*void, size_t, size_t, *FILE, void align=8, return-align=32

hparse.pl poll.h 'poll'

poll return=int parms=struct pollfd *, nfds_t, int, void align=8, return-align=32

struct pollfd (align=32) { int fd (align=32) short int events (align=16) short int revents (align=16) }

TODO

Resolve size_t, nfds_t => integer_type

Calling convention _stdcall, _cdecl, _fastcall

Align syntax for the FFI's?

Varargs ... not detected

  ./hparse.pl --code "int __cdecl ioctl (int __fd, int __cmd, ...);" ioctl

  ioctl
    return=int
    parms=int, int
    align=8, return-align=32