From fb97aa11c15fa74f60f1535e91442f1e9a60d153 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Wed, 25 Oct 2023 20:03:51 +0000 Subject: automatic import of ghc --- ghc.spec | 491 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 491 insertions(+) create mode 100644 ghc.spec (limited to 'ghc.spec') diff --git a/ghc.spec b/ghc.spec new file mode 100644 index 0000000..df11083 --- /dev/null +++ b/ghc.spec @@ -0,0 +1,491 @@ +%define full_version 9.4.5 + +# Keep in sync with ghc-bootstrap.spec +%global llvm_major 14 + +# disable prof, docs, perf build +# for production builds: disable quick build +%bcond_with quickbuild + +# for production builds: use hadrian buildsystem +%bcond_without hadrian + +# for production builds: build hadrian +%bcond_without build_hadrian + +# for production builds: enable debuginfo +%bcond_without ghc_debuginfo + +%if %{without ghc_debuginfo} +%undefine _enable_debug_packages +%endif + +# build profiling libraries +# build help document (haddock & manual) +# perf production build (disable for quick build) +%if %{with quickbuild} +%undefine with_ghc_prof +%undefine with_help +%undefine with_haddock +%bcond_with perf_build +%else +%bcond_without ghc_prof +%bcond_without help +%bcond_without haddock +%bcond_without perf_build +%endif + +%global ghc_llvm_archs riscv64 +%global ghc_unregisterized_arches noarch + +%global base_ver 4.17.1.0 +%global ghc_compact_ver 0.1.0.0 +%global hpc_ver 0.6.1.0 +%global hsc2hs_ver 0.68.8 + +Name: ghc +Version: %{full_version} +Release: 1 +Summary: The Glorious Glasgow Haskell Compiler +License: BSD-3-Clause +URL: https://www.haskell.org/ghc/ +Source0: https://downloads.haskell.org/~ghc/%{full_version}/ghc-%{version}-src.tar.xz +Source1: ghc-rpmlintrc +Source2: 9_2_3-bootstrap-sources.tar.gz +Source3: ghc-pkg.man +Source4: haddock.man +Source5: runghc.man + +# Use absolute PATH in gen_contents_index +Patch1: ghc-gen_contents_index-haddock-path.patch +# Add stack marker to StgCRunAsm.S +Patch2: execstack.patch +# Set Linux as default PIE platform +Patch3: ghc-pie.patch + +BuildRequires: binutils-devel +BuildRequires: gcc-c++ +BuildRequires: ghc-bootstrap >= 9.0 +BuildRequires: ghc-bootstrap-tools >= 1.0 +BuildRequires: ghc-rpm-macros-extra +BuildRequires: glibc-devel +BuildRequires: gmp-devel +BuildRequires: elfutils-devel +BuildRequires: elfutils-libelf-devel +BuildRequires: libffi-devel +BuildRequires: libtool +%ifarch riscv64 +BuildRequires: clang%{llvm_major} +BuildRequires: llvm%{llvm_major} +BuildRequires: llvm%{llvm_major}-devel +%endif +BuildRequires: ncurses-devel +BuildRequires: pkgconfig +BuildRequires: python3 +BuildRequires: xz +%if %{with help} +BuildRequires: python3-sphinx +%endif +BuildRequires: numactl-devel + +Requires: %{name}-compiler = %{version}-%{release} +Requires: %{name}-devel = %{version}-%{release} +Requires: %{name}-ghc-boot-devel = %{version}-%{release} +Requires: %{name}-ghc-compact-devel = %{ghc_compact_ver}-%{release} +Requires: %{name}-ghc-devel = %{version}-%{release} +Requires: %{name}-ghc-heap-devel = %{version}-%{release} +Requires: %{name}-ghci-devel = %{version}-%{release} +Requires: %{name}-hpc-devel = %{hpc_ver}-%{release} +Requires: %{name}-libiserv-devel = %{version}-%{release} +Recommends: %{name}-compiler-default = %{version}-%{release} +%if %{with help} +Suggests: %{name}-help = %{version}-%{release} +%endif +%if %{with ghc_prof} +Suggests: %{name}-prof = %{version}-%{release} +%endif + +%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 +License: BSD-3-Clause +Requires: gcc +Requires: ghc-base-devel = %{base_ver}-%{release} +Provides: hsc2hs-%{hsc2hs_ver}-%{release} +%ifarch riscv64 +Requires: clang%{llvm_major} +Requires: llvm%{llvm_major} +%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. + + +%if %{with help} +%package help +Summary: GHC manual and documentation +License: BSD-3-Clause +Requires: %{name}-compiler = %{version}-%{release} +BuildArch: noarch + +%description help +This package provides the GHC User Guide, Haddock manual and +GHC Haskell libraries documentation. +%endif + +# These are libraries included with GHC compiler. +%global ghc_version_override %{version} +%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release} +#!ForceMultiversion +%ghc_lib_subpackage -d Cabal-3.8.1.0 +%ghc_lib_subpackage -d Cabal-syntax-3.8.1.0 +%ghc_lib_subpackage -d array-0.5.4.0 +%ghc_lib_subpackage -d -c gmp-devel,libffi-devel,elfutils-devel,elfutils-libelf-devel,numactl-devel base-%{base_ver} +%ghc_lib_subpackage -d binary-0.8.9.1 +%ghc_lib_subpackage -d bytestring-0.11.4.0 +%ghc_lib_subpackage -d containers-0.6.7 +%ghc_lib_subpackage -d deepseq-1.4.8.0 +%ghc_lib_subpackage -d directory-1.3.7.1 +%ghc_lib_subpackage -d exceptions-0.10.5 +%ghc_lib_subpackage -d filepath-1.4.2.2 +%ghc_lib_subpackage -d -x ghc-%{ghc_version_override} +%ghc_lib_subpackage -d -x ghc-boot-%{ghc_version_override} +%ghc_lib_subpackage -d ghc-boot-th-%{ghc_version_override} +%ghc_lib_subpackage -d -x ghc-compact-0.1.0.0 +%ghc_lib_subpackage -d -x ghc-heap-%{ghc_version_override} +%ghc_lib_subpackage -d -x ghci-%{ghc_version_override} +%ghc_lib_subpackage -d haskeline-0.8.2 +%ghc_lib_subpackage -d -x hpc-0.6.1.0 +%ghc_lib_subpackage -d -x libiserv-%{ghc_version_override} +%ghc_lib_subpackage -d mtl-2.2.2 +%ghc_lib_subpackage -d parsec-3.1.16.1 +%ghc_lib_subpackage -d pretty-1.1.3.6 +%ghc_lib_subpackage -d process-1.6.16.0 +%ghc_lib_subpackage -d stm-2.5.1.0 +%ghc_lib_subpackage -d template-haskell-2.19.0.0 +%ghc_lib_subpackage -d -c ncurses-devel terminfo-0.4.1.5 +%ghc_lib_subpackage -d text-2.0.2 +%ghc_lib_subpackage -d time-1.12.2 +%ghc_lib_subpackage -d transformers-0.5.6.2 +%ghc_lib_subpackage -d unix-2.7.3 +%ghc_lib_subpackage -d xhtml-3000.2.2.1 + + +%package devel +%{?ghc_packages_list:Requires: %(echo %{ghc_packages_list} | sed -e "s/\([^ ]*\)-\([^ ]*\)/%{name}-\1-devel = \2-%{release},/g")} +Summary: GHC development libraries meta package +Requires: ghc-compiler = %{version}-%{release} +Obsoletes: ghc-libraries < %{version}-%{release} +Provides: ghc-libraries = %{version}-%{release} + +%description devel +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. + +%if %{with ghc_prof} +%package prof +Summary: GHC profiling libraries meta package +License: BSD-3-Clause +Requires: %{name}-compiler = %{version}-%{release} + +%description prof +Installing this package causes %{name}-*-prof packages corresponding to +%{name}-*-devel packages to be automatically installed too. +%endif + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 + +rm libffi-tarballs/libffi-*.tar.gz + +%build +# for ghc-bootstrap +export PATH=/opt/bin:$PATH +cp %{SOURCE2} ./ +hadrian/bootstrap/bootstrap.py --bootstrap-sources 9_2_3-bootstrap-sources.tar.gz +%global hadrian _build/bin/hadrian + +%ghc_set_gcc_flags + +export CC=%{_bindir}/gcc +export LD=%{_bindir}/ld +export LANG=C.utf8 + +autoupdate + +python3 boot.source --hadrian + +./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} \ + --docdir=%{_docdir}/%{name}-%{version} \ + --with-system-libffi \ +%ifarch %{ghc_unregisterized_arches} + --enable-unregisterised \ +%endif + +%undefine _ghcdynlibdir + +%ifarch %{ghc_llvm_archs} +%global hadrian_llvm +llvm +%endif +%define hadrian_docs %{!?with_help:--docs=no-haddocks} %{!?with_help:--docs=no-sphinx}%{?with_help:--docs=no-sphinx-pdfs --docs=no-sphinx-man} + +%{hadrian} %{?_smp_mflags} --flavour=%{?with_quickbuild:quick+no_profiled_libs}%{!?with_quickbuild:perf%{!?with_ghc_prof:+no_profiled_libs}}%{?hadrian_llvm} %{hadrian_docs} binary-dist-dir + +%install + +( +cd _build/bindist/ghc-%{version}-* +./configure --prefix=%{buildroot}%{ghclibdir} --bindir=%{buildroot}%{_bindir} --libdir=%{buildroot}%{_libdir} --mandir=%{buildroot}%{_mandir} --docdir=%{buildroot}%{_docdir}/%{name}-%{version} +make install +) +mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d +echo "%{ghclibplatform}" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}.conf +# avoid 'E: binary-or-shlib-defines-rpath' +for i in $(find %{buildroot} -type f -executable -exec sh -c "file {} | grep -q 'dynamically linked'" \; -print); do + chrpath -d $i +done + +# containers src moved to a subdir +cp -p libraries/containers/containers/LICENSE libraries/containers/LICENSE +# hack for Cabal-syntax/LICENSE +mkdir -p libraries/Cabal-syntax +cp -p libraries/Cabal/Cabal-syntax/LICENSE libraries/Cabal-syntax + +rm -f %{name}-*.files + +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 "%%license libraries/$name/LICENSE" >> %{name}-$name.files +done + +echo "%%dir %{ghclibdir}" >> %{name}-base%{?_ghcdynlibdir:-devel}.files + +%ghc_gen_filelists ghc %{ghc_version_override} +%ghc_gen_filelists ghc-boot %{ghc_version_override} +%ghc_gen_filelists ghc-compact %{ghc_compact_ver} +%ghc_gen_filelists ghc-heap %{ghc_version_override} +%ghc_gen_filelists ghci %{ghc_version_override} +%ghc_gen_filelists hpc %{hpc_ver} +%ghc_gen_filelists libiserv %{ghc_version_override} + +%ghc_gen_filelists ghc-bignum 1.3 +%ghc_gen_filelists ghc-prim 0.9.0 +%ghc_gen_filelists integer-gmp 1.1 +%ghc_gen_filelists rts 1.0.2 + +%ghc_merge_filelist ghc-bignum base +%ghc_merge_filelist ghc-prim base +%ghc_merge_filelist integer-gmp base +%ghc_merge_filelist rts base + +for i in %{buildroot}%{ghclibplatform}/libHSrts*ghc%{ghc_version}.so; do + echo $i >> %{name}-base.files +done +echo "%{_sysconfdir}/ld.so.conf.d/%{name}.conf" >> %{name}-base.files + +if [ -f %{buildroot}%{ghcliblib}/package.conf.d/system-cxx-std-lib-1.0.conf ]; then +ls -d %{buildroot}%{ghcliblib}/package.conf.d/system-cxx-std-lib-1.0.conf >> %{name}-base-devel.files +fi + +%if %{with ghc_prof} +ls %{buildroot}%{ghclibdir}/bin/ghc-iserv-prof* >> %{name}-base-prof.files +ls %{buildroot}%{ghclibdir}/lib/bin/ghc-iserv-prof >> %{name}-base-prof.files +echo "%%dir %{ghcliblib}/bin" +%endif + +sed -i -e "s|^%{buildroot}||g" %{name}-base*.files +sed -i -e "s|%{buildroot}||g" %{buildroot}%{_bindir}/* + + +%if %{with help} +rm %{buildroot}%{_docdir}/ghc-%{version}/archives/libraries.html.tar.xz +rm %{buildroot}%{_docdir}/ghc-%{version}/archives/Haddock.html.tar.xz +rm %{buildroot}%{_docdir}/ghc-%{version}/archives/users_guide.html.tar.xz +%endif + + +mkdir -p %{buildroot}%{_mandir}/man1 +install -p -m 0644 %{SOURCE3} %{buildroot}%{_mandir}/man1/ghc-pkg.1 +install -p -m 0644 %{SOURCE4} %{buildroot}%{_mandir}/man1/haddock.1 +install -p -m 0644 %{SOURCE5} %{buildroot}%{_mandir}/man1/runghc.1 + + +rm %{buildroot}%{ghclibdir}/lib/package.conf.d/.stamp +rm %{buildroot}%{ghclibdir}/lib/package.conf.d/*.conf.copy + +( +cd %{buildroot}%{ghclibdir}/lib/bin +for i in *; do +if [ -f %{buildroot}%{ghclibdir}/bin/$i ]; then +ln -sf ../../bin/$i +fi +done +) + +%check +# Simple tests to check the compiler whether actually works +# This comes from the Debian Haskell package. +export LANG=C.utf8 +%if %{with hadrian} +export LD_LIBRARY_PATH=%{buildroot}%{ghclibplatform}: +GHC=%{buildroot}%{ghclibdir}/bin/ghc +%else +GHC=inplace/bin/ghc-stage2 +%endif +rm -rf testghc +mkdir testghc +echo 'main = putStrLn "Foo"' > testghc/foo.hs +$GHC testghc/foo.hs -o testghc/foo +[ "$(testghc/foo)" = "Foo" ] +rm testghc/* +echo 'main = putStrLn "Foo"' > testghc/foo.hs +$GHC testghc/foo.hs -o testghc/foo -O2 +[ "$(testghc/foo)" = "Foo" ] +rm testghc/* +echo 'main = putStrLn "Foo"' > testghc/foo.hs +$GHC testghc/foo.hs -o testghc/foo -dynamic +[ "$(testghc/foo)" = "Foo" ] +rm testghc/* + +$GHC --info + +%ldconfig_scriptlets + +%transfiletriggerin compiler -- %{ghcliblib}/package.conf.d +%ghc_pkg_recache +%end + +%transfiletriggerpostun compiler -- %{ghcliblib}/package.conf.d +%ghc_pkg_recache +%end + +%files +%license LICENSE +%dir %{ghcliblib} +%dir %{ghclibdir} +%dir %{ghcliblib}/%{ghcplatform} + +%files compiler +%license LICENSE +%doc README.md +%{_bindir}/ghc-%{version} +%{_bindir}/ghc-pkg-%{version} +%{_bindir}/ghci-%{version} +%{_bindir}/hp2ps-%{?with_hadrian:ghc-}%{version} +%{_bindir}/hpc-%{?with_hadrian:ghc-}%{version} +%{_bindir}/hsc2hs-%{?with_hadrian:ghc-}%{version} +%{_bindir}/runghc-%{version} +%{_bindir}/runhaskell-%{version} +%{_bindir}/ghc +%{_bindir}/ghc-pkg +%{_bindir}/ghci +%{_bindir}/haddock +%{_bindir}/hp2ps +%{_bindir}/hpc +%{_bindir}/hsc2hs +%{_bindir}/runghc +%{_bindir}/runhaskell +%dir %{ghclibdir}/bin +%dir %{ghcliblib}/bin +%{ghclibdir}/bin/ghc +%{ghclibdir}/bin/ghc-iserv +%{ghclibdir}/bin/ghc-iserv-dyn +%{ghclibdir}/bin/ghc-pkg +%{ghclibdir}/bin/hpc +%{ghclibdir}/bin/hsc2hs +%{ghclibdir}/bin/runghc +%{ghclibdir}/bin/hp2ps +%{ghclibdir}/bin/unlit +%{ghclibdir}/bin/ghc-%{version} +%{ghclibdir}/bin/ghc-iserv-ghc-%{version} +%{ghclibdir}/bin/ghc-iserv-dyn-ghc-%{version} +%{ghclibdir}/bin/ghc-pkg-%{version} +%{ghclibdir}/bin/haddock +%{ghclibdir}/bin/haddock-ghc-%{version} +%{ghclibdir}/bin/hp2ps-ghc-%{version} +%{ghclibdir}/bin/hpc-ghc-%{version} +%{ghclibdir}/bin/hsc2hs-ghc-%{version} +%{ghclibdir}/bin/runghc-%{version} +%{ghclibdir}/bin/runhaskell +%{ghclibdir}/bin/runhaskell-%{version} +%{ghclibdir}/bin/unlit-ghc-%{version} +%{ghclibdir}/lib/bin/ghc-iserv +%{ghclibdir}/lib/bin/ghc-iserv-dyn +%{ghclibdir}/lib/bin/unlit +%{ghcliblib}/ghc-usage.txt +%{ghcliblib}/ghci-usage.txt +%{ghcliblib}/llvm-passes +%{ghcliblib}/llvm-targets +%dir %{ghcliblib}/package.conf.d +%ghost %{ghcliblib}/package.conf.d/package.cache +%{ghcliblib}/package.conf.d/package.cache.lock +%{ghcliblib}/settings +%{ghcliblib}/template-hsc.h +%{_mandir}/man1/ghc-pkg.1* +%{_mandir}/man1/haddock.1* +%{_mandir}/man1/runghc.1* +%{_bindir}/haddock-ghc-%{version} +%{ghcliblib}/html +%{ghcliblib}/latex +%if %{with help} +%{ghc_html_libraries_dir}/prologue.txt +%verify(not size mtime) %{ghc_html_libraries_dir}/haddock-bundle.min.js +%verify(not size mtime) %{ghc_html_libraries_dir}/linuwial.css +%verify(not size mtime) %{ghc_html_libraries_dir}/quick-jump.css +%verify(not size mtime) %{ghc_html_libraries_dir}/synopsis.png +%if %{without hadrian} +%{_mandir}/man1/ghc.1* +%endif +%endif + + +%files devel + +%if %{with help} +%files help +%{ghc_html_dir}/index.html +%{ghc_html_libraries_dir}/gen_contents_index +%verify(not size mtime) %{ghc_html_libraries_dir}/doc-index*.html +%verify(not size mtime) %{ghc_html_libraries_dir}/index*.html +%dir %_ghc_doc_dir +%dir %ghc_html_dir +%dir %ghc_html_libraries_dir +%{ghc_html_dir}/users_guide +%{ghc_html_dir}/Haddock +%endif + +%if %{with ghc_prof} +%files prof +%endif + +%changelog +* Tue Jul 25 2023 Lin Runze 9.4.5-1 +- Initial packaging (Version 9.4.5) -- cgit v1.2.3