bug-automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Doesn't work: blah_PROGRAMS = $(EXTRA_PROGRAMS)


From: Ralf Wildenhues
Subject: Re: Doesn't work: blah_PROGRAMS = $(EXTRA_PROGRAMS)
Date: Mon, 13 Apr 2009 13:32:50 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]