diff options
author | Björn Gustavsson <[email protected]> | 2016-12-09 10:23:38 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2016-12-09 10:23:38 +0100 |
commit | b29787dbcc53b4ab1b5bfedd1ad45708d0f99dc1 (patch) | |
tree | f2fbdc591e1741024a9b1d487860281719442659 | |
parent | 53aa4605b8c23ec1cb7d5a79625db00ebdd63423 (diff) | |
parent | 8b0aff6608c42bf3c04381697b9ab57ffbd93456 (diff) | |
download | otp-b29787dbcc53b4ab1b5bfedd1ad45708d0f99dc1.tar.gz otp-b29787dbcc53b4ab1b5bfedd1ad45708d0f99dc1.tar.bz2 otp-b29787dbcc53b4ab1b5bfedd1ad45708d0f99dc1.zip |
Merge pull request #1273 from bjorng/bjorn/compiler/deterministic/ERL-310
Add option 'deterministic' for reproducible builds
OTP-14087
-rw-r--r-- | lib/compiler/doc/src/compile.xml | 8 | ||||
-rw-r--r-- | lib/compiler/src/beam_asm.erl | 7 | ||||
-rw-r--r-- | lib/compiler/test/compile_SUITE.erl | 8 |
3 files changed, 22 insertions, 1 deletions
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml index e93da85f6c..bd488a39a5 100644 --- a/lib/compiler/doc/src/compile.xml +++ b/lib/compiler/doc/src/compile.xml @@ -176,6 +176,14 @@ <seealso marker="stdlib:beam_lib#debug_info">beam_lib(3)</seealso>.</p> </item> + <tag><c>deterministic</c></tag> + <item> + <p>Omit the <c>options</c> and <c>source</c> tuples in + the list returned by <c>Module:module_info(compile)</c>. + This option will make it easier to achieve reproducible builds. + </p> + </item> + <tag><c>makedep</c></tag> <item> <p>Produces a Makefile rule to track headers dependencies. 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) -> diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl index e2988b18dc..8c09414a52 100644 --- a/lib/compiler/test/compile_SUITE.erl +++ b/lib/compiler/test/compile_SUITE.erl @@ -105,6 +105,14 @@ file_1(Config) when is_list(Config) -> {ok,simple} = compile:file(Simple, [{eprof,beam_z}]), %Coverage + + %% Test option 'deterministic'. + {ok,simple} = compile:file(Simple, [deterministic]), + {module,simple} = c:l(simple), + [{version,_}] = simple:module_info(compile), + true = code:delete(simple), + false = code:purge(simple), + ok = file:set_cwd(Cwd), true = exists(Target), passed = run(Target, test, []), |