> Will ghc change interface format with each version?
This is the biggest problem (and, interestingly, the least addressed :-)).
Especially for binary distribution builders, it's quite inconvenient to
rebuild every GHC-library on the system to match with the latest compiler
version :-(
I thought about a scheme similar to the TeX font-generation (if the font has
already been "compiled" for a particular resolution (dpi), it's re-used; if
not, it is created).
But here we're talking about binary libraries, and this may rise some
security issues. I had something like the following in mind:
* Create a new group `ghc' on the system
* The library sources are installed under <sourcedir>/<package>/
(readonly). sourcedir:=`<prefix>/share/ghc-libsrc/'
* Create spooldir:=`/var/spool/haskell/<compiler>/<version>/' for all
installed compilers.
owner: root.ghc, mode: 3777 (for all dirs below <spooldir>)
hi-files go into <spooldir>/<package>/imports/, libs to
<spooldir>/<package>/
* Make those GHC programs, which write to <spooldir>, setgid `ghc'.
This would ideally be one single program called `ghc-recompile', which
has one parameter, <package>, and handles all the stuff to recompile a
library to let it match the compiler version.
Of course, ghc-recompile must be designed carefully wrt. to security,
i.e. environment cleanup, maybe some protections mechanisms to let
programs,scripts,etc. called from within ghc-recompile write exclusively
to <spooldir>/<package>, logging, limit uids to 100+, etc...
ghc-recompile has to be compiled statically to prevent possible misuse
by playing tricks with library preloads, etc...
* If a needed interface file/library is not found at the appropriate
directory in <spooldir>, and if the sources are available under
<sourcedir>, the library is recompiled. This implies, that there must be
some kind of "instruction" (Makefile,script,...) in
<sourcedir>/<package>/ to rebuild a library version. This script is
called by ghc-recompile.
So, the admin just has to install the lib sources and the compiler, and if
someone wants to use an already installed library, he just _can_! (if s/he's
so unfortunate to be the first user, compilation just takes longer this
time).
Comments?
Cheers,
Michael
--
Of course, we all know that debian/rules...
-- Joey Hess