This is the mail archive of the
java-patches@sources.redhat.com
mailing list for the Java project.
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