%define pkg_name     haskell-platform
%define year_version 2017
%define pkg_version  8.2.2
%define pkg_release  1%{?_dist_release}

%define ghc_version 8.2.2
%define hscolour_version 1.24.2
%define cabal_version 2.0.0.1
%define stack_version 1.6.3


%ifarch %{ix86}
%define rpmarch i386
%endif
%ifarch x86_64
%define rpmarch x86_64
%endif


Summary: An advanced purely-functional programming language
Name:    %{pkg_name}
Version: %{year_version}.%{pkg_version}
Release: %{pkg_release}

License: BSD-like
Group:   Applications/Languages


Source0: %{name}-%{pkg_version}.tar.gz
Source1: packages.cabal-install
Source2: packages.stack

Source10: download-packages.pl
Source11: generate-list.sh

# ./download-packages.pl
# ./generate-list.sh
Source101: base16-bytestring-0.1.1.6.tar.gz
Source102: base16-bytestring.cabal
Source103: base64-bytestring-1.0.0.1.tar.gz
Source104: base64-bytestring.cabal
Source105: cryptohash-sha256-0.11.101.0.tar.gz
Source106: cryptohash-sha256.cabal
Source107: ed25519-0.0.5.0.tar.gz
Source108: ed25519.cabal
Source109: tar-0.5.0.3.tar.gz
Source110: tar.cabal
Source111: hackage-security-0.5.2.2.tar.gz
Source112: hackage-security.cabal
Source113: echo-0.1.3.tar.gz
Source114: echo.cabal
Source115: edit-distance-0.2.2.1.tar.gz
Source116: edit-distance.cabal
Source117: cabal-install-2.0.0.1.tar.gz
Source118: cabal-install.cabal
Source119: annotated-wl-pprint-0.7.0.tar.gz
Source120: annotated-wl-pprint.cabal
Source121: auto-update-0.1.4.tar.gz
Source122: auto-update.cabal
Source123: base-compat-0.9.3.tar.gz
Source124: base-compat.cabal
Source125: base-orphans-0.6.tar.gz
Source126: base-orphans.cabal
Source127: base-prelude-1.2.0.1.tar.gz
Source128: base-prelude.cabal
Source129: basement-0.0.4.tar.gz
Source130: basement.cabal
Source131: bindings-uname-0.1.tar.gz
Source132: bindings-uname.cabal
Source133: bitarray-0.0.1.1.tar.gz
Source134: bitarray.cabal
Source135: blaze-builder-0.4.0.2.tar.gz
Source136: blaze-builder.cabal
Source137: byteable-0.1.1.tar.gz
Source138: byteable.cabal
Source139: cabal-doctest-1.0.4.tar.gz
Source140: cabal-doctest.cabal
Source141: cereal-0.5.4.0.tar.gz
Source142: cereal.cabal
Source143: clock-0.7.2.tar.gz
Source144: clock.cabal
Source145: colour-2.3.4.tar.gz
Source146: colour.cabal
Source147: data-default-class-0.1.2.0.tar.gz
Source148: data-default-class.cabal
Source149: digest-0.0.1.2.tar.gz
Source150: digest.cabal
Source151: dlist-0.8.0.3.tar.gz
Source152: dlist.cabal
Source153: easy-file-0.2.1.tar.gz
Source154: easy-file.cabal
Source155: fail-4.9.0.0.tar.gz
Source156: fail.cabal
Source157: file-embed-0.0.10.1.tar.gz
Source158: file-embed.cabal
Source159: filelock-0.1.1.2.tar.gz
Source160: filelock.cabal
Source161: generic-deriving-1.11.2.tar.gz
Source162: generic-deriving.cabal
Source163: hinotify-0.3.9.tar.gz
Source164: hinotify.cabal
Source165: hourglass-0.2.10.tar.gz
Source166: hourglass.cabal
Source167: hspec-discover-2.4.4.tar.gz
Source168: hspec-discover.cabal
Source169: hspec-expectations-0.8.2.tar.gz
Source170: hspec-expectations.cabal
Source171: ieee754-0.8.0.tar.gz
Source172: ieee754.cabal
Source173: logict-0.6.0.2.tar.gz
Source174: logict.cabal
Source175: microlens-0.4.8.1.tar.gz
Source176: microlens.cabal
Source177: mime-types-0.1.0.7.tar.gz
Source178: mime-types.cabal
Source179: mintty-0.1.1.tar.gz
Source180: mintty.cabal
Source181: monad-loops-0.4.3.tar.gz
Source182: monad-loops.cabal
Source183: old-locale-1.0.0.7.tar.gz
Source184: old-locale.cabal
Source185: open-browser-0.2.1.0.tar.gz
Source186: open-browser.cabal
Source187: path-pieces-0.2.1.tar.gz
Source188: path-pieces.cabal
Source189: pid1-0.1.2.0.tar.gz
Source190: pid1.cabal
Source191: polyparse-1.12.tar.gz
Source192: polyparse.cabal
Source193: prelude-extras-0.4.0.3.tar.gz
Source194: prelude-extras.cabal
Source195: quickcheck-io-0.2.0.tar.gz
Source196: quickcheck-io.cabal
Source197: regex-applicative-0.3.3.tar.gz
Source198: regex-applicative.cabal
Source199: safe-0.3.15.tar.gz
Source200: safe.cabal
Source201: semigroups-0.18.3.tar.gz
Source202: semigroups.cabal
Source203: setenv-0.1.1.3.tar.gz
Source204: setenv.cabal
Source205: silently-1.2.5.tar.gz
Source206: silently.cabal
Source207: stm-chans-3.0.0.4.tar.gz
Source208: stm-chans.cabal
Source209: text-metrics-0.3.0.tar.gz
Source210: text-metrics.cabal
Source211: th-abstraction-0.2.6.0.tar.gz
Source212: th-abstraction.cabal
Source213: th-expand-syns-0.4.4.0.tar.gz
Source214: th-expand-syns.cabal
Source215: th-lift-0.7.7.tar.gz
Source216: th-lift.cabal
Source217: time-locale-compat-0.1.1.3.tar.gz
Source218: time-locale-compat.cabal
Source219: transformers-compat-0.5.1.4.tar.gz
Source220: transformers-compat.cabal
Source221: unix-compat-0.5.0.1.tar.gz
Source222: unix-compat.cabal
Source223: unliftio-core-0.1.1.0.tar.gz
Source224: unliftio-core.cabal
Source225: uuid-types-1.0.3.tar.gz
Source226: uuid-types.cabal
Source227: vector-algorithms-0.7.0.1.tar.gz
Source228: vector-algorithms.cabal
Source229: void-0.7.2.tar.gz
Source230: void.cabal
Source231: gitrev-1.3.1.tar.gz
Source232: gitrev.cabal
Source233: attoparsec-iso8601-1.0.0.0.tar.gz
Source234: attoparsec-iso8601.cabal
Source235: neat-interpolation-0.3.2.1.tar.gz
Source236: neat-interpolation.cabal
Source237: pem-0.2.2.tar.gz
Source238: pem.cabal
Source239: foundation-0.0.17.tar.gz
Source240: foundation.cabal
Source241: unicode-transforms-0.3.3.tar.gz
Source242: unicode-transforms.cabal
Source243: streaming-commons-0.1.18.tar.gz
Source244: streaming-commons.cabal
Source245: http-types-0.9.1.tar.gz
Source246: http-types.cabal
Source247: blaze-markup-0.8.0.0.tar.gz
Source248: blaze-markup.cabal
Source249: socks-0.5.6.tar.gz
Source250: socks.cabal
Source251: extra-1.6.2.tar.gz
Source252: extra.cabal
Source253: ansi-terminal-0.7.1.1.tar.gz
Source254: ansi-terminal.cabal
Source255: store-core-0.4.1.tar.gz
Source256: store-core.cabal
Source257: hastache-0.6.1.tar.gz
Source258: hastache.cabal
Source259: smallcheck-1.1.3.1.tar.gz
Source260: smallcheck.cabal
Source261: microlens-th-0.4.1.1.tar.gz
Source262: microlens-th.cabal
Source263: old-time-1.1.0.3.tar.gz
Source264: old-time.cabal
Source265: cookie-0.4.3.tar.gz
Source266: cookie.cabal
Source267: regex-applicative-text-0.1.0.1.tar.gz
Source268: regex-applicative-text.cabal
Source269: th-reify-many-0.1.8.tar.gz
Source270: th-reify-many.cabal
Source271: th-lift-instances-0.1.11.tar.gz
Source272: th-lift-instances.cabal
Source273: transformers-base-0.4.4.tar.gz
Source274: transformers-base.cabal
Source275: tagged-0.8.5.tar.gz
Source276: tagged.cabal
Source277: mmorph-1.1.0.tar.gz
Source278: mmorph.cabal
Source279: microlens-mtl-0.1.11.0.tar.gz
Source280: microlens-mtl.cabal
Source281: exceptions-0.8.3.tar.gz
Source282: exceptions.cabal
Source283: Glob-0.9.1.tar.gz
Source284: Glob.cabal
Source285: fsnotify-0.2.1.1.tar.gz
Source286: fsnotify.cabal
Source287: unliftio-0.2.2.0.tar.gz
Source288: unliftio.cabal
Source289: mono-traversable-1.0.7.0.tar.gz
Source290: mono-traversable.cabal
Source291: contravariant-1.4.tar.gz
Source292: contravariant.cabal
Source293: memory-0.14.11.tar.gz
Source294: memory.cabal
Source295: blaze-html-0.9.0.1.tar.gz
Source296: blaze-html.cabal
Source297: hspec-core-2.4.4.tar.gz
Source298: hspec-core.cabal
Source299: ansi-wl-pprint-0.6.8.1.tar.gz
Source300: ansi-wl-pprint.cabal
Source301: zip-archive-0.3.1.1.tar.gz
Source302: zip-archive.cabal
Source303: unix-time-0.3.7.tar.gz
Source304: unix-time.cabal
Source305: cpphs-1.20.8.tar.gz
Source306: cpphs.cabal
Source307: uri-bytestring-0.3.1.0.tar.gz
Source308: uri-bytestring.cabal
Source309: th-orphans-0.13.4.tar.gz
Source310: th-orphans.cabal
Source311: monad-control-1.0.2.2.tar.gz
Source312: monad-control.cabal
Source313: distributive-0.5.3.tar.gz
Source314: distributive.cabal
Source315: aeson-1.2.3.0.tar.gz
Source316: aeson.cabal
Source317: temporary-1.2.1.1.tar.gz
Source318: temporary.cabal
Source319: retry-0.7.5.1.tar.gz
Source320: retry.cabal
Source321: http-client-0.5.7.1.tar.gz
Source322: http-client.cabal
Source323: cryptonite-0.24.tar.gz
Source324: cryptonite.cabal
Source325: asn1-types-0.3.2.tar.gz
Source326: asn1-types.cabal
Source327: hspec-smallcheck-0.4.2.tar.gz
Source328: hspec-smallcheck.cabal
Source329: hspec-2.4.4.tar.gz
Source330: hspec.cabal
Source331: optparse-applicative-0.14.0.0.tar.gz
Source332: optparse-applicative.cabal
Source333: fast-logger-2.4.10.tar.gz
Source334: fast-logger.cabal
Source335: haskell-src-exts-1.19.1.tar.gz
Source336: haskell-src-exts.cabal
Source337: http-api-data-0.3.7.1.tar.gz
Source338: http-api-data.cabal
Source339: th-utilities-0.2.0.1.tar.gz
Source340: th-utilities.cabal
Source341: resource-pool-0.2.3.2.tar.gz
Source342: resource-pool.cabal
Source343: lifted-base-0.2.3.11.tar.gz
Source344: lifted-base.cabal
Source345: comonad-5.0.2.tar.gz
Source346: comonad.cabal
Source347: path-0.6.1.tar.gz
Source348: path.cabal
Source349: aeson-compat-0.3.7.1.tar.gz
Source350: aeson-compat.cabal
Source351: cryptohash-0.11.9.tar.gz
Source352: cryptohash.cabal
Source353: asn1-encoding-0.9.5.tar.gz
Source354: asn1-encoding.cabal
Source355: optparse-simple-0.1.0.tar.gz
Source356: optparse-simple.cabal
Source357: haskell-src-meta-0.8.0.1.tar.gz
Source358: haskell-src-meta.cabal
Source359: resourcet-1.1.10.tar.gz
Source360: resourcet.cabal
Source361: bifunctors-5.5.tar.gz
Source362: bifunctors.cabal
Source363: path-io-1.3.3.tar.gz
Source364: path-io.cabal
Source365: asn1-parse-0.9.4.tar.gz
Source366: asn1-parse.cabal
Source367: conduit-1.2.12.1.tar.gz
Source368: conduit.cabal
Source369: semigroupoids-5.2.1.tar.gz
Source370: semigroupoids.cabal
Source371: profunctors-5.2.1.tar.gz
Source372: profunctors.cabal
Source373: x509-1.7.2.tar.gz
Source374: x509.cabal
Source375: yaml-0.8.25.1.tar.gz
Source376: yaml.cabal
Source377: conduit-extra-1.1.17.tar.gz
Source378: conduit-extra.cabal
Source379: free-4.12.4.tar.gz
Source380: free.cabal
Source381: x509-store-1.6.5.tar.gz
Source382: x509-store.cabal
Source383: hpack-0.20.0.tar.gz
Source384: hpack.cabal
Source385: project-template-0.2.0.tar.gz
Source386: project-template.cabal
Source387: monad-logger-0.3.26.tar.gz
Source388: monad-logger.cabal
Source389: cryptonite-conduit-0.2.2.tar.gz
Source390: cryptonite-conduit.cabal
Source391: store-0.4.3.2.tar.gz
Source392: store.cabal
Source393: x509-validation-1.6.9.tar.gz
Source394: x509-validation.cabal
Source395: x509-system-1.6.6.tar.gz
Source396: x509-system.cabal
Source397: persistent-2.7.3.tar.gz
Source398: persistent.cabal
Source399: tls-1.4.0.tar.gz
Source400: tls.cabal
Source401: persistent-template-2.5.3.tar.gz
Source402: persistent-template.cabal
Source403: persistent-sqlite-2.6.4.tar.gz
Source404: persistent-sqlite.cabal
Source405: connection-0.2.8.tar.gz
Source406: connection.cabal
Source407: http-client-tls-0.3.5.1.tar.gz
Source408: http-client-tls.cabal
Source409: http-conduit-2.2.4.tar.gz
Source410: http-conduit.cabal
Source411: stack-1.6.3.tar.gz
Source412: stack.cabal

BuildRoot: %{_tmppath}/%{name}-%{pkg_version}-root

BuildRequires: ghc = %{ghc_version}
BuildRequires: gmp-devel zlib-devel freeglut-devel
BuildRequires: libffi-devel
BuildRequires: docbook-utils docbook-utils-pdf docbook-style-xsl

Requires: ghc = %{ghc_version}
Requires: freeglut-devel

Conflicts: alex
Conflicts: happy
Conflicts: haskell-platform-base
Conflicts: cabal-install
Conflicts: hscolour

Vendor: Project Vine
Distribution: Vine Linux
Packager: ara_t


%description
Haskell is a computer programming language.
In particular, it is a polymorphically statically typed, lazy, purely
functional language, quite different from most other programming languages.
The language is named for Haskell Brooks Curry, whose work in mathematical
logic serves as a foundation for functional languages.


%prep
%{__rm} -rf ${RPM_BUILD_ROOT}
%setup -q -n %{name}-%{pkg_version}

%build
PKGNAME=%{name}-%{version}
PKGCONFDIR=${RPM_BUILD_ROOT}%{_libdir}/ghc-%{ghc_version}/package.conf.d
%{__mkdir_p} ${PKGCONFDIR}

export PATH=${RPM_BUILD_ROOT}%{_bindir}:${HOME}/.cabal/bin:${PATH}
export LANG=en_US.utf8

# hscolour (bootstrap)
pkg=hscolour-%{hscolour_version}
cd %{_builddir}/%{name}-%{pkg_version}/packages/${pkg}
ghc --make Setup
./Setup configure --user
./Setup build
./Setup copy
./Setup register --inplace

# haskell-platform
cd %{_builddir}/%{name}-%{pkg_version}
cd packages
for pkg in `cat ../etc/build.packages`; do
    cd ${pkg}
    ghc --make Setup
    ./Setup configure \
            --user \
            --prefix=%{_prefix} \
            --libdir=%{_libdir}/${PKGNAME}/${pkg} \
            --libsubdir= \
            --datadir=%{_datadir}/${PKGNAME}/${pkg} \
            --datasubdir= \
            --docdir=%{_docdir}/${PKGNAME}/${pkg}

    ./Setup build
    ./Setup haddock || :
    ./Setup copy --destdir=${RPM_BUILD_ROOT}
    ./Setup register --inplace
    ./Setup register --gen-pkg-config=${PKGCONFDIR}/${pkg}.conf
    cd ..
done

# cabal-install
cd %{_builddir}
for pkg in `cat %{SOURCE1}`; do
    %{__tar} xzf %{_sourcedir}/${pkg}.tar.gz
    cd ${pkg}
    # fix wrong dependencies
    CABALNAME=`echo ${pkg} | sed -e 's/\([a-zA-Z0-9-]\+\)-[0-9.]\+/\1.cabal/'`
    %{__cp} %{_sourcedir}/${CABALNAME} .

    ghc --make Setup
    if [ ${pkg} = "cabal-install-%{cabal_version}" ]
    then
        ./Setup configure \
                --user \
                --prefix=%{_prefix} \
                --docdir=%{_docdir}/${PKGNAME}/${pkg}

        ./Setup build
        ./Setup copy --destdir=${RPM_BUILD_ROOT}
    else
        ./Setup configure --user
        ./Setup build
        ./Setup copy
        ./Setup register --inplace
    fi
    cd ..
done

# stack
cd %{_builddir}
for pkg in `cat %{SOURCE2}`; do
    %{__tar} xzf %{_sourcedir}/${pkg}.tar.gz
    cd ${pkg}
    # fix wrong dependencies
    CABALNAME=`echo ${pkg} | sed -e 's/\([a-zA-Z0-9-]\+\)-[0-9.]\+/\1.cabal/'`
    %{__cp} %{_sourcedir}/${CABALNAME} .

    case ${pkg} in
        "stack-%{stack_version}") cabal install --enable-documentation ;;
        *)                        cabal install --force-reinstalls ;;
    esac
    cd ..
done

%install
# stack
%{__install} -m 755 ${HOME}/.cabal/bin/stack \
 ${RPM_BUILD_ROOT}%{_bindir}

cd ${HOME}/.cabal/share/doc/%{rpmarch}-linux-ghc-%{ghc_version}
%{__mv} stack-%{stack_version} \
 ${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}

# hscolour
cd ${RPM_BUILD_ROOT}%{_bindir}
%{__ln_s} HsColour hscolour

%clean
%{__rm} -rf ${RPM_BUILD_ROOT}

%post
ghc-pkg recache

%postun
ghc-pkg recache


%files
%defattr(-, root, root)
%{_bindir}/
%{_libdir}/%{name}-%{version}/
%{_libdir}/ghc-%{ghc_version}/package.conf.d/
%{_datadir}/%{name}-%{version}/
%{_docdir}/%{name}-%{version}/
%{_mandir}/man1/


%changelog
* Sat Jan 06 2018 Toshiaki Ara <ara_t@384.jp> 2017.8.2.2-1
- update to 8.2.2

* Wed Feb 01 2017 Toshiaki Ara <ara_t@384.jp> 2016.8.0.1-1
- update to 2016.8.0.1

* Tue May 03 2016 Toshiaki Ara <ara_t@384.jp> 2015.7.10.3-3
- modify SPEC file without usage of cabal-install

* Mon Apr 11 2016 Toshiaki Ara <ara_t@384.jp> 2015.7.10.3-2
- correct SPEC file

* Fri Feb 19 2016 Toshiaki Ara <ara_t@384.jp> 2015.7.10.3-1
- update to 7.10.3

* Mon Feb 15 2016 Toshiaki Ara <ara_t@384.jp> 2013.2.0.0-4
- delete subpackage cabal-install
- delete %%{cabal_version} from Requires: cabal-install-%%{cabal_version}
- add BuildRequires: libffi-devel

* Thu Feb 11 2016 Toshiaki Ara <ara_t@384.jp> 2013.2.0.0-3
- correct Requires

* Thu Feb 11 2016 Toshiaki Ara <ara_t@384.jp> 2013.2.0.0-2
- install Haskell libraries into %%{_libdir}/ghc-lib
- add BuildRequires: hscolour
- devide insto subpackages

* Thu Feb 04 2016 Toshiaki Ara <ara_t@384.jp> 2013.2.0.0-1
- new package