You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Jesse Glick <Je...@netbeans.com> on 2000/08/18 15:53:19 UTC

Re: if basedir absolute file name then resolving file names causes duplicate basedirs in resulting string

Kitching Simon wrote:
> The above ant tasks generate bad antFile paths, because the path is
> absolute. Currently,
> only relative paths work, eg "antFile="../mybuildfile.cml" works ok.

Somewhat related:

I find the semantics of 'dir' vs 'antFile' attributes on the <ant> task
very confusing. The documentation is murky on how it works.

- If you specify only antFile, and give it a build file in a different
directory, what is the subproject's basedir set to? That different
directory, I assume.

- What if the subproject's buildfile says basedir=".." or
basedir="some/sub/dir"? Will it still work?

- If the buildfile is called build.xml, and you give just dir, does it
work the same or differently?

- If you give both, then what?

So attached is a test case. Run the upper script. In *no case* is the
basedir attribute of the lower script honored (it seems to be ignored,
since using both "." and "sub2" have the same effect)--I would expect
all three cases to show sub1/sub2/ as the resolution of "." for the pwd.
The first run (just antFile) runs in the top directory. Passing just dir
runs in sub1, as does passing both dir and antFile. (Passing both did
not work the same in Ant 1.1 BTW--you would still have to qualify
antFile, otherwise it would recurse on the current script!)

My suggested semantics: if both antFile and dir are missing, then the
current script is used; if antFile only is given, it is treated as a
filename for the build script relative to the current script's basedir;
if just dir is given, it is the same as giving antFile with that dir
plus "/build.xml"; passing both antFile and dir is a syntax error. When
the subproject is run, it is given a basedir calculated from the
directory in which that build script is contained, modified/replaced by
its basedir attribute, regardless of where the master script is. This
would make <ant> consistent in behavior with running the commandline
e.g. "ant -buildfile sub1/build.xml" (which prints sub1/sub2 as I
expected). Otherwise build scripts will not in general work when called
from elsewhere, since they may expect their basedir to really be set
where they asked and for files to exist in certain places relative to
themselves.

-Jesse

-- 
Jesse Glick   <ma...@netbeans.com>
NetBeans, Open APIs  <http://www.netbeans.org/>
tel (+4202) 3300-9161 Sun Micro x49161 Praha CR