[LWN Logo]

Date: Mon, 31 Aug 1998 22:41:35 +1200 (NZST)
From: Michael Hamilton <michael@actrix.gen.nz>
To: lwn@lwn.net
Subject: Borland JBuilder Command Line Tools and Wine-980822


I've been doing some Java development with Xemacs, JDK-1.1.5 and
swing-1.0.2 under Linux.  The major problem with using Linux was the lack
of a fast Java 1.1 compiler.  Because Sun's JDK compiler is written in
Java it is quite slow.  Borland's Win9x/WinNT JBuilder 2 Professional
Edition compiler is more than 10 times faster.  Jbuilder2 was installed in
my Win98 partition, but I much prefer working in Xemacs under Linux, so it
was hardly ever used.  Under Linux I just tried to avoid rebuilding
the entire Java application unless I really needed to.

But I've now found that with a small tweak to Wine-980822 I can
use the JBuilder 2 Professional Edition compiler under Linux.  Under
linux the Borland compiler built 100,000 lines of Java in about 1
minute.  Under Win98 Jbuilder built the same code in 40 seconds - but
I suspect the difference may be due to the time taken starting up
Wine.  The last time I did a full -g build using the Sun's JDK
compiler I think it took about 10 minutes.  This is all on a PII 266
with 128MB of RAM (Linux 2.0.34, 2.1.119, libc 5.4.44).

Here's how it was achieved:

You can use both the Borland bcj.exe and bmj.exe command line tools
using wine as follows: 

wine "/mnt/dos/c/jbuilder2/bin/bmj.exe \
     -d G:\src \
     -classpath G:\src;G:\src\swing.jar;G:\src\classes.zip \
     Main.java" 

Note that the enclosing quotes are important.  The -d makes sure 
bmj knows where to place its dependency files.

To get the Jbuilder commands to work I had to patch wine as follows:

----- cut here -----
--- files/dos_fs.c~	Sun Aug 23 05:21:07 1998
+++ files/dos_fs.c	Sun Aug 30 13:44:40 1998
@@ -802,7 +802,7 @@
                 /* If the drive is case-sensitive we want to create new */
                 /* files in lower-case otherwise we can't reopen them   */
                 /* under the same short name. */
-	    	if (flags & DRIVE_CASE_SENSITIVE) *p_l++ = tolower(*name);
+	    	if (0) /*flags & DRIVE_CASE_SENSITIVE)*/ *p_l++ = tolower(*name);
 		else *p_l++ = *name;
                 name++;
             }
----- cut here -----

The patch comments out the tolower() call on wine file name creation.
The tolower() was causing .class files to be created with lowercase
names which would cause the class names to fail to match when loading
them at run time.

Finally, here are the relevant lines from my /usr/local/etc/wine.conf

[Drive C]
Path=/mnt/dos/c
Type=network
Label=WIN95
Filesystem=win95
 
[Drive G]
Path=/home/michael
Type=hd
Filesystem=unix
Label=unix

---
Michael Hamilton (http://www.actrix.gen.nz/users/michael)