diff options
author | Björn Gustavsson <[email protected]> | 2016-12-07 15:40:45 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2016-12-07 16:21:14 +0100 |
commit | 8b0aff6608c42bf3c04381697b9ab57ffbd93456 (patch) | |
tree | 373b3543b4b17ccf053a136f8677eeab39ad25c4 /lib/compiler/src/beam_asm.erl | |
parent | ab2c71054a4c71c60ac433168048b8742408cd09 (diff) | |
download | otp-8b0aff6608c42bf3c04381697b9ab57ffbd93456.tar.gz otp-8b0aff6608c42bf3c04381697b9ab57ffbd93456.tar.bz2 otp-8b0aff6608c42bf3c04381697b9ab57ffbd93456.zip |
Add option 'deterministic' for reproducible builds
Add the option 'deterministic' to make it easier to
achieve reproducible builds.
This option omits the {options,...} and {source,...} tuples in
M:module_info(compile), because those options may contain absolute
paths.
The author of ERL-310 suggested that only compiler options that
may contain absolute paths (such as {i,...}) should be excluded. But I
find it confusing to keep only some options.
Alternatives considered: Always omitting this information. Since this
information has been available for a long time, that would probably
break some workflows. As an example that some people care about
{source,...}, 2d785c07fbf9 made it possible to give a compiler option
to set {source,...}.
ERL-310
Diffstat (limited to 'lib/compiler/src/beam_asm.erl')
-rw-r--r-- | lib/compiler/src/beam_asm.erl | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/compiler/src/beam_asm.erl b/lib/compiler/src/beam_asm.erl index f6ca7a0afb..9c8ed2277f 100644 --- a/lib/compiler/src/beam_asm.erl +++ b/lib/compiler/src/beam_asm.erl @@ -233,7 +233,12 @@ build_attributes(Opts, SourceFile, Attr, MD5) -> false -> Misc0; true -> [] end, - Compile = [{options,Opts},{version,?COMPILER_VSN}|Misc], + Compile = case member(deterministic, Opts) of + false -> + [{options,Opts},{version,?COMPILER_VSN}|Misc]; + true -> + [{version,?COMPILER_VSN}] + end, {term_to_binary(set_vsn_attribute(Attr, MD5)),term_to_binary(Compile)}. build_line_table(Dict) -> |