This is the mail archive of the java-patches@sources.redhat.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Don't exceed command-line length limits


On Sep 12, 2000, Tom Tromey <tromey@cygnus.com> wrote:

> If we're going to echo, I'd prefer to echo the command lines,
> automake-style.  With this change I think it is good to check in.

I'm checking in the attached patch, then.

> How much does this change slow down the build?  I imagine right now,
> not too much, because gcj just invokes jc1 once per file anyway.

Your imagination is right, even though I don't have any hard data.  In
fact, printing something after each file is compiled gives a
psychological sensation that it's faster :-)

> Long term maybe we should implement `@file' processing like javac
> does.

That's a good idea.

> I'll submit a PR for that.

Thanks,

Index: libjava/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>
	* Makefile.am: Re-work shell commands that exceeded command-line
	length limits.
	* Makefile.in: Rebuilt.

Index: libjava/Makefile.am
===================================================================
RCS file: /cvs/java/libgcj/libjava/Makefile.am,v
retrieving revision 1.89
diff -u -p -r1.89 Makefile.am
--- libjava/Makefile.am 2000/09/13 19:01:20 1.89
+++ libjava/Makefile.am 2000/09/14 08:08:40
@@ -142,9 +142,12 @@ $(java_source_files:.java=.class): libgc
 $(built_java_source_files:.java=.class): $(built_java_source_files)
 ## This little nastiness is here so that the backquoted stuff in the
 ## GCJ definition can be correctly expanded, if required.
-	javac="$(JAVAC)"; \
-	$$javac -L$(here) $(JCFLAGS) -classpath $(here):`cd $(srcdir) && /bin/pwd` \
-	  -d $(here) $?
+	@javac="$(JAVAC)"; \
+	for f in $?; do \
+	  echo $$javac -L$(here) $(JCFLAGS) -classpath $(here):`cd $(srcdir) && /bin/pwd` -d $(here) $$f; \
+	  $$javac -L$(here) $(JCFLAGS) -classpath $(here):`cd $(srcdir) && /bin/pwd` \
+	  -d $(here) $$f; \
+	done
 
 ## We have the zip file depend on the java sources and not the class
 ## files, because we don't know the names of all the class files.
@@ -153,20 +156,24 @@ $(built_java_source_files:.java=.class):
 ## `make libgcj.zip' will not rebuilt foo.class.  That's because
 ## libgcj.zip is not out-of-date with respect to foo.java.
 libgcj.zip: $(java_source_files)
+## Create a list of all Java sources, without exceeding any shell limits.
+	@: $(shell echo Creating list of files to compile...) $(shell rm -f tmp-list || :) $(shell touch tmp-list) $(foreach source,$(subst $(srcdir)/,,$?),$(shell echo $(source) >> tmp-list))
 ## FIXME: this ought to depend on built_java_source_files, but right
 ## now it can't.  Ugly.
 	$(MAKE) $(built_java_source_files:.java=.class)
 ## This little nastiness is here so that the backquoted stuff in the
 ## GCJ definition can be correctly expanded, if required.
-	javac="$(JAVAC)"; cd $(srcdir); \
-	  $$javac $(JCFLAGS) -classpath $(here):`/bin/pwd` -d $(here) \
-	    $(subst $(srcdir)/,,$?)
-	-@rm -f libgcj.zip
+	@javac="$(JAVAC)"; dir=`/bin/pwd`; cd $(srcdir); \
+	  for f in `cat $$dir/tmp-list`; do \
+	    echo $$javac $(JCFLAGS) -classpath $(here):`/bin/pwd` -d $(here) $$f; \
+	    $$javac $(JCFLAGS) -classpath $(here):`/bin/pwd` -d $(here) $$f; \
+	done
+	-@rm -f tmp-list libgcj.zip
 ## Note that we explicitly want to include directory information.
 	$(ZIP) -r libgcj java gnu -n .class -i '*.class' -i '*/'
 
 MOSTLYCLEANFILES = $(javao_files) $(nat_files) $(nat_headers) $(c_files)
-CLEANFILES = libgcj.zip
+CLEANFILES = tmp-list libgcj.zip
 
 clean-local:
 ## We just remove every .class file that was created.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                  aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist    *Please* write to mailing lists, not to me

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]