#4354: OS X installer deletes old versions, breaks symlinks
---------------------------------+------------------------------------------
    Reporter:  elaforge          |       Owner:                
        Type:  bug               |      Status:  new           
    Priority:  normal            |   Component:  Package system
     Version:  7.1               |    Keywords:                
    Testcase:                    |   Blockedby:                
          Os:  MacOS X           |    Blocking:                
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown  
---------------------------------+------------------------------------------
 The .pkg installer for ghc removes previous versions of ghc and leaves
 broken
 stale symlinks in /usr/bin

 The symlink issue can be fixed with a new create-links script, included.
 The
 old script links through the Current symlink, which is updated to point to
 the latest version.  So every new install breaks the symlinks for the old
 one.  The new script links through the version directory, so it doesn't
 get
 broken when Current changes.

 There are other binaries which are unversioned, like hsc2hs and haddock.
 I guess this was a conscious decision so I didn't try to make versioned
 symlinks to those, they just get overwritten with the last installed
 version.

 I also changed create-links to put a version on /usr/share/doc/ghc.  I
 left
 the man pages unversioned because 'man ghc' should work.

 The deletion problem is due to the fact that the OS X installer always
 wants
 to delete an old version when installing a new one.  It makes more sense
 for
 a compiler to allow multiple concurrent versions.  The way around this is
 to
 append the version to the package name (the python installer does this).
 Unfortunately, there are lots of places you can set the "bundle ID" and
 as far as I can tell no documentation for it.  So based on trial and
 error,
 I appended the version to distrib/MacOS/Info.plist and the -i flag to
 packagemaker.  Both seem to be necessary.  I use the PackageVersionInt, so
 reinstalling a ghc with the same major and minor version but a different
 patchelevel will overwrite it, as before, which seems reasonable.

 This means the Uninstaller isn't so useful, since it's designed to only
 work
 with a single installed version.  I did a bit of work to extend it to
 remove
 a certain version, but decided it's not really worth it.  OS X programmers
 don't generally have installers.  The old uninstaller was also removing
 the
 incorrect package receipt (it removes
 org.haskell.glasgowHaskellCompiler.ghc.pkg.bom, which on my machine, is
 what
 6.12.1 used, but not anything newer).

 I reckon the simplest thing is to just remove the uninstaller (and update
 the
 doc in the installer to not mention it).  If there are people who really
 like
 it, I can finish off my fancy uninstall one version thing.

 I left the uninstaller but can remove it in a separate patch if people
 agree.

 I also changed occurrences of 'org.haskell.glasgowHaskellCompiler.ghc.pkg'
 to 'org.haskell.ghc.pkg'.  It doesn't seem to have any effect, but older
 versions named the package glasgowHaskellCompiler.ghc and it seems messy
 and confusing to have multiple versions of the same identifier around.

 I tested these changes on my machine, and they seem to work fine, but it
 would
 be good to get a few more people to try it on their macs.  After the
 changes,
 installing the new .pkg should create
 /Library/Receipts/boms/org.haskell.ghc.700.bom, and of course a
 Versions/700
 and not overwrite any previous versions.  GHC packages going forward
 should no
 longer overwrite each other.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4354>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to