Tài liệu & amp; Liên kết
Nguồn thông tin khởi đầu là tại haskell.org
Người ta có thể cài đặt bằng cách:
- Sử dụng trình cài đặt "Nền tảng" Haskell.
- Sử dụng trình đóng gói "Stack" Haskell được cung cấp bởi stackage.org ("Stackage là nguồn ổn định của các gói Haskell ... một phần của sáng kiến của nhóm Haskell thương mại")
- Tự xây dựng nó (và chúng ta cần Haskell để xây dựng Haskell)
Hơn nữa:
Vì thế...
Chúng ta sẽ xây dựng Trình biên dịch Haskell của Glasgow ghc
sử dụng Nền tảng Haskell trình cài đặt.
Sửa một số thư viện
Chúng tôi sẽ phải sử dụng tiền biên dịch, mới nhất Cabal
công cụ gói thay vì hệ thống Cabal
. Thật không may, nó chỉ có 32-bit.
Bạn có thể muốn gỡ cài đặt hiện có Cabal
(chúng tôi sẽ thiết lập PATH
đến cái mới Cabal
sau đó, vì vậy điều này không thực sự cần thiết)
# as root
dnf erase cabal-install cabal-install-static ghc-Cabal-devel
Trên hệ thống 64 bit, chúng tôi cần phiên bản thư viện 32 bit cho cái mới Cabal
:
# as root
dnf install glibc.i686 zlib.i686 gmp-devel.i686 gmp.i686
Để biên dịch ghc
, chúng tôi cần 64-bit gmp-devel
:
# as root
dnf install gmp-devel.x86_64
Kiểm tra xem cả 32 bit và 64 bit được cài đặt bằng cách sử dụng:
rpm --query gmp-devel
> gmp-devel-6.0.0-9.fc22.i686
> gmp-devel-6.0.0-9.fc22.x86_64
Được biên dịch trước ghc
cho CentOS, mà chúng tôi sẽ tải xuống sau, sẽ tìm kiếm libgmp.3
tại một số điểm, vì vậy chúng tôi cần một liên kết tượng trưng:
# as root
cd /usr/lib64
ln -s libgmp.so.10.2.0 libgmp.so.3
Cài đặt các gói bổ sung
Sẽ có khiếu nại về các thư viện Z và thư viện 3D bị thiếu. Vì thế:
# as root
dnf install zlib-devel
dnf install freeglut freeglut-devel
Và có thể:
# as root
dnf install ncurses-devel libffi-devel
"Libffi" (giao diện chức năng nước ngoài) có vẻ thú vị.
Dù sao, bạn cần make
(GNU tạo):
# as root
dnf install make
Thêm người dùng đặc biệt, người sẽ chạy quá trình xây dựng
Chúng tôi sẽ xây dựng như người dùng builder
, không phải như root
:
# as root
useradd builder
Thêm cũ ghc
đi kèm với gói Fedora 22
Chúng tôi cần ghc
đi kèm với Fedora 22 để bắt đầu biên soạn. Theo Platform
Sẵn sàng , ghc
phải là & gt; 7.4 (Fedora có ghc
7.8.4).
# as root
dnf install ghc
Điều này kéo theo 55 gói, bao gồm libffi-devel
nếu nó chưa ở đó
Bạn cũng cần:
# as root
dnf install ghc-split
Hoặc bạn sẽ nhận được lỗi:
> cabal: At least the following dependencies are missing:
> hastache >=0.6.0, shake >=0.14, split -any, text -any
Thêm một tiền biên dịch mới Cabal
Như đã đề cập. bạn phải cài đặt tiền biên dịch Cabal
để thay thế cái cũ đi kèm với Fedora 22.
Thực sự sử dụng Cabal
1.18.1.0 đi kèm với Fedora cuối cùng sẽ báo lỗi:
> ghc: ghc no longer supports single-file style package databases
> (dist/package.conf.inplace) use 'ghc-pkg init' to create the
> database with the correct format.
Trở thành người dùng builder
:
su - builder
Nhận cái mới Cabal
từ trang tải về cabal , nhưng như đã nói ở trên, nó hiện chỉ có trong 32-bit.
# as builder
cd
wget https://www.haskell.org/cabal/release/cabal-install-1.22.0.0/cabal-1.22.0.0-i386-unknown-linux.tar.gz
# 3.84 MiB; just contains the "cabal" binary
tar xzf cabal-1.22.0.0-i386-unknown-linux.tar.gz
mkdir cabalbin
mv cabal cabalbin/
Thêm một tiền biên dịch gần đây ghc
Chúng ta cần một "liên kết" đóng gói sẵn ghc
) để biên dịch, được truyền dưới dạng đối số cho Haskell Platform
.
Cái mới nhất có thể được tìm thấy đây - lấy cái "CentOS".
# as builder
cd
wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2
Không cần giải nén hoặc gỡ bỏ tarball 131.82 MiB.
Giai điệu Platform
Kiểm tra Sẵn sàng :
Nếu bạn đang xây dựng một hệ thống như Posix (Linux hoặc BSD), thì bạn có thể thêm tùy chọn dòng lệnh --prefix để chỉ định vị trí, trên hệ thống đích, cây của những thứ được xây dựng sẽ được đặt. Nó mặc định là "/ usr / local / haskell". Bản dựng sẽ bao gồm một thư mục khác có tên "ghc-x.y.z-arch" và mọi thứ sẽ được cài đặt bên dưới.
... vì vậy chúng tôi không điều chỉnh bất cứ điều gì bởi vì /usr/local/haskell
âm thanh chính xác như những gì chúng ta muốn.
Và cũng:
Thêm -j [n] vào lệnh gọi xây dựng sẽ cho phép xây dựng trên nhiều lõi cùng một lúc.
Nó đã thử điều này nhưng dường như nó không hoạt động ...
Được Platform
Bản sao Platform
từ github vào thư mục ".sav". Điều này là cần thiết bởi vì việc biên dịch có thể thất bại, và trong trường hợp đó bạn chỉ muốn thổi bay những gì đã làm và bắt đầu lại:
# as builder
cd
git clone https://github.com/haskell/haskell-platform
mv haskell-platform haskell-platform.sav
Sửa lỗi PATH của người dùng builder
! Tại một số điểm, mới nhất, biên soạn ghc
phải được sử dụng thay vì đi kèm với hệ thống!
Là người dùng builder
, chỉnh sửa của bạn ~/.bash_profile
và thêm:
PATH=$HOME/cabalbin/:$HOME/haskell-platform/build/ghc-bindist/local/bin/:$PATH:$HOME/.local/bin:$HOME/bin
Như đã thiết lập trước đó $HOME/cabalbin
chứa một tươi Cabal
và đôi khi $HOME/haskell-platform/build/ghc-bindist/local/bin/
sẽ chứa mới nhất ghc
.
Đăng xuất / Đăng nhập để sử dụng PATH mới.
Xây dựng
Bây giờ bắt đầu xây dựng bằng cách sử dụng
# as builder
cd
/bin/rm -rf haskell-platform
cp -a haskell-platform.sav haskell-platform
cd haskell-platform
./platform.sh ../ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2
Quá trình xây dựng này thực sự sẽ thành công nhưng có thể mất khoảng 20 phút trên một máy không chậm. Sau đó, bạn thấy:
> To install this build:
> 1) copy build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz to the target machine
> 2) untar it (creates files in the working directory)
> 3) as root, run the script ./install-haskell-platform.sh
> Build completed in 22:54m
> # tar (for build/product/hp-usr-local.tar.gz)
> # cp (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz)
> # tar (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz)
cài đặt, dựng lên
Tiến hành như mô tả ở trên
# as root
cp ~builder/haskell-platform/build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz ~
cd
tar xzf haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz
./install-haskell-platform.sh
Bạn thấy:
> Unpacking ./hp-usr-local.tar.gz to /...
> Running /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs ...
>
> Haskell set to:
> GHC /usr/local/haskell/ghc-7.10.2-x86_64
> Haddocks file:///usr/local/haskell/ghc-7.10.2-x86_64/doc/frames.html
> Other doc file:///usr/local/haskell/ghc-7.10.2-x86_64/share/doc/ghc/html/index.html
>
> Symlinks for command line tools (ghc, cabal, etc..) added to:
> /usr/local/bin
Symlinks sẽ được cài đặt để /usr/local/bin/
:
> activate-hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs
> alex -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/alex
> cabal -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/cabal
> ghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc
> ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-7.10.2
> ghci -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci
> ghci-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci-7.10.2
> ghc-pkg -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg
> ghc-pkg-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg-7.10.2
> haddock -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock
> haddock-ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock-ghc-7.10.2
> happy -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/happy
> hp2ps -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hp2ps
> hpc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hpc
> hsc2hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hsc2hs
> HsColour -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/HsColour
> runghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc
> runghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc-7.10.2
> runhaskell -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runhaskell
Về nguyên tắc, chúng ta có thể thoát khỏi các gói hiện có của ghc
(lệnh dưới đây chỉ hoạt động nếu bạn đưa ra -y
để dnf erase
)
rpm --query --all | grep -e '^ghc-' | xargs dnf erase
Chạy bộ thử nghiệm
Đó là một ý tưởng tốt để chạy bộ thử nghiệm.
Thật vậy, tôi đang gặp một số lỗi hiện tại ...
Những thứ này sẽ đi vào Nhà GHC Trắc
Xem " chạy thử nghiệm "Tại haskell.org để được hướng dẫn chung.
Để chạy thử nghiệm, người ta phải cài đặt nguồn bộ thử nghiệm từ trang này "trên đầu trang" cây nguồn được tạo bởi bản dựng:
# as builder
cd
# the '..' below is not a typo!
cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2/..
wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-testsuite.tar.bz2
bunzip2 ghc-7.10.2-testsuite.tar.bz2
tar xf ghc-7.10.2-testsuite.tar
Bạn có thể muốn cài đặt các gói cabal bổ sung để chạy các thử nghiệm nhất định. Một số có thể đã được cài đặt. Chạy:
# as builder
## To install hmatrix you will probably have to perform, as root:
## dnf install blas-devel lapack-devel
# Linear systems, matrix decompositions, and other numerical computations
cabal install hmatrix
# Monad classes using functional dependencies
cabal install mtl
# This package provides a library for parallel programming.
cabal install parallel
# Parsec is designed as an industrial-strength parser library.
cabal install parsec
# various primitive memory-related operations
cabal install primitive
# library for random testing of program properties.
cabal install QuickCheck
# provides a basic random number generation library
cabal install random
# one module layer over regex-posix to replace Text.Regex
cabal install regex-compat
# the generics system described in the "Scrap Your Boilerplate" papers
cabal install syb
# A UTF8 layer for Strings
cabal install utf8-string
# An efficient implementation of Int-indexed arrays
cabal install vector
Chạy cabal info $PACKAGE
để có được thông tin gói. Cấu hình gói đi đến ~/.ghc/x86_64-linux-7.10.2/package.conf.d/
, nội dung gói đi đến ~/.cabal/lib/x86_64-linux-ghc-7.10.2/$PACKAGE
.
Sau đó bắt đầu kiểm tra . Chúng tôi sẽ nắm bắt đầu ra để ~/test_output.txt
:
# as builder
cd
cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2
make test 2>&1 | tee ~/test_output.txt
Sau một thời gian, bạn nhận được đầu ra:
> Unexpected results from:
> TEST="T9203 T9961 parsing001 T9675 T6048"
>
> OVERALL SUMMARY for test run started at Mon Oct 26 17:52:52 2015 CET
> 0:33:17 spent to go through
> 4142 total tests, which gave rise to
> 15728 test cases, of which
> 11883 were skipped
>
> 45 had missing libraries
> 3754 expected passes
> 41 expected failures
>
> 0 caused framework failures
> 0 unexpected passes
> 0 unexpected failures
> 5 unexpected stat failures
>
> Unexpected stat failures:
> perf/compiler T6048 [stat not good enough] (optasm)
> perf/compiler T9675 [stat not good enough] (optasm)
> perf/compiler T9961 [stat not good enough] (normal)
> perf/compiler parsing001 [stat too good] (normal)
> perf/should_run T9203 [stat too good] (normal)