> 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

Reply via email to