Helol Daniel,
> * Daniel Richard G. wrote on Fri, Mar 27, 2009 at 05:07:49AM CET:
> > EXTRA_PROGRAMS = foo bar
> >
> > if ENABLE_STUFF
> > bin_PROGRAMS = $(EXTRA_PROGRAMS)
> > endif
> >
> > I go to regenerate the makefile, and, what's all this then?
> >
> > automake: bar_OBJECTS should not be defined
> > Makefile.am:1: while processing program `bar'
> > automake: foo_OBJECTS should not be defined
> > Makefile.am:1: while processing program `foo'
> >
> > bar_OBJECTS? foo_OBJECTS? Where?? And I got all confused and thought I
> > should bring it to the attention of this list.
Fixed with the patch below. Pushed to master, added you to THANKS.
Cheers,
Ralf
bin_PROGRAMS = $(EXTRA_PROGRAMS) should work.
* automake.in (am_install_var): For `PROGRAMS' primary, strip
`$(EXEEXT)' here already, so the name uniquifying works even
when we look at names repeatedly, with inconsistent executable
extension; through variable references, we might have added
the extension ourselves earlier.
(handle_programs): No need to strip `$(EXEEXT)' here any more.
* tests/extra8.test: New test.
* tests/Makefile.am: Update.
* THANKS: Update.
Report by Daniel Richard G.
diff --git a/automake.in b/automake.in
index cdbe24a..3549bdb 100755
--- a/automake.in
+++ b/automake.in
@@ -2471,11 +2471,6 @@ sub handle_programs
my $seen_libobjs = 0;
my $obj = get_object_extension '.$(OBJEXT)';
- # Strip any $(EXEEXT) suffix the user might have added, or this
- # will confuse &handle_source_transform and &check_canonical_spelling.
- # We'll add $(EXEEXT) back later anyway.
- $one_file =~ s/\$\(EXEEXT\)$//;
-
$known_programs{$one_file} = $where;
# Canonicalize names and check for misspellings.
@@ -7144,6 +7139,14 @@ sub am_install_var
}
else
{
+ # Strip any $(EXEEXT) suffix the user might have added, or this
+ # will confuse &handle_source_transform and
&check_canonical_spelling.
+ # We'll add $(EXEEXT) back later anyway.
+ # Do it here rather than in handle_programs so the uniquifying at
the
+ # end of this function works.
+ ${$locvals}[1] =~ s/\$\(EXEEXT\)$//
+ if $primary eq 'PROGRAMS';
+
push (@result, $locvals);
}
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 027e3f5..9af8512 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -263,6 +263,7 @@ extra4.test \
extra5.test \
extra6.test \
extra7.test \
+extra8.test \
f90only.test \
flibs.test \
fn99.test \
diff --git a/tests/extra8.test b/tests/extra8.test
new file mode 100755
index 000..02272d4
--- /dev/null
+++ b/tests/extra8.test
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Copyright (C) 2009 Free Software Foundation, Inc.
+#
+# This file is part of GNU Automake.
+#
+# GNU Automake is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Automake is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Automake; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+# Ensure defining bin_PROGRAMS in terms of EXTRA_PROGRAMS works,
+# and that referring to the same program with inconsistent addition
+# of $(EXEEXT) works, too.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >>configure.in <<'END'
+AC_PROG_CC
+AC_OUTPUT
+END
+cat >Makefile.am <<'END'
+EXTRA_PROGRAMS = foo bar
+bin_PROGRAMS = $(EXTRA_PROGRAMS) baz
+noinst_PROGRAMS = baz$(EXEEXT)
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+: