Subject: bug#9306: closed (Re: bug#9306: Java build errors due to trailing colon in CLASSPATH)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 18 Aug 2011 19:31:03 +0000

Your bug report

#9306: Java build errors due to trailing colon in CLASSPATH

which was filed against the automake package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
9306: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9306
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#9306: Java build errors due to trailing colon in CLASSPATH
From: Stefano Lattarini <[email-masked]>
To: "Daniel Richard G." <[email-masked]>, [email-masked]
Date: Thu, 18 Aug 2011 21:27:39 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

On Wednesday 17 August 2011, Stefano Lattarini wrote:
> On Tuesday 16 August 2011, Daniel Richard wrote:
> > On Tue, 2011 Aug 16 15:30+0200, Stefano Lattarini wrote:
> > > BTW, are you the same "Daniel Richard G." listed in THANKS with the
> > > address "[email-masked]"?  If yes, should I update your
> > > address there?
> > 
> > The same! That's my work address, and while it remains active, my
> > personal address (@iskunk.org) is the one I usually go by in this realm.
> > Please feel free to update the entry.
> > 
> OK, will do with the attached trivial patch.
> 
I've pushed both the patches now, and I'm closing the bug report.

Thanks,
  Stefano

Subject: Java build errors due to trailing colon in CLASSPATH
From: "Daniel Richard G." <[email-masked]>
To: [email-masked]
Date: Mon, 15 Aug 2011 15:54:36 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

I am using Automake 1.11.1, and have recently encountered a subtle issue
that causes compilation of some Java programs to fail.

Here is a typical build failure, produced from a minimal test case I've
assembled, using OpenJDK on Ubuntu's Natty release:

make[3]: Entering directory `/tmp/automake-java-bug/org/gnu/bug'
CLASSPATH=../../..:./../../..:$CLASSPATH javac -d ../../..    Library.java Application.java
./Library.java:5: duplicate class: org.gnu.bug.Library
public class Library
       ^
Application.java:9: cannot access Library
bad class file: RegularFileObject[./Library.java]
file does not contain class Library
Please remove or make sure it appears in the correct subdirectory of the classpath.
		Library lib = new Library();
		^
2 errors
make[3]: *** [classdist_noinst.stamp] Error 1

If I copy-and-paste the javac invocation, edit it slightly, and run
it...

    env CLASSPATH=../../..:./../../..: javac -d ../../.. Library.java Application.java

...I get the same error. However, if I remove that trailing colon from
CLASSPATH, and try it again...

    env CLASSPATH=../../..:./../../.. javac -d ../../.. Library.java Application.java

...compilation succeeds. If I invoke the above build with

    env CLASSPATH=/does-not-exist make

then compilation likewise succeeds.

Note that I do not have CLASSPATH set in my environment. It would appear
that a trailing colon in the CLASSPATH environment variable has a
special meaning attached to it, which makes Automake's use of
CLASSPATH=mumblemumble:$$CLASSPATH in makefiles problematic.

(The straightforward solution would be to replace that construct with
CLASSPATH=mumblemumble$${CLASSPATH:+:$$CLASSPATH}, but whether all
shells can handle that is an open question.)

Attached is a tarball containing the minimal test case.

--Daniel

P.S.: Please Cc: any replies to me, as I am not subscribed to this list.

-- 
NAME = Daniel Richard G.     _\|/_    Remember, skunks
MAIL = [email-masked]     (/o|o\) _- don't smell bad---
MAIL+= [email-masked]   < (^),>     it's the people who
WWW  = (not there yet!)      /   \      annoy us that do!