Reini Urban > C-DynaLib > hparse

Download:
C-DynaLib-0.61.tar.gz

Annotate this POD

CPAN RT

New  1
Open  0
View/Report Bugs
Source  

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
syntax highlighting: