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 0000000..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 + +: