From: Sam S. <sd...@gn...> - 2004-08-02 21:58:30
|
To avoid this error: cd src && /cygdrive/c/java/bin/jar cmf manifest ../j.jar Main.class org/armedbea r/j/*.class \ org/armedbear/j/version org/armedbear/j/build \ org/armedbear/j/images/*.png \ gnu/regexp/*.class gnu/regexp/MessagesBundle.properties \ org/armedbear/j/mail/*.class \ org/armedbear/j/jdb/*.class \ org/armedbear/j/*.keywords org/armedbear/j/mail/*.keywords \ org/armedbear/lisp/*.class org/armedbear/lisp/java/awt/*.class \ org/armedbear/lisp/*.lisp org/armedbear/lisp/build /cygdrive/c/java/bin/jar: argument list too long make: *** [j.jar] Error 2 I propose the appended patch (agains CVS). -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Lisp suffers from being twenty or thirty years ahead of time. Index: Makefile.in =================================================================== RCS file: /cvsroot/armedbear-j/j/j/Makefile.in,v retrieving revision 1.19 diff -u -w -b -u -b -w -i -B -r1.19 Makefile.in --- Makefile.in 10 Jun 2004 13:03:46 -0000 1.19 +++ Makefile.in 2 Aug 2004 21:57:21 -0000 @@ -70,15 +70,18 @@ cd src/org/armedbear/lisp && $(MAKE) libabcl.so j.jar: classes.stamp - cd src && $(JAR) cmf manifest ../j.jar Main.class org/armedbear/j/*.class \ - org/armedbear/j/version org/armedbear/j/build \ - org/armedbear/j/images/*.png \ - gnu/regexp/*.class gnu/regexp/MessagesBundle.properties \ - org/armedbear/j/mail/*.class \ - org/armedbear/j/jdb/*.class \ - org/armedbear/j/*.keywords org/armedbear/j/mail/*.keywords \ - org/armedbear/lisp/*.class org/armedbear/lisp/java/awt/*.class \ - org/armedbear/lisp/*.lisp org/armedbear/lisp/build + cd src && \ + $(JAR) cmf manifest ../j.jar Main.class org/armedbear/j/*.class && \ + $(JAR) uf ../j.jar org/armedbear/j/version org/armedbear/j/build \ + org/armedbear/j/images/*.png && \ + $(JAR) uf ../j.jar gnu/regexp/*.class gnu/regexp/MessagesBundle.properties && \ + $(JAR) uf ../j.jar org/armedbear/j/mail/*.class && \ + $(JAR) uf ../j.jar org/armedbear/j/jdb/*.class && \ + $(JAR) uf ../j.jar org/armedbear/j/*.keywords && \ + $(JAR) uf ../j.jar org/armedbear/j/mail/*.keywords && \ + $(JAR) uf ../j.jar org/armedbear/lisp/*.class && \ + $(JAR) uf ../j.jar org/armedbear/lisp/java/awt/*.class && \ + $(JAR) uf ../j.jar org/armedbear/lisp/*.lisp org/armedbear/lisp/build classes.stamp: classes test -f classes.stamp || touch classes.stamp |
From: Peter G. <pe...@ar...> - 2004-08-03 00:34:15
|
On Mon, 02 Aug 2004 at 17:58:07 -0400, Sam Steingold wrote: > I propose the appended patch (agains CVS). Committed. Thanks! -Peter |
From: Larry C. <la...@th...> - 2004-08-03 11:32:39
|
Sam Steingold said: > To avoid this error: [snip] > /cygdrive/c/java/bin/jar: argument list too long > make: *** [j.jar] Error 2 > > I propose the appended patch (agains CVS). > [snip] > + cd src && \ > + $(JAR) cmf manifest ../j.jar Main.class org/armedbear/j/*.class && \ > + $(JAR) uf ../j.jar org/armedbear/j/version org/armedbear/j/build \ > + org/armedbear/j/images/*.png && \ > + $(JAR) uf ../j.jar gnu/regexp/*.class gnu/regexp/MessagesBundle.properties && \ > + $(JAR) uf ../j.jar org/armedbear/j/mail/*.class && \ > + $(JAR) uf ../j.jar org/armedbear/j/jdb/*.class && \ > + $(JAR) uf ../j.jar org/armedbear/j/*.keywords && \ > + $(JAR) uf ../j.jar org/armedbear/j/mail/*.keywords && \ > + $(JAR) uf ../j.jar org/armedbear/lisp/*.class && \ > + $(JAR) uf ../j.jar org/armedbear/lisp/java/awt/*.class && \ > + $(JAR) uf ../j.jar org/armedbear/lisp/*.lisp org/armedbear/lisp/build This invokes jar several times. Why not echo the filenames to a temp file and say $(JAR) cmf manifest ../j.jar @temp_file_name rm temp_file_name ? This is a documented feature of jar under (at least) Solaris & Windows. See http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/jar.html and/or http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jar.html . -- Larry |
From: Sam S. <sd...@gn...> - 2004-08-03 14:13:21
|
> * Larry Clapp <yn...@gu...t> [2004-08-03 07:32:30 -0400]: > > Sam Steingold said: >> To avoid this error: > [snip] >> /cygdrive/c/java/bin/jar: argument list too long >> make: *** [j.jar] Error 2 >> >> I propose the appended patch (agains CVS). >> > [snip] >> + cd src && \ >> + $(JAR) cmf manifest ../j.jar Main.class org/armedbear/j/*.class && \ >> + $(JAR) uf ../j.jar org/armedbear/j/version org/armedbear/j/build \ >> + org/armedbear/j/images/*.png && \ >> + $(JAR) uf ../j.jar gnu/regexp/*.class > gnu/regexp/MessagesBundle.properties && \ >> + $(JAR) uf ../j.jar org/armedbear/j/mail/*.class && \ >> + $(JAR) uf ../j.jar org/armedbear/j/jdb/*.class && \ >> + $(JAR) uf ../j.jar org/armedbear/j/*.keywords && \ >> + $(JAR) uf ../j.jar org/armedbear/j/mail/*.keywords && \ >> + $(JAR) uf ../j.jar org/armedbear/lisp/*.class && \ >> + $(JAR) uf ../j.jar org/armedbear/lisp/java/awt/*.class && \ >> + $(JAR) uf ../j.jar org/armedbear/lisp/*.lisp org/armedbear/lisp/build > > This invokes jar several times. Why not echo the filenames to a temp file > and say > > $(JAR) cmf manifest ../j.jar @temp_file_name > rm temp_file_name > > ? > > This is a documented feature of jar under (at least) Solaris & Windows. > See http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/jar.html and/or > http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jar.html . I thought of that, but java version "1.4.1_05" does not support this. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> WHO ATE MY BREAKFAST PANTS? |
From: Larry C. <la...@th...> - 2004-08-04 01:43:48
|
On Tue, Aug 03, 2004 at 10:13:14AM -0400, Sam Steingold wrote: > > * Larry Clapp <yn...@gu...t> [2004-08-03 07:32:30 -0400]: > > Sam Steingold said: > >> To avoid this error: > > [snip] > >> /cygdrive/c/java/bin/jar: argument list too long > >> make: *** [j.jar] Error 2 > >> > >> I propose the appended patch (agains CVS). > >> > > [snip] > >> + cd src && \ > >> + $(JAR) cmf manifest ../j.jar Main.class org/armedbear/j/*.class && \ > >> + $(JAR) uf ../j.jar org/armedbear/j/version org/armedbear/j/build \ > >> + org/armedbear/j/images/*.png && \ > >> + $(JAR) uf ../j.jar gnu/regexp/*.class gnu/regexp/MessagesBundle.properties && \ > >> + $(JAR) uf ../j.jar org/armedbear/j/mail/*.class && \ > >> + $(JAR) uf ../j.jar org/armedbear/j/jdb/*.class && \ > >> + $(JAR) uf ../j.jar org/armedbear/j/*.keywords && \ > >> + $(JAR) uf ../j.jar org/armedbear/j/mail/*.keywords && \ > >> + $(JAR) uf ../j.jar org/armedbear/lisp/*.class && \ > >> + $(JAR) uf ../j.jar org/armedbear/lisp/java/awt/*.class && \ > >> + $(JAR) uf ../j.jar org/armedbear/lisp/*.lisp org/armedbear/lisp/build > > > > This invokes jar several times. Why not echo the filenames to a temp file > > and say > > > > $(JAR) cmf manifest ../j.jar @temp_file_name > > rm temp_file_name > > > > ? > > I thought of that, but java version "1.4.1_05" does not support this. Peter, this change makes the building of j.jar jump from 2.5 seconds to 12 seconds on my machine. Before you laugh at me for even bringing it up, not everyone has multi GHz machines; a 4x difference for someone else might mean a lot, especially over time as that command gets cruftier. (Example: building ecl on my 200 MHz Sharp Zaurus PDA takes a looooong time.) Is there any way you can teach configure to determine whether jar supports the '@' notation and use it as appropriate? Or perhaps write a custom jar command using classes in java.util.jar? Or should I just stop whining? :) -- Larry |
From: Peter G. <pe...@ar...> - 2004-08-04 02:15:04
|
On Tue, 3 Aug 2004 at 21:43:51 -0400, Larry Clapp wrote: > Peter, this change makes the building of j.jar jump from 2.5 seconds > to 12 seconds on my machine. Before you laugh at me for even bringing > it up, not everyone has multi GHz machines; a 4x difference for > someone else might mean a lot, especially over time as that command > gets cruftier. (Example: building ecl on my 200 MHz Sharp Zaurus PDA > takes a looooong time.) Is there any way you can teach configure to > determine whether jar supports the '@' notation and use it as > appropriate? Or perhaps write a custom jar command using classes in > java.util.jar? Let me make sure I understand what you're requesting. You'd like me to spend, say, an hour or so, minimum, investigating what options the jar command supports on all known versions of Java (an hour seems way short for that), or else spend an hour or two writing some custom Java code to emulate the jar command, plus time for testing, so you can save 9.5 seconds? How often do you build j.jar? How many times would you have to build it before your saved time added up to the time I spent working on the aforementioned science project? > Or should I just stop whining? :) Do the math. -Peter |
From: Larry C. <la...@th...> - 2004-08-04 14:30:36
|
Peter Graves said: > On Tue, 3 Aug 2004 at 21:43:51 -0400, Larry Clapp wrote: [my whining snipped] > > Let me make sure I understand what you're requesting. > > You'd like me to spend, say, an hour or so, minimum, investigating > what options the jar command supports on all known versions of Java > (an hour seems way short for that), or else spend an hour or two > writing some custom Java code to emulate the jar command, plus time > for testing, so you can save 9.5 seconds? Well, no, so that everyone who builds j on a slower box could save I-don't-know-how-many-seconds. Maybe a lot. Some more cars in my alleged train of thought: I thought autoconfig might already have an option for this (it seems to have one for everything else), and you could just enable it. (Warning: I don't know autoconfig.) Barring that, I thought you could just run a test jar with @list_of_files during the configure process, and if it works, use it in the Makefile; if not, build the jar in stages. > How often do you build j.jar? Several times a day, so far. >> Or should I just stop whining? :) > > Do the math. *grin* I have pondered the equations, and they reveal: I am impatient. I apologize. Just so you know: the first part of the new jar command jar cmf manifest ../j.jar Main.class org/armedbear/j/*.class fails on AIX 5.1 with the same 'arglist too long' that Sam was getting under Cygwin. AIX sucks. -- Larry |
From: Peter G. <pe...@ar...> - 2004-08-04 14:50:45
|
On Wed, 4 Aug 2004 at 10:30:25 -0400, Larry Clapp wrote: > Just so you know: the first part of the new jar command > > jar cmf manifest ../j.jar Main.class org/armedbear/j/*.class > > fails on AIX 5.1 with the same 'arglist too long' that Sam was getting > under Cygwin. AIX sucks. Well, there are a few things you might do: 1. If you're normally running on Linux (or possibly some other reasonably normal unixoid platform), you might investigate fastjar, which (as its name suggests) is a faster version of jar. On Debian you can just do "apt-get install fastjar". The configure script already is smart enough to look for fastjar and use it if it's available. 2. Conditionalize the toplevel Makefile.in so that on recognizable platforms where the command line length is not an issue, we use the old all-in-one-go jar command. 3. Use Ant. If you're doing a full build, Ant is faster than make (I think; I don't pay as much attention to these things as I should). That said, I don't really know whether the Ant build system is entirely up-to-date and working well. I did use it on Win2K within the last week and didn't notice any problems, so whatever it does with the jar command line apparently works. And my personal favorite: 4. Write build-j.lisp, using build-abcl.lisp as a rudimentary starting point. (This is probably the only thing that will help you on AIX.) I'm very unlikely to do anything about this problem myself. I'm getting old, and I think what time I have left is better spent working on other things. -Peter |