RFR: JDK-8241616: Timestamps on ct.sym entries lead to non-reproducible builds
Jan Lahoda
jan.lahoda at oracle.com
Thu Apr 30 08:21:29 UTC 2020
On 30. 04. 20 9:49, Magnus Ihse Bursie wrote:
> On 2020-04-30 09:03, Jan Lahoda wrote:
>> Hi,
>>
>> The building of lib/ct.sym is not reproducible, due to timestamps of
>> files inside the file (which is basically a zip file).
>>
>> The proposed solution is to use a constant timestamp for the files
>> inside the ct.sym file. To simplify the construction, the
>> CreateSymbols tool does not produce files on the filesystem anymore,
>> but rather constructs the ct.sym directly.
> Thanks for helping us address reproducibility issues!
>
> If this truly makes ct.sym reproducible, you can include this patch as
> well to make the compare script test this:
>
> diff --git a/make/scripts/compare.sh b/make/scripts/compare.sh
> --- a/make/scripts/compare.sh
> +++ b/make/scripts/compare.sh
> @@ -394,7 +394,7 @@
>
> GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" !
> -name "*.jar" \
> ! -name "*.zip" ! -name "*.debuginfo" ! -name "*.dylib" !
> -name "jexec" \
> - ! -name "modules" ! -name "ct.sym" ! -name "*.diz" ! -name
> "*.dll" \
> + ! -name "modules" ! -name "*.diz" ! -name "*.dll" \
> ! -name "*.cpl" ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \
> ! -name "*.lib" ! -name "*.war" ! -name "*.jmod" ! -name
> "*.exe" \
> ! -name "*.obj" ! -name "*.o" ! -name "jspawnhelper" ! -name
> "*.a" \
Sure, will do.
>
>>
>> Proposed webrev: http://cr.openjdk.java.net/~jlahoda/8241616/webrev.00/
> The build aspect of the changes look good.
>
> I have a question that is not directly related to the changes you are
> doing in this fix. Why do we need to call two consecutive tools? (And I
> notice you changed the calling order in this patch). Do the first tool
> write a temporary file (where, if so?), and the second one makes the
> final ct.sym? Or does the first tool create ct.sym and the second one
> updates it?
It is not completely necessary to have two tools, just
TransitiveDependencies take variable number of arguments; which is less
convenient to do into "CreateSymbols build-ctsym", but I think it can be
done. Let me look into that. (But it is definitely the first variant -
TransitiveDependencies builds system-modules file, which CreateSymbols
then incorporates into ct.sym).
Jan
>
> If it's the former case, it would be better to split the make rule into
> two: one where the target of the rule is the temporary file fir the
> first command, and one where the real ct.sym is the target, and the
> temporary file is a dependency.
>
> If it's the second case, I'd really like to have this fixed. Build tools
> that modify stuff in place is the worst. If the build e.g. breaks down
> in the second command, an incremental re-run will think the target is
> done, and not retry this command. Since both commands are classes in the
> same package, maybe they could be merged into a single call?
>
> If you believe a change like this would be out of scope for this bug, I
> understand.
>
> /Magnus
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8241616
>>
>> How does this look?
>>
>> Thanks,
>> Jan
>
More information about the build-dev
mailing list