On Sat, 28 Feb 2004, Brian Kendig wrote:
> I've found what I believe might be a bug in the Alsa code in the Linux
> 2.6.[0-3] kernel, or at least is a problem with the Makefile. The
> problem is that if (in 'make menuconfig') I specify that the sequencer
> should be a module, I get a bunch of errors when I try to make the
> kernel. If I say that the sequencer should be built-in, then
> compilation works fine.
>
> The particular option in question in .config is
> 'CONFIG_SND_SEQUENCER=m'. With that set, when I compile the kernel, I
> get a whole bunch of 'undefined reference' errors in sound/built-in.o.
> Changing that to 'CONFIG_SND_SEQUENCER=y' allows the kernel to compile
> cleanly. I'm setting it by using 'make menuconfig', which is supposed
> to prevent me from setting it to something it shouldn't be set to,
> right?
>
> A copy of my .config which causes the error is at:
> http://www.enchanter.net/linuxhelp/dot.config
>
> And a log of the failed compile is at:
> http://www.enchanter.net/linuxhelp/make.errors
>
> It's odd that the errors all involve functions named 'snd_opl3_...' I
> don't have any OPL3 settings in my .config file.
>
> Is this really a problem with the build process? Who should I report
> it to? Or is it something I'm doing wrong?
Wrong Makefiles. Try attached patch.
Jaroslav
-----
Jaroslav Kysela <[EMAIL PROTECTED]>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs
===== sound/drivers/opl3/Makefile 1.14 vs edited =====
--- 1.14/sound/drivers/opl3/Makefile Fri Jun 6 11:58:32 2003
+++ edited/sound/drivers/opl3/Makefile Sun Feb 29 11:04:02 2004
@@ -10,36 +10,66 @@
endif
OPL3_OBJS = snd-opl3-lib.o
-ifeq ($(subst m,y,$(CONFIG_SND_SEQUENCER)),y)
-OPL3_OBJS += snd-opl3-synth.o
-endif
+OPL3_SYNTH_OBJS = snd-opl3-synth.o
+
+#
+# this function returns:
+# "m" - CONFIG_SND_SEQUENCER is m
+# <empty string> - CONFIG_SND_SEQUENCER is undefined
+# otherwise parameter #1 value
+#
+sequencer = $(if $(subst y,,$(CONFIG_SND_SEQUENCER)),$(if $(1),m),$(if
$(CONFIG_SND_SEQUENCER),$(1)))
# Toplevel Module Dependency
obj-$(CONFIG_SND_ALS100) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_ALS100)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_AZT2320) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_AZT2320)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_AZT3328) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_AZT3328)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_DT019X) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_DT019X)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_ES18XX) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_ES18XX)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_OPL3SA2) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_OPL3SA2)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_AD1816A) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_AD1816A)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_CS4232) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_CS4232)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_PC98_CS4232) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_PC98_CS4232)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_CS4236) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_CS4236)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_ES1688) += $(OPL3_OBJS)
-obj-$(CONFIG_SND_GUSEXTREME) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_GUSEXTREME)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_OPTI92X_AD1848) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_OPTI92X_AD1848)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_OPTI92X_CS4231) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_OPTI92X_CS4231)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_OPTI93X) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_OPTI93X)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_SB8) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_SB8)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_SB16) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_SB16)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_SBAWE) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_SBAWE)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_WAVEFRONT) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_WAVEFRONT)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_ALS4000) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_ALS4000)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_CMIPCI) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_CMIPCI)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_CS4281) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_CS4281)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_ES1938) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_ES1938)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_FM801) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_FM801)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_SONICVIBES) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_SONICVIBES)) += $(OPL3_SYNTH_OBJS)
obj-$(CONFIG_SND_YMFPCI) += $(OPL3_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_YMFPCI)) += $(OPL3_SYNTH_OBJS)
obj-m := $(sort $(obj-m))
===== sound/drivers/opl4/Makefile 1.1 vs edited =====
--- 1.1/sound/drivers/opl4/Makefile Sun Jun 1 20:47:59 2003
+++ edited/sound/drivers/opl4/Makefile Sun Feb 29 11:07:42 2004
@@ -7,9 +7,19 @@
snd-opl4-synth-objs := opl4_seq.o opl4_synth.o yrw801.o
OPL4_OBJS := snd-opl4-lib.o
-ifeq ($(subst m,y,$(CONFIG_SND_SEQUENCER)),y)
- OPL4_OBJS += snd-opl4-synth.o
-endif
+OPL4_SYNTH_OBJS := snd-opl4-synth.o
+
+#
+# this function returns:
+# "m" - CONFIG_SND_SEQUENCER is m
+# <empty string> - CONFIG_SND_SEQUENCER is undefined
+# otherwise parameter #1 value
+#
+sequencer = $(if $(subst y,,$(CONFIG_SND_SEQUENCER)),$(if $(1),m),$(if
$(CONFIG_SND_SEQUENCER),$(1)))
obj-$(CONFIG_SND_OPTI92X_AD1848) += $(OPL4_OBJS)
+obj-$(call sequencer,$(CONFIG_SND_OPTI92X_AD1848)) += $(OPL4_SYNTH_OBJS)
obj-$(CONFIG_SND_OPTI92X_CS4231) += $(OPL4_OBJS)
+obj-$(call sequencer,$CONFIG_SND_OPTI92X_CS4231)) += $(OPL4_SYNTH_OBJS)
+
+obj-m := $(sort $(obj-m))
===== sound/synth/Makefile 1.12 vs edited =====
--- 1.12/sound/synth/Makefile Mon Feb 3 23:19:39 2003
+++ edited/sound/synth/Makefile Sun Feb 29 11:09:41 2004
@@ -5,10 +5,16 @@
snd-util-mem-objs := util_mem.o
+#
+# this function returns:
+# "m" - CONFIG_SND_SEQUENCER is m
+# <empty string> - CONFIG_SND_SEQUENCER is undefined
+# otherwise parameter #1 value
+#
+sequencer = $(if $(subst y,,$(CONFIG_SND_SEQUENCER)),$(if $(1),m),$(if
$(CONFIG_SND_SEQUENCER),$(1)))
+
# Toplevel Module Dependency
obj-$(CONFIG_SND_EMU10K1) += snd-util-mem.o
obj-$(CONFIG_SND_TRIDENT) += snd-util-mem.o
-ifdef CONFIG_SND_SEQUENCER
- obj-$(CONFIG_SND_SBAWE) += snd-util-mem.o
- obj-$(CONFIG_SND) += emux/
-endif
+obj-$(call sequencer,$(CONFIG_SND_SBAWE)) += snd-util-mem.o
+obj-$(call sequencer,$(CONFIG_SND)) += emux/