1dnl Functions for libfdata
2dnl
3dnl Version: 20201130
4
5dnl Function to detect if libfdata is available
6dnl ac_libfdata_dummy is used to prevent AC_CHECK_LIB adding unnecessary -l<library> arguments
7AC_DEFUN([AX_LIBFDATA_CHECK_LIB],
8  [AS_IF(
9    [test "x$ac_cv_enable_shared_libs" = xno || test "x$ac_cv_with_libfdata" = xno],
10    [ac_cv_libfdata=no],
11    [ac_cv_libfdata=check
12    dnl Check if the directory provided as parameter exists
13    AS_IF(
14      [test "x$ac_cv_with_libfdata" != x && test "x$ac_cv_with_libfdata" != xauto-detect],
15      [AS_IF(
16        [test -d "$ac_cv_with_libfdata"],
17        [CFLAGS="$CFLAGS -I${ac_cv_with_libfdata}/include"
18        LDFLAGS="$LDFLAGS -L${ac_cv_with_libfdata}/lib"],
19        [AC_MSG_FAILURE(
20          [no such directory: $ac_cv_with_libfdata],
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          [libfdata],
29          [libfdata >= 20201129],
30          [ac_cv_libfdata=yes],
31          [ac_cv_libfdata=check])
32        ])
33      AS_IF(
34        [test "x$ac_cv_libfdata" = xyes],
35        [ac_cv_libfdata_CPPFLAGS="$pkg_cv_libfdata_CFLAGS"
36        ac_cv_libfdata_LIBADD="$pkg_cv_libfdata_LIBS"])
37      ])
38
39    AS_IF(
40      [test "x$ac_cv_libfdata" = xcheck],
41      [dnl Check for headers
42      AC_CHECK_HEADERS([libfdata.h])
43
44      AS_IF(
45        [test "x$ac_cv_header_libfdata_h" = xno],
46        [ac_cv_libfdata=no],
47        [dnl Check for the individual functions
48        ac_cv_libfdata=yes
49
50        AC_CHECK_LIB(
51          fdata,
52          libfdata_get_version,
53          [ac_cv_libfdata_dummy=yes],
54          [ac_cv_libfdata=no])
55
56        dnl Area functions
57        AC_CHECK_LIB(
58          fdata,
59          libfdata_area_initialize,
60          [ac_cv_libfdata_dummy=yes],
61          [ac_cv_libfdata=no])
62        AC_CHECK_LIB(
63          fdata,
64          libfdata_area_free,
65          [ac_cv_libfdata_dummy=yes],
66          [ac_cv_libfdata=no])
67        AC_CHECK_LIB(
68          fdata,
69          libfdata_area_clone,
70          [ac_cv_libfdata_dummy=yes],
71          [ac_cv_libfdata=no])
72        AC_CHECK_LIB(
73          fdata,
74          libfdata_area_empty,
75          [ac_cv_libfdata_dummy=yes],
76          [ac_cv_libfdata=no])
77        AC_CHECK_LIB(
78          fdata,
79          libfdata_area_resize,
80          [ac_cv_libfdata_dummy=yes],
81          [ac_cv_libfdata=no])
82        AC_CHECK_LIB(
83          fdata,
84          libfdata_area_get_number_of_segments,
85          [ac_cv_libfdata_dummy=yes],
86          [ac_cv_libfdata=no])
87        AC_CHECK_LIB(
88          fdata,
89          libfdata_area_get_segment_by_index,
90          [ac_cv_libfdata_dummy=yes],
91          [ac_cv_libfdata=no])
92        AC_CHECK_LIB(
93          fdata,
94          libfdata_area_set_segment_by_index,
95          [ac_cv_libfdata_dummy=yes],
96          [ac_cv_libfdata=no])
97        AC_CHECK_LIB(
98          fdata,
99          libfdata_area_prepend_segment,
100          [ac_cv_libfdata_dummy=yes],
101          [ac_cv_libfdata=no])
102        AC_CHECK_LIB(
103          fdata,
104          libfdata_area_append_segment,
105          [ac_cv_libfdata_dummy=yes],
106          [ac_cv_libfdata=no])
107        AC_CHECK_LIB(
108          fdata,
109          libfdata_area_get_element_data_size,
110          [ac_cv_libfdata_dummy=yes],
111          [ac_cv_libfdata=no])
112        AC_CHECK_LIB(
113          fdata,
114          libfdata_area_get_element_value_at_offset,
115          [ac_cv_libfdata_dummy=yes],
116          [ac_cv_libfdata=no])
117        AC_CHECK_LIB(
118          fdata,
119          libfdata_area_set_element_value_at_offset,
120          [ac_cv_libfdata_dummy=yes],
121          [ac_cv_libfdata=no])
122        AC_CHECK_LIB(
123          fdata,
124          libfdata_area_get_size,
125          [ac_cv_libfdata_dummy=yes],
126          [ac_cv_libfdata=no])
127
128        dnl Balanced tree functions
129        dnl TODO: add functions
130
131        dnl List functions
132        AC_CHECK_LIB(
133          fdata,
134          libfdata_list_initialize,
135          [ac_cv_libfdata_dummy=yes],
136          [ac_cv_libfdata=no])
137        AC_CHECK_LIB(
138          fdata,
139          libfdata_list_free,
140          [ac_cv_libfdata_dummy=yes],
141          [ac_cv_libfdata=no])
142        AC_CHECK_LIB(
143          fdata,
144          libfdata_list_clone,
145          [ac_cv_libfdata_dummy=yes],
146          [ac_cv_libfdata=no])
147        AC_CHECK_LIB(
148          fdata,
149          libfdata_list_empty,
150          [ac_cv_libfdata_dummy=yes],
151          [ac_cv_libfdata=no])
152        AC_CHECK_LIB(
153          fdata,
154          libfdata_list_resize,
155          [ac_cv_libfdata_dummy=yes],
156          [ac_cv_libfdata=no])
157
158        AC_CHECK_LIB(
159          fdata,
160          libfdata_list_reverse,
161          [ac_cv_libfdata_dummy=yes],
162          [ac_cv_libfdata=no])
163
164        AC_CHECK_LIB(
165          fdata,
166          libfdata_list_get_number_of_elements,
167          [ac_cv_libfdata_dummy=yes],
168          [ac_cv_libfdata=no])
169        AC_CHECK_LIB(
170          fdata,
171          libfdata_list_get_list_element_by_index,
172          [ac_cv_libfdata_dummy=yes],
173          [ac_cv_libfdata=no])
174        AC_CHECK_LIB(
175          fdata,
176          libfdata_list_get_element_by_index,
177          [ac_cv_libfdata_dummy=yes],
178          [ac_cv_libfdata=no])
179        AC_CHECK_LIB(
180          fdata,
181          libfdata_list_set_element_by_index,
182          [ac_cv_libfdata_dummy=yes],
183          [ac_cv_libfdata=no])
184        AC_CHECK_LIB(
185          fdata,
186          libfdata_list_prepend_element,
187          [ac_cv_libfdata_dummy=yes],
188          [ac_cv_libfdata=no])
189        AC_CHECK_LIB(
190          fdata,
191          libfdata_list_append_element,
192          [ac_cv_libfdata_dummy=yes],
193          [ac_cv_libfdata=no])
194        AC_CHECK_LIB(
195          fdata,
196          libfdata_list_append_list,
197          [ac_cv_libfdata_dummy=yes],
198          [ac_cv_libfdata=no])
199        AC_CHECK_LIB(
200          fdata,
201          libfdata_list_is_element_set,
202          [ac_cv_libfdata_dummy=yes],
203          [ac_cv_libfdata=no])
204
205        AC_CHECK_LIB(
206          fdata,
207          libfdata_list_get_element_mapped_range,
208          [ac_cv_libfdata_dummy=yes],
209          [ac_cv_libfdata=no])
210        AC_CHECK_LIB(
211          fdata,
212          libfdata_list_get_mapped_offset,
213          [ac_cv_libfdata_dummy=yes],
214          [ac_cv_libfdata=no])
215        AC_CHECK_LIB(
216          fdata,
217          libfdata_list_set_mapped_offset,
218          [ac_cv_libfdata_dummy=yes],
219          [ac_cv_libfdata=no])
220
221        AC_CHECK_LIB(
222          fdata,
223          libfdata_list_get_mapped_size_by_index,
224          [ac_cv_libfdata_dummy=yes],
225          [ac_cv_libfdata=no])
226        AC_CHECK_LIB(
227          fdata,
228          libfdata_list_set_mapped_size_by_index,
229          [ac_cv_libfdata_dummy=yes],
230          [ac_cv_libfdata=no])
231        AC_CHECK_LIB(
232          fdata,
233          libfdata_list_get_element_by_index_with_mapped_size,
234          [ac_cv_libfdata_dummy=yes],
235          [ac_cv_libfdata=no])
236        AC_CHECK_LIB(
237          fdata,
238          libfdata_list_set_element_by_index_with_mapped_size,
239          [ac_cv_libfdata_dummy=yes],
240          [ac_cv_libfdata=no])
241        AC_CHECK_LIB(
242          fdata,
243          libfdata_list_append_element_with_mapped_size,
244          [ac_cv_libfdata_dummy=yes],
245          [ac_cv_libfdata=no])
246
247        AC_CHECK_LIB(
248          fdata,
249          libfdata_list_get_element_index_at_offset,
250          [ac_cv_libfdata_dummy=yes],
251          [ac_cv_libfdata=no])
252        AC_CHECK_LIB(
253          fdata,
254          libfdata_list_get_list_element_at_offset,
255          [ac_cv_libfdata_dummy=yes],
256          [ac_cv_libfdata=no])
257        AC_CHECK_LIB(
258          fdata,
259          libfdata_list_get_element_at_offset,
260          [ac_cv_libfdata_dummy=yes],
261          [ac_cv_libfdata=no])
262
263        AC_CHECK_LIB(
264          fdata,
265          libfdata_list_cache_element_value,
266          [ac_cv_libfdata_dummy=yes],
267          [ac_cv_libfdata=no])
268        AC_CHECK_LIB(
269          fdata,
270          libfdata_list_get_element_value_by_index,
271          [ac_cv_libfdata_dummy=yes],
272          [ac_cv_libfdata=no])
273        AC_CHECK_LIB(
274          fdata,
275          libfdata_list_get_element_value_at_offset,
276          [ac_cv_libfdata_dummy=yes],
277          [ac_cv_libfdata=no])
278        AC_CHECK_LIB(
279          fdata,
280          libfdata_list_set_element_value_by_index,
281          [ac_cv_libfdata_dummy=yes],
282          [ac_cv_libfdata=no])
283
284        AC_CHECK_LIB(
285          fdata,
286          libfdata_list_set_element_value_at_offset,
287          [ac_cv_libfdata_dummy=yes],
288          [ac_cv_libfdata=no])
289        AC_CHECK_LIB(
290          fdata,
291          libfdata_list_get_size,
292          [ac_cv_libfdata_dummy=yes],
293          [ac_cv_libfdata=no])
294
295        AC_CHECK_LIB(
296          fdata,
297          libfdata_list_element_get_mapped_size,
298          [ac_cv_libfdata_dummy=yes],
299          [ac_cv_libfdata=no])
300        AC_CHECK_LIB(
301          fdata,
302          libfdata_list_element_set_mapped_size,
303          [ac_cv_libfdata_dummy=yes],
304          [ac_cv_libfdata=no])
305        AC_CHECK_LIB(
306          fdata,
307          libfdata_list_element_get_element_value,
308          [ac_cv_libfdata_dummy=yes],
309          [ac_cv_libfdata=no])
310        AC_CHECK_LIB(
311          fdata,
312          libfdata_list_element_set_element_value,
313          [ac_cv_libfdata_dummy=yes],
314          [ac_cv_libfdata=no])
315
316        dnl List element functions
317        AC_CHECK_LIB(
318          fdata,
319          libfdata_list_element_get_mapped_size,
320          [ac_cv_libfdata_dummy=yes],
321          [ac_cv_libfdata=no])
322        AC_CHECK_LIB(
323          fdata,
324          libfdata_list_element_set_mapped_size,
325          [ac_cv_libfdata_dummy=yes],
326          [ac_cv_libfdata=no])
327        AC_CHECK_LIB(
328          fdata,
329          libfdata_list_element_get_element_value,
330          [ac_cv_libfdata_dummy=yes],
331          [ac_cv_libfdata=no])
332        AC_CHECK_LIB(
333          fdata,
334          libfdata_list_element_set_element_value,
335          [ac_cv_libfdata_dummy=yes],
336          [ac_cv_libfdata=no])
337
338        dnl Range list functions
339        dnl TODO: add functions
340
341        dnl Stream functions
342        AC_CHECK_LIB(
343          fdata,
344          libfdata_stream_initialize,
345          [ac_cv_libfdata_dummy=yes],
346          [ac_cv_libfdata=no])
347        AC_CHECK_LIB(
348          fdata,
349          libfdata_stream_free,
350          [ac_cv_libfdata_dummy=yes],
351          [ac_cv_libfdata=no])
352        AC_CHECK_LIB(
353          fdata,
354          libfdata_stream_clone,
355          [ac_cv_libfdata_dummy=yes],
356          [ac_cv_libfdata=no])
357
358        AC_CHECK_LIB(
359          fdata,
360          libfdata_stream_empty,
361          [ac_cv_libfdata_dummy=yes],
362          [ac_cv_libfdata=no])
363        AC_CHECK_LIB(
364          fdata,
365          libfdata_stream_resize,
366          [ac_cv_libfdata_dummy=yes],
367          [ac_cv_libfdata=no])
368        AC_CHECK_LIB(
369          fdata,
370          libfdata_stream_reverse,
371          [ac_cv_libfdata_dummy=yes],
372          [ac_cv_libfdata=no])
373
374        AC_CHECK_LIB(
375          fdata,
376          libfdata_stream_get_number_of_segments,
377          [ac_cv_libfdata_dummy=yes],
378          [ac_cv_libfdata=no])
379        AC_CHECK_LIB(
380          fdata,
381          libfdata_stream_get_segment_by_index,
382          [ac_cv_libfdata_dummy=yes],
383          [ac_cv_libfdata=no])
384        AC_CHECK_LIB(
385          fdata,
386          libfdata_stream_set_segment_by_index,
387          [ac_cv_libfdata_dummy=yes],
388          [ac_cv_libfdata=no])
389        AC_CHECK_LIB(
390          fdata,
391          libfdata_stream_prepend_segment,
392          [ac_cv_libfdata_dummy=yes],
393          [ac_cv_libfdata=no])
394        AC_CHECK_LIB(
395          fdata,
396          libfdata_stream_append_segment,
397          [ac_cv_libfdata_dummy=yes],
398          [ac_cv_libfdata=no])
399        AC_CHECK_LIB(
400          fdata,
401          libfdata_stream_set_mapped_size,
402          [ac_cv_libfdata_dummy=yes],
403          [ac_cv_libfdata=no])
404
405        AC_CHECK_LIB(
406          fdata,
407          libfdata_stream_get_segment_mapped_range,
408          [ac_cv_libfdata_dummy=yes],
409          [ac_cv_libfdata=no])
410        AC_CHECK_LIB(
411          fdata,
412          libfdata_stream_get_segment_index_at_offset,
413          [ac_cv_libfdata_dummy=yes],
414          [ac_cv_libfdata=no])
415        AC_CHECK_LIB(
416          fdata,
417          libfdata_stream_get_segment_at_offset,
418          [ac_cv_libfdata_dummy=yes],
419          [ac_cv_libfdata=no])
420
421        AC_CHECK_LIB(
422          fdata,
423          libfdata_stream_read_buffer,
424          [ac_cv_libfdata_dummy=yes],
425          [ac_cv_libfdata=no])
426        AC_CHECK_LIB(
427          fdata,
428          libfdata_stream_read_buffer_at_offset,
429          [ac_cv_libfdata_dummy=yes],
430          [ac_cv_libfdata=no])
431        AC_CHECK_LIB(
432          fdata,
433          libfdata_stream_write_buffer,
434          [ac_cv_libfdata_dummy=yes],
435          [ac_cv_libfdata=no])
436        AC_CHECK_LIB(
437          fdata,
438          libfdata_stream_seek_offset,
439          [ac_cv_libfdata_dummy=yes],
440          [ac_cv_libfdata=no])
441        AC_CHECK_LIB(
442          fdata,
443          libfdata_stream_get_offset,
444          [ac_cv_libfdata_dummy=yes],
445          [ac_cv_libfdata=no])
446        AC_CHECK_LIB(
447          fdata,
448          libfdata_stream_get_size,
449          [ac_cv_libfdata_dummy=yes],
450          [ac_cv_libfdata=no])
451
452        dnl Tree list functions
453        dnl TODO: add functions
454
455        dnl Vector list functions
456        dnl TODO: add functions
457
458        ac_cv_libfdata_LIBADD="-lfdata"])
459      ])
460    AS_IF(
461      [test "x$ac_cv_with_libfdata" != x && test "x$ac_cv_with_libfdata" != xauto-detect && test "x$ac_cv_libfdata" != xyes],
462      [AC_MSG_FAILURE(
463        [unable to find supported libfdata in directory: $ac_cv_with_libfdata],
464        [1])
465      ])
466    ])
467
468  AS_IF(
469    [test "x$ac_cv_libfdata" = xyes],
470    [AC_DEFINE(
471      [HAVE_LIBFDATA],
472      [1],
473      [Define to 1 if you have the `fdata' library (-lfdata).])
474    ])
475
476  AS_IF(
477    [test "x$ac_cv_libfdata" = xyes],
478    [AC_SUBST(
479      [HAVE_LIBFDATA],
480      [1]) ],
481    [AC_SUBST(
482      [HAVE_LIBFDATA],
483      [0])
484    ])
485  ])
486
487dnl Function to detect if libfdata dependencies are available
488AC_DEFUN([AX_LIBFDATA_CHECK_LOCAL],
489  [dnl No additional checks.
490
491  ac_cv_libfdata_CPPFLAGS="-I../libfdata";
492  ac_cv_libfdata_LIBADD="../libfdata/libfdata.la";
493
494  ac_cv_libfdata=local
495  ])
496
497dnl Function to detect how to enable libfdata
498AC_DEFUN([AX_LIBFDATA_CHECK_ENABLE],
499  [AX_COMMON_ARG_WITH(
500    [libfdata],
501    [libfdata],
502    [search for libfdata in includedir and libdir or in the specified DIR, or no if to use local version],
503    [auto-detect],
504    [DIR])
505
506  dnl Check for a shared library version
507  AX_LIBFDATA_CHECK_LIB
508
509  dnl Check if the dependencies for the local library version
510  AS_IF(
511    [test "x$ac_cv_libfdata" != xyes],
512    [AX_LIBFDATA_CHECK_LOCAL
513
514    AC_DEFINE(
515      [HAVE_LOCAL_LIBFDATA],
516      [1],
517      [Define to 1 if the local version of libfdata is used.])
518    AC_SUBST(
519      [HAVE_LOCAL_LIBFDATA],
520      [1])
521    ])
522
523  AM_CONDITIONAL(
524    [HAVE_LOCAL_LIBFDATA],
525    [test "x$ac_cv_libfdata" = xlocal])
526  AS_IF(
527    [test "x$ac_cv_libfdata_CPPFLAGS" != "x"],
528    [AC_SUBST(
529      [LIBFDATA_CPPFLAGS],
530      [$ac_cv_libfdata_CPPFLAGS])
531    ])
532  AS_IF(
533    [test "x$ac_cv_libfdata_LIBADD" != "x"],
534    [AC_SUBST(
535      [LIBFDATA_LIBADD],
536      [$ac_cv_libfdata_LIBADD])
537    ])
538
539  AS_IF(
540    [test "x$ac_cv_libfdata" = xyes],
541    [AC_SUBST(
542      [ax_libfdata_pc_libs_private],
543      [-lfdata])
544    ])
545
546  AS_IF(
547    [test "x$ac_cv_libfdata" = xyes],
548    [AC_SUBST(
549      [ax_libfdata_spec_requires],
550      [libfdata])
551    AC_SUBST(
552      [ax_libfdata_spec_build_requires],
553      [libfdata-devel])
554    ])
555  ])
556