summaryrefslogtreecommitdiff
path: root/ext/ffi/config.m4
blob: 3f306c84154d987b242943abd4f29e711914b7fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
PHP_ARG_WITH([ffi],
  [for FFI support],
  [AS_HELP_STRING([--with-ffi],
    [Include FFI support])])

if test "$PHP_FFI" != "no"; then
  PKG_CHECK_MODULES([FFI], [libffi >= 3.0.11])

  PHP_EVAL_INCLINE($FFI_CFLAGS)
  PHP_EVAL_LIBLINE($FFI_LIBS, FFI_SHARED_LIBADD)

  AC_DEFINE(HAVE_FFI, 1, [Have ffi support])

  AC_CHECK_TYPES(long double)

  AC_CACHE_CHECK([for fastcall calling convention], ac_cv_ffi_fastcall,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_FASTCALL]])
    ],
    [ac_cv_ffi_fastcall=yes], [ac_cv_ffi_fastcall=no])
  ])

  if test "$ac_cv_ffi_fastcall" = yes; then
    AC_DEFINE(HAVE_FFI_FASTCALL,1,[Whether libffi supports fastcall calling convention])
  fi

  AC_CACHE_CHECK([for thiscall calling convention], ac_cv_ffi_thiscall,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_THISCALL]])
    ],
    [ac_cv_ffi_thiscall=yes], [ac_cv_ffi_thiscall=no])
  ])

  if test "$ac_cv_ffi_thiscall" = yes; then
    AC_DEFINE(HAVE_FFI_THISCALL,1,[Whether libffi supports thiscall calling convention])
  fi

  AC_CACHE_CHECK([for stdcall calling convention], ac_cv_ffi_stdcall,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_STDCALL]])
    ],
    [ac_cv_ffi_stdcall=yes], [ac_cv_ffi_stdcall=no])
  ])

  if test "$ac_cv_ffi_stdcall" = yes; then
    AC_DEFINE(HAVE_FFI_STDCALL,1,[Whether libffi supports stdcall calling convention])
  fi

  AC_CACHE_CHECK([for pascal calling convention], ac_cv_ffi_pascal,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_PASCAL]])
    ],
    [ac_cv_ffi_pascal=yes], [ac_cv_ffi_pascal=no])
  ])

  if test "$ac_cv_ffi_pascal" = yes; then
    AC_DEFINE(HAVE_FFI_PASCAL,1,[Whether libffi supports pascal calling convention])
  fi

  AC_CACHE_CHECK([for register calling convention], ac_cv_ffi_register,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_REGISTER]])
    ],
    [ac_cv_ffi_register=yes], [ac_cv_ffi_register=no])
  ])

  if test "$ac_cv_ffi_register" = yes; then
    AC_DEFINE(HAVE_FFI_REGISTER,1,[Whether libffi supports register calling convention])
  fi

  AC_CACHE_CHECK([for ms_cdecl calling convention], ac_cv_ffi_ms_cdecl,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_MS_CDECL]])
    ],
    [ac_cv_ffi_ms_cdecl=yes], [ac_cv_ffi_ms_cdecl=no])
  ])

  if test "$ac_cv_ffi_ms_cdecl" = yes; then
    AC_DEFINE(HAVE_FFI_MS_CDECL,1,[Whether libffi supports ms_cdecl calling convention])
  fi

  AC_CACHE_CHECK([for sysv calling convention], ac_cv_ffi_sysv,
    [
      AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[#include <ffi.h>]],
        [[return FFI_SYSV]])
    ],
    [ac_cv_ffi_sysv=yes], [ac_cv_ffi_sysv=no])
  ])

  if test "$ac_cv_ffi_sysv" = yes; then
    AC_DEFINE(HAVE_FFI_SYSV,1,[Whether libffi supports sysv calling convention])
  fi

  PHP_NEW_EXTENSION(ffi, ffi.c ffi_parser.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
  PHP_SUBST(FFI_SHARED_LIBADD)
fi