]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Allow partial build with selected components
authorTakashi Iwai <tiwai@suse.de>
Wed, 30 Nov 2005 11:38:24 +0000 (11:38 +0000)
committerTakashi Iwai <tiwai@suse.de>
Wed, 30 Nov 2005 11:38:24 +0000 (11:38 +0000)
Add --enable-* and --with-pcm-plugins configure options for partial builds.

User can choose the core components (pcm, mixer, rawmidi, hwdep, seq, instr)
via --enable-xxx or --disable-xxx option.  As default, all components are
enabled.

The PCM plugins to build can be selected via --with-pcm-plugins option.
For example, to build only rate and linear plugin, pass
  --with-pcm-plugins=rate,linear
Passing "all" will select all plugins (it's the default value).

The plug plugin will select linear and copy plugins automatically.
The other auto conversions of plug plugin are enabled only when the
corresponding plugin is selected.

Makefile.am
configure.in
modules/Makefile.am
src/Makefile.am
src/pcm/Makefile.am
src/pcm/pcm_plug.c
src/pcm/pcm_symbols.c
src/rawmidi/Makefile.am

index 522013b9263d36ca3a7c11eab3b05b5781c6b188..f4fb827668103a9964a1f62c2ca53d61e51420fe 100644 (file)
@@ -1,4 +1,11 @@
-SUBDIRS=doc include src modules aserver alsalisp test utils
+SUBDIRS=doc include src modules
+if BUILD_PCM_PLUGIN_SHM
+SUBDIRS += aserver
+endif
+if BUILD_MIXER
+SUBDIRS += alsalisp
+endif
+SUBDIRS += test utils
 EXTRA_DIST=ChangeLog INSTALL TODO NOTES configure cvscompile libtool depcomp version MEMORY-LEAK
 AUTOMAKE_OPTIONS=foreign
 
index eb69a3849b985e094225c8b77ac77d3cfa923a06..995f04295e27e95f81ddc5eddc4cad577fdf413c 100644 (file)
@@ -196,6 +196,146 @@ if test "$aload" = "yes"; then
   AC_DEFINE(SUPPORT_ALOAD, "1", [Support /dev/aload* access for auto-loading])
 fi
 
+dnl Build conditions
+AC_ARG_ENABLE(mixer,
+  [  --disable-mixer     Disable the mixer component],
+  [build_mixer="$enableval"], [build_mixer="yes"])
+AC_ARG_ENABLE(pcm,
+  [  --disable-pcm       Disable the PCM component],
+  [build_pcm="$enableval"], [build_pcm="yes"])
+AC_ARG_ENABLE(rawmidi,
+  [  --disable-rawmidi   Disable the raw MIDI component],
+  [build_rawmidi="$enableval"], [build_rawmidi="yes"])
+AC_ARG_ENABLE(hwdep,
+  [  --disable-hwdep     Disable the hwdep component],
+  [build_hwdep="$enableval"], [build_hwdep="yes"])
+AC_ARG_ENABLE(seq,
+  [  --disable-seq       Disable the sequencer component],
+  [build_seq="$enableval"], [build_seq="yes"])
+AC_ARG_ENABLE(instr,
+  [  --disable-instr     Disable the instrument component],
+  [build_instr="$enableval"], [build_instr="yes"])
+
+if test "$build_seq" != "yes"; then
+  build_instr="no"
+fi
+
+AM_CONDITIONAL(BUILD_MIXER, test x$build_mixer = xyes)
+AM_CONDITIONAL(BUILD_PCM, test x$build_pcm = xyes)
+AM_CONDITIONAL(BUILD_RAWMIDI, test x$build_rawmidi = xyes)
+AM_CONDITIONAL(BUILD_HWDEP, test x$build_hwdep = xyes)
+AM_CONDITIONAL(BUILD_SEQ, test x$build_seq = xyes)
+AM_CONDITIONAL(BUILD_INSTR, test x$build_instr = xyes)
+
+if test "$build_mixer" = "yes"; then
+  AC_DEFINE([BUILD_MIXER], "1", [Build mixer component])
+fi
+if test "$build_pcm" = "yes"; then
+  AC_DEFINE([BUILD_PCM], "1", [Build PCM component])
+fi
+if test "$build_rawmidi" = "yes"; then
+  AC_DEFINE([BUILD_RAWMIDI], "1", [Build raw MIDI component])
+fi
+if test "$build_seq" = "yes"; then
+  AC_DEFINE([BUILD_SEQ], "1", [Build sequencer component])
+fi
+if test "$build_instr" = "yes"; then
+  AC_DEFINE([BUILD_INSTR], "1", [Build instrument component])
+fi
+
+dnl PCM Plugins
+
+if test "$build_pcm" = "yes"; then
+AC_ARG_WITH(pcm-plugins,
+  [  --with-pcm-plugins=<list>  Build PCM plugins ],
+  [pcm_plugins="$withval"], [pcm_plugins="all"])
+else
+pcm_plugins=""
+fi
+
+PCM_PLUGIN_LIST="copy linear route mulaw alaw adpcm rate plug multi shm file null share meter hooks lfloat ladspa dmix dshare dsnoop asym iec958 softvol extplug ioplug"
+
+build_pcm_plugin="no"
+for t in $PCM_PLUGIN_LIST; do
+  eval build_pcm_$t="no"
+done
+
+pcm_plugins=`echo $pcm_plugins | sed 's/,/ /g'`
+for p in $pcm_plugins; do
+  for t in $PCM_PLUGIN_LIST; do
+    if test "$p" = "$t" -o "$p" = "all"; then
+      eval build_pcm_$t="yes"
+      build_pcm_plugin="yes"
+    fi
+  done
+done
+
+dnl special dependencies
+if test "$build_pcm_plug" = "yes"; then
+  build_pcm_linear="yes"
+  build_pcm_copy="yes"
+fi
+
+if test "$build_pcm_ioplug" = "yes"; then
+  build_pcm_extplug="yes"
+fi
+
+AM_CONDITIONAL(BUILD_PCM_PLUGIN, test x$build_pcm_plugin = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_COPY, test x$build_pcm_copy = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_LINEAR, test x$build_pcm_linear = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_ROUTE, test x$build_pcm_route = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_MULAW, test x$build_pcm_mulaw = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_ALAW, test x$build_pcm_alaw = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_ADPCM, test x$build_pcm_adpcm = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_RATE, test x$build_pcm_rate = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_PLUG, test x$build_pcm_plug = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_MULTI, test x$build_pcm_multi = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_SHM, test x$build_pcm_shm = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_FILE, test x$build_pcm_file = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_NULL, test x$build_pcm_null = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_SHARE, test x$build_pcm_share = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_METER, test x$build_pcm_meter = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_HOOKS, test x$build_pcm_hooks = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_LFLOAT, test x$build_pcm_lfloat = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_LADSPA, test x$build_pcm_ladspa = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_DMIX, test x$build_pcm_dmix = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_DSHARE, test x$build_pcm_dshare = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_DSNOOP, test x$build_pcm_dsnoop = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_ASYM, test x$build_pcm_asym = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_IEC958, test x$build_pcm_iec958 = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_SOFTVOL, test x$build_pcm_softvol = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_EXTPLUG, test x$build_pcm_extplug = xyes)
+AM_CONDITIONAL(BUILD_PCM_PLUGIN_IOPLUG, test x$build_pcm_ioplug = xyes)
+
+dnl Defines for plug plugin
+if test "$build_pcm_rate" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_RATE], "1", [Build PCM rate plugin])
+fi
+if test "$build_pcm_route" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_ROUTE], "1", [Build PCM route plugin])
+fi
+if test "$build_pcm_lfloat" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_LFLOAT], "1", [Build PCM lfloat plugin])
+fi
+if test "$build_pcm_adpcm" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_ADPCM], "1", [Build PCM adpcm plugin])
+fi
+if test "$build_pcm_mulaw" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_MULAW], "1", [Build PCM mulaw plugin])
+fi
+if test "$build_pcm_alaw" = "yes"; then
+  AC_DEFINE([BUILD_PCM_PLUGIN_ALAW], "1", [Build PCM alaw plugin])
+fi
+
+
+dnl Create PCM plugin symbol list for static library
+rm -f src/pcm/pcm_symbols_list.c
+for t in $PCM_PLUGIN_LIST; do
+  if eval test \$build_pcm_$t = yes; then
+    echo \&_snd_module_pcm_$t, >> src/pcm/pcm_symbols_list.c
+  fi
+done
+
 dnl Make a symlink for inclusion of alsa/xxx.h
 if test ! -L include/alsa ; then
   echo "Making a symlink include/alsa"
index 98eda37ca6f1dfaab59f7c854caa608d3566cc7f..bf9543e936c9e5d19541207edbfdc7f473ff1dd9 100644 (file)
@@ -1 +1,3 @@
+if BUILD_MIXER
 SUBDIRS=mixer
+endif
index 5f5d76c8030b36fa95dab533a2dddc82dde98a2d..f7cc81df2c79f00cc6cc5616b5263bae59882c6d 100644 (file)
@@ -1,4 +1,3 @@
-SUBDIRS=control mixer pcm rawmidi timer hwdep seq instr compat conf alisp
 EXTRA_DIST=Versions
 COMPATNUM=@LIBTOOL_VERSION_INFO@
 
@@ -10,12 +9,35 @@ endif
 
 lib_LTLIBRARIES = libasound.la
 libasound_la_SOURCES = conf.c confmisc.c input.c output.c async.c error.c dlmisc.c socket.c shmarea.c userfile.c names.c
-libasound_la_LIBADD = control/libcontrol.la \
-                     mixer/libmixer.la \
-                     pcm/libpcm.la \
-                      rawmidi/librawmidi.la timer/libtimer.la \
-                     hwdep/libhwdep.la seq/libseq.la instr/libinstr.la \
-                     compat/libcompat.la alisp/libalisp.la -lm -ldl -lpthread
+
+SUBDIRS=control
+libasound_la_LIBADD = control/libcontrol.la
+if BUILD_MIXER
+SUBDIRS += mixer
+libasound_la_LIBADD += mixer/libmixer.la
+endif
+if BUILD_PCM
+SUBDIRS += pcm timer
+libasound_la_LIBADD += pcm/libpcm.la timer/libtimer.la
+endif
+if BUILD_RAWMIDI
+SUBDIRS += rawmidi
+libasound_la_LIBADD += rawmidi/librawmidi.la
+endif
+if BUILD_HWDEP
+SUBDIRS += hwdep
+libasound_la_LIBADD += hwdep/libhwdep.la
+endif
+if BUILD_SEQ
+SUBDIRS += seq
+libasound_la_LIBADD += seq/libseq.la
+endif
+if BUILD_INSTR
+SUBDIRS += instr
+libasound_la_LIBADD += instr/libinstr.la
+endif
+SUBDIRS += compat conf alisp
+libasound_la_LIBADD += compat/libcompat.la alisp/libalisp.la -lm -ldl -lpthread
 
 libasound_la_LDFLAGS = -version-info $(COMPATNUM)
 AM_LDFLAGS = $(VSYMS)
index 7844bc4f5eaf261031772c49c9bf18a131a99bab..0e032b78aea2988ea7bb108260f22399548a2ad8 100644 (file)
@@ -5,14 +5,97 @@ EXTRA_LTLIBRARIES = libpcm.la
 
 libpcm_la_SOURCES = atomic.c mask.c interval.c \
                    pcm.c pcm_params.c pcm_simple.c \
-                   pcm_hw.c pcm_generic.c pcm_plugin.c pcm_copy.c pcm_linear.c \
-                   pcm_route.c pcm_mulaw.c pcm_alaw.c pcm_adpcm.c \
-                   pcm_rate.c pcm_plug.c pcm_misc.c pcm_mmap.c pcm_multi.c \
-                   pcm_shm.c pcm_file.c pcm_null.c pcm_share.c \
-                   pcm_meter.c pcm_hooks.c pcm_lfloat.c pcm_ladspa.c \
-                   pcm_direct.c pcm_dmix.c pcm_dsnoop.c pcm_dshare.c \
-                   pcm_asym.c pcm_iec958.c pcm_softvol.c pcm_symbols.c \
-                   pcm_ioplug.c pcm_extplug.c
+                   pcm_hw.c pcm_misc.c pcm_mmap.c pcm_symbols.c
+
+if BUILD_PCM_PLUGIN
+libpcm_la_SOURCES += pcm_generic.c pcm_plugin.c
+endif
+if BUILD_PCM_PLUGIN_COPY
+libpcm_la_SOURCES += pcm_copy.c
+endif
+if BUILD_PCM_PLUGIN_LINEAR
+libpcm_la_SOURCES += pcm_linear.c
+endif
+if BUILD_PCM_PLUGIN_ROUTE
+libpcm_la_SOURCES += pcm_route.c
+endif
+if BUILD_PCM_PLUGIN_MULAW
+libpcm_la_SOURCES += pcm_mulaw.c
+endif
+if BUILD_PCM_PLUGIN_ALAW
+libpcm_la_SOURCES += pcm_alaw.c
+endif
+if BUILD_PCM_PLUGIN_ADPCM
+libpcm_la_SOURCES += pcm_adpcm.c
+endif
+if BUILD_PCM_PLUGIN_RATE
+libpcm_la_SOURCES += pcm_rate.c
+endif
+if BUILD_PCM_PLUGIN_PLUG
+libpcm_la_SOURCES += pcm_plug.c
+endif
+if BUILD_PCM_PLUGIN_MULTI
+libpcm_la_SOURCES += pcm_multi.c
+endif
+if BUILD_PCM_PLUGIN_SHM
+libpcm_la_SOURCES += pcm_shm.c
+endif
+if BUILD_PCM_PLUGIN_FILE
+libpcm_la_SOURCES += pcm_file.c
+endif
+if BUILD_PCM_PLUGIN_NULL
+libpcm_la_SOURCES += pcm_null.c
+endif
+if BUILD_PCM_PLUGIN_SHARE
+libpcm_la_SOURCES += pcm_share.c
+endif
+if BUILD_PCM_PLUGIN_METER
+libpcm_la_SOURCES += pcm_meter.c
+endif
+if BUILD_PCM_PLUGIN_HOOKS
+libpcm_la_SOURCES += pcm_hooks.c
+endif
+if BUILD_PCM_PLUGIN_LFLOAT
+libpcm_la_SOURCES += pcm_lfloat.c
+endif
+if BUILD_PCM_PLUGIN_LADSPA
+libpcm_la_SOURCES += pcm_ladspa.c
+endif
+if BUILD_PCM_PLUGIN_DMIX
+libpcm_la_SOURCES += pcm_dmix.c
+endif
+if BUILD_PCM_PLUGIN_DSHARE
+libpcm_la_SOURCES += pcm_dshare.c
+endif
+if BUILD_PCM_PLUGIN_DSNOOP
+libpcm_la_SOURCES += pcm_dsnoop.c
+endif
+if BUILD_PCM_PLUGIN_DMIX
+libpcm_la_SOURCES += pcm_direct.c
+else
+if BUILD_PCM_PLUGIN_DSHARE
+libpcm_la_SOURCES += pcm_direct.c
+else
+if BUILD_PCM_PLUGIN_DSNOOP
+libpcm_la_SOURCES += pcm_direct.c
+endif
+endif
+endif
+if BUILD_PCM_PLUGIN_ASYM
+libpcm_la_SOURCES += pcm_asym.c
+endif
+if BUILD_PCM_PLUGIN_IEC958
+libpcm_la_SOURCES += pcm_iec958.c
+endif
+if BUILD_PCM_PLUGIN_SOFTVOL
+libpcm_la_SOURCES += pcm_softvol.c
+endif
+if BUILD_PCM_PLUGIN_EXTPLUG
+libpcm_la_SOURCES += pcm_extplug.c
+endif
+if BUILD_PCM_PLUGIN_IOPLUG
+libpcm_la_SOURCES += pcm_ioplug.c
+endif
 
 EXTRA_DIST = pcm_dmix_i386.c pcm_dmix_x86_64.c pcm_dmix_generic.c
 
index c3d4f651840d4b98e1f48b41c7a53a3ccd9e2b22..0f5264c63be9e7588f916d7aec9cd67a12ba5262 100644 (file)
@@ -172,12 +172,27 @@ static snd_pcm_format_t linear_preferred_formats[] = {
 #endif
 };
 
+#if defined(BUILD_PCM_PLUGIN_MULAW) || \
+       defined(BUILD_PCM_PLUGIN_ALAW) || \
+       defined(BUILD_PCM_PLUGIN_ADPCM)
+#define BUILD_PCM_NONLINEAR
+#endif
+
+#ifdef BUILD_PCM_NONLINEAR
 static snd_pcm_format_t nonlinear_preferred_formats[] = {
+#ifdef BUILD_PCM_PLUGIN_MULAW
        SND_PCM_FORMAT_MU_LAW,
+#endif
+#ifdef BUILD_PCM_PLUGIN_ALAW
        SND_PCM_FORMAT_A_LAW,
+#endif
+#ifdef BUILD_PCM_PLUGIN_ADPCM
        SND_PCM_FORMAT_IMA_ADPCM,
+#endif
 };
+#endif
 
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
 static snd_pcm_format_t float_preferred_formats[] = {
 #ifdef SND_LITTLE_ENDIAN
        SND_PCM_FORMAT_FLOAT_LE,
@@ -191,6 +206,7 @@ static snd_pcm_format_t float_preferred_formats[] = {
        SND_PCM_FORMAT_FLOAT64_LE,
 #endif
 };
+#endif
 
 static char linear_format_widths[32] = {
        0, 0, 0, 0, 0, 0, 0, 1,
@@ -226,16 +242,28 @@ static snd_pcm_format_t snd_pcm_plug_slave_format(snd_pcm_format_t format, const
        int w, w1, u, e;
        snd_pcm_format_t f;
        snd_pcm_format_mask_t lin = { SND_PCM_FMTBIT_LINEAR };
-       snd_pcm_format_mask_t fl = { SND_PCM_FMTBIT_FLOAT };
+       snd_pcm_format_mask_t fl = {
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
+               SND_PCM_FMTBIT_FLOAT
+#else
+               { 0 }
+#endif
+       };
        if (snd_pcm_format_mask_test(format_mask, format))
                return format;
        if (!snd_pcm_format_mask_test(&lin, format) &&
            !snd_pcm_format_mask_test(&fl, format)) {
                unsigned int i;
                switch (format) {
+#ifdef BUILD_PCM_PLUGIN_MULAW
                case SND_PCM_FORMAT_MU_LAW:
+#endif
+#ifdef BUILD_PCM_PLUGIN_ALAW
                case SND_PCM_FORMAT_A_LAW:
+#endif
+#ifdef BUILD_PCM_PLUGIN_ADPCM
                case SND_PCM_FORMAT_IMA_ADPCM:
+#endif
                        for (i = 0; i < sizeof(linear_preferred_formats) / sizeof(linear_preferred_formats[0]); ++i) {
                                snd_pcm_format_t f = linear_preferred_formats[i];
                                if (snd_pcm_format_mask_test(format_mask, f))
@@ -250,14 +278,17 @@ static snd_pcm_format_t snd_pcm_plug_slave_format(snd_pcm_format_t format, const
        snd_mask_intersect(&lin, format_mask);
        snd_mask_intersect(&fl, format_mask);
        if (snd_mask_empty(&lin) && snd_mask_empty(&fl)) {
+#ifdef BUILD_PCM_NONLINEAR
                unsigned int i;
                for (i = 0; i < sizeof(nonlinear_preferred_formats) / sizeof(nonlinear_preferred_formats[0]); ++i) {
                        snd_pcm_format_t f = nonlinear_preferred_formats[i];
                        if (snd_pcm_format_mask_test(format_mask, f))
                                return f;
                }
+#endif
                return SND_PCM_FORMAT_UNKNOWN;
        }
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
        if (snd_pcm_format_float(format)) {
                if (snd_pcm_format_mask_test(&fl, format)) {
                        unsigned int i;
@@ -270,13 +301,17 @@ static snd_pcm_format_t snd_pcm_plug_slave_format(snd_pcm_format_t format, const
                w = 32;
                u = 0;
                e = snd_pcm_format_big_endian(format);
-       } else if (snd_mask_empty(&lin)) {
+       } else
+#endif
+       if (snd_mask_empty(&lin)) {
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
                unsigned int i;
                for (i = 0; i < sizeof(float_preferred_formats) / sizeof(float_preferred_formats[0]); ++i) {
                        snd_pcm_format_t f = float_preferred_formats[i];
                        if (snd_pcm_format_mask_test(format_mask, f))
                                return f;
                }
+#endif
                return SND_PCM_FORMAT_UNKNOWN;
        } else {
                w = snd_pcm_format_width(format);
@@ -320,6 +355,7 @@ typedef struct {
 } snd_pcm_plug_params_t;
 #endif
 
+#ifdef BUILD_PCM_PLUGIN_RATE
 static int snd_pcm_plug_change_rate(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_plug_params_t *clt, snd_pcm_plug_params_t *slv)
 {
        snd_pcm_plug_t *plug = pcm->private_data;
@@ -336,7 +372,9 @@ static int snd_pcm_plug_change_rate(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_plu
                slv->format = clt->format;
        return 1;
 }
+#endif
 
+#ifdef BUILD_PCM_PLUGIN_ROUTE
 static int snd_pcm_plug_change_channels(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_plug_params_t *clt, snd_pcm_plug_params_t *slv)
 {
        snd_pcm_plug_t *plug = pcm->private_data;
@@ -437,6 +475,7 @@ static int snd_pcm_plug_change_channels(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm
                slv->format = clt->format;
        return 1;
 }
+#endif
 
 static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_plug_params_t *clt, snd_pcm_plug_params_t *slv)
 {
@@ -446,30 +485,47 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p
        int (*f)(snd_pcm_t **_pcm, const char *name, snd_pcm_format_t sformat, snd_pcm_t *slave, int close_slave);
        if (snd_pcm_format_linear(slv->format)) {
                /* Conversion is done in another plugin */
-               if (clt->format == slv->format ||
-                   clt->rate != slv->rate ||
-                   clt->channels != slv->channels)
-                       return 0;
+               if (clt->format == slv->format) {
+#ifdef BUILD_PCM_PLUGIN_RATE
+                       if (clt->rate != slv->rate)
+                               return 0;
+#endif
+#ifdef BUILD_PCM_PLUGIN_ROUTE
+                       if (clt->channels != slv->channels)
+                               return 0;
+#endif
+               }
                cfmt = clt->format;
                switch (clt->format) {
+#ifdef BUILD_PCM_PLUGIN_MULAW
                case SND_PCM_FORMAT_MU_LAW:
                        f = snd_pcm_mulaw_open;
                        break;
+#endif
+#ifdef BUILD_PCM_PLUGIN_ALAW
                case SND_PCM_FORMAT_A_LAW:
                        f = snd_pcm_alaw_open;
                        break;
+#endif
+#ifdef BUILD_PCM_PLUGIN_ADPCM
                case SND_PCM_FORMAT_IMA_ADPCM:
                        f = snd_pcm_adpcm_open;
                        break;
+#endif
                default:
-                       if (snd_pcm_format_float(clt->format)) {
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
+                       if (snd_pcm_format_float(clt->format))
                                f = snd_pcm_lfloat_open;
-                       } else {
+
+                       else
+#endif
+                       {
                                assert(snd_pcm_format_linear(clt->format));
                                f = snd_pcm_linear_open;
                        }
                        break;
                }
+#ifdef BUILD_PCM_PLUGIN_LFLOAT
        } else if (snd_pcm_format_float(slv->format)) {
                /* Conversion is done in another plugin */
                if (clt->format == slv->format &&
@@ -483,6 +539,8 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p
                        assert(0);      /* TODO */
                        return -EINVAL;
                }
+#endif
+#ifdef BUILD_PCM_NONLINEAR
        } else {
                /* No conversion is needed */
                if (clt->format == slv->format &&
@@ -490,15 +548,21 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p
                    clt->channels == clt->channels)
                        return 0;
                switch (slv->format) {
+#ifdef BUILD_PCM_PLUGIN_MULAW
                case SND_PCM_FORMAT_MU_LAW:
                        f = snd_pcm_mulaw_open;
                        break;
+#endif
+#ifdef BUILD_PCM_PLUGIN_ALAW
                case SND_PCM_FORMAT_A_LAW:
                        f = snd_pcm_alaw_open;
                        break;
+#endif
+#ifdef BUILD_PCM_PLUGIN_ADPCM
                case SND_PCM_FORMAT_IMA_ADPCM:
                        f = snd_pcm_adpcm_open;
                        break;
+#endif
                default:
                        assert(0);
                        return -EINVAL;
@@ -507,6 +571,7 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p
                        cfmt = clt->format;
                else
                        cfmt = SND_PCM_FORMAT_S16;
+#endif /* NONLINEAR */
        }
        err = f(new, NULL, slv->format, plug->gen.slave, plug->gen.slave != plug->req_slave);
        if (err < 0)
@@ -536,9 +601,15 @@ static int snd_pcm_plug_insert_plugins(snd_pcm_t *pcm,
        snd_pcm_plug_t *plug = pcm->private_data;
        static int (*funcs[])(snd_pcm_t *_pcm, snd_pcm_t **new, snd_pcm_plug_params_t *s, snd_pcm_plug_params_t *d) = {
                snd_pcm_plug_change_format,
+#ifdef BUILD_PCM_PLUGIN_ROUTE
                snd_pcm_plug_change_channels,
+#endif
+#ifdef BUILD_PCM_PLUGIN_RATE
                snd_pcm_plug_change_rate,
+#endif
+#ifdef BUILD_PCM_PLUGIN_ROUTE
                snd_pcm_plug_change_channels,
+#endif
                snd_pcm_plug_change_format,
                snd_pcm_plug_change_access
        };
@@ -551,7 +622,8 @@ static int snd_pcm_plug_insert_plugins(snd_pcm_t *pcm,
               client->access != p.access) {
                snd_pcm_t *new;
                int err;
-               assert(k < sizeof(funcs)/sizeof(*funcs));
+               if (k >= sizeof(funcs)/sizeof(*funcs))
+                       return -EINVAL;
                err = funcs[k](pcm, &new, client, &p);
                if (err < 0) {
                        snd_pcm_plug_clear(pcm);
@@ -564,6 +636,7 @@ static int snd_pcm_plug_insert_plugins(snd_pcm_t *pcm,
                }
                k++;
        }
+#ifdef BUILD_PCM_PLUGIN_ROUTE
        /* it's exception, user specified ttable, but no reduction/expand */
        if (plug->ttable && !plug->ttable_ok) {
                snd_pcm_t *new;
@@ -580,6 +653,7 @@ static int snd_pcm_plug_insert_plugins(snd_pcm_t *pcm,
                pcm->fast_ops = new->fast_ops;
                pcm->fast_op_arg = new->fast_op_arg;
        }
+#endif
        return 0;
 }
 
@@ -1079,6 +1153,7 @@ int _snd_pcm_plug_open(snd_pcm_t **pcmp, const char *name,
                        slave = n;
                        continue;
                }
+#ifdef BUILD_PCM_PLUGIN_ROUTE
                if (strcmp(id, "ttable") == 0) {
                        route_policy = PLUG_ROUTE_POLICY_NONE;
                        if (snd_config_get_type(n) != SND_CONFIG_TYPE_COMPOUND) {
@@ -1106,6 +1181,7 @@ int _snd_pcm_plug_open(snd_pcm_t **pcmp, const char *name,
                                route_policy = PLUG_ROUTE_POLICY_DUP;
                        continue;
                }
+#endif
                SNDERR("Unknown field %s", id);
                return -EINVAL;
        }
@@ -1119,6 +1195,7 @@ int _snd_pcm_plug_open(snd_pcm_t **pcmp, const char *name,
                                 SND_PCM_HW_PARAM_RATE, SCONF_UNCHANGED, &srate);
        if (err < 0)
                return err;
+#ifdef BUILD_PCM_PLUGIN_ROUTE
        if (tt) {
                err = snd_pcm_route_determine_ttable(tt, &csize, &ssize);
                if (err < 0) {
@@ -1136,6 +1213,7 @@ int _snd_pcm_plug_open(snd_pcm_t **pcmp, const char *name,
                        return err;
                }
        }
+#endif
        
        err = snd_pcm_open_slave(&spcm, root, sconf, stream, mode);
        snd_config_delete(sconf);
index b192ba2ac9ddf176fa63e3ae30bf8d7bc6ff5f0d..d4f5f1b97e4b18e6a84e36ec61b63446f75ac9c6 100644 (file)
@@ -46,32 +46,12 @@ extern const char *_snd_module_pcm_dshare;
 extern const char *_snd_module_pcm_asym;
 extern const char *_snd_module_pcm_iec958;
 extern const char *_snd_module_pcm_softvol;
+extern const char *_snd_module_pcm_extplug;
+extern const char *_snd_module_pcm_ioplug;
 
 static const char **snd_pcm_open_objects[] = {
-       &_snd_module_pcm_adpcm,
-       &_snd_module_pcm_alaw,
-       &_snd_module_pcm_copy,
-       &_snd_module_pcm_file,
-       &_snd_module_pcm_hooks,
        &_snd_module_pcm_hw,
-       &_snd_module_pcm_linear,
-       &_snd_module_pcm_meter,
-       &_snd_module_pcm_mulaw,
-       &_snd_module_pcm_multi,
-       &_snd_module_pcm_null,
-       &_snd_module_pcm_plug,
-       &_snd_module_pcm_rate,
-       &_snd_module_pcm_route,
-       &_snd_module_pcm_share,
-       &_snd_module_pcm_shm,
-       &_snd_module_pcm_lfloat,
-       &_snd_module_pcm_ladspa,
-       &_snd_module_pcm_dmix,
-       &_snd_module_pcm_dsnoop,
-       &_snd_module_pcm_dshare,
-       &_snd_module_pcm_asym,
-       &_snd_module_pcm_iec958,
-       &_snd_module_pcm_softvol
+#include "pcm_symbols_list.c"
 };
        
 void *snd_pcm_open_symbols(void)
index 45cb83a3ef7774e35ab873facae8514b1924136e..2470c7ad0e06b048aed89a8c515a178a86dc5e49 100644 (file)
@@ -1,6 +1,9 @@
 EXTRA_LTLIBRARIES=librawmidi.la
 
-librawmidi_la_SOURCES = rawmidi.c rawmidi_hw.c rawmidi_symbols.c rawmidi_virt.c
+librawmidi_la_SOURCES = rawmidi.c rawmidi_hw.c rawmidi_symbols.c
+if BUILD_SEQ
+librawmidi_la_SOURCES += rawmidi_virt.c
+endif
 noinst_HEADERS = rawmidi_local.h
 
 all: librawmidi.la