version numbers for distribution builds?

Matthias Klose doko at
Wed Nov 1 06:37:21 UTC 2017

On 27.10.2017 12:46, Magnus Ihse Bursie wrote:
> On 2017-10-27 12:21, David Holmes wrote:
>> Adding build-dev.
>> David
>> On 27/10/2017 9:13 AM, Matthias Klose wrote:
>>> On 27.10.2017 00:56, Matthias Klose wrote:
>>>> Hi,
>>>> I recently learned that I should configure an openjdk build with an empty
>>>> -with-version-pre string, and with any package information stuffed into the
>>>> --with-version-opt argument.
>>>>    --with-version-pre='' --with-version-opt='Debian-9.0.1+11-1'
>>>> 9.0.1+11 is what I call the upstream version, directly derived from the tag in
>>>> the mercurial repository.  The part after the dash is the packaging release and
>>>> gets incremented when more than upload to the distribution is based on the same
>>>> upstream version.
>>>> However using that I get
>>>> configure: WARNING: --with-version-opt value has been sanitized from
>>>> 'Debian-9.0.1+11-1' to 'Debian-9.0.111-1'
>>>> which makes the version string somehow cryptic.  Why is there a reason that the
>>>> version string is mangled?  Is there a recommendation how to form the version
>>>> for a source release?
>>> $ java -version
>>> openjdk version "9.0.1"
>>> OpenJDK Runtime Environment (build 9.0.1+0-Debian-9.0.111-1)
>>> OpenJDK 64-Bit Server VM (build 9.0.1+0-Debian-9.0.111-1, mixed mode)
>>> Omar suggested on irc to use
>>>    --with-version-pre='' --with-version-build=11 --with-version-opt='Debian.1
>>> however that will lead to 9.0.1+11-Debian.1, which doesn't match the package
>>> version either.  It looks like this whole versioning schema is only fit for
>>> upstream builds, and doesn't address any versioning in the downstream builds.
>>> Maybe I'm missing something, but how can I include the string Debian-9.0.1+11-1
>>> into that build information?
> Unfortunately, you can't. JEP 223 specifices what a valid Java version string
> looks like:
> I believe your intention is correct to add the distribution versioning to the
> "opt" part, but that is limited to containing ([-a-zA-Z0-9\.]+) according to JEP
> 223, so it cannot contain a "+". (This is due to the fact that "+" has a special
> meaning as the build prefix, and without this restriction, version strings could
> become ambigious to parse.
> If you want the full version number repeated in the opt string, I recommend
> replacing the "+" with a "-".

This is error prone on the Debian side, because the additional "-" is getting
interpreted as the Debian release number, if you don't include it explicitly, so
something like 9.0.1-11 is interpreted as upstream 9.0.1.

> Otherwise I'd recommend Omar's suggestion. I believe that was the intention of
> the JEP 223 design. It will contain the version number of the JDK, the build
> number, and the additional (opt) part saying that this is a Debian build, with a
> Debian-specific version numbering of 1.

so while discussing the new date based versioning schema, can we amend that with
a downstream versioning schema?

Note that other projects provide the ability to include downstream versioning
without any mangling:

$ gcc --version
gcc (Debian 7.2.0-12) 7.2.1 20171025

configured with --with-pkgversion='Debian 7.2.0-12'


More information about the jdk-dev mailing list