Browse Source

Improve OS/2 support:

* Apparently the vmlauncher in OS/2's JDK 1.3 doesn't work properly,
  disable it.

* Add REXX scripts to run Ant.

* Add OS/2 specific notes to the docs.

Submitted by:	Zdenek Wagner <wagner at cesnet dot cz>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274507 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
078e8aaeaa
9 changed files with 391 additions and 19 deletions
  1. +2
    -2
      build.xml
  2. +11
    -11
      docs/manual/install.html
  3. +36
    -5
      docs/manual/running.html
  4. +1
    -0
      docs/manual/runninglist.html
  5. +3
    -1
      src/main/org/apache/tools/ant/taskdefs/Execute.java
  6. +71
    -0
      src/script/ant.cmd
  7. +100
    -0
      src/script/antenv.cmd
  8. +119
    -0
      src/script/envset.cmd
  9. +48
    -0
      src/script/runrc.cmd

+ 2
- 2
build.xml View File

@@ -961,7 +961,7 @@
<fileset dir="${script.dir}/"/> <fileset dir="${script.dir}/"/>
</copy> </copy>


<fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat"/>
<fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat,*.cmd"/>
<fixcrlf srcdir="${dist.bin}" eol="unix"> <fixcrlf srcdir="${dist.bin}" eol="unix">
<include name="ant"/> <include name="ant"/>
<include name="antRun"/> <include name="antRun"/>
@@ -1138,7 +1138,7 @@
</fileset> </fileset>
</copy> </copy>


<fixcrlf srcdir="${src.dist.dir}" eol="dos" includes="*.bat"/>
<fixcrlf srcdir="${src.dist.dir}" eol="dos" includes="*.bat,*.cmd"/>
<fixcrlf srcdir="${src.dist.dir}" eol="unix"> <fixcrlf srcdir="${src.dist.dir}" eol="unix">
<include name="**/*.sh"/> <include name="**/*.sh"/>
<include name="**/*.pl"/> <include name="**/*.pl"/>


+ 11
- 11
docs/manual/install.html View File

@@ -18,9 +18,9 @@ href="http://cvs.apache.org/builds/ant/nightly/">http://cvs.apache.org/builds/an


<p>If you prefer the source edition, you can download the source for the latest Ant release from <a href="http://ant.apache.org/srcdownload.cgi">http://ant.apache.org/srcdownload.cgi</a>. <p>If you prefer the source edition, you can download the source for the latest Ant release from <a href="http://ant.apache.org/srcdownload.cgi">http://ant.apache.org/srcdownload.cgi</a>.


Again, if you prefer the edge, you can access
the code as it is being developed via CVS. The Jakarta website has details on
<a href="http://jakarta.apache.org/site/cvsindex.html" target="_top">accessing CVS</a>. Please checkout the
Again, if you prefer the edge, you can access
the code as it is being developed via CVS. The Jakarta website has details on
<a href="http://jakarta.apache.org/site/cvsindex.html" target="_top">accessing CVS</a>. Please checkout the
ant module. ant module.


See the section <a href="#buildingant">Building Ant</a> on how to See the section <a href="#buildingant">Building Ant</a> on how to
@@ -33,7 +33,7 @@ Ant CVS repository</a> on-line. </p>
<h2><a name="sysrequirements">System Requirements</a></h2> <h2><a name="sysrequirements">System Requirements</a></h2>
Ant has been used successfully on many platforms, including Linux, Ant has been used successfully on many platforms, including Linux,
commercial flavours of Unix such as Solaris and HP-UX, commercial flavours of Unix such as Solaris and HP-UX,
Windows 9x and NT, Novell Netware 6 and MacOS X.
Windows 9x and NT, OS/2 Warp, Novell Netware 6 and MacOS X.
<p> <p>
To build and use Ant, you must have a JAXP-compliant XML parser installed and To build and use Ant, you must have a JAXP-compliant XML parser installed and
available on your classpath.</p> available on your classpath.</p>
@@ -95,17 +95,17 @@ file there. This directory will be known as ANT_HOME.
<table width="80%"> <table width="80%">
<tr> <tr>
<td colspan="2"> <td colspan="2">
<b>Windows 95, Windows 98 &amp; Windows ME Note:</b>
<b>Windows 95, Windows 98 &amp; Windows ME Note:</b>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="5%">&nbsp;</td> <td width="5%">&nbsp;</td>
<td><i> <td><i>
On these systems, the script used to launch Ant will have
On these systems, the script used to launch Ant will have
problems if ANT_HOME is a long filename (i.e. a filename which is not problems if ANT_HOME is a long filename (i.e. a filename which is not
of the format known as &quot;8.3&quot;). This is due to
limitations in the OS's handling of the <code>&quot;for&quot;</code>
batch-file statement. It is recommended, therefore, that Ant be
of the format known as &quot;8.3&quot;). This is due to
limitations in the OS's handling of the <code>&quot;for&quot;</code>
batch-file statement. It is recommended, therefore, that Ant be
installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i> installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i>
</td> </td>
</tr> </tr>
@@ -114,7 +114,7 @@ installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i>
<td> <td>
<p>On these systems you will also need to configure more environment <p>On these systems you will also need to configure more environment
space to cater for the environment variables used in the Ant lauch script. space to cater for the environment variables used in the Ant lauch script.
To do this, you will need to add or update the following line in
To do this, you will need to add or update the following line in
the <code>config.sys</code> file the <code>config.sys</code> file
</p> </p>
<p><code>shell=c:\command.com c:\ /p /e:32768</code></p> <p><code>shell=c:\command.com c:\ /p /e:32768</code></p>
@@ -152,7 +152,7 @@ libraries may either be placed in Ant's lib directory, where they will be picked
automatically, or made available on the system CLASSPATH environment variable. automatically, or made available on the system CLASSPATH environment variable.
</p> </p>


<h3>Windows</h3>
<h3>Windows and OS/2</h3>
<p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the <p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the
environment:</p> environment:</p>
<pre>set ANT_HOME=c:\ant <pre>set ANT_HOME=c:\ant


+ 36
- 5
docs/manual/running.html View File

@@ -161,17 +161,48 @@ set):</p>
</ul> </ul>


<h2><a name="cygwin">Cygwin Users</a></h2> <h2><a name="cygwin">Cygwin Users</a></h2>
<p>The Unix launch script that come with Ant works correctly with Cygwin. You
should not have any problems launching Ant form the Cygwin shell. It is important
<p>The Unix launch script that come with Ant works correctly with Cygwin. You
should not have any problems launching Ant form the Cygwin shell. It is important
to note however, that once Ant is runing it is part of the JDK which operates as to note however, that once Ant is runing it is part of the JDK which operates as
a native Windows application. The JDK is not a Cygwin executable, and it therefore
a native Windows application. The JDK is not a Cygwin executable, and it therefore
has no knowledge of the Cygwin paths, etc. In particular when using the &lt;exec&gt; has no knowledge of the Cygwin paths, etc. In particular when using the &lt;exec&gt;
task, executable names such as &quot;/bin/sh&quot; will not work, even though these
work from the Cygwin shell from which Ant was launched. You can use an executable
task, executable names such as &quot;/bin/sh&quot; will not work, even though these
work from the Cygwin shell from which Ant was launched. You can use an executable
name such as &quot;sh&quot; and rely on that command being available in the Windows name such as &quot;sh&quot; and rely on that command being available in the Windows
path. path.
</p> </p>


<h2><a name="os2">OS/2 Users</a></h2>
<p>The OS/2 lanuch script was developed so as it can perform complex task. It has two parts:
<code>ant.cmd</code> which calls Ant and <code>antenv.cmd</code> which sets environment for Ant.
Most often you will just call <code>ant.cmd</code> using the same command line options as described
above. The behaviour can be modified by a number of ways explained below.</p>

<p>Script <code>ant.cmd</code> first verifies whether the Ant environment is set correctly. The
requirements are:</p>
<ol>
<li>Environment variable <code>JAVA_HOME</code> is set.</li>
<li>Environment variable <code>ANT_HOME</code> is set.</li>
<li>environment variable <code>CLASSPATH</code> is set and contains at least one element from
<code>JAVA_HOME</code> and at least one element from <code>ANT_HOME</code>.</li>
</ol>

<p>If any of these conditions is violated, script <code>antenv.cmd</code> is called. This script
first invokes configuration scripts if there exist: the system-wide configuration
<code>antconf.cmd</code> from the <code>%ETC%</code> directory and then the user comfiguration
<code>antrc.cmd</code> from the <code>%HOME%</code> directory. At this moment both
<code>JAVA_HOME</code> and <code>ANT_HOME</code> must be defined because <code>antenv.cmd</code>
now adds <code>classes.zip</code> or <code>tools.jar</code> (depending on version of JVM) and
everything from <code>%ANT_HOME%\lib</code> except <code>ant-*.jar</code> to
<code>CLASSPATH</code>. Finally <code>ant.cmd</code> calls per-directory configuration
<code>antrc.cmd</code>. All settings made by <code>ant.cmd</code> are local and are undone when the
script ends. The settings made by <code>antenv.cmd</code> are persistent during the lifetime of the
shell (of course unless called automaticaly from <code>ant.cmd</code>). It is thus possible to call
<code>antenv.cmd</code> manually and modify some settings before calling <code>ant.cmd</code>.</p>

<p>Scripts <code>envset.cmd</code> and <code>runrc.cmd</code> perform auxilliary tasks. All scripts
have some documentation inside.</p>

<h2><a name="viajava">Running Ant via Java</a></h2> <h2><a name="viajava">Running Ant via Java</a></h2>
<p>If you have installed Ant in the do-it-yourself way, Ant can be started <p>If you have installed Ant in the do-it-yourself way, Ant can be started
with:</p> with:</p>


+ 1
- 0
docs/manual/runninglist.html View File

@@ -16,6 +16,7 @@
&nbsp;&nbsp;<a href="running.html#files">Files</a><br> &nbsp;&nbsp;<a href="running.html#files">Files</a><br>
&nbsp;&nbsp;<a href="running.html#envvars">Environment Variables</a><br> &nbsp;&nbsp;<a href="running.html#envvars">Environment Variables</a><br>
&nbsp;&nbsp;<a href="running.html#cygwin">Cygwin Users</a><br> &nbsp;&nbsp;<a href="running.html#cygwin">Cygwin Users</a><br>
&nbsp;&nbsp;<a href="running.html#os2">OS/2 Users</a><br>
<a href="running.html#viajava">Running Ant via Java</a><br> <a href="running.html#viajava">Running Ant via Java</a><br>


</body> </body>


+ 3
- 1
src/main/org/apache/tools/ant/taskdefs/Execute.java View File

@@ -109,7 +109,9 @@ public class Execute {
static { static {
// Try using a JDK 1.3 launcher // Try using a JDK 1.3 launcher
try { try {
vmLauncher = new Java13CommandLauncher();
if (!Os.isFamily("os/2")) {
vmLauncher = new Java13CommandLauncher();
}
} catch (NoSuchMethodException exc) { } catch (NoSuchMethodException exc) {
// Ignore and keep trying // Ignore and keep trying
} }


+ 71
- 0
src/script/ant.cmd View File

@@ -0,0 +1,71 @@
/*
Copyright (c) 2003 The Apache Software Foundation. All rights
reserved.

Run ant
*/

parse arg mode envarg '::' antarg

if mode\='.' & mode\='..' & mode\='/' then do
envarg = mode envarg
mode = ''
end

if antarg = '' then do
antarg = envarg
envarg = ''
end

x = setlocal()

env="OS2ENVIRONMENT"
antenv = _getenv_('antenv')
if _testenv_() = 0 then do
interpret 'call "' || antenv || '"' '"' || envarg || '"'
if _testenv_() = 0 then do
say 'Ant environment is not set properly'
x = endlocal()
exit 16
end
end

if mode = '' then mode = _getenv_('ANT_MODE' '..')
if mode \= '/' then do
runrc = _getenv_('runrc')
antrc = _getenv_('antrc' 'antrc.cmd')
if mode = '..' then mode = '-r'
else mode = ''
interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
end

settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME

java = _getenv_('javacmd' 'java')
opts = value('ANT_OPTS',,env)
args = value('ANT_ARGS',,env)
lcp = value('LOCALCLASSPATH',,env)
if lcp\='' then lcp = '-cp' lcp

java opts lcp 'org.apache.tools.ant.Main' settings args antarg

x = endlocal()

return rc

_testenv_: procedure expose env ANT_HOME JAVA_HOME
ANT_HOME = value('ANT_HOME',,env)
if ANT_HOME = '' then return 0
JAVA_HOME = value('JAVA_HOME',,env)
if JAVA_HOME = '' then return 0
cp = translate(value('CLASSPATH',,env))
if pos(translate(ANT_HOME), cp) = 0 then return 0
if pos(translate(JAVA_HOME), cp) = 0 then return 0
return 1

_getenv_: procedure expose env
parse arg envar default
if default = '' then default = envar
var = value(translate(envar),,env)
if var = '' then var = default
return var

+ 100
- 0
src/script/antenv.cmd View File

@@ -0,0 +1,100 @@
/*
Copyright (c) 2003 The Apache Software Foundation. All rights
reserved.

Ant environment
*/

call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
call SysLoadFuncs

/* Prepare the parameters for later use */
parse arg argv
mode = ''
args = ''
opts = ''
cp = ''
lcp = ''

do i = 1 to words(argv)
param = word(argv, i)
select
when param='-lcp' then mode = 'l'
when param='-cp' | param='-classpath' then mode = 'c'
when abbrev('-opts', param, 4) then mode = 'o'
when abbrev('-args', param, 4) then mode = 'a'
otherwise
select
when mode = 'a' then args = space(args param, 1)
when mode = 'c' then cp = space(cp param, 1)
when mode = 'l' then lcp = space(lcp param, 1)
when mode = 'o' then opts = space(opts param, 1)
otherwise
say 'Option' param 'ignored'
end
end
end

env="OS2ENVIRONMENT"
antconf = _getenv_('antconf' 'antconf.cmd')
runrc = _getenv_('runrc')
interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
ANT_HOME = value('ANT_HOME',,env)
JAVA_HOME = value('JAVA_HOME',,env)
classpath = value('CLASSPATH',,env)
classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
if classes \= '' then classpath = prepend(classpath classes)
classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
if classes \= '' then classpath = prepend(classpath classes)

mincp = classpath
call SysFileTree ANT_HOME || '\lib\*.jar', 'jar', 'FO'
do i = 1 to jar.0
nm = filespec('name', jar.i)
if pos('ant-', nm) == 0 then classpath = prepend(classpath jar.i)
end
if length(classpath) > 512 then do
say 'Classpath is too long, switching to the minimal version...'
say '... some tasks will not work'
classpath = mincp
classpath = prepend(classpath ANT_HOME || '\lib\ant.jar')
classpath = prepend(classpath ANT_HOME || '\lib\optional.jar')
end

'SET CLASSPATH=' || classpath

/* Setting classpathes, options and arguments */
envset = _getenv_('envset')
if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'

exit 0

addpath: procedure
parse arg path elem
if elem = '' then do
if path\='' & right(path, 1)\=';' then path = path || ';'
return path
end
if substr(path, length(path)) = ';' then glue = ''
else glue = ';'
if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
return path

prepend: procedure
parse arg path elem
if elem = '' then do
if path\='' & right(path, 1)\=';' then path = path || ';'
return path
end
if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
return path

_getenv_: procedure expose env
parse arg envar default
if default = '' then default = envar
var = value(translate(envar),,env)
if var = '' then var = default
return var

+ 119
- 0
src/script/envset.cmd View File

@@ -0,0 +1,119 @@
/*

Copyright (c) 2003 The Apache Software Foundation. All rights
reserved.

SET environment variables
First optional parameter:
; parameters are considered parts of a path variable, semicolons are
appended to each element if not already present
-D parameters are properties for Java or Makefile etc., -D will be
prepended and the parameters will be separated by a space
=D the same as above but equal sign is not required
, parameters should be comma separated in the environment variable
- parameters should be separated by the next parameter
Other values mean that the first parameter is missing and the environment
variable will be set to the space separated parameters

Second parameter: name of the environment variable

Next parameters: values
; implies that the equal sign is considered a part of the parameter and is
not interpreted

-D requires parameters in the form name=value. If the equal sign is not found,
the parameters are changed to name=expanded_name

Other options have optional equal sign. If it is found, only the part after
the equal sign will be oprionally expanded.

If the parameter is the minus sign, the next parameter will not be expanded.
If the parameter is a single dot, it will be replaced with the value of the
environment variable as it existed before envset was invoked.

For other parameters the batch looks for the environment variable with the
same name (in uppercase). If it is found, it forms the expanded_name. If
the environment variable with such a name does not exist, the expanded_name
will hold the parameter name without case conversion.
*/

parse arg mode envar args

equal = 0
sep = ' '

/* Parse command line parameters */
select
when mode='-' then do
sep = envar
parse var args envar args
end
when mode=';' then do
sep = ''
equal = -1
end
when mode='-D' then equal = 1
when mode='=D' then mode = '-D'
when mode=',' then sep = ','
otherwise
args = envar args
envar = mode
mode = ''
end

env = 'OS2ENVIRONMENT'
envar = translate(envar)
orig = value(envar,,env)
newval = ''
expand = 1

/* for each parameter... */
do i = 1 to words(args)
if expand > 0 & word(args, i) = '-' then expand = 0
else call addval word(args, i)
end

/* Optionally enclose path variable by quotes */
if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'

/* Set the new value, 'SET' cannot be used since it does not allow '=' */
x = value(envar, newval, env)
exit 0

addval: procedure expose sep equal orig expand newval mode env
parse arg var

if var = '.' then expvar = orig
else do
if equal >= 0 then do
parse var var name '=' val
if val = '' then var = name
else var = val
end
if expand = 0 then expvar = var
else expvar = value(translate(var),,env)
if expvar = '' then expvar = var
if equal >= 0 then do
if val = '' then do
parse var expvar key '=' val
if val <> '' then name = key
else do
if equal > 0 then val = key
else name = key
end
end
else val = expvar
if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
if val = '' then expvar = name
else expvar = name || '=' || val
end
if mode = '-D' then expvar = '-D' || expvar
if mode = ';' then do
if right(expvar, 1) <> ';' then expvar = expvar || ';'
end
end

if newval = '' then newval = expvar
else newval = newval || sep || expvar
expand = 1
return

+ 48
- 0
src/script/runrc.cmd View File

@@ -0,0 +1,48 @@
/*
Copyright (c) 2003 The Apache Software Foundation. All rights
reserved.

Run RC file, name is in the first arg, second arg is either PATH
ENV or -r or nothing
*/

parse arg name path rest

if name = '' then do
say 'RC file name is missing'
exit 1
end

if rest \= '' then do
say 'Too many parameters'
exit 1
end

call runit name path
exit 0

runit: procedure
parse arg name path dir

if path \= '' & path \= '-r' then do
dir = value(translate(path),,'OS2ENVIRONMENT')
if dir = '' then return
dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
end

if dir = '' then dir = directory()

if path = '-r' then do /* recursive call */
subdir = filespec('path', dir)
if subdir \= '\' then do
subdir = left(subdir, length(subdir)-1)
call runit name path filespec('drive', dir) || subdir
end
end

/* Look for the file and run it */
if right(dir, 1) \= '\' then dir = dir || '\'
rcfile = stream(dir || name, 'c', 'query exists')
if rcfile \= '' then interpret 'call "' || rcfile || '"'

return

Loading…
Cancel
Save