1dnl Checks for libfuse required headers and functions
2dnl
3dnl Version: 20180403
4
5dnl Function to detect if libfuse is available
6dnl ac_libfuse_dummy is used to prevent AC_CHECK_LIB adding unnecessary -l<library> arguments
7AC_DEFUN([AX_LIBFUSE_CHECK_LIB],
8  [dnl Check if parameters were provided
9  AS_IF(
10    [test "x$ac_cv_with_libfuse" != x && test "x$ac_cv_with_libfuse" != xno && test "x$ac_cv_with_libfuse" != xauto-detect],
11    [AS_IF(
12      [test -d "$ac_cv_with_libfuse"],
13      [CFLAGS="$CFLAGS -I${ac_cv_with_libfuse}/include"
14      LDFLAGS="$LDFLAGS -L${ac_cv_with_libfuse}/lib"],
15      [AC_MSG_WARN([no such directory: $ac_cv_with_libfuse])
16      ])
17    ])
18
19  AS_IF(
20    [test "x$ac_cv_with_libfuse" = xno],
21    [ac_cv_libfuse=no],
22    [dnl Check for a pkg-config file
23    AS_IF(
24      [test "x$cross_compiling" != "xyes" && test "x$PKGCONFIG" != "x"],
25      [PKG_CHECK_MODULES(
26        [fuse],
27        [fuse >= 2.6],
28        [ac_cv_libfuse=libfuse],
29        [ac_cv_libfuse=no])
30      ])
31
32    AS_IF(
33      [test "x$ac_cv_libfuse" = xlibfuse],
34      [ac_cv_libfuse_CPPFLAGS="$pkg_cv_fuse_CFLAGS"
35      ac_cv_libfuse_LIBADD="$pkg_cv_fuse_LIBS"],
36      [dnl Check for headers
37      AC_CHECK_HEADERS(
38        [fuse.h],
39        [ac_cv_header_fuse_h=yes],
40        [ac_cv_header_fuse_h=no])
41
42      dnl libfuse sometimes requires -D_FILE_OFFSET_BITS=64 to be set
43      AS_IF(
44        [test "x$ac_cv_header_fuse_h" = xno],
45        [AS_UNSET([ac_cv_header_fuse_h])
46        CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
47        AC_CHECK_HEADERS([fuse.h])
48      ])
49
50      AS_IF(
51        [test "x$ac_cv_header_fuse_h" = xno],
52        [ac_cv_libfuse=no],
53        [dnl Check for the individual functions
54        ac_cv_libfuse=libfuse
55
56        AC_CHECK_LIB(
57          fuse,
58          fuse_daemonize,
59          [ac_cv_libfuse_dummy=yes],
60          [ac_cv_libfuse=no])
61        AC_CHECK_LIB(
62          fuse,
63          fuse_destroy,
64          [ac_cv_libfuse_dummy=yes],
65          [ac_cv_libfuse=no])
66        AC_CHECK_LIB(
67          fuse,
68          fuse_mount,
69          [ac_cv_libfuse_dummy=yes],
70          [ac_cv_libfuse=no])
71        AC_CHECK_LIB(
72          fuse,
73          fuse_new,
74          [ac_cv_libfuse_dummy=yes],
75          [ac_cv_libfuse=no])
76
77        ac_cv_libfuse_LIBADD="-lfuse";
78        ])
79      ])
80
81    dnl Check for libosxfuse
82    AS_IF(
83      [test "x$ac_cv_with_libfuse" != xno && test "x$ac_cv_header_fuse_h" = xno],
84      [CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
85      AC_CHECK_HEADERS([osxfuse/fuse.h])
86
87      dnl libosxfuse sometimes requires -D_FILE_OFFSET_BITS=64 to be set
88      AS_IF(
89        [test "x$ac_cv_header_osxfuse_fuse_h" = xno],
90        [AS_UNSET([ac_cv_header_osxfuse_fuse_h])
91        CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
92        AC_CHECK_HEADERS([osxfuse/fuse.h])
93      ])
94
95      AS_IF(
96        [test "x$ac_cv_header_osxfuse_fuse_h" = xno],
97        [ac_cv_libfuse=no],
98        [dnl Check for the individual functions
99        ac_cv_libfuse=libosxfuse
100
101        AC_CHECK_LIB(
102          osxfuse,
103          fuse_daemonize,
104          [ac_cv_libfuse_dummy=yes],
105          [ac_cv_libfuse=no])
106        AC_CHECK_LIB(
107          osxfuse,
108          fuse_destroy,
109          [ac_cv_libfuse_dummy=yes],
110          [ac_cv_libfuse=no])
111        AC_CHECK_LIB(
112          osxfuse,
113          fuse_mount,
114          [ac_cv_libfuse_dummy=yes],
115          [ac_cv_libfuse=no])
116        AC_CHECK_LIB(
117          osxfuse,
118          fuse_new,
119          [ac_cv_libfuse_dummy=yes],
120          [ac_cv_libfuse=no])
121
122        ac_cv_libfuse_LIBADD="-losxfuse";
123        ])
124      ])
125    ])
126
127  AS_IF(
128    [test "x$ac_cv_libfuse" = xlibfuse],
129    [AC_DEFINE(
130      [HAVE_LIBFUSE],
131      [1],
132      [Define to 1 if you have the 'fuse' library (-lfuse).])
133    ])
134  AS_IF(
135    [test "x$ac_cv_libfuse" = xlibosxfuse],
136    [AC_DEFINE(
137      [HAVE_LIBOSXFUSE],
138      [1],
139      [Define to 1 if you have the 'osxfuse' library (-losxfuse).])
140    ])
141
142  AS_IF(
143    [test "x$ac_cv_libfuse" != xno],
144    [AC_SUBST(
145      [HAVE_LIBFUSE],
146      [1]) ],
147    [AC_SUBST(
148      [HAVE_LIBFUSE],
149      [0])
150    ])
151  ])
152
153dnl Function to detect how to enable libfuse
154AC_DEFUN([AX_LIBFUSE_CHECK_ENABLE],
155  [AX_COMMON_ARG_WITH(
156    [libfuse],
157    [libfuse],
158    [search for libfuse in includedir and libdir or in the specified DIR, or no if not to use libfuse],
159    [auto-detect],
160    [DIR])
161
162  dnl Check for a shared library version
163  AX_LIBFUSE_CHECK_LIB
164
165  AS_IF(
166    [test "x$ac_cv_libfuse_CPPFLAGS" != "x"],
167    [AC_SUBST(
168      [LIBFUSE_CPPFLAGS],
169      [$ac_cv_libfuse_CPPFLAGS])
170    ])
171  AS_IF(
172    [test "x$ac_cv_libfuse_LIBADD" != "x"],
173    [AC_SUBST(
174      [LIBFUSE_LIBADD],
175      [$ac_cv_libfuse_LIBADD])
176    ])
177
178  AS_IF(
179    [test "x$ac_cv_libfuse" = xlibfuse],
180    [AC_SUBST(
181      [ax_libfuse_pc_libs_private],
182      [-lfuse])
183    ])
184  AS_IF(
185    [test "x$ac_cv_libfuse" = xlibosxfuse],
186    [AC_SUBST(
187      [ax_libfuse_pc_libs_private],
188      [-losxfuse])
189    ])
190
191  AS_IF(
192    [test "x$ac_cv_libfuse" = xlibfuse],
193    [AC_SUBST(
194      [ax_libfuse_spec_requires],
195      [fuse-libs])
196    AC_SUBST(
197      [ax_libfuse_spec_build_requires],
198      [fuse-devel])
199    ])
200  ])
201
202