Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Nov 2001 08:40:05 -0800
From:      John Merryweather Cooper <john_m_cooper@yahoo.com>
To:        Ernst de Haan <znerd@freebsd.org>
Cc:        freebsd-java@freebsd.org, freebsd-ports@freebsd.org
Subject:   Re: A Modest Proposal for Java(tm) dependency selection among ports
Message-ID:  <20011116084005.A40560@johncoop.MSHOME>
In-Reply-To: <200111161042.fAGAg8V55897@zaphod.euronet.nl>; from znerd@freebsd.org on Fri, Nov 16, 2001 at 02:42:08 -0800
References:  <20011115130202.E33074@johncoop.MSHOME> <200111161042.fAGAg8V55897@zaphod.euronet.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

On 2001.11.16 02:42 Ernst de Haan wrote:
> John,
> 
> The problem you are addressing is one that has been discussed a few
> times
> before. But up until now, no solution was implemented. Now that I'm a
> member
> of the FreeBSD Project, I'm determined to find a solution for this.
> :-)
> 
> > bsd.port.mk (probably through a bsd.java.mk) would provide the
> > following knobs:
> 
> So far this sounds good.
> 
> > USE_JAVA=[yes|no]	knob will succeed on any of JDK's 1.3.1,
> > 			1.2.2, or 1.1.8 IN THAT ORDER (latest
> > 			version first)
> > USE_JAVA2=[yes|no]	knob will succeed on either JDK 1.3.1 or
> > 			1.2.2 IN THAT ORDER
> > USE_JAVA11=[yes|no] knob will succeed on ONLY JDK 1.1.8
> 
> I'm suggestion a solution that's a bit different: If a port wants to
> use
> Java, then it should set either of the following flags:
> 
> [ Note that a JDK is a JRE plus development tools ]
> 

My thought here is that a "black box" application, where the user could 
care less if it's Java(tm) under the hood, is a very good candidate for 
a JRE, but the nature of development tools is that they need a JDK 
(debugging sucks without a debugger, etc.)

> USE_JAVA=[yes|no] --> This port needs any JRE/JDK, version 1.1 or
> higher. If
> a JRE/JDK is installed, then this port will succeed. If not, then any
> JRE
> will be installed. The preference order for a JRE/JDK to be installed
> is
> stored somewhere in /usr/ports/Mk and it should be possible to
> override this
> setting in some config file, similar to the way the order for GNOME
> download
> sites can be tweaked.
> Preferrably the order should take the following rules into account:
> [1] A JRE/JDK with a higher version number is preferred over one with
> a lower
> version number
> [2] A native FreeBSD JDK/JRE is preferred over a non-native JDK
> [3] A JRE/JDK that has no dependencies on other JDKs is preferred over
> a JDK
> that does
> [4] A JRE/JDK that can be installed without fetching any files
> manually is
> preferred over one that fails with a message like "You must manually
> fetch
> the <MANUFACTURER> JDK from <URL>, place it in /usr/ports/distfiles
> and then
> run make again"
> [5] A JRE is preferred over a JDK
> 
> USE_JAVA_1_1=[yes|no] --> This is synonymous to USE_JAVA
> 
> USE_JAVA_1_2=[yes|no] --> This port needs any JRE/JDK (1.2+). If a
> JRE/JDK
> 1.2 port is installed, then this port will install, otherwise it will
> fail,
> *or* (preferrably!!!!) install a JRE/JDK, using the rules layed out
> above
> 
> USE_JAVA_1_3=[yes|no] --> Similar to USE_JAVA_1_2, but then 1.3 i.s.o.
> 1.2
> 
> USE_JAVA_1_4=[yes|no] --> Similar to USE_JAVA_1_3, but for 1.4 i.s.o.
> 1.3
> 

In my experience (yours may be different), the dividing line for most 
apps is whether they work better (or at all) with a Java or Java2 
JRE/JDK.  I've yet to find an app/tool that whines too much about the 
many variations of Java2 (1.2.x and up), but many are unhappy with 
first generation Java (1.1.8 and before)--and vice versa.  Hence, 
following IBM's breakdown--call one set JAVA11 and the other set 
JAVA2.  Getting more fine-grained than necessary leads back to the 
current situation--where I effectively have ALL the JDK's installed.  
In reality, two should cover most of the known world.  People who 
simply must have every JDK can still install them.  :)

> USE_JDK=[yes|no] --> Similar for USE_JAVA, but now mandates a JDK,
> just a JRE
> won't do
> 
> USE_JDK_11=[yes|no] --> Synonym for USE_JDK
> 
> USE_JDK_12=[yes|no] --> See USE_JDK_11, but for 1.2 i.s.o. 1.1
> 
> USE_JDK_13=[yes|no] --> See USE_JDK_12, but for 1.3 i.s.o. 1.2
> 
> USE_JDK_14=[yes|no] --> See USE_JDK_13, but for 1.4 i.s.o. 1.3
> 

My thought here is that a single JDK versus JRE switch can be used to 
influence the version selection mechanism--and avoid proliferating 
switches unnecessarily.

> > WANT_LINUX_JAVA=[yes|no]
> > 			same as above except Linux version Java's
> > 			are used and USE_JAVA11 will abort build.
> 
> I suggest not introducing this flag in the first phase. We can discuss
> it's
> usefullness later.
> 

I can definitely understand why!  But, practically, a user who wants 
Java(tm) only/mostly for her favorite Linux application--Star Office is 
an example--wants a JRE/JDK that works (I can almost get Star Office to 
do Java with a Linux JDK--no dice (probably because there's no emulator 
support) for a native JDK).  Of course, the solution is native versions 
of BOTH the JDK/JRE and the application.  At the glacial rate this is 
happening with Sun, some of us may need to chain themselves to the 
front doors of their main office and chant "Free BSD" until the 
powers-that-be allow native binaries . . . (rant off--sorry)

> > WANT_JRE_ONLY=[yes|no]
> > 			same as above except a JRE will be used
> > 			instead of a JDK, if available
> 
> See above proposed solution.
> 
> > JAVA_VER		reports Java(tm) detected or built by
> > 			USE_JAVA*
> 
> Hmm, what *exactly* would you like this variable to return as its
> value?
> 

CLASSPATH and/or environment variable construction for an install-user 
script on the Makefiles.  For example, a whole host of environment 
variables need to be correctly set for my NetRexx port to function.  If 
they're not set correctly, the port acts like it is broken.  But unless 
I get really tyrannical (YOU user SHALL have the following ports 
installed and NO OTHERS . . .) it's not practical to construct such a 
script.  NetRexx will run with ANY of the JDK's.  But which one to 
setup?  That is the problem.  If I know:  1) whether or not it is linux 
based on the WANT_LINUX_JAVA flag; and 2) what JAVA_VER it is (1.1.8, 
1.2.2, etc.), I can construct the necessary environment variables.  In 
fact, for Java2 (if I know Java2 is the target), I can install my JAR 
file in the EXT portion of the JDK tree and eliminate setting/changing 
the CLASSPATH (same also with JGNAT).  But I don't know, so I can't.

> 
> 
> Ernst
> 
> --
> Ernst de Haan
> EuroNet Internet B.V.
> 
>     "Come to me all who are weary and burdened
>         and I will give you rest" -- Jesus Christ
> 

Nice quotes are left.  :)

-- 
jmc                               ||   MacroHard --                    \
                                   ||       the perfection of form over 
|
----------------------------------||       substance, marketing over   |
Web:  http://www.borgsdemons.com  ||       performance, and greed over |
                                   ||       design . . .                
|
=======================================================================/
Public Key:  http://www.borgsdemons.com/Personal/pgpkey.asc            |
=======================================================================\

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011116084005.A40560>