Hi Magnus,

On 3/24/20 4:16 AM, Magnus Ihse Bursie wrote:

At the core, we'd like to "invert" the current structure where we have files like:
make/lib/Lib-java.base.gmk
make/lib/Lib-java.desktop.gmk
make/gensrc/Gensrc-java.base.gmk
make/gensrc/Gensrc-java.desktop.gmk
... etc

and instead have like:
make/modules/java.base/lib.gmk
make/modules/java.base/gensrc.gmk
make/modules/java.desktop/lib.gmk
make/modules/java.desktop/gensrc.gmk

:

We already have collected everything else that belongs to a module under src/$module/share. Apart from classes, and native, we have:
* conf
* lib
* legal
* man
for those modules that require them.

My suggestion is that we add, for those module that require them:
* data
* tools


I think we should take at modularizing make/data, build tools, make/gensrc etc as a whole and put down other options considered.

I haven't had time looking closely but I try to understand how make/data are used.  Here are some examples of it that produces either gensrc/$MODULE/$PACKAGE/*.java files or files in jdk build output.

   - generate source files from gensrc/$MODULE/$PACKAGE/*.java.template
   - generate resource bundle from gensrc/$MODULE/$PACKAGE/resource/*.properties
   - generate CLDR locale data from make/data/cldr files
   - generate jdk/lib/tzdb.dat from make/data/tzdata
   - generate jdk/lib/ct.sym from make/data/symbol
   - generate jdk/lib/security/cacerts from make/data/cacerts
   - generate jdk/lib/security/backlisted.certs from make/data/blacklistedcertsconverter    - generate jdk/lib/security/public_suffix_list.data from make/data/publicsuffixlist

I can see why you propose the data files are moved to the source. There could be other options to explore.

Another observation:  Some build tools are module-specific (e.g. generate icons .png.java files) that is clearly used only by one module.   There are other build tools that can be used by any module e.g. generate resource bundle .java source.

And regarding JEP 201, as far as I can tell the additional "man" and "lib" directories do not seem to be reflected in JEP 201. I do not know if this is considered an oversight, or just reflecting the fact that the directory structure will continue to evolve after JEP 201 were delivered. But if you think JEP 201 needs to be updated, fine, I'll gladly help with that.


JEP 299 discusses the reorganization of man pages and specification and specifies the man directory.  When JEP 201 was written, the man directory was not present (part of moving the specs effort to the openjdk source).   It was added in JDK 12.  "lib" directory is an oversight.

JEP 201 may need update for this build modularization work too.

Mandy

Reply via email to