RFR: 8020779 & 8026988 : Improvements to JTReg executable location handling

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Thu Nov 7 02:09:01 PST 2013


On 2013-11-06 21:40, Mike Duigou wrote:
> Hello all;
>
> With JDK-8015068 only very recently pushed it's time for the next set of jtreg test/Makfile changes. These changes improve the configure script detection of jtreg and improve the handling of the specification variables in the jdk and langtools test/Makefiles. This changeset is also the first step in syncing the two test/Makefiles. More will follow which will further simplify the integration of testing into the overall build/test process.
>
> http://cr.openjdk.java.net/~mduigou/JDK-8020779/0/webrev/

I don't think the changes in toolchain.m4 does what you want it to do. 
The AC_ARG_WITH function is not really well designed. In particular, it 
is missing a "default" section. So if you use the functionality to 
execute code on "yes" and "no", then "no" will be the same wether or not 
you leave the option out alltogether, or try call it like 
--without-jtreg (or --with-jtreg=no, which is the same as --without).

Our typical use pattern, to get around this, is to not execute any code 
in the AC_ARG_WITH function, and instead check the $with_argname option 
afterwards. There you can separate the different use patterns:

* $with_argname=yes --> user explicitely set --with-argname (or 
--with-argname=yes)
* $with_argname=no --> user explicitely set --without-argname (or 
--with-argname=no)
* $with_argname= (empty) --> user did not specify flag at all; do 
default action.
* $with_argname=<something else>  --> user explicitely set 
--with-argname=<something else>, most likely trying to override a path.

In this case, it will no longer be possible to explicitely disable jtreg 
with your changes. (If I read the code correctly -- I have not tried 
running it).

Also, the pair AC_MSG_CHECKING and AC_MSG_RESULT needs to be close 
together. If any output arrives inbetween them, the output will look 
garbled, like:

checking for foo... yes.
checking for jtreg... Rewriting path for JT_HOME to /localhome/jthome
yes.
checking for bar... no.

I tend to use the pair just consecutively after I actually found out 
what I was looking for, to avoid this. Then it's really just useful for 
the log output, not to show progress. If the test I'm about to make 
might take a non-significant amount of time, I might start by a 
AC_MSG_NOTICE([Trying to locate package foo]) or similar.

Also, if the search failed, and a AC_MSG_CHECKING had been printed, an 
AC_MSG_RESULT([no]) should be printed before AC_MSG_ERROR.

/Magnus


More information about the compiler-dev mailing list