On Wednesday, 26 September 2018 at 01:17:24 UTC, Vladimir Panteleev wrote:
On Tuesday, 25 September 2018 at 10:34:17 UTC, aliak wrote:
When you do `digger install` it seems to not “install” a `dmd.conf` but it does install the `dmd` binary in `/usr/local/bin/dmd` - but that wasn’t built with `SYSCONFDIR` so it doesn’t find `/usr/local/etc/dmd.conf` either, but even if it did, that’s the wrong `dmd.conf` (i.e. not the one that the build was based on - so would it even point to the right env?).

The solution I'm thinking of for Digger is to attempt to detect the SYSCONFDIR of the current `dmd` binary in `PATH`, and use that by default when Digger builds D. Doing so would break Digger's "maximally reproducible builds" policy a little, so we'd need to be loud about it.

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.


An alternative would be to complain loudly when attempting to build or (especially) install a compiler with a mismatching SYSCONFDIR, but still proceed with the default.

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?

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.

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
"""

/usr/local/bin/newdmd will pick up the dmd.conf that was just written and point to the correct includes and lib because SYSCONFDIR was set at build time, and $HOME/dmd.conf was moved during installation (from the link Jonathan posted it seems like that would be necessary because it's given priority over SYSCONFDIR).

An uninstall will move $HOME/.digger/uninstall/olddmd and dmd.conf back to their places and remove contents of $HOME/.digger

In my head at least that works and keeps the current behavior as is. I'm not sure about Windows though because I'm not too familiar with paths, permissions, etc.

PS: I would be happy to help to get osx + brew working with your "maximal reproducibility" given time and guidance.

Cheers,
- Ali



Reply via email to