On Wed, Mar 26, 2008 at 02:11:58PM -0500, Andrew Cone wrote: > I just pkg_add'ed ghc-6.6.1p0 on OpenBSD 4.2 for x86_64. It seemed to > install fine, but then when I tried to run ghci, I got the following: > > ghc-6.6.1: /usr/local/lib/ghc/HSbase.o: unknown architecture > Loading package base ... ghc-6.6.1: panic! (the 'impossible' happened) > (GHC version 6.6.1 for x86_64-unknown-openbsd): > loadObj: failed > > I ran file on that .o, and I got: > /usr/local/lib/ghc/HSbase.o: ELF 64-bit LSB relocatable, AMD64, version 1, > not stripped > > Is this a problem with the package? Or the port? Or my installation?
Yes. Not any longer. No. You could update the port to -current (yes, in this special case it should really work), or just apply the patch below (which is exactly the diff from OPENBSD_4_2 to -current). Then, with ghc-6.6.1p0 still installed, rebuild and update it with env FLAVOR=native_bootstrap make update After this, you should have a working ghci -- and even a man page for ghc ;-) Ciao, Kili Index: Makefile =================================================================== RCS file: /var/cvs/OpenBSD/ports/lang/ghc/Makefile,v retrieving revision 1.24 retrieving revision 1.25 diff -u -p -r1.24 -r1.25 --- Makefile 22 Jul 2007 22:37:25 -0000 1.24 +++ Makefile 16 Sep 2007 20:05:12 -0000 1.25 @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.24 2007/07/22 22:37:25 kili Exp $ +# $OpenBSD: Makefile,v 1.25 2007/09/16 20:05:12 kili Exp $ # # Ancient versions based on Simon Marlow's port script for FreeBSD: # $FreeBSD: ports/lang/ghc/Makefile,v 1.13 2002/08/22 12:53:38 obraun Exp $ @@ -8,7 +8,7 @@ COMMENT-main= compiler for the function COMMENT-doc= documentation for GHC DISTNAME= ghc-${MODGHC_VER} -PKGNAME-main= ghc-${MODGHC_VER}p0 +PKGNAME-main= ghc-${MODGHC_VER}p1 PKGNAME-doc= ghc-doc-${MODGHC_VER} CATEGORIES= lang HOMEPAGE= http://www.haskell.org/ghc/ @@ -30,6 +30,7 @@ PERMIT_DISTFILES_CDROM= Yes PERMIT_DISTFILES_FTP= Yes PKG_ARCH-doc= * +BUILD_DEPENDS= ::textproc/libxslt LIB_DEPENDS-main= gmp::devel/gmp RUN_DEPENDS-doc= RUN_DEPENDS-main= @@ -90,7 +91,7 @@ CONFIGURE_STYLE= gnu dest CONFIGURE_ARGS+= --with-gmp-includes=${LOCALBASE}/include \ --with-gmp-libraries=${LOCALBASE}/lib -FAKE_FLAGS+= "stage=2" +FAKE_FLAGS+= stage=2 post-extract: @mv ${WRKDIR}/testsuite ${WRKSRC} @@ -145,15 +146,19 @@ do-build: .endif # Create scripts for the Cabal package registry that will be used for -# @exec and @unexec. +# @exec and @unexec. And generate a man page. post-build: cd ${WRKBUILD} && sh ${FILESDIR}/mkregunreg.sh ${PREFIX} + cd ${WRKBUILD}/docs/man && \ + env -i ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS} ghc.1 post-install: rm ${PREFIX}/lib/ghc/package.conf ${INSTALL_SCRIPT} ${WRKBUILD}/{un,}register.sh ${PREFIX}/lib/ghc ${INSTALL_DATA_DIR} ${DOC_DIR} cd ${WRKDIR} && umask 022 && pax -rw ${DOC_FILES} ${DOC_DIR} + ${INSTALL_MAN_DIR} ${PREFIX}/man/man1 + ${INSTALL_MAN} ${WRKBUILD}/docs/man/ghc.1 ${PREFIX}/man/man1 do-regress: cd ${WRKSRC}/testsuite/tests/ghc-regress && \ Index: patches/patch-rts_Linker_c =================================================================== RCS file: /var/cvs/OpenBSD/ports/lang/ghc/patches/patch-rts_Linker_c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- patches/patch-rts_Linker_c 21 Jul 2007 17:14:58 -0000 1.1 +++ patches/patch-rts_Linker_c 16 Sep 2007 20:05:12 -0000 1.2 @@ -1,14 +1,13 @@ -$OpenBSD: patch-rts_Linker_c,v 1.1 2007/07/21 17:14:58 kili Exp $ +$OpenBSD: patch-rts_Linker_c,v 1.2 2007/09/16 20:05:12 kili Exp $ We don't have MAP_ANONYMOUS (which is the same as MAP_ANON on Linux, but the latter has been deprecated). We also don't have that MAP_32BIT -Linux provides for amd64, so just zap that flag to 0. Note that -this isn't enough to make ghci work on amd64. The definite solution -would be real dynamic libraries created and used by GHC, so we could -drop most of that home-brewn linking code at all. +Linux provides for amd64, so just zap that flag to 0. In addition +EM_X86_64 is called EM_AMD64 on OpenBSD, so just replace it to +reenable GHCi (noted by dons). --- rts/Linker.c.orig Wed Apr 25 19:10:41 2007 -+++ rts/Linker.c Wed May 23 13:59:08 2007 ++++ rts/Linker.c Sun Sep 16 12:27:02 2007 @@ -73,6 +73,11 @@ #endif @@ -21,3 +20,14 @@ drop most of that home-brewn linking cod #if defined(linux_HOST_OS) || defined(solaris2_HOST_OS) || defined(freebsd_HOST_OS) || defined(netbsd_HOST_OS) || defined(openbsd_HOST_OS) # define OBJFORMAT_ELF #elif defined(cygwin32_HOST_OS) || defined (mingw32_HOST_OS) +@@ -2923,8 +2928,8 @@ ocVerifyImage_ELF ( ObjectCode* oc ) + case EM_IA_64: IF_DEBUG(linker,debugBelch( "ia64" )); break; + #endif + case EM_PPC: IF_DEBUG(linker,debugBelch( "powerpc32" )); break; +-#ifdef EM_X86_64 +- case EM_X86_64: IF_DEBUG(linker,debugBelch( "x86_64" )); break; ++#ifdef EM_AMD64 ++ case EM_AMD64: IF_DEBUG(linker,debugBelch( "x86_64" )); break; + #endif + default: IF_DEBUG(linker,debugBelch( "unknown" )); + errorBelch("%s: unknown architecture", oc->fileName); Index: pkg/PLIST-main =================================================================== RCS file: /var/cvs/OpenBSD/ports/lang/ghc/pkg/PLIST-main,v retrieving revision 1.2 retrieving revision 1.3 diff -u -p -r1.2 -r1.3 --- pkg/PLIST-main 21 Jul 2007 17:14:58 -0000 1.2 +++ pkg/PLIST-main 16 Sep 2007 20:05:12 -0000 1.3 @@ -1,4 +1,4 @@ [EMAIL PROTECTED] $OpenBSD: PLIST-main,v 1.2 2007/07/21 17:14:58 kili Exp $ [EMAIL PROTECTED] $OpenBSD: PLIST-main,v 1.3 2007/09/16 20:05:12 kili Exp $ @pkgpath lang/ghc @unexec /usr/bin/env HOME=/nonexistent %D/lib/ghc/unregister.sh bin/ghc @@ -1600,4 +1600,5 @@ lib/ghc/register.sh lib/ghc/template-hsc.h lib/ghc/unlit lib/ghc/unregister.sh [EMAIL PROTECTED] man/man1/ghc.1 @exec /usr/bin/env HOME=/nonexistent %D/lib/ghc/register.sh -- Porn is the power of greytrapping. -- Bob Beck