When I was talking to Sam Ruby during an IRC session, he alluded that
this is not the best approach.  However, I haven't seen or heard any
constructive criticism on this.  Please, point me to the previous
discussions we all had on the subject of installations.  It is important
to me--and I would like to see the competition my proposal had.

Berin Loritsch wrote:
> 
> We all commonly understand that the build processes for the Apache
> Java projects are not as mature as the processes for several C-based
> GNU projects.  Their build process includes a number of scripts that
> are very UNIX based--but there are still some things we can learn from
> them.
> 
> The first is the concept of installation.  The Java projects really
> assume that all project directories are self contained.  That means
> that there is no real installation.  I have a road map (beyond the
> initial build standardization I proposed that got more reaction outside
> this list) that can assist.
> 
> The GNU standard:
> -----------------
> Configure script--checks to see if all necessary components are installed.
>                   if not it sets some properties used in generating the make
>                   files.  Finally it builds the make files.
> 
> Make files--Standard format everyone either knows or learns quickly.
> 
> Property scripts--part of the install are scripts whose sole purpose are to
>                   let other build scripts know where a library is, how
>                   to link to it, and what version it is.
> 
> The configure script and make files can be comfortably merged into Ant.  It
> does a wonderful job and is much more elegant than the GNU/Unix style approach.
> However, if we use the concept of installation, we have to ensure that we can
> handle version matching and library locations.
> 
> Now, this can be done with standard property names for Apache project libraries.
> A rising convention among Apache projects is aliasing the jar name in the build
> script.  Kind of like looking for Xerces with the property ${xerces.jar}.  This
> works well for the library.  A simple extension would be to have a "xerces.ver"
> property for version checking.
> 
> Ant allows the including of property files into the build process, because you
> can't really use environment variables.  You can either install the necessary
> entries in the users .ant.properties file, or create ant scripts that are called
> to check set your properties for your jars.  The entry would look something like
> this:
> 
> <ant file="${build.registry}/${xerces.entry}" target="init">
>   <property name="ver.macro" value="1"/>
>   <property name="ver.mini" value="4"/>
>   <property name="ver.micro" value="*"/>
> </ant>
> 
> The build registry (where all these external files belong) will house
> a xerces.xml file with one target in it ("init").  The target will work
> like this example:
> 
> <project default="init">
>   <property name="xerces.macro" value="1"/>
>   <property name="xerces.mini" value="4"/>
>   <property name="xerces.micro" value="4"/>
>   <property name="xerces.jar" value="/usr/local/apache/jars/xerces.jar"/>
> 
>   <target name="init">
>     <compare fail="true">
>       <lte>
>         <option1 value="${xerces.macro}"/>
>         <option2 value="${ver.macro}"/>
>       </lte>
>       <lte>
>         <option1 value="${xerces.mini}"/>
>         <option2 value="${ver.mini}"/>
>       </lte>
>       <lte>
>         <option1 value="${xerces.micro}"/>
>         <option2 value="${ver.micro}"/>
>       </lte>
>       <on-fail message="Installed version of Xerces is 
>${xerces.macro}.${xerces.mini}.${xerces.micro}."/>
>   </target>
> </project>
> 
> At least that gives the general idea.
> 
> The <compare> function would be new functionality.  An alternative would be to
> simply provide a version checking function to Ant.  It would parse a three part
> version and compare something like this:
> 
> <target name="init">
>   <property name="xerces.jar" value="/usr/local/apache/jars/xerces.jar"/>
>   <property name="xerces.version" value="1.4.4"/>
>   <property name="xerces.name" value="Xerces"/>
> 
>   <version-check current="${xerces.version}"
>                  required="${version}"
>                  project="${xerces.name}"/>
> </target>
> 
> If ${version} contained the value "1.4.*" or "1.4" then the version checker
> would pass (the micro position in both of those are unspecified so any would
> work).  If the required version were higher than the installed version, it
> would display a message like this:
> 
> "The installed version of ${project} is ${current}.
> You need to upgrade to version ${version} or higher."
> 
> Where the properties above are replaced with the values in the attributes above.
> In our example it would be:
> 
> "The installed version of Xerces is 1.4.4.
> You need to upgrade to version 1.4 or higher."
> 
> This will assist all Apache projects to automatically find and use the desired
> jars--and even be able to transform the start scripts to build the classpath
> with the installed jars.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to