Create a gist now

Instantly share code, notes, and snippets.

Embed
This wrapper script *should* enable GHC 7.* to work on systems with Xcode 5. To use it, drop this script somewhere, make it executable, and run.... Then follow the instructions it prints out. What it will do is, instruction you to put a copy in /usr/bin, then re-run it sudo. It will then find all your GHC 7 settings files, and patch them to make…
#!/bin/sh
inPreprocessorMode () {
hasE=0
hasU=0
hasT=0
for arg in "$@"
do
if [ 'x-E' = "x$arg" ]; then hasE=1; fi
if [ 'x-undef' = "x$arg" ]; then hasU=1; fi
if [ 'x-traditional' = "x$arg" ]; then hasT=1; fi
done
[ "$hasE$hasU$hasT" = '111' ]
}
gccIsClang () {
gcc --version 2>/dev/null | grep -q clang
}
extraClangArgs="-Wno-invalid-pp-token -Wno-unicode -Wno-trigraphs"
adjustPreprocessorLanguage () {
newArgs=''
while [ $# -gt 0 ]
do
newArgs="$newArgs $1"
if [ "$1" = '-x' ]
then
shift
if [ $# -gt 0 ]
then
if [ "$1" = 'c' ]
then
newArgs="$newArgs assembler-with-cpp"
else
newArgs="$newArgs $1"
fi
fi
fi
shift
done
echo $newArgs
}
installThisScript () {
if [ \! -x /usr/bin/ghc-clang-wrapper ]
then
echo "Copy this execute script to /usr/bin/ghc-clang-wrapper, then re-run it."
echo "You can copy it with these commands:"
echo
echo sudo cp $0 /usr/bin/ghc-clang-wrapper
echo sudo chmod 755 /usr/bin/ghc-clang-wrapper
echo sudo ghc-clang-wrapper
exit 1
fi
settings=`ls -1 /Library/Frameworks/GHC.framework/Versions/7*/usr/lib/ghc-7*/settings 2>/dev/null`
if [ "$settings" = '' ]
then
echo "You don't seem to have Haskell Platform installed."
echo "Visit http://www.haskell.org/platform/ to get and install it."
echo "Then run this script again."
echo
echo "If you have GHC installed in a non-standard place, find the file"
echo "named 'settings', that is alongside the compiler, and edit the"
echo "c compiler line to read:"
echo ' ("C compiler command", "/usr/bin/ghc-clang-wrapper"),'
exit 1
fi
anyNeedPatching=0
for sfile in $settings
do
if grep -q ghc-clang-wrapper $sfile
then
echo ALREADY PATCHED: $sfile
else
if [ `id -u` -eq 0 ]
then
sed -e '/C compiler command/s:"[^ ]*gcc":"/usr/bin/ghc-clang-wrapper":' -i '.bak' $sfile
echo PATCHED: $sfile
else
echo WOULD PATCH: $sfile
anyNeedPatching=1
fi
fi
done
if [ $anyNeedPatching -eq 1 ]
then
echo "Please run this script sudo to actually patch GHC:"
echo sudo $0
fi
}
if [ $# -eq 0 ]
then
installThisScript
else
if gccIsClang
then
if inPreprocessorMode "$@"
then
exec gcc $extraClangArgs `adjustPreprocessorLanguage "$@"`
else
exec gcc $extraClangArgs "$@"
fi
else
exec gcc "$@"
fi
fi
@schell

This comment has been minimized.

Show comment
Hide comment
@schell

schell Oct 31, 2013

Thank you!

schell commented Oct 31, 2013

Thank you!

@schell

This comment has been minimized.

Show comment
Hide comment
@schell

schell Oct 31, 2013

Used the wrapper and tried cleaning things up a little (deleted .cabal, .ghc, cabal update). I'm still getting code loading errors - does that seem related?

/Users/schell/Library/Haskell/ghc-7.6.3/lib/bindings-GLFW-3.0.3.1/lib/HSbindings-GLFW-3.0.3.1.o: unknown symbol `__objc_empty_vtable'

schell commented Oct 31, 2013

Used the wrapper and tried cleaning things up a little (deleted .cabal, .ghc, cabal update). I'm still getting code loading errors - does that seem related?

/Users/schell/Library/Haskell/ghc-7.6.3/lib/bindings-GLFW-3.0.3.1/lib/HSbindings-GLFW-3.0.3.1.o: unknown symbol `__objc_empty_vtable'
@schell

This comment has been minimized.

Show comment
Hide comment
@schell

schell Oct 31, 2013

The surrounding error is at http://lpaste.net/95041.

schell commented Oct 31, 2013

The surrounding error is at http://lpaste.net/95041.

@cartazio

This comment has been minimized.

Show comment
Hide comment
@cartazio

cartazio Nov 1, 2013

WHY IS THERE A SUDO.

cartazio commented Nov 1, 2013

WHY IS THERE A SUDO.

@cartazio

This comment has been minimized.

Show comment
Hide comment
@cartazio

cartazio Nov 1, 2013

and this seems to not work if the user used a bin-dist ghc install.

cartazio commented Nov 1, 2013

and this seems to not work if the user used a bin-dist ghc install.

@mzero

This comment has been minimized.

Show comment
Hide comment
@mzero

mzero Nov 1, 2013

  1. There is a sudo because the settings file is owned by root.
  2. It doesn't work from a bin-dist as we don't know where the user ended up putting ghc. The script discovers this and gives instructions. If they used GHC Mac installer, it will work, as it is in the same place.
Owner

mzero commented Nov 1, 2013

  1. There is a sudo because the settings file is owned by root.
  2. It doesn't work from a bin-dist as we don't know where the user ended up putting ghc. The script discovers this and gives instructions. If they used GHC Mac installer, it will work, as it is in the same place.
@mzero

This comment has been minimized.

Show comment
Hide comment
@mzero

mzero Nov 1, 2013

schell: You shouldn't have had to delete .cabal & .ghc -- those aren't affected by the Xcode changes.

The build error you are seeing is a problem with bindings-GLFW - which references the Objective-C run-time symbol __objc_empty_vtable. That symbol changed significantly in 10.9, which causes the error. They seem to know about this issue in the bindings-GLFW repo, and have a fix in head.

Owner

mzero commented Nov 1, 2013

schell: You shouldn't have had to delete .cabal & .ghc -- those aren't affected by the Xcode changes.

The build error you are seeing is a problem with bindings-GLFW - which references the Objective-C run-time symbol __objc_empty_vtable. That symbol changed significantly in 10.9, which causes the error. They seem to know about this issue in the bindings-GLFW repo, and have a fix in head.

@banacorn

This comment has been minimized.

Show comment
Hide comment
@banacorn

banacorn Nov 4, 2013

it works great, thanks!

banacorn commented Nov 4, 2013

it works great, thanks!

@schell

This comment has been minimized.

Show comment
Hide comment
@schell

schell Nov 4, 2013

mzero: Got it, thanks. I read that ghc 7.7+ (HEAD) will build and link bindings-GLFW fine, so in my quest to build GLFW-b I'm trying to build ghc HEAD. I'm naively using your wrapper to configure the build but am getting a nasty error, I think it might be related to any of the 3(?) issue that are keeping the new haskell platform from releasing. Here's the build output: http://lpaste.net/95206

schell commented Nov 4, 2013

mzero: Got it, thanks. I read that ghc 7.7+ (HEAD) will build and link bindings-GLFW fine, so in my quest to build GLFW-b I'm trying to build ghc HEAD. I'm naively using your wrapper to configure the build but am getting a nasty error, I think it might be related to any of the 3(?) issue that are keeping the new haskell platform from releasing. Here's the build output: http://lpaste.net/95206

@jmchapman

This comment has been minimized.

Show comment
Hide comment
@jmchapman

jmchapman Nov 6, 2013

I installed the wrapper. I have deleted my .cabal and .ghc directories. I first ran cabal update, then cabal install cabal-install. This worked but I don't seem to be able to install other packages:

$ cabal install hashtables
Resolving dependencies...
Configuring hashtables-1.1.2.1...
Failed to install hashtables-1.1.2.1
Last 10 lines of the build log ( /Users/james/.cabal/logs/hashtables-1.1.2.1.log ):
cabal: Error: some packages failed to install:
hashtables-1.1.2.1 failed during the configure step. The exception was:
ExitFailure 10

The log file is empty.

I installed the wrapper. I have deleted my .cabal and .ghc directories. I first ran cabal update, then cabal install cabal-install. This worked but I don't seem to be able to install other packages:

$ cabal install hashtables
Resolving dependencies...
Configuring hashtables-1.1.2.1...
Failed to install hashtables-1.1.2.1
Last 10 lines of the build log ( /Users/james/.cabal/logs/hashtables-1.1.2.1.log ):
cabal: Error: some packages failed to install:
hashtables-1.1.2.1 failed during the configure step. The exception was:
ExitFailure 10

The log file is empty.

@jmchapman

This comment has been minimized.

Show comment
Hide comment
@jmchapman

jmchapman Nov 6, 2013

A bit later, having not changed anything I can think of, running 'cabal install hashtables' yields 'Bus error: 10'.

A bit later, having not changed anything I can think of, running 'cabal install hashtables' yields 'Bus error: 10'.

@kowey

This comment has been minimized.

Show comment
Hide comment
@kowey

kowey Nov 28, 2013

In case feedback is still useful, this script doesn't notice ghc that is installed via stow. (It did patch my existing binary HP one with ghc 7.4.1 though)

I guess I should note that when I upgraded to Mavericks, ghc still seemed to work anyway, but I'm not really following the issue closely enough to know if something broke.

kowey commented Nov 28, 2013

In case feedback is still useful, this script doesn't notice ghc that is installed via stow. (It did patch my existing binary HP one with ghc 7.4.1 though)

I guess I should note that when I upgraded to Mavericks, ghc still seemed to work anyway, but I'm not really following the issue closely enough to know if something broke.

@elaforge

This comment has been minimized.

Show comment
Hide comment
@elaforge

elaforge Dec 6, 2013

On my system, the builtin echo on line 42 eats up the leading -E. Replacing with /bin/echo fixes that. Yay shell!

Also, clang complains incessantly about the -nodefaultlibs flag, I stripped that out with "${@/-nodefaultlibs/}".

elaforge commented Dec 6, 2013

On my system, the builtin echo on line 42 eats up the leading -E. Replacing with /bin/echo fixes that. Yay shell!

Also, clang complains incessantly about the -nodefaultlibs flag, I stripped that out with "${@/-nodefaultlibs/}".

@co-dan

This comment has been minimized.

Show comment
Hide comment
@co-dan

co-dan Dec 24, 2013

Hi,

I think currently the script does not escape spaces properly. I've stumbled upon this problem when I was trying to build darcs with this wrapper: http://bugs.darcs.net/issue2355?

The -DPACKAGE_VERSION_STATE="+1 patch" parameter for GHC behaves weirdly and results in build failure as shown in the log: http://pastebin.com/zVK2GkRz

co-dan commented Dec 24, 2013

Hi,

I think currently the script does not escape spaces properly. I've stumbled upon this problem when I was trying to build darcs with this wrapper: http://bugs.darcs.net/issue2355?

The -DPACKAGE_VERSION_STATE="+1 patch" parameter for GHC behaves weirdly and results in build failure as shown in the log: http://pastebin.com/zVK2GkRz

@tibbe

This comment has been minimized.

Show comment
Hide comment
@tibbe

tibbe Dec 31, 2013

@elaforge Could you post a gist with your fix for -nodefaultlibs?

tibbe commented Dec 31, 2013

@elaforge Could you post a gist with your fix for -nodefaultlibs?

@tibbe

This comment has been minimized.

Show comment
Hide comment
@tibbe

tibbe Jan 16, 2014

I've fixed the -nodefaultlibs warning in https://gist.github.com/tibbe/8448715.

tibbe commented Jan 16, 2014

I've fixed the -nodefaultlibs warning in https://gist.github.com/tibbe/8448715.

@jpatokal

This comment has been minimized.

Show comment
Hide comment
@jpatokal

jpatokal Mar 4, 2014

Works beautifully, thank you!

jpatokal commented Mar 4, 2014

Works beautifully, thank you!

@timbod7

This comment has been minimized.

Show comment
Hide comment
@timbod7

timbod7 May 4, 2014

Solved my problems after recently migrating to OSX. Thanks.

timbod7 commented May 4, 2014

Solved my problems after recently migrating to OSX. Thanks.

@felixSchl

This comment has been minimized.

Show comment
Hide comment
@felixSchl

felixSchl Jun 22, 2014

Works nicely, thanks!

Works nicely, thanks!

@darthdeus

This comment has been minimized.

Show comment
Hide comment
@darthdeus

darthdeus Nov 28, 2014

Is this still relevant on OS X Yosemite?

Is this still relevant on OS X Yosemite?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment