1dnl Checks for libbfio required headers and functions
2dnl
3dnl Version: 20201125
4
5dnl Function to detect if libbfio is available
6dnl ac_libbfio_dummy is used to prevent AC_CHECK_LIB adding unnecessary -l<library> arguments
7AC_DEFUN([AX_LIBBFIO_CHECK_LIB],
8  [AS_IF(
9    [test "x$ac_cv_enable_shared_libs" = xno || test "x$ac_cv_with_libbfio" = xno],
10    [ac_cv_libbfio=no],
11    [ac_cv_libbfio=check
12    dnl Check if the directory provided as parameter exists
13    AS_IF(
14      [test "x$ac_cv_with_libbfio" != x && test "x$ac_cv_with_libbfio" != xauto-detect],
15      [AS_IF(
16        [test -d "$ac_cv_with_libbfio"],
17        [CFLAGS="$CFLAGS -I${ac_cv_with_libbfio}/include"
18        LDFLAGS="$LDFLAGS -L${ac_cv_with_libbfio}/lib"],
19        [AC_MSG_FAILURE(
20          [no such directory: $ac_cv_with_libbfio],
21          [1])
22        ])
23      ],
24      [dnl Check for a pkg-config file
25      AS_IF(
26        [test "x$cross_compiling" != "xyes" && test "x$PKGCONFIG" != "x"],
27        [PKG_CHECK_MODULES(
28          [libbfio],
29          [libbfio >= 20201125],
30          [ac_cv_libbfio=yes],
31          [ac_cv_libbfio=check])
32        ])
33      AS_IF(
34        [test "x$ac_cv_libbfio" = xyes && test "x$ac_cv_enable_wide_character_type" != xno],
35        [AC_CACHE_CHECK(
36         [whether libbfio/features.h defines LIBBFIO_HAVE_WIDE_CHARACTER_TYPE as 1],
37         [ac_cv_header_libbfio_features_h_have_wide_character_type],
38         [AC_LANG_PUSH(C)
39         AC_COMPILE_IFELSE(
40           [AC_LANG_PROGRAM(
41             [[#include <libbfio/features.h>]],
42             [[#if !defined( LIBBFIO_HAVE_WIDE_CHARACTER_TYPE ) || ( LIBBFIO_HAVE_WIDE_CHARACTER_TYPE != 1 )
43#error LIBBFIO_HAVE_WIDE_CHARACTER_TYPE not defined
44#endif]] )],
45           [ac_cv_header_libbfio_features_h_have_wide_character_type=yes],
46           [ac_cv_header_libbfio_features_h_have_wide_character_type=no])
47         AC_LANG_POP(C)],
48         [ac_cv_header_libbfio_features_h_have_wide_character_type=no])
49
50        AS_IF(
51          [test "x$ac_cv_header_libbfio_features_h_have_wide_character_type" = xno],
52          [ac_cv_libbfio=no])
53        ])
54      AS_IF(
55        [test "x$ac_cv_libbfio" = xyes],
56        [ac_cv_libbfio_CPPFLAGS="$pkg_cv_libbfio_CFLAGS"
57        ac_cv_libbfio_LIBADD="$pkg_cv_libbfio_LIBS"])
58      ])
59
60    AS_IF(
61      [test "x$ac_cv_libbfio" = xcheck],
62      [dnl Check for headers
63      AC_CHECK_HEADERS([libbfio.h])
64
65      AS_IF(
66        [test "x$ac_cv_header_libbfio_h" = xno],
67        [ac_cv_libbfio=no],
68        [dnl Check for the individual functions
69        ac_cv_libbfio=yes
70
71        AC_CHECK_LIB(
72          bfio,
73          libbfio_get_version,
74          [ac_cv_libbfio_dummy=yes],
75          [ac_cv_libbfio=no])
76
77        dnl Handle functions
78        AC_CHECK_LIB(
79          bfio,
80          libbfio_handle_free,
81          [ac_cv_libbfio_dummy=yes],
82          [ac_cv_libbfio=no])
83        AC_CHECK_LIB(
84          bfio,
85          libbfio_handle_open,
86          [ac_cv_libbfio_dummy=yes],
87          [ac_cv_libbfio=no])
88        AC_CHECK_LIB(
89          bfio,
90          libbfio_handle_close,
91          [ac_cv_libbfio_dummy=yes],
92          [ac_cv_libbfio=no])
93        AC_CHECK_LIB(
94          bfio,
95          libbfio_handle_exists,
96          [ac_cv_libbfio_dummy=yes],
97          [ac_cv_libbfio=no])
98        AC_CHECK_LIB(
99          bfio,
100          libbfio_handle_read_buffer,
101          [ac_cv_libbfio_dummy=yes],
102          [ac_cv_libbfio=no])
103        AC_CHECK_LIB(
104          bfio,
105          libbfio_handle_read_buffer_at_offset,
106          [ac_cv_libbfio_dummy=yes],
107          [ac_cv_libbfio=no])
108        AC_CHECK_LIB(
109          bfio,
110          libbfio_handle_write_buffer,
111          [ac_cv_libbfio_dummy=yes],
112          [ac_cv_libbfio=no])
113        AC_CHECK_LIB(
114          bfio,
115          libbfio_handle_write_buffer_at_offset,
116          [ac_cv_libbfio_dummy=yes],
117          [ac_cv_libbfio=no])
118        AC_CHECK_LIB(
119          bfio,
120          libbfio_handle_seek_offset,
121          [ac_cv_libbfio_dummy=yes],
122          [ac_cv_libbfio=no])
123
124        AC_CHECK_LIB(
125          bfio,
126          libbfio_handle_is_open,
127          [ac_cv_libbfio_dummy=yes],
128          [ac_cv_libbfio=no])
129        AC_CHECK_LIB(
130          bfio,
131          libbfio_handle_get_offset,
132          [ac_cv_libbfio_dummy=yes],
133          [ac_cv_libbfio=no])
134        AC_CHECK_LIB(
135          bfio,
136          libbfio_handle_get_size,
137          [ac_cv_libbfio_dummy=yes],
138          [ac_cv_libbfio=no])
139        AC_CHECK_LIB(
140          bfio,
141          libbfio_handle_set_track_offsets_read,
142          [ac_cv_libbfio_dummy=yes],
143          [ac_cv_libbfio=no])
144        AC_CHECK_LIB(
145          bfio,
146          libbfio_handle_get_number_of_offsets_read,
147          [ac_cv_libbfio_dummy=yes],
148          [ac_cv_libbfio=no])
149        AC_CHECK_LIB(
150          bfio,
151          libbfio_handle_get_offset_read,
152          [ac_cv_libbfio_dummy=yes],
153          [ac_cv_libbfio=no])
154
155        dnl File functions
156        AC_CHECK_LIB(
157          bfio,
158          libbfio_file_initialize,
159          [ac_cv_libbfio_dummy=yes],
160          [ac_cv_libbfio=no])
161        AC_CHECK_LIB(
162          bfio,
163          libbfio_file_get_name_size,
164          [ac_cv_libbfio_dummy=yes],
165          [ac_cv_libbfio=no])
166        AC_CHECK_LIB(
167          bfio,
168          libbfio_file_get_name,
169          [ac_cv_libbfio_dummy=yes],
170          [ac_cv_libbfio=no])
171        AC_CHECK_LIB(
172          bfio,
173          libbfio_file_set_name,
174          [ac_cv_libbfio_dummy=yes],
175          [ac_cv_libbfio=no])
176
177        AS_IF(
178          [test "x$ac_cv_enable_wide_character_type" != xno],
179          [AC_CHECK_LIB(
180            bfio,
181            libbfio_file_get_name_size_wide,
182            [ac_cv_libbfio_dummy=yes],
183            [ac_cv_libbfio=no])
184          AC_CHECK_LIB(
185            bfio,
186            libbfio_file_get_name_wide,
187            [ac_cv_libbfio_dummy=yes],
188            [ac_cv_libbfio=no])
189          AC_CHECK_LIB(
190            bfio,
191            libbfio_file_set_name_wide,
192            [ac_cv_libbfio_dummy=yes],
193            [ac_cv_libbfio=no])
194          ])
195
196        dnl Pool functions
197        AC_CHECK_LIB(
198          bfio,
199          libbfio_pool_initialize,
200          [ac_cv_libbfio_dummy=yes],
201          [ac_cv_libbfio=no])
202        AC_CHECK_LIB(
203          bfio,
204          libbfio_pool_free,
205          [ac_cv_libbfio_dummy=yes],
206          [ac_cv_libbfio=no])
207        AC_CHECK_LIB(
208          bfio,
209          libbfio_pool_clone,
210          [ac_cv_libbfio_dummy=yes],
211          [ac_cv_libbfio=no])
212
213        AC_CHECK_LIB(
214          bfio,
215          libbfio_pool_get_number_of_handles,
216          [ac_cv_libbfio_dummy=yes],
217          [ac_cv_libbfio=no])
218        AC_CHECK_LIB(
219          bfio,
220          libbfio_pool_get_handle,
221          [ac_cv_libbfio_dummy=yes],
222          [ac_cv_libbfio=no])
223        AC_CHECK_LIB(
224          bfio,
225          libbfio_pool_set_handle,
226          [ac_cv_libbfio_dummy=yes],
227          [ac_cv_libbfio=no])
228        AC_CHECK_LIB(
229          bfio,
230          libbfio_pool_append_handle,
231          [ac_cv_libbfio_dummy=yes],
232          [ac_cv_libbfio=no])
233        AC_CHECK_LIB(
234          bfio,
235          libbfio_pool_remove_handle,
236          [ac_cv_libbfio_dummy=yes],
237          [ac_cv_libbfio=no])
238        AC_CHECK_LIB(
239          bfio,
240          libbfio_pool_get_maximum_number_of_open_handles,
241          [ac_cv_libbfio_dummy=yes],
242          [ac_cv_libbfio=no])
243        AC_CHECK_LIB(
244          bfio,
245          libbfio_pool_set_maximum_number_of_open_handles,
246          [ac_cv_libbfio_dummy=yes],
247          [ac_cv_libbfio=no])
248
249        AC_CHECK_LIB(
250          bfio,
251          libbfio_pool_open,
252          [ac_cv_libbfio_dummy=yes],
253          [ac_cv_libbfio=no])
254        AC_CHECK_LIB(
255          bfio,
256          libbfio_pool_reopen,
257          [ac_cv_libbfio_dummy=yes],
258          [ac_cv_libbfio=no])
259        AC_CHECK_LIB(
260          bfio,
261          libbfio_pool_close,
262          [ac_cv_libbfio_dummy=yes],
263          [ac_cv_libbfio=no])
264        AC_CHECK_LIB(
265          bfio,
266          libbfio_pool_close_all,
267          [ac_cv_libbfio_dummy=yes],
268          [ac_cv_libbfio=no])
269        AC_CHECK_LIB(
270          bfio,
271          libbfio_pool_read_buffer,
272          [ac_cv_libbfio_dummy=yes],
273          [ac_cv_libbfio=no])
274        AC_CHECK_LIB(
275          bfio,
276          libbfio_pool_read_buffer_at_offset,
277          [ac_cv_libbfio_dummy=yes],
278          [ac_cv_libbfio=no])
279        AC_CHECK_LIB(
280          bfio,
281          libbfio_pool_write_buffer,
282          [ac_cv_libbfio_dummy=yes],
283          [ac_cv_libbfio=no])
284        AC_CHECK_LIB(
285          bfio,
286          libbfio_pool_write_buffer_at_offset,
287          [ac_cv_libbfio_dummy=yes],
288          [ac_cv_libbfio=no])
289        AC_CHECK_LIB(
290          bfio,
291          libbfio_pool_seek_offset,
292          [ac_cv_libbfio_dummy=yes],
293          [ac_cv_libbfio=no])
294        AC_CHECK_LIB(
295          bfio,
296          libbfio_pool_get_offset,
297          [ac_cv_libbfio_dummy=yes],
298          [ac_cv_libbfio=no])
299        AC_CHECK_LIB(
300          bfio,
301          libbfio_pool_get_size,
302          [ac_cv_libbfio_dummy=yes],
303          [ac_cv_libbfio=no])
304
305        dnl File pool functions
306        AC_CHECK_LIB(
307          bfio,
308          libbfio_file_pool_open,
309          [ac_cv_libbfio_dummy=yes],
310          [ac_cv_libbfio=no])
311
312        AS_IF(
313          [test "x$ac_cv_enable_wide_character_type" != xno],
314          [AC_CHECK_LIB(
315            bfio,
316            libbfio_file_pool_open_wide,
317            [ac_cv_libbfio_dummy=yes],
318            [ac_cv_libbfio=no])
319          ])
320
321        ac_cv_libbfio_LIBADD="-lbfio"])
322      ])
323    AS_IF(
324      [test "x$ac_cv_with_libbfio" != x && test "x$ac_cv_with_libbfio" != xauto-detect && test "x$ac_cv_libbfio" != xyes],
325      [AC_MSG_FAILURE(
326        [unable to find supported libbfio in directory: $ac_cv_with_libbfio],
327        [1])
328      ])
329    ])
330
331  AS_IF(
332    [test "x$ac_cv_libbfio" = xyes],
333    [AC_DEFINE(
334      [HAVE_LIBBFIO],
335      [1],
336      [Define to 1 if you have the `bfio' library (-lbfio).])
337    ])
338
339  AS_IF(
340    [test "x$ac_cv_libbfio" = xyes],
341    [AC_SUBST(
342      [HAVE_LIBBFIO],
343      [1]) ],
344    [AC_SUBST(
345      [HAVE_LIBBFIO],
346      [0])
347    ])
348  ])
349
350dnl Function to detect if libbfio dependencies are available
351AC_DEFUN([AX_LIBBFIO_CHECK_LOCAL],
352  [dnl No additional checks.
353
354  ac_cv_libbfio_CPPFLAGS="-I../libbfio";
355  ac_cv_libbfio_LIBADD="../libbfio/libbfio.la";
356
357  ac_cv_libbfio=local
358  ])
359
360dnl Function to detect how to enable libbfio
361AC_DEFUN([AX_LIBBFIO_CHECK_ENABLE],
362  [AX_COMMON_ARG_WITH(
363    [libbfio],
364    [libbfio],
365    [search for libbfio in includedir and libdir or in the specified DIR, or no if to use local version],
366    [auto-detect],
367    [DIR])
368
369  dnl Check for a shared library version
370  AX_LIBBFIO_CHECK_LIB
371
372  dnl Check if the dependencies for the local library version
373  AS_IF(
374    [test "x$ac_cv_libbfio" != xyes],
375    [AX_LIBBFIO_CHECK_LOCAL
376
377    AC_DEFINE(
378      [HAVE_LOCAL_LIBBFIO],
379      [1],
380      [Define to 1 if the local version of libbfio is used.])
381    AC_SUBST(
382      [HAVE_LOCAL_LIBBFIO],
383      [1])
384    ])
385
386  AM_CONDITIONAL(
387    [HAVE_LOCAL_LIBBFIO],
388    [test "x$ac_cv_libbfio" = xlocal])
389  AS_IF(
390    [test "x$ac_cv_libbfio_CPPFLAGS" != "x"],
391    [AC_SUBST(
392      [LIBBFIO_CPPFLAGS],
393      [$ac_cv_libbfio_CPPFLAGS])
394    ])
395  AS_IF(
396    [test "x$ac_cv_libbfio_LIBADD" != "x"],
397    [AC_SUBST(
398      [LIBBFIO_LIBADD],
399      [$ac_cv_libbfio_LIBADD])
400    ])
401
402  AS_IF(
403    [test "x$ac_cv_libbfio" = xyes],
404    [AC_SUBST(
405      [ax_libbfio_pc_libs_private],
406      [-lbfio])
407    ])
408
409  AS_IF(
410    [test "x$ac_cv_libbfio" = xyes],
411    [AC_SUBST(
412      [ax_libbfio_spec_requires],
413      [libbfio])
414    AC_SUBST(
415      [ax_libbfio_spec_build_requires],
416      [libbfio-devel])
417    ])
418  ])
419
420