You can't put a configure substitution (e.g., @FOO@) into a
_SOURCES variable. The reason for this is a bit hard to explain,
but suffice to say that it simply won't work. Automake will give an
error if you try to do this.
Fortunately there are two other ways to achieve the same result. One is
to use configure substitutions in _LDADD variables, the other is
to use an Automake conditional.
_LDADD substitutions
Automake must know all the source files that could possibly go into a
program, even if not all the files are built in every circumstance. Any
files which are only conditionally built should be listed in the
appropriate EXTRA_ variable. For instance, if
hello-linux.c or hello-generic.c were conditionally included
in hello, the Makefile.am would contain:
bin_PROGRAMS = hello
hello_SOURCES = hello-common.c
EXTRA_hello_SOURCES = hello-linux.c hello-generic.c
hello_LDADD = @HELLO_SYSTEM@
hello_DEPENDENCIES = @HELLO_SYSTEM@
You can then setup the @HELLO_SYSTEM@ substitution from
configure.in:
...
case $host in
*linux*) HELLO_SYSTEM='hello-linux.$(OBJEXT)' ;;
*) HELLO_SYSTEM='hello-generic.$(OBJEXT)' ;;
esac
AC_SUBST([HELLO_SYSTEM])
...
In this case, HELLO_SYSTEM should be replaced by
hello-linux.o or hello-bsd.o, and added to
hello_DEPENDENCIES and hello_LDADD in order to be built
and linked in.
An often simpler way to compile source files conditionally is to use
Automake conditionals. For instance, you could use this
Makefile.am construct to build the same hello example:
bin_PROGRAMS = hello
if LINUX
hello_SOURCES = hello-linux.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif
In this case, your configure.in should setup the LINUX
conditional using AM_CONDITIONAL (see Conditionals).
When using conditionals like this you don't need to use the
EXTRA_ variable, because Automake will examine the contents of
each variable to construct the complete list of source files.
If your program uses a lot of files, you will probably prefer a
conditional +=.
bin_PROGRAMS = hello
hello_SOURCES = hello-common.c
if LINUX
hello_SOURCES += hello-linux.c
else
hello_SOURCES += hello-generic.c
endif