On Thursday, 27 September 2018 at 19:53:32 UTC, aliak wrote:
Can you explain a bit maybe how it'd break the maximally reproducible builds with an example? I believe you might've mentioned that in the issue linked but I didn't quite get it.

Well, essentially Digger tries to minimize the number of things from its environment that affect the resulting DMD binary, so that "digger build <something>" on one machine has the maximal chance of producing a DMD binary that is or behaves exactly like the result of "digger build <something>" on another machine. Fully reproducible builds provide some guarantees which are very useful in cases like "this program crashes when built and run on machine A but not B", in which case it would allow eliminating the possibility of A having a bad compiler (but we aren't there with FULLY reproducible builds yet).

Now, some variables like platform or system libraries are inevitable, but others, like environment variables or certain dependencies, can be controlled. In this case, if we opt in to autodetection, a DMD built with the default options on one machine with brew won't be the same as a DMD built on a machine without brew.

So let's say dmd in PATH is olddmd and the one we want to build with digger is newdmd.

For the first option, are you suggesting:
* digger build newdmd
  1. confFileName = parseFileNameFrom(olddmd -v | grep Config)
  2. build dmd with SYSCONFDIR=pluckPathFrom(confFileName)

If yes, then that means the newdmd would use olddmd's phobos/lib right?

Well, "digger install" would upgrade Phobos too, but otherwise that's the general idea.

Another idea: create a $HOME/.digger dir at build time. Then digger build could set SYSCONFDIR=$HOME/.digger. And newdmd in work/result/bin/will be fine because there's a dmd.conf near the exe that gets priority.

That's fine until it gets installed systemwide, then problems begin.

digger install (assuming `which dmd` = /usr/local/bin/dmd)
- if exists(/usr/bin/local/olddmd)
move olddmd -> $HOME/.digger/uninstall/ (with whatever else you need)
- if exists($HOME/dmd.conf)
move it to $HOME/.digger/uninstall/ (with metadata saying where it came form)
- copy newdmd to /usr/bin/local/
- copy work/result/import to $HOME/.digger/import
- copy work/result/lib to $HOME/.digger/lib
- write a new dmd.conf to $HOME/.digger with contents:
"""
[Environment]
DFLAGS=-I$HOME/.digger/import -L-L$HOME/.digger/lib
"""

What's the advantage of this over just adding digger/work/result/bin to PATH?

Reply via email to