# # spec file for package ghc # # Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # %if 0%{?suse_version} == 1315 && !0%{?is_opensuse} %define without_manual 1 %endif %global unregisterised_archs aarch64 s390 s390x Name: ghc Version: 8.0.1 Release: 0 Url: http://haskell.org/ghc/dist/%{version}/%{name}-%{version}-src.tar.xz Summary: The Glorious Glasgow Haskell Compiler License: BSD-3-Clause Group: Development/Languages/Other ExclusiveArch: aarch64 %{ix86} x86_64 ppc ppc64 ppc64le s390 s390x BuildRequires: binutils-devel BuildRequires: gcc BuildRequires: ghc-bootstrap >= 7.8 BuildRequires: ghc-rpm-macros-extra BuildRequires: glibc-devel BuildRequires: gmp-devel BuildRequires: libdw-devel BuildRequires: libelf-devel #Fix for openSUSE:Leap:42.1 %if 0%{?suse_version} == 1315 BuildRequires: libffi48-devel %else BuildRequires: libffi-devel %endif %ifarch aarch64 BuildRequires: binutils-gold %endif #TODO ghc-8.0.1 supports only llvm-3.7, need talk with llvm packagers about # versioned build of llvm # Currently, there is no llvm support for powerpc* in GHC. # Aarch64 has unregisterised LLVM backend, we need llvm 3.7.x #%%ifarch aarch64 %{ix86} x86_64 #BuildRequires: llvm #%%endif BuildRequires: ncurses-devel BuildRequires: pkg-config BuildRequires: xz %if %{undefined without_manual} BuildRequires: python-sphinx %endif PreReq: update-alternatives Requires: ghc-compiler = %{version}-%{release} Requires: ghc-ghc-devel = %{version}-%{release} Requires: ghc-libraries = %{version}-%{release} Source: http://haskell.org/ghc/dist/%{version}/%{name}-%{version}-src.tar.xz Source1: ghc-rpmlintrc # PATCH-FIX-UPSTREAM D2495.patch peter.trommler@ohm-hochschule.de -- Add missing memory barrier on mutable variables. See https://ghc.haskell.org/trac/ghc/ticket/12469 for details. Backport of upstream fix for ghc 8.0.2. Patch27: D2495.patch # PATCH-FIX_UPSTREAM 0001-StgCmmPrim-Add-missing-write-barrier.patch peter.trommler@ohm-hochschule.de -- Add missing write barrier on mutable arrays. Patch28: 0001-StgCmmPrim-Add-missing-write-barrier.patch # PATCH-FIX_UPSTREAM ghc-no-madv-free.patch psimons@suse.com -- Fix "unable to decommit memory: Invalid argument" errors. See https://ghc.haskell.org/trac/ghc/ticket/12495 for details. Patch29: ghc-no-madv-free.patch # PATCH-FIX-UPSTREAM 0001-PPC-CodeGen-fix-lwa-instruction-generation.patch peter.trommler@ohm-hochschule.de -- Fix PPC codegen: Fixes ghc-zeromq4-haskell build on 64-bit PowerPCs Patch30: 0001-PPC-CodeGen-fix-lwa-instruction-generation.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description Haskell is the standard purely functional programming language; the current language version is Haskell 98, agreed in December 1998. GHC is a state-of-the-art programming suite for Haskell. Included is an optimising compiler generating good code for a variety of platforms, together with an interactive system for convenient, quick development. The distribution includes space and time profiling facilities, a large collection of libraries, and support for various language extensions, including concurrency, exceptions, and foreign language interfaces (C, C++, etc). A wide variety of Haskell related resources (tutorials, libraries, specifications, documentation, compilers, interprbeters, references, contact information, links to research groups) are available from the Haskell home page at . %package compiler Summary: GHC compiler and utilities Group: Development/Languages/Other Requires: gcc Requires: ghc-base-devel Requires(post): update-alternatives Requires(postun): update-alternatives %ifarch aarch64 Requires: binutils-gold %endif %description compiler This package contains the GHC compiler, tools and utilities. The GHC libraries are provided by ghc-devel. To install all of GHC install package ghc. %global ghc_version_override %{version} %global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release} %if %{defined ghclibdir} %ghc_lib_subpackage Cabal-1.24.0.0 %ghc_lib_subpackage array-0.5.1.1 %ghc_lib_subpackage -c gmp-devel,libffi-devel,libdw-devel,libelf-devel base-4.9.0.0 %ghc_lib_subpackage binary-0.8.3.0 %ghc_lib_subpackage bytestring-0.10.8.1 %ghc_lib_subpackage containers-0.5.7.1 %ghc_lib_subpackage deepseq-1.4.2.0 %ghc_lib_subpackage directory-1.2.6.2 %ghc_lib_subpackage filepath-1.4.1.0 %ghc_lib_subpackage -x ghc-%{ghc_version_override} %ghc_lib_subpackage ghc-boot-%{ghc_version_override} %ghc_lib_subpackage ghc-boot-th-%{ghc_version_override} %ghc_lib_subpackage -x ghci-%{ghc_version_override} %ghc_lib_subpackage haskeline-0.7.2.3 %ghc_lib_subpackage hoopl-3.10.2.1 %ghc_lib_subpackage hpc-0.6.0.3 %ghc_lib_subpackage pretty-1.1.3.3 %ghc_lib_subpackage process-1.4.2.0 %ghc_lib_subpackage template-haskell-2.11.0.0 %ghc_lib_subpackage -c ncurses-devel terminfo-0.4.0.2 %ghc_lib_subpackage time-1.6.0.1 %ghc_lib_subpackage transformers-0.5.2.0 %ghc_lib_subpackage unix-2.7.2.0 %ghc_lib_subpackage xhtml-3000.2.1 %endif %global version %{ghc_version_override} %package libraries Summary: GHC development libraries meta package Group: Development/Libraries/Other Requires: ghc-compiler = %{version}-%{release} Obsoletes: ghc-devel < %{version}-%{release} Provides: ghc-devel = %{version}-%{release} Obsoletes: ghc-prof < %{version}-%{release} Provides: ghc-prof = %{version}-%{release} %{?ghc_packages_list:Requires: %(echo %{ghc_packages_list} | sed -e "s/\([^ ]*\)-\([^ ]*\)/ghc-\1-devel = \2-%{release},/g")} %description libraries This is a meta-package for all the development library packages in GHC except the ghc library, which is installed by the toplevel ghc metapackage. %prep %setup -q %patch27 -p1 %patch28 -p1 %patch29 -p1 %patch30 -p1 %build # Check if bootstrap is required, i.e. version is different from ghc's version # Note: Cannot use ghc_version macro here as we defined version override earlier %if "%version" != "%(ghc --numeric-version)" %define ghc_boot 1 cat > mk/build.mk < mk/build.mk <> mk/build.mk # override some settings cat >> mk/build.mk << EOF GhcLibWays = v %{!?ghc_without_shared:dyn} %{!?without_prof:p} %if %{defined ghc_without_shared} DYNAMIC_BY_DEFAULT = NO DYNAMIC_GHC_PROGRAMS = NO %endif %ifarch %{unregisterised_archs} GhcUnregisterised = YES GhcWithNativeCodeGen = NO SRC_HC_OPTS = -O -H64m GhcStage1HcOpts = -O GhcStage2HcOpts = -O GhcHcOpts = -Rghc-timing GhcLibHcOpts = -O SRC_HC_OPTS += -optc-fno-builtin -optc-Wno-return-type SRC_CC_OPTS += -fno-builtin -Wno-return-type %endif %if %{defined without_haddock} HADDOCK_DOCS = NO %endif BUILD_SPHINX_PS = NO %if %{defined without_manual} BUILD_SPHINX_HTML = NO BUILD_SPHINX_PDF = NO %endif %if %{defined without_hscolour} HSCOLOUR_SRCS = NO %endif EOF export CFLAGS="${CFLAGS:-%optflags}" ./configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} \ --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} \ --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} \ --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} \ --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} \ %{?ghc_boot:--with-ghc=%{_builddir}/ghc-boot/bin/ghc} \ --with-system-libffi %ifnarch aarch64 s390 s390x make %{?_smp_mflags} %else make -j 2 %endif %install #%%ghc_suse_disable_debug_packages %makeinstall for i in %{ghc_packages_list}; do name=$(echo $i | sed -e "s/\(.*\)-.*/\1/") ver=$(echo $i | sed -e "s/.*-\(.*\)/\1/") %ghc_gen_filelists $name $ver echo "%doc libraries/$name/LICENSE" >> ghc-$name.files done # ghc-base should own ghclibdir echo "%dir %{ghclibdir}" >> ghc-base.files %ghc_gen_filelists ghc %{ghc_version_override} %ghc_gen_filelists ghci %{ghc_version_override} %ghc_gen_filelists ghc-prim 0.5.0.0 %ghc_gen_filelists integer-gmp 1.0.0.1 %define merge_filelist()\ cat ghc-%1.files >> ghc-%2.files\ cat ghc-%1-devel.files >> ghc-%2-devel.files\ cp -p libraries/%1/LICENSE libraries/LICENSE.%1\ echo "%doc libraries/LICENSE.%1" >> ghc-%2.files %merge_filelist integer-gmp base %merge_filelist ghc-prim base %if %{undefined ghc_without_shared} echo %%dir %{ghclibdir}/rts >> ghc-base.files ls %{buildroot}%{ghclibdir}/rts/libHS*.so >> ghc-base.files sed -i -e "s|^%{buildroot}||g" ghc-base.files %endif echo %%dir %{ghclibdir}/rts >> ghc-base-devel.files ls -d %{buildroot}%{ghclibdir}/rts/libHS*.a %{buildroot}%{ghclibdir}/package.conf.d/rts.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files sed -i -e "s|^%{buildroot}||g" ghc-base-devel.files # these are handled as alternatives mkdir -p %{buildroot}%{_sysconfdir}/alternatives for i in hsc2hs runhaskell; do if [ -x %{buildroot}%{_bindir}/$i-ghc ]; then rm %{buildroot}%{_bindir}/$i else mv %{buildroot}%{_bindir}/$i{,-ghc} fi ln -s -f %{_sysconfdir}/alternatives/$i %{buildroot}%{_bindir}/$i touch %{buildroot}%{_sysconfdir}/alternatives/$i done %ghc_strip_dynlinked find %{buildroot}%{ghclibdocdir} -name LICENSE -exec rm '{}' ';' %check # Actually, I took this from Jens Petersen's Fedora package # stolen from ghc6/debian/rules: # Do some very simple tests that the compiler actually works rm -rf testghc mkdir testghc echo 'main = putStrLn "Foo"' > testghc/foo.hs inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo [ "$(testghc/foo)" = "Foo" ] # doesn't seem to work inplace: #[ "$(inplace/bin/runghc testghc/foo.hs)" = "Foo" ] rm testghc/* echo 'main = putStrLn "Foo"' > testghc/foo.hs inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo -O2 [ "$(testghc/foo)" = "Foo" ] rm testghc/* %if %{undefined ghc_without_shared} echo 'main = putStrLn "Foo"' > testghc/foo.hs #inplace/bin/ghc-stage2 testghc/foo.hs -o testghc/foo -dynamic #[ "$(testghc/foo)" = "Foo" ] rm testghc/* %endif %post compiler # Alas, GHC, Hugs and nhc all come with different set of tools in addition to # a runFOO: # # * GHC: hsc2hs # * Hugs: hsc2hs, cpphs # * nhc: cpphs # # Therefore it is currently not possible to use --slave below to form link # groups under a single name 'runhaskell'. Either these tools should be # disentangled from the Haskell implementations or all implementations should # have the same set of tools. *sigh* %{_sbindir}/update-alternatives --install %{_bindir}/runhaskell runhaskell %{_bindir}/runghc 500 %{_sbindir}/update-alternatives --install %{_bindir}/hsc2hs hsc2hs %{_bindir}/hsc2hs-ghc 500 %preun compiler if test "$1" = 0; then %{_sbindir}/update-alternatives --remove runhaskell %{_bindir}/runghc %{_sbindir}/update-alternatives --remove hsc2hs %{_bindir}/hsc2hs-ghc fi %files %defattr(-,root,root,-) %doc LICENSE %files compiler %defattr(-,root,root,-) %doc ANNOUNCE LICENSE %{_bindir}/ghc %{_bindir}/ghc-%{version} %{_bindir}/ghc-pkg %{_bindir}/ghc-pkg-%{version} %{_bindir}/ghci %{_bindir}/ghci-%{version} %{_bindir}/hp2ps %{_bindir}/hpc %{_bindir}/hsc2hs %ghost %{_sysconfdir}/alternatives/hsc2hs %{_bindir}/hsc2hs-ghc %{_bindir}/runghc %{_bindir}/runghc-%{version} %{_bindir}/runhaskell %ghost %{_sysconfdir}/alternatives/runhaskell %{_bindir}/runhaskell-ghc %dir %{ghclibdir} %{ghclibdir}/settings %dir %{ghclibdir}/bin %{ghclibdir}/bin/ghc %{ghclibdir}/bin/ghc-pkg %{ghclibdir}/bin/ghc-iserv %{ghclibdir}/bin/ghc-iserv-dyn %{ghclibdir}/bin/ghc-iserv-prof %{ghclibdir}/bin/hpc %{ghclibdir}/bin/hsc2hs %ifnarch %{unregisterised_archs} %{ghclibdir}/bin/ghc-split %endif %{ghclibdir}/ghc-usage.txt %{ghclibdir}/ghci-usage.txt %dir %{ghclibdir}/package.conf.d %ghost %{ghclibdir}/package.conf.d/package.cache %{ghclibdir}/platformConstants %{ghclibdir}/bin/runghc %{ghclibdir}/template-hsc.h %{ghclibdir}/bin/unlit %dir %{_datadir}/doc/ghc-%{version} %dir %{ghcdocbasedir} %dir %{ghcdocbasedir}/libraries %if %{undefined without_manual} %{_mandir}/man1/ghc.* %endif %if %{undefined without_haddock} %{_bindir}/haddock %{_bindir}/haddock-ghc-%{version} %{ghclibdir}/html %{ghclibdir}/latex %{ghclibdir}/bin/haddock %if %{undefined without_manual} %{ghcdocbasedir}/haddock %{ghcdocbasedir}/users_guide %endif %{ghcdocbasedir}/libraries/frames.html %{ghcdocbasedir}/libraries/gen_contents_index %{ghcdocbasedir}/libraries/hslogo-16.png %{ghcdocbasedir}/libraries/ocean.css %{ghcdocbasedir}/libraries/prologue.txt %{ghcdocbasedir}/libraries/synopsis.png %{ghcdocbasedir}/index.html %ghost %{ghcdocbasedir}/libraries/doc-index*.html %ghost %{ghcdocbasedir}/libraries/haddock-util.js %ghost %{ghcdocbasedir}/libraries/index*.html %ghost %{ghcdocbasedir}/libraries/minus.gif %ghost %{ghcdocbasedir}/libraries/plus.gif %endif %files libraries %defattr(-,root,root,-) %doc LICENSE %changelog