#!/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 |
This comment has been minimized.
This comment has been minimized.
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?
|
This comment has been minimized.
This comment has been minimized.
The surrounding error is at http://lpaste.net/95041. |
This comment has been minimized.
This comment has been minimized.
WHY IS THERE A SUDO. |
This comment has been minimized.
This comment has been minimized.
and this seems to not work if the user used a bin-dist ghc install. |
This comment has been minimized.
This comment has been minimized.
|
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
it works great, thanks! |
This comment has been minimized.
This comment has been minimized.
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 |
This comment has been minimized.
This comment has been minimized.
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 The log file is empty. |
This comment has been minimized.
This comment has been minimized.
A bit later, having not changed anything I can think of, running 'cabal install hashtables' yields 'Bus error: 10'. |
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
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/}". |
This comment has been minimized.
This comment has been minimized.
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 |
This comment has been minimized.
This comment has been minimized.
@elaforge Could you post a gist with your fix for |
This comment has been minimized.
This comment has been minimized.
I've fixed the |
This comment has been minimized.
This comment has been minimized.
Works beautifully, thank you! |
This comment has been minimized.
This comment has been minimized.
Solved my problems after recently migrating to OSX. Thanks. |
This comment has been minimized.
This comment has been minimized.
Works nicely, thanks! |
This comment has been minimized.
This comment has been minimized.
Is this still relevant on OS X Yosemite? |
This comment has been minimized.
Thank you!