1dnl 2dnl SOX_NAME_TAG(NAME-TAG, [BODY]) 3dnl 4dnl Define using m4_pushdef: 5dnl N First word of NAME-TAG 6dnl L N sanitised for use as shell variable 7dnl T Second word of NAME-TAG, if present, else 8dnl L converted to upper case 9dnl 10dnl If BODY is provided, substitute it and m4_popdef N, L, and T. 11dnl Otherwise, leave these macros defined. 12dnl 13AC_DEFUN([SOX_NAME_TAG], [ 14 m4_pushdef([nt], m4_split(m4_normalize($1))) 15 m4_pushdef([N], m4_car(nt)) 16 m4_pushdef([L], m4_bpatsubst(N, [[^0-9A-Za-z]], [_])) 17 m4_pushdef([T], m4_default(m4_argn([2], nt), m4_toupper(L))) 18 m4_popdef([nt]) 19 m4_ifnblank([$2], [$2 m4_popdef([N], [L], [T])]) 20]) 21 22dnl 23dnl SOX_INCLUDE(HEADER) 24dnl 25dnl Expands to "#include <HEADER>" followed by a newline. 26dnl 27AC_DEFUN([SOX_INCLUDE], [[#include <]]$1[[> 28]]) 29 30dnl 31dnl SOX_CHECK_HEADERS(HEADERS, [DECL], [IF-FOUND], [IF-NOT-FOUND], 32dnl [EXTRA-HEADERS]) 33dnl 34dnl Check for presence of headers. 35dnl 36dnl HEADERS List of headers to try, stopping when one is found 37dnl DECL Optional symbol to check for 38dnl IF-FOUND Action to take if one of HEADERS is found 39dnl IF-NOT-FOUND Action to take if none of HEADERS are found 40dnl EXTRA-HEADERS Additional headers to #include 41dnl 42dnl Outputs: 43dnl HAVE_HEADER: Set with AC_DEFINE to 1 for the first header found 44dnl 45AC_DEFUN([SOX_CHECK_HEADERS], [ 46 sox_ch_found=no 47 AC_CHECK_HEADERS([$1], [sox_ch_found=$ac_header; break], [], 48 [m4_map([SOX_INCLUDE], m4_split([$5]))]) 49 AS_CASE([$sox_ch_found], [no], [$4], [m4_ifblank([$2], [$3], 50 [AC_CHECK_DECL([$2], [$3], [$4], [SOX_INCLUDE([$sox_ch_found])])])]) 51]) 52 53dnl 54dnl SOX_CHECK_LIB(TAG, HEADERS, LIB, FUNC, [IF-FOUND], [IF-NOT-FOUND], 55dnl [EXTRA-HEADERS], [EXTRA-LIBS]) 56dnl 57dnl Check for presence of headers and library. 58dnl 59dnl Arguments: 60dnl TAG Prefix/suffix for output variable 61dnl HEADERS List of headers searched with SOX_CHECK_HEADERS 62dnl LIB Name of library to check 63dnl FUNC Name of function in library 64dnl IF-FOUND Action to take on success 65dnl IF-NOT-FOUND Action to take on failure 66dnl EXTRA-HEADERS Passed to SOX_CHECK_HEADERS 67dnl EXTRA-LIBS Additional libraries (-lLIB) and linker flags 68dnl 69dnl Outputs: 70dnl HAVE_TAG AC_DEFINE to 1 if found 71dnl Set shell variable to 'yes' on success, 'no' otherwise 72dnl TAG_LIBS Add '-lLIB EXTRA-LIBS' to start of shell variable 73dnl 74AC_DEFUN([SOX_CHECK_LIB], [ 75 m4_pushdef([lib], [m4_default([$3], [c])]) 76 m4_pushdef([flags], [m4_ifnblank([$3], [-l$3 $8], [$8])]) 77 HAVE_[]$1=no 78 SOX_CHECK_HEADERS([$2], [], [AC_CHECK_LIB(lib, [$4], 79 [HAVE_[]$1=yes], [], [$8 $$1[]_LIBS])], [], [$7]) 80 AS_CASE([$HAVE_[]$1], [yes], [ 81 AC_DEFINE([HAVE_]$1, [1], [Define if $4 exists in ]flags) 82 $1[]_LIBS="flags $$1[]_LIBS" 83 $5], [$6]) 84 AC_SUBST($1[_CFLAGS]) 85 AC_SUBST($1[_LIBS]) 86 m4_popdef([lib], [flags]) 87]) 88 89dnl 90dnl SOX_NEED_DL(VAL, DEP) 91dnl 92dnl Exit with an error message if VAL equals 'dyn' and dynamic loading 93dnl is not available. 94dnl 95AC_DEFUN([SOX_NEED_DL], [ 96 AS_CASE([$1-$HAVE_LIBLTDL], [dyn-no], 97 [AC_MSG_ERROR([dynamic loading not available, needed by $2])]) 98]) 99 100dnl 101dnl SOX_ARG(TYPE, NAME, DESC, [TEST], [IF-YES], [IF-NO], [IF-FAIL], 102dnl [EXTRA-CHOICES], [DEFAULT]) 103dnl 104AC_DEFUN([SOX_ARG], [SOX_NAME_TAG([$2], [ 105 m4_pushdef([ATU], m4_toupper($1)) 106 m4_pushdef([ATL], m4_tolower($1)) 107 m4_pushdef([optdef], m4_default([$9], [yes])) 108 m4_pushdef([opts], m4_split([yes no $8])) 109 m4_pushdef([opts_help], m4_bpatsubst(m4_apply([m4_join], [[/], opts]), 110 \<optdef\>, m4_toupper(optdef))) 111 m4_pushdef([opts_sh], m4_apply([m4_join], [[|], opts])) 112 m4_indir(AC_ARG_[]ATU, [N], AS_HELP_STRING([--ATL-N], [$3 (opts_help)])) 113 HAVE_[]T=${ATL[]_[]L:-optdef} 114 AS_CASE([$HAVE_[]T], 115 [no], [], 116 [opts_sh], [$4], 117 [AC_MSG_ERROR([invalid value for --ATL-N])]) 118 AS_CASE([$ATL[]_[]L-$HAVE_[]T], 119 [no-*|-no], [$6], 120 [*-no], [$7], 121 [$5]) 122 AM_CONDITIONAL([HAVE_]T, [test $HAVE_[]T != no]) 123 m4_popdef([ATU], [ATL], [optdef], [opts], [opts_help], [opts_sh]) 124])]) 125 126dnl 127dnl SOX_ENABLE(NAME, DESC, [TEST], [IF-YES], [IF-NO], [IF-FAIL], 128dnl [EXTRA-CHOICES], [DEFAULT]) 129dnl 130AC_DEFUN([SOX_ENABLE], [ 131 SOX_ARG([enable], $@) 132]) 133 134dnl 135dnl SOX_WITH(NAME, DESC, [TEST], [IF-YES], [IF-NO], [IF-FAIL], 136dnl [EXTRA-CHOICES], [DEFAULT]) 137dnl 138AC_DEFUN([SOX_WITH], [ 139 SOX_ARG([with], $@) 140]) 141 142dnl 143dnl SOX_WITH_LIB(NAME, HEADERS, LIB, FUNC, [IF-FOUND], [IF-NOT-FOUND], 144dnl [INCLUDES], [EXTRA-LIBS], [EXTRA-CHOICES], [DEFAULT]) 145dnl 146AC_DEFUN([SOX_WITH_LIB], [SOX_NAME_TAG([$1], [ 147 SOX_WITH([$1], [Use N], 148 [AS_CASE([$HAVE_[]T], [yes|dyn], [sox_wl=$3], [sox_wl=$HAVE_[]T]) 149 SOX_CHECK_LIB([T], [$2], [$sox_wl], [$4], [], [], [$7], [$8])], 150 [$5], [$6], [AC_MSG_FAILURE([N not found])], 151 [$9 *], m4_argn([8], m4_shift2($@))) dnl BSD m4 can't count to 10 152 SOX_REPORT([with_libs], [N], [$HAVE_]T) 153])]) 154 155dnl 156dnl SOX_DL_LIB(NAME, HEADERS, LIB, FUNC, [IF-STATIC], [IF-DL], [IF-NOT-FOUND], 157dnl [EXTRA-HEADERS], [EXTRA-LIBS]) 158dnl 159AC_DEFUN([SOX_DL_LIB], [SOX_NAME_TAG([$1], [ 160 SOX_NEED_DL([$with_[]L], [--with-L=dyn]) 161 SOX_WITH_LIB([$1], [$2], [$3], [$4], [], [$7], [$8], [$9], [dyn]) 162 AS_CASE([$with_[]L-$HAVE_[]T], 163 [dyn-*], [AC_DEFINE([DL_]T, 1, [Define to dlopen() ]N) 164 HAVE_[]T=dyn; $6], 165 [*-yes], [$5]) 166])]) 167 168dnl 169dnl SOX_REQUIRE1(FEATURE, TAG, [IF-FOUND]) 170dnl 171AC_DEFUN([SOX_REQUIRE1], [ 172 AS_CASE([$HAVE_$1], 173 [yes|dyn], [$2_CFLAGS="$$2_CFLAGS $$1_CFLAGS"; $3]) 174 AS_CASE([$HAVE_$1], 175 [yes], [$2_LIBS="$$2_LIBS $$1_LIBS"]) 176]) 177 178dnl 179dnl SOX_REQUIRE(FEATURES, TAG, [IF-NOT-FOUND]) 180dnl 181AC_DEFUN([SOX_REQUIRE], [ 182 sox_req_found=no 183 m4_map_args_w([$1], [SOX_REQUIRE1(], [, $2, [sox_req_found=yes])]) 184 AS_CASE([$sox_req_found], [yes], [], [$3]) 185]) 186 187dnl 188dnl SOX_FMT(NAME, [TEST], [SECTION]) 189dnl 190dnl Add an optional format with corresponding --enable flag. 191dnl 192dnl Arguments: 193dnl NAME Name of format, passed to SOX_NAME_TAG setting N and T 194dnl TEST Test for prerequisites, must set HAVE_T to 'no' if not met 195dnl SECTION Section format belongs to, default 'formats' 196dnl 197dnl Outputs: 198dnl HAVE_T Set shell variable to 'yes', 'no', or 'dyn' 199dnl AC_DEFINE and AM_CONDITIONAL true if not 'no' 200dnl STATIC_T AC_DEFINE and AM_CONDITIONAL true if HAVE_T = 'yes' 201dnl 202AC_DEFUN([SOX_FMT], [SOX_NAME_TAG([$1], [ 203 m4_pushdef([section], m4_default([$3], [formats])) 204 SOX_NEED_DL([$with_[]L], [--enable-L=dyn]) 205 SOX_ENABLE([$1], [Enable N], [$2], 206 [AC_DEFINE([HAVE_]T, [1], [Define if ]N[ is enabled]) 207 sox_[]section="$sox_[]section L"], [], 208 [AC_MSG_FAILURE([N not available])], 209 [dyn], [${HAVE_FORMATS:-yes}]) 210 AS_CASE([$HAVE_[]T], 211 [yes], [AC_DEFINE([STATIC_]T, [1], [Define if ]N[ is linked in])]) 212 AC_SUBST(T[_CFLAGS]) 213 AC_SUBST(T[_LIBS]) 214 AM_CONDITIONAL([STATIC_]T, [test $HAVE_[]T = yes]) 215 SOX_REPORT(section, [N], [$HAVE_]T) 216 m4_popdef([section]) 217])]) 218 219dnl 220dnl SOX_FMT_REQ(NAME, FEATURES, [SECTION]) 221dnl 222AC_DEFUN([SOX_FMT_REQ], [ 223 SOX_FMT([$1], [SOX_REQUIRE([$2], [T], [HAVE_[]T=no])], [$3]) 224]) 225 226dnl 227dnl SOX_FMT_HEADERS(NAME, HEADERS, [DECL], [EXTRA-HEADERS], [SECTION]) 228dnl 229dnl Wrapper for SOX_FMT with SOX_CHECK_HEADERS as test. 230dnl 231AC_DEFUN([SOX_FMT_HEADERS], [ 232 SOX_FMT([$1], 233 [SOX_CHECK_HEADERS([$2], [$3], [], [HAVE_[]T=no], [$4])], [$5]) 234]) 235 236dnl 237dnl SOX_FMT_LIB(NAME, HEADERS, LIB, FUNC, [EXTRA-HEADERS], [EXTRA-LIBS], 238dnl [SECTION]) 239dnl 240dnl Wrapper for SOX_FMT with SOX_CHECK_LIB as test. 241dnl 242AC_DEFUN([SOX_FMT_LIB], [ 243 SOX_FMT([$1], [ 244 SOX_CHECK_LIB([LIB[]T], [$2], [$3], [$4], [], [HAVE_[]T=no], [$5], [$6]) 245 T[]_CFLAGS=$LIB[]T[]_CFLAGS 246 T[]_LIBS=$LIB[]T[]_LIBS], [$7]) 247]) 248 249dnl 250dnl SOX_FMT_PKG(NAME, PKG) 251dnl 252AC_DEFUN([SOX_FMT_PKG], [ 253 SOX_FMT([$1], [PKG_CHECK_MODULES(T, [$2], [], [HAVE_[]T=no])]) 254]) 255 256dnl 257dnl SOX_REPORT_SECTION(NAME, TITLE, [FILTER]) 258dnl 259AC_DEFUN([SOX_REPORT_SECTION], [ 260 m4_append([sox_rep_sections], [$1], [ ]) 261 m4_define([sox_rep_title_$1], [$2]) 262 m4_define([sox_rep_filter_$1], m4_default([$3], [cat])) 263]) 264 265dnl 266dnl SOX_REPORT(SECTION, DESC, VAL) 267dnl 268AC_DEFUN([SOX_REPORT], [ 269 m4_append([sox_rep_text_$1], AS_HELP_STRING([$2], [$3]), m4_newline) 270]) 271 272dnl 273dnl SOX_REPORT_PRINT1(SECTION) 274dnl 275AC_DEFUN([SOX_REPORT_PRINT1], [ 276 echo; echo "sox_rep_title_$1" 277 sox_rep_filter_$1 <<EOF 278sox_rep_text_$1 279EOF 280]) 281 282dnl 283dnl SOX_REPORT_PRINT 284dnl 285AC_DEFUN([SOX_REPORT_PRINT], [ 286 m4_map([SOX_REPORT_PRINT1], m4_split(sox_rep_sections)) 287]) 288