* 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-ffa450edef68master
@@ -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"/> | ||||
@@ -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 & Windows ME Note:</b> | |||||
<b>Windows 95, Windows 98 & Windows ME Note:</b> | |||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td width="5%"> </td> | <td width="5%"> </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 "8.3"). This is due to | |||||
limitations in the OS's handling of the <code>"for"</code> | |||||
batch-file statement. It is recommended, therefore, that Ant be | |||||
of the format known as "8.3"). This is due to | |||||
limitations in the OS's handling of the <code>"for"</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 | ||||
@@ -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 <exec> | has no knowledge of the Cygwin paths, etc. In particular when using the <exec> | ||||
task, executable names such as "/bin/sh" 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 "/bin/sh" will not work, even though these | |||||
work from the Cygwin shell from which Ant was launched. You can use an executable | |||||
name such as "sh" and rely on that command being available in the Windows | name such as "sh" 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> | ||||
@@ -16,6 +16,7 @@ | |||||
<a href="running.html#files">Files</a><br> | <a href="running.html#files">Files</a><br> | ||||
<a href="running.html#envvars">Environment Variables</a><br> | <a href="running.html#envvars">Environment Variables</a><br> | ||||
<a href="running.html#cygwin">Cygwin Users</a><br> | <a href="running.html#cygwin">Cygwin Users</a><br> | ||||
<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> | ||||
@@ -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 | ||||
} | } | ||||
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |