Button: A fast, correct, and elegantly simple build system.

H. S. Teoh via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Jun 18 07:23:39 PDT 2016


On Sat, Jun 18, 2016 at 08:38:21AM +0000, Jason White via Digitalmars-d-announce wrote:
> On Friday, 17 June 2016 at 20:36:53 UTC, H. S. Teoh wrote:
> > - Assuming that a revision control system is in place, and a
> >   workspace is checked out on revision X with no further
> >   modifications, then invoking the build tool should ALWAYS,
> >   without any exceptions, produce exactly the same outputs, bit
> >   for bit.  I.e., if your workspace faithfully represents
> >   revision X in the RCS, then invoking the build tool will
> >   produce the exact same binary products as anybody else who
> >   checks out revision X, regardless of their initial starting
> >   conditions.
> 
> Making builds bit-for-bit reproducible is really, really hard to do,
> particularly on Windows. Microsoft's C/C++ compiler embeds timestamps
> and other nonsense into the binaries so that every time you build,
> even when no source changed, you get a different binary. Google wrote
> a tool to help eliminate this non-determinism as a post-processing
> step called zap_timestamp[1]. I want to eventually include something
> like this with Button on Windows. I'll probably have to make a PE
> reader library first though.

Even on Posix, certain utilities also insert timestamps, which is very
annoying. An Scons-based website that I developed years ago ran into
this problem with imagemagick. Fortunately there was a command-line
option to suppress timestamps, which made things saner.


> Without reproducible builds, caching outputs doesn't work very well
> either.

Yup.


> Moral of the story is, if you're writing a compiler, for the sake of
> build systems everywhere, make the output deterministic! For
> consecutive invocations, without changing any source code, I want the
> hashes of the binaries to be identical every single time. DMD doesn't
> do this and it saddens me greatly.
[...]

DMD doesn't? What does it do that isn't deterministic?


T

-- 
Elegant or ugly code as well as fine or rude sentences have something in common: they don't depend on the language. -- Luca De Vitis


More information about the Digitalmars-d-announce mailing list