* 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}/"/> | |||
| </copy> | |||
| <fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat"/> | |||
| <fixcrlf srcdir="${dist.bin}" eol="dos" includes="*.bat,*.cmd"/> | |||
| <fixcrlf srcdir="${dist.bin}" eol="unix"> | |||
| <include name="ant"/> | |||
| <include name="antRun"/> | |||
| @@ -1138,7 +1138,7 @@ | |||
| </fileset> | |||
| </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"> | |||
| <include name="**/*.sh"/> | |||
| <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>. | |||
| 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. | |||
| 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> | |||
| Ant has been used successfully on many platforms, including Linux, | |||
| 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> | |||
| To build and use Ant, you must have a JAXP-compliant XML parser installed and | |||
| available on your classpath.</p> | |||
| @@ -95,17 +95,17 @@ file there. This directory will be known as ANT_HOME. | |||
| <table width="80%"> | |||
| <tr> | |||
| <td colspan="2"> | |||
| <b>Windows 95, Windows 98 & Windows ME Note:</b> | |||
| <b>Windows 95, Windows 98 & Windows ME Note:</b> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td width="5%"> </td> | |||
| <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 | |||
| 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> | |||
| </td> | |||
| </tr> | |||
| @@ -114,7 +114,7 @@ installed in a <b>short</b>, 8.3 path, such as C:\Ant. </i> | |||
| <td> | |||
| <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. | |||
| 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 | |||
| </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. | |||
| </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 | |||
| environment:</p> | |||
| <pre>set ANT_HOME=c:\ant | |||
| @@ -161,17 +161,48 @@ set):</p> | |||
| </ul> | |||
| <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 | |||
| 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> | |||
| 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 | |||
| path. | |||
| </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> | |||
| <p>If you have installed Ant in the do-it-yourself way, Ant can be started | |||
| with:</p> | |||
| @@ -16,6 +16,7 @@ | |||
| <a href="running.html#files">Files</a><br> | |||
| <a href="running.html#envvars">Environment Variables</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> | |||
| </body> | |||
| @@ -109,7 +109,9 @@ public class Execute { | |||
| static { | |||
| // Try using a JDK 1.3 launcher | |||
| try { | |||
| vmLauncher = new Java13CommandLauncher(); | |||
| if (!Os.isFamily("os/2")) { | |||
| vmLauncher = new Java13CommandLauncher(); | |||
| } | |||
| } catch (NoSuchMethodException exc) { | |||
| // 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 | |||