On 2016-12-02 02:47, David Holmes wrote:
On 2/12/2016 8:39 AM, Magnus Ihse Bursie wrote:
Our current default is to create a version-opt string on the format
'<timestamp>.<username>.<base dir name>' during configure.

The problem with this is that each time the configure script has change,
a reconfigure is triggered. This will create a new version-opt, and
hence a new version string. This in turn will trigger a rebuild of
hotspot and java.base, and that in turn rebuilds the whole world.

Surely after a reconfigure you _have_ to rebuild the world? It even warns you to do a clean after a reconfigure.

Well, it depends. :-)

Not doing a make clean after a reconfigure is like using the *-only targets or JDK_FILTER -- it speeds things up, often considerably, but it not guaranteed to be correct. But, if you know what you're doing, you can get a result that is correct anyway.

We used to be very bad at detecting changes in the spec.gmk during the make phase, so if you changed a configuration and just rebuilt without a clean, we would end up with a very messy state. Nowadays, we have proper dependencies of most (but not all, yet) input variables, so if a new configuration changes any values that has relevance for the build, these parts should be rebuilt.

Typically, changes to the configuration script could be a small bug fix, e.g. the one I'm working with right now, that checks the correct version of ccache on macosx. Whenever I push that change, the generated-configure.sh will change, and this will cause the make file to claim that the current spec.gmk is out of date. (Which is true, because it *could* have been a breaking change). So, it will regenerate the spec.gmk. But nothing in it will change (unless you're running with a broken ccache on macosx), so this *shouldn't* really have to cause any rebuilds. And if the spec.gmk *really* didn't change, it wouldn't. But, during the reconfigure, we will change the version string. So... *duh*.

/Magnus


David
-----

It does not have to be like that. In fact, storing the time stamp of the
last configure, rather than the time stamp of the last build is rather
silly anyhow.

In a perfect world we could just update the version-opt string and have
this resulting in an extremely short rebuild time. Unfortunately, we do
not live in a perfect world, and here it makes more sense to drop the
timestamp.

Note that this only affects adhoc (developer) builds.

Bug: https://bugs.openjdk.java.net/browse/JDK-8170632

Patch inline:
diff --git a/common/autoconf/jdk-version.m4
b/common/autoconf/jdk-version.m4
--- a/common/autoconf/jdk-version.m4
+++ b/common/autoconf/jdk-version.m4
@@ -160,11 +160,10 @@
     fi
   else
     if test "x$NO_DEFAULT_VERSION_PARTS" != xtrue; then
-      # Default is to calculate a string like this
<timestamp>.<username>.<base dir name>
-      timestamp=`$DATE '+%Y-%m-%d-%H%M%S'`
+      # Default is to calculate a string like this
'adhoc.<username>.<base dir name>'
       # Outer [ ] to quote m4.
       [ basedirname=`$BASENAME "$TOPDIR" | $TR -d -c
'[a-z][A-Z][0-9].-'` ]
-      VERSION_OPT="$timestamp.$USERNAME.$basedirname"
+      VERSION_OPT="adhoc.$USERNAME.$basedirname"
     fi
   fi

/Magnus

Reply via email to