mirror of
https://github.com/ivabus/pantry
synced 2024-11-26 18:25:08 +03:00
fix haskell.org build and rpath issues (#2)
Extreme bunch of work by all of us. In the end it was just a matter of finding the env vars for LDFLAGS for the various stages. Dang ghc-devs, you hate us. Co-authored-by: Jonathan Chang <me@jonathanchang.org> Co-authored-by: Max Howell <mxcl@me.com>
This commit is contained in:
parent
a17830b38e
commit
616098e71a
1 changed files with 56 additions and 27 deletions
|
@ -1,5 +1,6 @@
|
||||||
distributable:
|
distributable:
|
||||||
url: https://downloads.haskell.org/~ghc/{{version}}/ghc-{{version}}-src.tar.xz
|
url: https://downloads.haskell.org/~ghc/{{version}}/ghc-{{version}}-src.tar.xz
|
||||||
|
sig: "{{url}}.sig"
|
||||||
strip-components: 1
|
strip-components: 1
|
||||||
|
|
||||||
versions:
|
versions:
|
||||||
|
@ -9,9 +10,9 @@ versions:
|
||||||
# strip:
|
# strip:
|
||||||
# - /^ghc-/
|
# - /^ghc-/
|
||||||
# - /-release$/
|
# - /-release$/
|
||||||
|
# however ghc breaks every time they release a new version
|
||||||
|
# so you are welcome to embrace trying to build it, we kindly ask they care
|
||||||
#NOTE relocatable if we edit the shell scripts
|
# more about ensuring their monolithic nonsense has stability in builds
|
||||||
|
|
||||||
provides:
|
provides:
|
||||||
- bin/ghc
|
- bin/ghc
|
||||||
|
@ -27,7 +28,8 @@ provides:
|
||||||
dependencies:
|
dependencies:
|
||||||
gnu.org/gmp: 6
|
gnu.org/gmp: 6
|
||||||
invisible-island.net/ncurses: 6
|
invisible-island.net/ncurses: 6
|
||||||
tea.xyz/gx/cc: c99 # ghc uses `gcc` as part of its build process
|
tea.xyz/gx/cc: 'c99' # ghc uses this during builds
|
||||||
|
sourceware.org/libffi: 3
|
||||||
|
|
||||||
build:
|
build:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -36,17 +38,19 @@ build:
|
||||||
tea.xyz/gx/make: '*' #FIXME specifically, gnu make is *required*
|
tea.xyz/gx/make: '*' #FIXME specifically, gnu make is *required*
|
||||||
curl.se: '*'
|
curl.se: '*'
|
||||||
gnu.org/m4: '*'
|
gnu.org/m4: '*'
|
||||||
script: |-
|
git-scm.org: ^2
|
||||||
|
python.org: ^3
|
||||||
|
gnu.org/patch: '*'
|
||||||
|
linux:
|
||||||
|
github.com/numactl/numactl: ^2 # ghcup needs this
|
||||||
|
|
||||||
# `ghc` needs `ghc` to bootstrap `ghc`
|
# `ghc` needs `ghc` to bootstrap `ghc`
|
||||||
# The canonical way to achieve this is with `ghcup`
|
# The canonical way to achieve this is with `ghcup`
|
||||||
# To that end, we capture $HOME so as to no pollute the user's life with unwanted
|
# To that end, we capture $HOME so as to no pollute the user's life with unwanted
|
||||||
# stage0 tooling. Instead, everything is localized to {{ prefix }}/src, and can be
|
# stage0 tooling. Instead, everything is localized to $HOME, and can be
|
||||||
# cleaned up at will, and won't capture any of the user's workflow
|
# cleaned up at will, and won't capture any of the user's workflow
|
||||||
|
script: |
|
||||||
export HOME={{ prefix }}/src
|
export HOME="$(pwd)"
|
||||||
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
|
||||||
export BOOTSTRAP_HASKELL_ADJUST_BASHRC=0
|
|
||||||
export BOOTSTRAP_HASKELL_GHC_VERSION={{ version }}
|
|
||||||
|
|
||||||
if test -d .ghcup; then
|
if test -d .ghcup; then
|
||||||
echo "ghcup already installed"
|
echo "ghcup already installed"
|
||||||
|
@ -54,24 +58,49 @@ build:
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
|
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PATH="{{ prefix }}/src/.ghcup/bin:$PATH"
|
PATH="$HOME/.ghcup/bin:$PATH"
|
||||||
|
|
||||||
if test -e {{ prefix }}/src/.cabal/bin; then
|
if test -e $HOME/.cabal/bin; then
|
||||||
rm -r {{ prefix }}/src/.cabal/bin
|
rm -r $HOME/.cabal/bin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cabal update && cabal install alex happy
|
cabal update
|
||||||
|
cabal install alex happy
|
||||||
|
|
||||||
export PATH="{{ prefix }}/src/.cabal/bin:$PATH"
|
export PATH="$HOME/.cabal/bin:$PATH"
|
||||||
GHC="{{ prefix }}/src/.ghcup/bin/ghc"
|
GHC="$HOME/.ghcup/bin/ghc"
|
||||||
|
|
||||||
export CPATH=/opt/invisible-island.net/ncurses/v6/include/ncursesw:$CPATH
|
./configure $ARGS
|
||||||
|
hadrian/build -j --docs=none --prefix="{{prefix}}" install
|
||||||
|
|
||||||
#FIXME oddly, they don’t provide `./configure`; we have to generate it
|
for shim in $(find "{{prefix}}/bin" -type f); do
|
||||||
autoconf
|
sed -i.bak -e 's_="{{prefix}}_="$(dirname $(dirname $0))_' $shim
|
||||||
./configure --prefix={{ prefix }}
|
rm $shim.bak
|
||||||
|
done
|
||||||
hadrian/build -j install --prefix={{ prefix }} --docs=none
|
env:
|
||||||
|
BOOTSTRAP_HASKELL_NONINTERACTIVE: 1
|
||||||
|
BOOTSTRAP_HASKELL_ADJUST_BASHRC: 0
|
||||||
|
BOOTSTRAP_HASKELL_GHC_VERSION: ${{version}}
|
||||||
|
CONF_CC_OPTS_STAGE0: $LDFLAGS
|
||||||
|
CONF_CC_OPTS_STAGE1: $LDFLAGS
|
||||||
|
CONF_CC_OPTS_STAGE2: $LDFLAGS
|
||||||
|
CONF_GCC_LINKER_OPTS_STAGE0: $LDFLAGS
|
||||||
|
CONF_GCC_LINKER_OPTS_STAGE1: $LDFLAGS
|
||||||
|
CONF_GCC_LINKER_OPTS_STAGE2: $LDFLAGS
|
||||||
|
ARGS:
|
||||||
|
- --prefix={{prefix}}
|
||||||
|
- --disable-numa
|
||||||
|
- --with-curses-includes={{deps.invisible-island.net/ncurses.prefix}}/include/ncursesw
|
||||||
|
- --with-intree-gmp
|
||||||
|
- --with-system-libffi
|
||||||
|
linux:
|
||||||
|
C_INCLUDE_PATH: ${{deps.invisible-island.net/ncurses.prefix}}/include/ncursesw
|
||||||
|
# ^^ yep telling `./configure` about it just aint enough
|
||||||
|
darwin:
|
||||||
|
ARGS:
|
||||||
|
- --with-ffi-includes=$(xcrun --show-sdk-path)/usr/include/ffi
|
||||||
|
# workaround `fatal error: 'ffitarget_arm64.h' file not found`
|
||||||
|
C_INCLUDE_PATH: $(xcrun --show-sdk-path)/usr/include/ffi
|
||||||
|
|
||||||
test:
|
test:
|
||||||
script: |
|
script: |
|
||||||
|
|
Loading…
Reference in a new issue