
Is there, or is anyone working on, ports for Mac OSX and/or Mac OS9? ----------------------------------------------------------------- Seth Kurtzberg CTO ISEC Research and Network Operations Center 480-314-1540 888-879-5206 seth@isec.us -----------------------------------------------------------------

Seth Kurtzberg wrote:
Is there, or is anyone working on, ports for Mac OSX and/or Mac OS9?
I'm currently responsible for the Mac OS X version of GHC. I'll upload a GHC 6.0 binary for Mac OS X binary as soon as possible, but I'm short on time and processor cycles, so it might take a few more days. I could definitely use more people who regularily build GHC on MacOS X and do some testing, and alert me of any breakage _before_ I make a buggy release... I don't have the computing capacity to do nightly builds. Mac OS 9 is a different story. GHC doesn't work on Mac OS 9, and it will probably stay that way: *) There is no GCC that runs on Mac OS 9. *) There is no GCC that cross-compiles to Mac OS 9. ... and the ABI is different from other PowerPC platforms, including Mac OS X. *) Mac OS 9 doesn't support the POSIX API. GHC's run time system and libraries require either Posix or Win32. A lot would have to be rewritten for Mac OS 9. *) There's no unix-style shell on Mac OS 9 That means we have to cross-compile or use a completely different build system. *) Mac OS 9 is obsolete There are people using it now, and there will still be people who use it in the future, but by the time any port is finished, they will be very hard to find. Cheers, Wolfgang

On Sunday, June 1, 2003, at 05:15 AM, Wolfgang Thaller wrote:
Seth Kurtzberg wrote:
Is there, or is anyone working on, ports for Mac OSX and/or Mac OS9?
I'm currently responsible for the Mac OS X version of GHC. I'll upload a GHC 6.0 binary for Mac OS X binary as soon as possible, but I'm short on time and processor cycles, so it might take a few more days. I could definitely use more people who regularily build GHC on MacOS X and do some testing, and alert me of any breakage _before_ I make a buggy release... I don't have the computing capacity to do nightly builds.
Dear Wolfgang, I maintain the Hugs port for the darwinports system (a cousin of fink and perhaps the successor to the *bsd ports system). I'd like to add a port for ghc-6.0. I tried to build it but ran into some problems. 1. configure doesn't pass the CPPFLAGS and LDFLAGS environment variables to the haskell build. This means you can't have libreadline and libdl in non-standard locations. This is a problem for darwinports and fink because of their automatic dependency management. 2. Even if I put symlinks to the above libraries in the standard locations, I still get a build failure. This is building 6.0 using 5.04.3. (5.04.3 was built from source successfully using your 5.04.2 binary.) The build ends with ../../ghc/compiler/stage1/ghc-inplace -o stage2/ghc-6.0 -H16m -O -istage2/utils -istage2/basicTypes -istage2/types -istage2/hsSyn -istage2/prelude -istage2/rename -istage2/typecheck -istage2/deSugar -istage2/coreSyn -istage2/specialise -istage2/simplCore -istage2/stranal -istage2/stgSyn -istage2/simplStg -istage2/codeGen -istage2/absCSyn -istage2/main -istage2/profiling -istage2/parser -istage2/cprAnalysis -istage2/compMan -istage2/ndpFlatten -istage2/nativeGen -istage2/ghci -DGHCI -package haskell-src -package unix -cpp -fglasgow-exts -Rghc-timing -I. -IcodeGen -InativeGen -Iparser -recomp -Rghc-timing -H16M '-#include "hschooks.h"' -no-link-chk stage2/absCSyn/AbsCSyn.o stage2/absCSyn/AbsCUtils.o stage2/absCSyn/CLabel.o stage2/absCSyn/CStrings.o stage2/absCSyn/Costs.o stage2/absCSyn/MachOp.o stage2/absCSyn/PprAbsC.o stage2/basicTypes/BasicTypes.o stage2/basicTypes/DataCon.o stage2/basicTypes/Demand.o stage2/basicTypes/FieldLabel.o stage2/basicTypes/Id.o stage2/basicTypes/IdInfo.o stage2/basicTypes/Literal.o stage2/basicTypes/MkId.o stage2/basicTypes/Module.o stage2/basicTypes/Name.o stage2/basicTypes/NameEnv.o stage2/basicTypes/NameSet.o stage2/basicTypes/NewDemand.o stage2/basicTypes/OccName.o stage2/basicTypes/RdrName.o stage2/basicTypes/SrcLoc.o stage2/basicTypes/UniqSupply.o stage2/basicTypes/Unique.o stage2/basicTypes/Var.o stage2/basicTypes/VarEnv.o stage2/basicTypes/VarSet.o stage2/codeGen/Bitmap.o stage2/codeGen/CgBindery.o stage2/codeGen/CgCase.o stage2/codeGen/CgClosure.o stage2/codeGen/CgCon.o stage2/codeGen/CgConTbls.o stage2/codeGen/CgExpr.o stage2/codeGen/CgHeapery.o stage2/codeGen/CgLetNoEscape.o stage2/codeGen/CgMonad.o stage2/codeGen/CgRetConv.o stage2/codeGen/CgStackery.o stage2/codeGen/CgTailCall.o stage2/codeGen/CgUpdate.o stage2/codeGen/CgUsages.o stage2/codeGen/ClosureInfo.o stage2/codeGen/CodeGen.o stage2/codeGen/SMRep.o stage2/compMan/CompManager.o stage2/coreSyn/CoreFVs.o stage2/coreSyn/CoreLint.o stage2/coreSyn/CorePrep.o stage2/coreSyn/CoreSyn.o stage2/coreSyn/CoreTidy.o stage2/coreSyn/CoreUnfold.o stage2/coreSyn/CoreUtils.o stage2/coreSyn/ExternalCore.o stage2/coreSyn/MkExternalCore.o stage2/coreSyn/PprCore.o stage2/coreSyn/PprExternalCore.o stage2/coreSyn/Subst.o stage2/cprAnalysis/CprAnalyse.o stage2/deSugar/Check.o stage2/deSugar/Desugar.o stage2/deSugar/DsBinds.o stage2/deSugar/DsCCall.o stage2/deSugar/DsExpr.o stage2/deSugar/DsForeign.o stage2/deSugar/DsGRHSs.o stage2/deSugar/DsListComp.o stage2/deSugar/DsMeta.o stage2/deSugar/DsMonad.o stage2/deSugar/DsUtils.o stage2/deSugar/Match.o stage2/deSugar/MatchCon.o stage2/deSugar/MatchLit.o stage2/ghci/ByteCodeAsm.o stage2/ghci/ByteCodeFFI.o stage2/ghci/ByteCodeGen.o stage2/ghci/ByteCodeInstr.o stage2/ghci/ByteCodeItbls.o stage2/ghci/ByteCodeLink.o stage2/ghci/InteractiveUI.o stage2/ghci/Linker.o stage2/ghci/ObjLink.o stage2/hsSyn/Convert.o stage2/hsSyn/HsBinds.o stage2/hsSyn/HsCore.o stage2/hsSyn/HsDecls.o stage2/hsSyn/HsExpr.o stage2/hsSyn/HsImpExp.o stage2/hsSyn/HsLit.o stage2/hsSyn/HsPat.o stage2/hsSyn/HsSyn.o stage2/hsSyn/HsTypes.o stage2/main/BinIface.o stage2/main/CmdLineOpts.o stage2/main/CodeOutput.o stage2/main/Config.o stage2/main/Constants.o stage2/main/DriverFlags.o stage2/main/DriverMkDepend.o stage2/main/DriverPhases.o stage2/main/DriverPipeline.o stage2/main/DriverState.o stage2/main/DriverUtil.o stage2/main/ErrUtils.o stage2/main/Finder.o stage2/main/GetImports.o stage2/main/HscMain.o stage2/main/HscStats.o stage2/main/HscTypes.o stage2/main/Interpreter.o stage2/main/Main.o stage2/main/MkIface.o stage2/main/Packages.o stage2/main/ParsePkgConf.o stage2/main/SysTools.o stage2/main/TidyPgm.o stage2/nativeGen/AbsCStixGen.o stage2/nativeGen/AsmCodeGen.o stage2/nativeGen/AsmRegAlloc.o stage2/nativeGen/MachCode.o stage2/nativeGen/MachMisc.o stage2/nativeGen/MachRegs.o stage2/nativeGen/PprMach.o stage2/nativeGen/RegAllocInfo.o stage2/nativeGen/Stix.o stage2/nativeGen/StixMacro.o stage2/nativeGen/StixPrim.o stage2/ndpFlatten/FlattenInfo.o stage2/ndpFlatten/FlattenMonad.o stage2/ndpFlatten/Flattening.o stage2/ndpFlatten/NDPCoreUtils.o stage2/ndpFlatten/PArrAnal.o stage2/parser/Ctype.o stage2/parser/Lex.o stage2/parser/LexCore.o stage2/parser/Parser.o stage2/parser/ParserCore.o stage2/parser/ParserCoreUtils.o stage2/parser/RdrHsSyn.o stage2/prelude/ForeignCall.o stage2/prelude/PrelInfo.o stage2/prelude/PrelNames.o stage2/prelude/PrelRules.o stage2/prelude/PrimOp.o stage2/prelude/PrimRep.o stage2/prelude/TysPrim.o stage2/prelude/TysWiredIn.o stage2/profiling/CostCentre.o stage2/profiling/SCCfinal.o stage2/rename/RnBinds.o stage2/rename/RnEnv.o stage2/rename/RnExpr.o stage2/rename/RnHiFiles.o stage2/rename/RnHsSyn.o stage2/rename/RnIfaces.o stage2/rename/RnNames.o stage2/rename/RnSource.o stage2/rename/RnTypes.o stage2/simplCore/CSE.o stage2/simplCore/FloatIn.o stage2/simplCore/FloatOut.o stage2/simplCore/LiberateCase.o stage2/simplCore/OccurAnal.o stage2/simplCore/SAT.o stage2/simplCore/SATMonad.o stage2/simplCore/SetLevels.o stage2/simplCore/SimplCore.o stage2/simplCore/SimplMonad.o stage2/simplCore/SimplUtils.o stage2/simplCore/Simplify.o stage2/simplStg/SRT.o stage2/simplStg/SimplStg.o stage2/simplStg/StgStats.o stage2/specialise/Rules.o stage2/specialise/SpecConstr.o stage2/specialise/Specialise.o stage2/stgSyn/CoreToStg.o stage2/stgSyn/StgLint.o stage2/stgSyn/StgSyn.o stage2/stranal/DmdAnal.o stage2/stranal/SaAbsInt.o stage2/stranal/SaLib.o stage2/stranal/StrictAnal.o stage2/stranal/WorkWrap.o stage2/stranal/WwLib.o stage2/typecheck/Inst.o stage2/typecheck/TcBinds.o stage2/typecheck/TcClassDcl.o stage2/typecheck/TcDefaults.o stage2/typecheck/TcDeriv.o stage2/typecheck/TcEnv.o stage2/typecheck/TcExpr.o stage2/typecheck/TcForeign.o stage2/typecheck/TcGenDeriv.o stage2/typecheck/TcHsSyn.o stage2/typecheck/TcIfaceSig.o stage2/typecheck/TcInstDcls.o stage2/typecheck/TcMType.o stage2/typecheck/TcMatches.o stage2/typecheck/TcMonoType.o stage2/typecheck/TcPat.o stage2/typecheck/TcRnDriver.o stage2/typecheck/TcRnMonad.o stage2/typecheck/TcRnTypes.o stage2/typecheck/TcRules.o stage2/typecheck/TcSimplify.o stage2/typecheck/TcSplice.o stage2/typecheck/TcTyClsDecls.o stage2/typecheck/TcTyDecls.o stage2/typecheck/TcType.o stage2/typecheck/TcUnify.o stage2/types/Class.o stage2/types/FunDeps.o stage2/types/Generics.o stage2/types/InstEnv.o stage2/types/PprType.o stage2/types/TyCon.o stage2/types/Type.o stage2/types/TypeRep.o stage2/types/Variance.o stage2/utils/Bag.o stage2/utils/Binary.o stage2/utils/BitSet.o stage2/utils/Digraph.o stage2/utils/FastMutInt.o stage2/utils/FastString.o stage2/utils/FastTypes.o stage2/utils/FiniteMap.o stage2/utils/ListSetOps.o stage2/utils/Maybes.o stage2/utils/OrdList.o stage2/utils/Outputable.o stage2/utils/Panic.o stage2/utils/Pretty.o stage2/utils/PrimPacked.o stage2/utils/StringBuffer.o stage2/utils/UnicodeUtil.o stage2/utils/UniqFM.o stage2/utils/UniqSet.o stage2/utils/Util.o stage2/parser/hschooks.o ld: Undefined symbols: ___gmp_set_memory_functions ___gmpn_cmp ___gmpn_gcd_1 ___gmpz_add ___gmpz_and ___gmpz_com ___gmpz_divexact ___gmpz_fdiv_qr ___gmpz_gcd ___gmpz_init ___gmpz_ior ___gmpz_mul ___gmpz_sub ___gmpz_tdiv_q ___gmpz_tdiv_qr ___gmpz_tdiv_r ___gmpz_xor ___gmpz_cmp ___gmpz_cmp_si ___gmpz_cmp_ui ___gmpz_get_si ___gmpz_get_ui _dlerror _dlopen _dlsym make[1]: *** [stage2/ghc-6.0] Error 1 make: *** [stage2] Error 2 bash> Perhaps an '-undefined suppress' is missing? I'd appreciate some hints about which files you had to patch to get your previous build to work. I'm happy to do builds on my machine to test things out. Best Wishes, Greg Wright

Dear Wolfgang,
I maintain the Hugs port for the darwinports system (a cousin of fink and perhaps the successor to the *bsd ports system). I'd like to add a port for ghc-6.0. I tried to build it but ran into some problems.
1. configure doesn't pass the CPPFLAGS and LDFLAGS environment variables to the haskell build. This means you can't have libreadline and libdl in non-standard locations.
Grmpf... I know I don't like configure scripts. I prefer IDEs. Do you know how to fix it/have time to do it? If not, would somebody else _PLEASE_ do that for us? (It wouldn't enjoy digging into the build system code to fix that; in fact, I would positively hate it).
This is a problem for darwinports and fink because of their automatic dependency management.
2. Even if I put symlinks to the above libraries in the standard locations, I still get a build failure. This is building 6.0 using 5.04.3. (5.04.3 was built from source successfully using your 5.04.2 binary.) The build ends with [...]
Ahem, yes. I didn't have a chance to test GHC 6 in the last five days before the release, and, of course, the last commit broke the Mac OS X build. I have meanwhile committed a fix to CVS, but that was a day after the official relase for 6.0. If you check out the newest stable branch from CVS (or ask me to send you diffs tomorrow), it should work. (That last commit made GHC quote all arguments it passes on to GHC; for Mac OS X, it passed "-framework HaskellSupport" instead of "-framework" "HaskellSupport". GCC doesn't report an error but it just ignores the former. Strange.) The "HaskellSupport" framework (which is not used if it's not detected at configure time; there should really be a configure switch for that) is just an aggregation of libgmp and libdl packaged as a framework. I figured that would be easier for end users of Haskell programs, as libgmp is required for all Haskell programs, and libdl is used by the Posix library (and how do you install a dylib using the Finder?). For something like darwinports, it might be better to just rely on the gmp and dl libraries installed with darwinports, but that makes programs compiled using ghc dependent on darwinports, too. And you just reminded me that I still haven't uploaded the 10 line shell script for creating the HaskellSupport.framework anywhere, because I could never figure out the appropriate place in CVS: #!/bin/sh cd dlcompat-20020413 cp dlfcn.o ../ make cd ../gmp-4.0.1 ./configure make ld -r -d ./libs/libgmp.a -o ../libgmp.o cd .. ld -dylib -o HaskellSupport.framework/Versions/A/HaskellSupport libgmp.o dlfcn.o /usr/lib/dylib1.o -lSystem OK, that's all for now... Cheers, Wolfgang

On Sunday, June 1, 2003, at 07:36 PM, Wolfgang Thaller wrote:
Dear Wolfgang,
I maintain the Hugs port for the darwinports system (a cousin of fink and perhaps the successor to the *bsd ports system). I'd like to add a port for ghc-6.0. I tried to build it but ran into some problems.
1. configure doesn't pass the CPPFLAGS and LDFLAGS environment variables to the haskell build. This means you can't have libreadline and libdl in non-standard locations.
Grmpf... I know I don't like configure scripts. I prefer IDEs. Do you know how to fix it/have time to do it? If not, would somebody else _PLEASE_ do that for us? (It wouldn't enjoy digging into the build system code to fix that; in fact, I would positively hate it).
I will take a look at the configuration issue for ghc-6.0 + Mac OS X. I was able to hand edit the makefiles to pass the correct include and library paths; it's not too big a job to pass the appropriate configuration variables.
This is a problem for darwinports and fink because of their automatic dependency management.
2. Even if I put symlinks to the above libraries in the standard locations, I still get a build failure. This is building 6.0 using 5.04.3. (5.04.3 was built from source successfully using your 5.04.2 binary.) The build ends with [...]
Ahem, yes. I didn't have a chance to test GHC 6 in the last five days before the release, and, of course, the last commit broke the Mac OS X build. I have meanwhile committed a fix to CVS, but that was a day after the official relase for 6.0. If you check out the newest stable branch from CVS (or ask me to send you diffs tomorrow), it should > work. (That last commit made GHC quote all arguments it passes on to GHC; for Mac OS X, it passed "-framework HaskellSupport" instead of "-framework" "HaskellSupport". GCC doesn't report an error but it just ignores the former. Strange.)
I'll check it out from the CVS in the morning.
The "HaskellSupport" framework (which is not used if it's not detected at configure time; there should really be a configure switch for that) is just an aggregation of libgmp and libdl packaged as a framework. I figured that would be easier for end users of Haskell programs, as libgmp is required for all Haskell programs, and libdl is used by the Posix library (and how do you install a dylib using the Finder?). For something like darwinports, it might be better to just rely on the gmp and dl libraries installed with darwinports, but that makes programs compiled using ghc dependent on darwinports, too.
For darwinports, I'll probably just install gmp and dl as dependencies. There is also provision to install frameworks in $prefix/Frameworks. I'll have to think about which is more appropriate.
And you just reminded me that I still haven't uploaded the 10 line shell script for creating the HaskellSupport.framework anywhere, because I could never figure out the appropriate place in CVS:
#!/bin/sh cd dlcompat-20020413 cp dlfcn.o ../ make cd ../gmp-4.0.1 ./configure make ld -r -d ./libs/libgmp.a -o ../libgmp.o cd .. ld -dylib -o HaskellSupport.framework/Versions/A/HaskellSupport libgmp.o dlfcn.o /usr/lib/dylib1.o -lSystem
OK, that's all for now...
Cheers,
Wolfgang
Thanks for the help! Best Wishes, Greg
participants (3)
-
Gregory Wright
-
Seth Kurtzberg
-
Wolfgang Thaller