• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1dnl Process this file with autoconf to produce a configure script.
2AC_PREREQ(2.59)
3AC_INIT(alsa-utils, 1.2.6)
4AC_CONFIG_SRCDIR([aplay/aplay.c])
5AC_PREFIX_DEFAULT(/usr)
6AM_INIT_AUTOMAKE
7
8AM_MAINTAINER_MODE([enable])
9
10AM_GNU_GETTEXT([external])
11AM_GNU_GETTEXT_VERSION([0.19.8])
12
13dnl Checks for programs.
14
15AC_PROG_CC
16dnl AC_PROG_CXX
17AC_PROG_INSTALL
18AC_PROG_MKDIR_P
19AC_PROG_LN_S
20AC_PROG_SED
21PKG_PROG_PKG_CONFIG
22AM_PATH_ALSA(1.2.5)
23if test "x$enable_alsatest" = "xyes"; then
24AC_CHECK_FUNC([snd_ctl_elem_add_enumerated],
25	      , [AC_ERROR([No user enum control support in alsa-lib])])
26fi
27
28dnl Check components
29AC_CHECK_HEADERS([alsa/pcm.h], [have_pcm="yes"], [have_pcm="no"],
30  [#include <alsa/asoundlib.h>])
31AC_CHECK_HEADERS([alsa/mixer.h], [have_mixer="yes"], [have_mixer="no"],
32  [#include <alsa/asoundlib.h>])
33AC_CHECK_HEADERS([alsa/rawmidi.h], [have_rawmidi="yes"], [have_rawmidi="no"],
34  [#include <alsa/asoundlib.h>])
35AC_CHECK_HEADERS([alsa/seq.h], [have_seq="yes"], [have_seq="no"],
36  [#include <alsa/asoundlib.h>])
37AC_CHECK_HEADERS([alsa/use-case.h], [have_ucm="yes"], [have_ucm="no"],
38  [#include <alsa/asoundlib.h>])
39AC_CHECK_HEADERS([alsa/topology.h], [have_topology="yes"], [have_topology="no"],
40  [#include <alsa/asoundlib.h>])
41AC_CHECK_HEADERS([samplerate.h], [have_samplerate="yes"], [have_samplerate="no"],
42  [#include <samplerate.h>])
43
44AC_CHECK_LIB([asound], [snd_seq_client_info_get_card], [HAVE_SEQ_CLIENT_INFO_GET_CARD="yes"])
45if test "$HAVE_SEQ_CLIENT_INFO_GET_CARD" = "yes" ; then
46    AC_DEFINE([HAVE_SEQ_CLIENT_INFO_GET_CARD], 1, [alsa-lib supports snd_seq_client_info_get_card])
47fi
48AC_CHECK_LIB([asound], [snd_seq_client_info_get_pid], [HAVE_SEQ_CLIENT_INFO_GET_PID="yes"])
49if test "$HAVE_SEQ_CLIENT_INFO_GET_PID" = "yes" ; then
50    AC_DEFINE([HAVE_SEQ_CLIENT_INFO_GET_PID], 1, [alsa-lib supports snd_seq_client_info_get_pid])
51fi
52AC_CHECK_LIB([atopology], [snd_tplg_save], [have_topology="yes"], [have_topology="no"])
53
54#
55# NOTE: The library 'libffado' (at least v2.4.1) executes ctor/dtor of instances
56# for some objects in startup/finish routines of C runtime. As a result, it
57# outputs some superfluos messages. Furthermore, it brings much memory leak
58# internally. Totally, libffado support is not recommended at all in usual
59# purposes except for technical preview.
60#
61AC_CHECK_LIB([ffado], [ffado_streaming_init], [have_ffado="yes"], [have_ffado="no"])
62AS_IF([test x"$have_ffado" = xyes],
63      [AC_DEFINE([WITH_FFADO], [1], [Define if FFADO library is available])])
64
65# Test programs for axfer use shm by memfd_create(2). If not supported, open(2) is used alternatively.
66AC_CHECK_FUNC([memfd_create], [have_memfd_create="yes"], [have_memfd_create="no"])
67AS_IF([test x$have_memfd_create = xyes],
68      [AC_DEFINE([HAVE_MEMFD_CREATE], [1], [Define if Linux kernel supports memfd_create system call])])
69
70AM_CONDITIONAL(HAVE_PCM, test "$have_pcm" = "yes")
71AM_CONDITIONAL(HAVE_MIXER, test "$have_mixer" = "yes")
72AM_CONDITIONAL(HAVE_RAWMIDI, test "$have_rawmidi" = "yes")
73AM_CONDITIONAL(HAVE_SEQ, test "$have_seq" = "yes")
74AM_CONDITIONAL(HAVE_UCM, test "$have_ucm" = "yes")
75AM_CONDITIONAL(HAVE_TOPOLOGY, test "$have_topology" = "yes")
76AM_CONDITIONAL(HAVE_SAMPLERATE, test "$have_samplerate" = "yes")
77AM_CONDITIONAL(HAVE_FFADO, test "$have_ffado" = "yes")
78
79dnl Use tinyalsa
80alsabat_backend_tiny=
81AC_ARG_ENABLE(alsabat_backend_tiny,
82    AS_HELP_STRING([--enable-alsabat-backend-tiny], [Use tinyalsa for alsabat backend]),
83    [case "${enableval}" in
84      yes) alsabat_backend_tiny=true ;;
85      no) alsabat_backend_tiny=false ;;
86      *) AC_MSG_ERROR(bad value ${enableval} for --enable-alsabat-backend-tiny) ;;
87    esac],[alsabat_backend_tiny=false])
88
89dnl Disable bat
90bat=
91if test "$have_pcm" = "yes"; then
92AC_ARG_ENABLE(bat,
93     AS_HELP_STRING([--disable-bat], [Disable bat compilation]),
94     [case "${enableval}" in
95       yes) bat=true ;;
96       no)  bat=false ;;
97       *) AC_MSG_ERROR(bad value ${enableval} for --enable-bat) ;;
98     esac],[bat=true])
99fi
100AM_CONDITIONAL(BAT, test x$bat = xtrue)
101
102if test x$bat = xtrue; then
103
104  saved_CFLAGS="$CFLAGS"
105  saved_LDFLAGS="$LDFLAGS"
106  saved_LIBS="$LIBS"
107  FFTW_INC=""
108  FFTW_LIB=""
109  FFTW_CFLAGS=""
110  dnl Check for libfftw3
111  have_libfftw3="yes"
112  AC_CHECK_LIB([fftw3f], [fftwf_malloc], , [have_libfftw3="no"])
113  dnl Check for libtinyalsa
114  have_libtinyalsa=
115  if test x$alsabat_backend_tiny = xtrue; then
116    have_libtinyalsa="yes"
117    AC_CHECK_LIB([tinyalsa], [pcm_open], , [have_libtinyalsa="no"])
118  fi
119  AC_CHECK_LIB([m], [sqrtf], , [AC_MSG_ERROR([Error: Need sqrtf])])
120  AC_CHECK_LIB([pthread], [pthread_create], , [AC_MSG_ERROR([Error: need PTHREAD library])])
121  FFTW_CFLAGS="$CFLAGS"
122  FFTW_LIB="$LIBS"
123  CFLAGS="$saved_CFLAGS"
124  LDFLAGS="$saved_LDFLAGS"
125  LIBS="$saved_LIBS"
126  AC_SUBST(FFTW_INC)
127  AC_SUBST(FFTW_LIB)
128  AC_SUBST(FFTW_CFLAGS)
129
130fi
131AM_CONDITIONAL(HAVE_LIBFFTW3, test "$have_libfftw3" = "yes")
132AM_CONDITIONAL(HAVE_LIBTINYALSA, test "$have_libtinyalsa" = "yes")
133
134dnl Check for librt
135LIBRT=""
136AC_MSG_CHECKING(for librt)
137AC_ARG_WITH(librt,
138  AS_HELP_STRING([--with-librt], [Use librt for monotonic clock (default = yes)]),
139  [ have_librt="$withval" ], [ have_librt="yes" ])
140if test "$have_librt" = "yes"; then
141  AC_CHECK_LIB([rt], [clock_gettime], [HAVE_LIBRT="yes"])
142  if test "$HAVE_LIBRT" = "yes" ; then
143    LIBRT="-lrt"
144    AC_DEFINE([HAVE_LIBRT], 1, [Have librt])
145    AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Have clock gettime])
146  fi
147else
148  AC_MSG_RESULT(no)
149fi
150
151dnl Disable alsamixer
152CURSESINC=""
153CURSESLIB=""
154CURSES_CFLAGS=""
155alsamixer=
156if test "$have_mixer" = "yes"; then
157AC_ARG_ENABLE(alsamixer,
158     AS_HELP_STRING([--disable-alsamixer], [Disable alsamixer compilation]),
159     [case "${enableval}" in
160       yes) alsamixer=true ;;
161       no)  alsamixer=false ;;
162       *) AC_MSG_ERROR(bad value ${enableval} for --enable-alsamixer) ;;
163     esac],[alsamixer=true])
164fi
165AM_CONDITIONAL(ALSAMIXER, test x$alsamixer = xtrue)
166
167dnl Disable alsaconf
168AC_ARG_ENABLE(alsaconf,
169     AS_HELP_STRING([--disable-alsaconf], [Disable alsaconf packaging]),
170     [case "${enableval}" in
171       yes) alsaconf=true ;;
172       no)  alsaconf=false ;;
173       *) AC_MSG_ERROR(bad value ${enableval} for --enable-alsaconf) ;;
174     esac],[alsaconf=true])
175AM_CONDITIONAL(ALSACONF, test x$alsaconf = xtrue)
176
177dnl Disable alsaloop
178AC_ARG_ENABLE(alsaloop,
179     AS_HELP_STRING([--disable-alsaloop], [Disable alsaloop packaging]),
180     [case "${enableval}" in
181       yes) alsaloop=true ;;
182       no)  alsaloop=false ;;
183       *) AC_MSG_ERROR(bad value ${enableval} for --enable-alsaloop) ;;
184     esac],[alsaloop=true])
185AM_CONDITIONAL(ALSALOOP, test x$alsaloop = xtrue)
186
187xmlto_available=""
188AC_ARG_ENABLE(xmlto,
189 AS_HELP_STRING([--disable-xmlto], [Disable man page creation via xmlto]),
190 xmlto="$enableval", xmlto="yes")
191if test "$xmlto" = "yes"; then
192  AC_CHECK_PROG([xmlto_available], [xmlto], [yes])
193fi
194AM_CONDITIONAL(USE_XMLTO, test x"$xmlto_available" = xyes)
195
196rst2man_available=""
197AC_ARG_ENABLE(rst2man,
198 AS_HELP_STRING([--disable-rst2man], [Disable man page creation via rst2man]),
199 rst2man="$enableval", rst2man="yes")
200if test "$rst2man" = "yes"; then
201  AC_CHECK_PROG([rst2man_available], [rst2man], [yes])
202fi
203AM_CONDITIONAL(USE_RST2MAN, test x"$rst2man_available" = xyes)
204
205AC_ARG_WITH(
206        [udev-rules-dir],
207        AS_HELP_STRING([--with-udev-rules-dir=DIR],[Directory where to install udev rules to (default=auto)]),
208        [udevrulesdir="$withval"],
209        [udevdir=$($PKG_CONFIG udev --variable=udevdir)
210        if test "x$udevdir" = "x"; then
211            udevrulesdir="/lib/udev/rules.d"
212        else
213            udevrulesdir="$udevdir/rules.d"
214        fi])
215AC_SUBST(udevrulesdir)
216
217dnl Checks for header files.
218AC_HEADER_STDC
219if test x$alsamixer = xtrue; then
220  AC_ARG_WITH(curses,
221    AS_HELP_STRING([--with-curses=libname], [Specify the curses library to use (default=auto)]),
222    curseslib="$withval",
223    curseslib="auto")
224  CURSESLIBDIR=""
225  NCURSESLIBSUFFIX=""
226  CURSES_NLS="no"
227  if test "$curseslib" = "ncursesw" -o \( "$curseslib" = "auto" -a "$USE_NLS" = "yes" \); then
228    dnl First try out pkg-config, then fall back to old config scripts.
229    PKG_CHECK_MODULES([NCURSESW], [ncursesw], [
230        CURSESINC="<ncurses.h>"
231        CURSESLIB="${NCURSESW_LIBS}"
232        CURSESLIBDIR=
233        CURSES_CFLAGS="${NCURSESW_CFLAGS}"
234        curseslib="ncursesw"
235      ], [
236        AC_CHECK_PROG([ncursesw5_config], [ncursesw5-config], [yes])
237        if test "$ncursesw5_config" = "yes"; then
238          CURSESINC="<ncurses.h>"
239          CURSESLIB=`ncursesw5-config --libs`
240          CURSESLIBDIR=`ncursesw5-config --libdir`
241          CURSES_CFLAGS=`ncursesw5-config --cflags`
242          curseslib="ncursesw"
243        else
244          AC_CHECK_LIB(ncursesw, initscr,
245                     [ CURSESINC='<ncurses.h>'; CURSESLIB='-lncursesw'; curseslib="ncursesw"])
246        fi
247      ])
248    if test -n "$CURSESINC"; then
249      NCURSESLIBSUFFIX="w"
250      CURSES_NLS="yes"
251    fi
252  fi
253  if test "$curseslib" = "ncurses" -o "$curseslib" = "auto"; then
254    dnl First try out pkg-config, then fall back to old config scripts.
255    PKG_CHECK_MODULES([NCURSES], [ncurses], [
256        CURSESINC="<ncurses.h>"
257        CURSESLIB="${NCURSES_LIBS}"
258        CURSESLIBDIR=
259        CURSES_CFLAGS="${NCURSES_CFLAGS}"
260        curseslib="ncurses"
261      ], [
262        AC_CHECK_PROG([ncurses5_config], [ncurses5-config], [yes])
263        if test "$ncurses5_config" = "yes"; then
264          CURSESINC="<ncurses.h>"
265          CURSESLIB=`ncurses5-config --libs`
266          CURSESLIBDIR=`ncurses5-config --libdir`
267          CURSES_CFLAGS=`ncurses5-config --cflags`
268          curseslib="ncurses"
269        else
270          AC_CHECK_LIB(ncurses, initscr,
271                     [ CURSESINC='<ncurses.h>'; CURSESLIB='-lncurses'; curseslib="ncurses"])
272        fi
273      ])
274  fi
275  if test "$curseslib" = "curses" -o "$curseslib" = "auto"; then
276    AC_CHECK_LIB(curses, initscr,
277                 [ CURSESINC='<curses.h>'; CURSESLIB='-lcurses'; curseslib="curses"])
278  fi
279  if test -z "$CURSESINC"; then
280     AC_MSG_ERROR(this packages requires a curses library)
281  fi
282
283  AC_MSG_CHECKING([for curses library])
284  AC_MSG_RESULT([$curseslib])
285  AC_MSG_CHECKING([for curses header name])
286  AC_MSG_RESULT([$CURSESINC])
287  AC_MSG_CHECKING([for curses compiler flags])
288  AC_MSG_RESULT([$CURSES_CFLAGS])
289
290  dnl CURSESLIBS might have the library path at the beginning.  If so, we cut it
291  dnl off so that we can insert the other curses libraries before the ncurses
292  dnl library but after the library path (which is later again prepended below).
293  if test -n "$CURSESLIBDIR"; then
294    if test "-L$CURSESLIBDIR " = "$(echo $CURSESLIB | cut -c-$((${#CURSESLIBDIR}+3)) )"; then
295      CURSESLIB="$(echo $CURSESLIB | cut -c$((${#CURSESLIBDIR}+4))-)"
296    fi
297  fi
298
299  saved_CFLAGS="$CFLAGS"
300  saved_LDFLAGS="$LDFLAGS"
301  saved_LIBS="$LIBS"
302  CFLAGS="$CFLAGS $CURSES_CFLAGS"
303  if test -n "$CURSESLIBDIR"; then
304    LDFLAGS="$LDFLAGS -L$CURSESLIBDIR"
305  fi
306  LIBS="$CURSESLIB $LIBS"
307
308  AC_TRY_LINK([#include <panel.h>], [set_escdelay(100);],[HAVE_CURSES_ESCDELAY="yes"])
309  if test "$HAVE_CURSES_ESCDELAY" = "yes"; then
310    AC_DEFINE([HAVE_CURSES_ESCDELAY], 1, [Have curses set_escdelay])
311  fi
312
313  if test "$USE_NLS" = "yes"; then
314    AC_MSG_CHECKING([for curses NLS support])
315    dnl In theory, a single-byte curses works just fine in ISO 8859-* locales.
316    dnl In practice, however, everybody uses UTF-8 nowadays, so we'd better
317    dnl check for wide-character support.
318    dnl For ncurses/ncursesw, CURSES_NLS was already set above.
319    if test "$curseslib" = "curses"; then
320      AC_TRY_LINK([
321          #define _XOPEN_SOURCE 1
322          #define _XOPEN_SOURCE_EXTENDED 1
323          #include <curses.h>
324        ], [
325          cchar_t wc;
326          setcchar(&wc, L"x", A_NORMAL, 0, 0);
327        ],
328        [CURSES_NLS="yes"])
329    fi
330    AC_MSG_RESULT([$CURSES_NLS])
331    if test "$CURSES_NLS" = "yes"; then
332      AC_DEFINE([ENABLE_NLS_IN_CURSES], [1],
333                [Define if curses-based programs can show translated messages.])
334    fi
335  fi
336
337  AC_CHECK_HEADERS([panel.h menu.h form.h], [],
338                   [AC_MSG_ERROR([required curses helper header not found])])
339  AC_CHECK_LIB([panel$NCURSESLIBSUFFIX], [new_panel],
340               [CURSESLIB="-lpanel$NCURSESLIBSUFFIX $CURSESLIB"],
341               [AC_MSG_ERROR([panel$NCURSESLIBSUFFIX library not found])])
342  AC_CHECK_LIB([menu$NCURSESLIBSUFFIX], [new_menu],
343               [CURSESLIB="-lmenu$NCURSESLIBSUFFIX $CURSESLIB"],
344               [AC_MSG_ERROR([menu$NCURSESLIBSUFFIX library not found])])
345  AC_CHECK_LIB([form$NCURSESLIBSUFFIX], [new_form],
346               [CURSESLIB="-lform$NCURSESLIBSUFFIX $CURSESLIB"],
347               [AC_MSG_ERROR([form$NCURSESLIBSUFFIX library not found])])
348
349  CFLAGS="$saved_CFLAGS"
350  LDFLAGS="$saved_LDFLAGS"
351  LIBS="$saved_LIBS"
352
353  if test -n "$CURSESLIBDIR"; then
354    CURSESLIB="-L$CURSESLIBDIR $CURSESLIB"
355  fi
356
357  AC_MSG_CHECKING([for curses linker flags])
358  AC_MSG_RESULT([$CURSESLIB])
359fi
360
361AC_SUBST(CURSESINC)
362AC_SUBST(CURSESLIB)
363AC_SUBST(CURSES_CFLAGS)
364
365test "x$prefix" = xNONE && prefix=$ac_default_prefix
366
367eval dir="$datadir"
368case "$dir" in
369/*) ;;
370*) dir="$prefix/share"
371esac
372
373soundsdir="$dir/sounds/alsa"
374AC_DEFINE_UNQUOTED(SOUNDSDIR, "$soundsdir", [directory containing sample data])
375
376mydatadir="$dir/alsa"
377AC_DEFINE_UNQUOTED(DATADIR, "$mydatadir", [directory containing alsa configuration])
378AC_SUBST(mydatadir)
379
380AC_ARG_WITH(testsound,
381  AS_HELP_STRING([--with-testsound=file], [give the path of test sound file for alsaconf]),
382  TESTSOUND="$withval",
383  TESTSOUND="$dir/test.wav")
384AC_SUBST(TESTSOUND)
385
386AC_CONFIG_HEADERS(include/aconfig.h)
387
388dnl Checks for typedefs, structures, and compiler characteristics.
389AC_C_CONST
390AC_C_INLINE
391AC_HEADER_TIME
392
393dnl Checks for library functions.
394AC_PROG_GCC_TRADITIONAL
395
396dnl Enable largefile support
397AC_SYS_LARGEFILE
398
399SAVE_UTIL_VERSION
400
401AC_SUBST(LIBRT)
402
403dnl Check for systemd
404PKG_CHECK_MODULES(SYSTEMD, [systemd >= 18],
405        [have_min_systemd="yes"],
406        [have_min_systemd="no"])
407AC_ARG_WITH([systemdsystemunitdir],
408        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
409        [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
410if test "x$with_systemdsystemunitdir" != xno; then
411        AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
412fi
413AM_CONDITIONAL(HAVE_SYSTEMD, [test "$have_min_systemd" = "yes" \
414        -a -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
415
416AC_ARG_WITH([asound-state-dir],
417        AS_HELP_STRING([--with-asound-state-dir=DIR], [Directory to place asound.state file in]),
418        [ASOUND_STATE_DIR="$withval"],
419        [ASOUND_STATE_DIR="/var/lib/alsa"])
420AC_SUBST(ASOUND_STATE_DIR)
421
422AC_ARG_WITH([alsactl-lock-dir],
423        AS_HELP_STRING([--with-alsactl-lock-dir=DIR], [Directory to place lock files in]),
424        [ASOUND_LOCK_DIR="$withval"],
425        [ASOUND_LOCK_DIR="/var/lock"])
426AC_SUBST(ASOUND_LOCK_DIR)
427
428AC_ARG_WITH([alsactl-pidfile-dir],
429        AS_HELP_STRING([--with-alsactl-pidfile-dir=DIR], [Directory to place alsactl.pid file in]),
430        [ALSACTL_PIDFILE_DIR="$withval"],
431        [ALSACTL_PIDFILE_DIR="/var/run"])
432AC_SUBST(ALSACTL_PIDFILE_DIR)
433
434AC_ARG_WITH([alsactl-daemonswitch],
435        AS_HELP_STRING([--with-alsactl-daemonswitch=FILE], [File to test for the daemon mode]),
436        [ALSACTL_DAEMONSWITCH="$withval"],
437        [ALSACTL_DAEMONSWITCH="/etc/alsa/state-daemon.conf"])
438AC_SUBST(ALSACTL_DAEMONSWITCH)
439
440AC_OUTPUT(Makefile alsactl/Makefile alsactl/init/Makefile \
441	  alsamixer/Makefile amidi/Makefile amixer/Makefile \
442	  m4/Makefile po/Makefile.in \
443	  alsaconf/alsaconf alsaconf/Makefile \
444	  alsaconf/po/Makefile \
445	  alsaucm/Makefile topology/Makefile \
446	  bat/Makefile bat/tests/Makefile bat/tests/asound_state/Makefile \
447	  aplay/Makefile include/Makefile iecset/Makefile utils/Makefile \
448	  utils/alsa-utils.spec seq/Makefile seq/aconnect/Makefile \
449	  seq/aplaymidi/Makefile seq/aseqdump/Makefile seq/aseqnet/Makefile \
450	  speaker-test/Makefile speaker-test/samples/Makefile \
451	  alsaloop/Makefile alsa-info/Makefile \
452	  axfer/Makefile axfer/test/Makefile)
453