Skip to content

Instantly share code, notes, and snippets.

@mzero
Created October 31, 2013 06:53
Show Gist options
  • Save mzero/7245290 to your computer and use it in GitHub Desktop.
Save mzero/7245290 to your computer and use it in GitHub Desktop.
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
@co-dan
Copy link

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
Copy link

tibbe commented Dec 31, 2013

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

@tibbe
Copy link

tibbe commented Jan 16, 2014

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

@jpatokal
Copy link

jpatokal commented Mar 4, 2014

Works beautifully, thank you!

@timbod7
Copy link

timbod7 commented May 4, 2014

Solved my problems after recently migrating to OSX. Thanks.

@felixSchl
Copy link

Works nicely, thanks!

@darthdeus
Copy link

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