On 2018-01-19 08:08, Erik Helin wrote:
On 01/19/2018 07:18 AM, Martin Buchholz wrote:
Differing projects have come to different conclusions about whether to
include a generated configure.
But the standard seems to be to include one. The mantra is:
"./configure &&
make" without an autoconf step.
And this is still the mantra (except we don't have an executable
configure file in the repo so you have to run `bash configure &&
make`). The only thing we are discussing is whether the script
"configure" should depend on the program "autoconf" or not.
If I'm downloading a .tar.gz source code bundle of a project (like the
ones usually generated via `make dist`), then it seems more common
that "configure" will not depend on autoconf. However, if I'm cloning
a project from source, then I'm used to having autoconf being run for
me (or sometimes having to run it myself).
Good point. If we were to start shipping source code bundles, it would
certainly make sense to include a generated configure script for it. I'm
all for it. The problem here is that the current model presupposes a
working, generated configure script for every separate commit.
I'll admit that I was part of introducing this model some five (or
more?) years ago. I didn't really like it then either, but at that time
I perceived it to be a quite massive resistance amongst the JDK
developers (perhaps mostly inside Oracle) for any kind of change in the
environment, so adding a new build requirement seemed like a huge war
that was needed to be fought. (Just removing the old build system was
enough effort...) Nowadays, we're using jib inside Oracle, so a new
requirement is virtually undetectable by most developers. And for all
others, it's just an "sudo apt install autoconf" (or brew, or whatever)
away, in the unlikely case that you're a developer without autoconf
installed already.
/Magnus
The number of people building openjdk is
much larger than the number of people patching configure. So I agree
with
David that we should stick with the status quo.
I disagree, I don't think depending on autoconf will make it harder to
build OpenJDK. Remember that the build steps are still:
$ bash configure
$ make
the only difference now is that configure will use autoconf to first
generate .build/generated-configure.sh. As noted in the documentation,
installing autoconf is trivial on essentially any system today (the
configure script will also provide a useful help message for your
platform if you are missing autoconf).
So for me, this patch gets +1. I'll leave the actual Makefile changes
and details for Erik J to review though ;)
Thanks,
Erik
On Thu, Jan 18, 2018 at 6:14 PM, David Holmes <[email protected]>
wrote:
On 18/01/2018 11:28 PM, Magnus Ihse Bursie wrote:
Currently, we require all developers who modify the configure
script to
run autoconf locally, to update the generated-configure.sh script,
which is
then checked in. This is the only instance of checked in "compiled"
code in
OpenJDK, and this has brought along several problems:
* Only a specific version of autoconf, 2.69, can be used, to avoid
large
code changes in the generated file. Unfortunately, Ubuntu ships a
version
of autoconf that claims to be 2.69 but is actually heavily patched.
This
requires all Ubuntu users to compiler their own autoconf from source.
* The Oracle JDK closed sources has a closed version that needs to be
updated. In practice, this has meant that all non-Oracle
developers, need
an Oracle sponsor for patches modifying the configure script.
* If the configure script is not properly updated, the build will
fail.
The same happens on the Oracle side if the closed version is not in
sync
with the open version. It is easy to miss re-generating the script
after
the last fix of a typo in the comments in an .m4 file...
* Merging between two changes containing configure modifications is
almost impossible. In practice, the entire generated-configure.sh
needs to
be thrown away and regenerated.
The entire benefit of having the file in the repo is to save
first-time
developers the hassle of installing autoconf. On most platforms,
this is a
no-brainer (like "apt install autoconf"), and the requirement is
similar to
other open source projects using autoconf and "./configure". It's
just not
worth it.
I'm not convinced just by you saying it is so - sorry. This seems to
make
an already complex build process even more complex for every single
person
who wants to build OpenJDK, for the benefit of a handful of people
who may
want to modify configure options and whom already work closely with the
build team and so there's really little hardship in getting a
sponsor, or
just someone with access to autoconf.
It introduces a new point of failure in the build for everyone.
Has this been beta-tested with external contributors? I'd be happier
knowing we've put this through its paces with people developing on a
wide
range of platforms, before making it the default.
Have the devkits been updated so I can try this out myself?
Thanks,
David
Bug: https://bugs.openjdk.java.net/browse/JDK-8195689
WebRev: http://cr.openjdk.java.net/~ihse/JDK-8195689-remove-generate
d-configure/webrev.01
/Magnus