large update for simplified reworked revision of Packaging Guidelines

- see https://fedorahosted.org/fpc/ticket/194 for discussion
- move section and multiple library metamacros to new extra subpackage
- packaging no longer depends on availability of shared libs
  so is same now for all primary and secondary archs: ie there is always
  a binary base library package
- drop ghc_add_basepkg_file macro and ghc_exclude_docdir
epel9
Jens Petersen 12 years ago
parent 9921428d92
commit 73b0bd180f

@ -1,5 +1,5 @@
# RPM Macros for packaging Haskell cabalized packages -*-rpm-spec-*- # RPM Macros for packaging Haskell cabalized packages -*-rpm-spec-*-
# see https://fedoraproject.org/wiki/PackagingDrafts/Haskell for more details # see https://fedoraproject.org/wiki/Packaging:Haskell for more details
# "cabal" # "cabal"
%cabal [ -x Setup ] || ghc --make %{!?ghc_user_conf:-no-user-package-conf} %{!?ghc_without_dynamic:-dynamic} Setup\ %cabal [ -x Setup ] || ghc --make %{!?ghc_user_conf:-no-user-package-conf} %{!?ghc_without_dynamic:-dynamic} Setup\
@ -43,28 +43,11 @@ fi
%define docdir %{ghclibdocdir}/%{pkgnamever}\ %define docdir %{ghclibdocdir}/%{pkgnamever}\
rm -f %{basepkg}.files %{basepkg}-devel.files\ rm -f %{basepkg}.files %{basepkg}-devel.files\
if [ -d "%{buildroot}%{pkgdir}" ]; then\ if [ -d "%{buildroot}%{pkgdir}" ]; then\
echo "%dir %{pkgdir}" >> %{basepkg}%{?ghc_without_shared:-devel}.files\ echo "%dir %{pkgdir}" >> %{basepkg}.files\
%if %{undefined ghc_without_shared}\ %if %{undefined ghc_without_shared}\
echo "%attr(755,root,root) %{pkgdir}/libHS%{pkgnamever}-ghc%{ghc_version}.so" >> %{basepkg}.files\ echo "%attr(755,root,root) %{pkgdir}/libHS%{pkgnamever}-ghc%{ghc_version}.so" >> %{basepkg}.files\
%endif\ %endif\
fi\ fi\
%if %{defined ghc_without_shared}\
if [ "%{name}" = "%{basepkg}" -o -n "%{?1}" ]; then\
if [ -d "%{buildroot}%{_docdir}/%{basepkg}-%{pkgver}" ]; then\
mv %{buildroot}%{_docdir}/%{basepkg}-%{pkgver} %{buildroot}%{_docdir}/%{basepkg}-devel-%{pkgver}\
%if %{undefined ghc_exclude_docdir}\
echo "%{_docdir}/%{basepkg}-devel-%{version}" >> %{basepkg}-devel.files\
%endif\
fi\
fi\
%endif\
%if %{undefined ghc_exclude_docdir}\
if [ -d "%{buildroot}%{_docdir}/%{name}-%{version}" ]; then\
echo "%{_docdir}/%{name}-%{version}" >> %{basepkg}%{?ghc_without_shared:-devel}.files\
elif [ -d "%{buildroot}%{_docdir}/ghc-%{pkgnamever}" ]; then\
echo "%{_docdir}/ghc-%{pkgnamever}" >> %{basepkg}%{?ghc_without_shared:-devel}.files\
fi\
%endif\
echo "%{ghclibdir}/package.conf.d/%{pkgnamever}*.conf" >> %{basepkg}-devel.files\ echo "%{ghclibdir}/package.conf.d/%{pkgnamever}*.conf" >> %{basepkg}-devel.files\
if [ -d "%{buildroot}%{pkgdir}" ]; then\ if [ -d "%{buildroot}%{pkgdir}" ]; then\
find %{buildroot}%{pkgdir} -mindepth 1 -type d | sed "s/^/%dir /" >> %{basepkg}-devel.files\ find %{buildroot}%{pkgdir} -mindepth 1 -type d | sed "s/^/%dir /" >> %{basepkg}-devel.files\
@ -73,17 +56,13 @@ fi\
if [ -d "%{buildroot}%{docdir}" ]; then\ if [ -d "%{buildroot}%{docdir}" ]; then\
echo "%{docdir}" >> %{basepkg}-devel.files\ echo "%{docdir}" >> %{basepkg}-devel.files\
fi\ fi\
for i in %{!?ghc_without_shared:%{basepkg}.files} %{basepkg}-devel.files; do\ for i in %{basepkg}.files %{basepkg}-devel.files; do\
if [ -f "$i" ]; then\ if [ -f "$i" ]; then\
sed -i -e "s!%{buildroot}!!g" $i\ sed -i -e "s!%{buildroot}!!g" $i\
fi\ fi\
done\ done\
%{nil} %{nil}
%ghc_add_basepkg_file()\
%define basepkg ghc-%{pkg_name}\
echo "%*" >> %{basepkg}%{?ghc_without_shared:-devel}.files
# compiler version # compiler version
%ghc_version %{!?ghc_version_override:%(ghc --numeric-version)}%{?ghc_version_override} %ghc_version %{!?ghc_version_override:%(ghc --numeric-version)}%{?ghc_version_override}
@ -102,139 +81,10 @@ install --mode=0644 %{pkgnamever}.conf %{buildroot}%{ghclibdir}/package.conf.d\
%ghc_devel_requires Requires: ghc-compiler = %{ghc_version}\ %ghc_devel_requires Requires: ghc-compiler = %{ghc_version}\
Requires(post): ghc-compiler = %{ghc_version}\ Requires(post): ghc-compiler = %{ghc_version}\
Requires(postun): ghc-compiler = %{ghc_version}\ Requires(postun): ghc-compiler = %{ghc_version}\
%if %{undefined ghc_without_shared} && 0%{!?-m:1}\ Requires: ghc-%{?pkg_name}%{!?pkg_name:%{pkgname}} = %{?pkgver}%{!?pkgver:%{version}}-%{release}
Requires: ghc-%{?pkg_name}%{!?pkg_name:%{pkgname}} = %{?pkgver}%{!?pkgver:%{version}}-%{release}\
%endif
%ghc_shared_files\
%if %{undefined ghc_without_shared}\
%files -n %{basepkg} -f %{basepkg}.files\
%{?base_doc_files:%doc %base_doc_files}\
%endif\
%{nil}
# ghc_lib_package [-c cdepslist] [-h pkgdepslist]
%ghc_lib_package(c:h:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%ghc_shared_files\
\
%ghc_package_devel\
%{nil}
# ghc_package [-l licensetag] [name] [version]
%ghc_package(l:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define basepkg ghc-%{pkgname}\
%package -n %{basepkg}\
Summary: %{?common_summary}%{!?common_summary:Haskell %{pkgname} library}\
Group: System Environment/Libraries\
%{?1:Version: %{pkgver}}\
%{-l:License: %{-l*}}\
%{?ghc_pkg_obsoletes:Obsoletes: %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1/g")}
# ghc_description [name] [version]
%ghc_description()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%description -n %{basepkg}\
%{?common_description}%{!?common_description:Haskell %{pkgname} library.}\
%if %{defined ghc_version} && %{undefined ghc_without_shared}\
This package provides the shared library.\
%endif
# ghc_lib_subpackage [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-x] [name] [version]
%ghc_lib_subpackage(c:h:l:x)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define pkgnamever %{pkgname}-%{pkgver}\
%{!-x:%{?1:%global ghc_packages_list %{?ghc_packages_list} %{pkgnamever}}}\
%define basepkg ghc-%{pkgname}\
%ghc_package\
\
%ghc_description\
\
%ghc_lib_package\
%{nil}
%ghc_pkg_recache %{_bindir}/ghc-pkg recache --no-user-package-conf || : %ghc_pkg_recache %{_bindir}/ghc-pkg recache --no-user-package-conf || :
# (deprecated) for docs post and postun
%ghc_reindex_haddock :
%ghc_devel_files\
%files -n %{basepkg}-devel -f %{basepkg}-devel.files\
%if %{defined ghc_without_shared}\
%{?base_doc_files:%doc %base_doc_files}\
%endif\
%{?devel_doc_files:%doc %devel_doc_files}\
%{nil}
%ghc_files()\
%{?1:%define base_doc_files %*}\
%define basepkg ghc-%{pkg_name}\
%ghc_shared_files\
\
%ghc_devel_files\
%{nil}
# ghc_devel_package [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-m] [name] [version]
# -m : meta-package
%ghc_devel_package(c:h:l:m)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define basepkg ghc-%{pkgname}\
%package -n %{basepkg}-devel\
Summary: %{?common_summary}%{!?common_summary:Haskell %{pkgname} library} development files\
Group: Development/Libraries\
%{?1:Version: %{pkgver}}\
%{-l:License: %{-l*}}\
%{?ghc_devel_requires}\
%{-h:Requires: %{-h*}}\
%{?ghc_pkg_c_deps:Requires: %{ghc_pkg_c_deps}}\
%{-c:Requires: %{-c*}}\
%{?ghc_pkg_obsoletes:Obsoletes: %{ghc_pkg_obsoletes}}\
%{?ghc_pkg_obsoletes:Obsoletes: %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-doc/g")}\
Obsoletes: %{basepkg}-doc < %{pkgver}-%{release}\
Provides: %{basepkg}-doc = %{pkgver}-%{release}\
Obsoletes: %{basepkg}-prof < %{pkgver}-%{release}\
%if %{undefined without_prof}\
Provides: %{basepkg}-prof = %{pkgver}-%{release}\
%endif
# ghc_devel_description
%ghc_devel_description()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%description -n %{basepkg}-devel\
%{?common_description}%{!?common_description:Haskell %{pkgname} library.}\
\
This package contains the development files.
# ghc_devel_post_postun
%ghc_devel_post_postun()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%post -n %{basepkg}-devel\
%ghc_pkg_recache\
\
%postun -n %{basepkg}-devel\
%ghc_pkg_recache
# ghc_package_devel [-c cdepslist] [-h pkgdepslist] [-l licensetag] [name] [version]
%ghc_package_devel(c:h:l:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%ghc_devel_package\
\
%ghc_devel_description\
\
%ghc_devel_post_postun\
\
%ghc_devel_files\
%{nil}
# ghc_strip_dynlinked # ghc_strip_dynlinked
%ghc_strip_dynlinked\ %ghc_strip_dynlinked\
%if %{undefined __debug_package}\ %if %{undefined __debug_package}\
@ -312,5 +162,3 @@ done\
%global ghc_without_shared 1\ %global ghc_without_shared 1\
%global ghc_without_dynamic 1\ %global ghc_without_dynamic 1\
%ghc_test %ghc_test
%ghc_exclude_docdir 1

@ -0,0 +1,120 @@
# RPM Macros for packaging Haskell packages with multiple libs -*-rpm-spec-*-
%ghc_shared_files\
%files -n %{basepkg} -f %{basepkg}.files\
%{?base_doc_files:%doc %base_doc_files}\
%{nil}
# ghc_lib_package [-c cdepslist] [-h pkgdepslist]
%ghc_lib_package(c:h:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%ghc_shared_files\
\
%ghc_package_devel\
%{nil}
# ghc_package [-l licensetag] [name] [version]
%ghc_package(l:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define basepkg ghc-%{pkgname}\
%package -n %{basepkg}\
Summary: %{?common_summary}%{!?common_summary:Haskell %{pkgname} library}\
%{?1:Version: %{pkgver}}\
%{-l:License: %{-l*}}\
%{?ghc_pkg_obsoletes:Obsoletes: %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1/g")}
# ghc_description [name] [version]
%ghc_description()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%description -n %{basepkg}\
%{?common_description}%{!?common_description:Haskell %{pkgname} library.}
# ghc_lib_subpackage [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-x] [name] [version]
%ghc_lib_subpackage(c:h:l:x)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define pkgnamever %{pkgname}-%{pkgver}\
%{!-x:%{?1:%global ghc_packages_list %{?ghc_packages_list} %{pkgnamever}}}\
%define basepkg ghc-%{pkgname}\
%ghc_package\
\
%ghc_description\
\
%ghc_lib_package\
%{nil}
%ghc_pkg_recache %{_bindir}/ghc-pkg recache --no-user-package-conf || :
# (deprecated) for docs post and postun
%ghc_reindex_haddock :
%ghc_devel_files\
%files -n %{basepkg}-devel -f %{basepkg}-devel.files\
%{?devel_doc_files:%doc %devel_doc_files}\
%{nil}
%ghc_files()\
%{?1:%define base_doc_files %*}\
%define basepkg ghc-%{pkg_name}\
%ghc_shared_files\
\
%ghc_devel_files\
%{nil}
# ghc_devel_package [-c cdepslist] [-h pkgdepslist] [-l licensetag] [-m] [name] [version]
# -m : meta-package
%ghc_devel_package(c:h:l:m)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define pkgver %{?2}%{!?2:%{version}}\
%define basepkg ghc-%{pkgname}\
%package -n %{basepkg}-devel\
Summary: %{?common_summary}%{!?common_summary:Haskell %{pkgname} library} development files\
%{?1:Version: %{pkgver}}\
%{-l:License: %{-l*}}\
%{?ghc_devel_requires}\
%{-h:Requires: %{-h*}}\
%{?ghc_pkg_c_deps:Requires: %{ghc_pkg_c_deps}}\
%{-c:Requires: %{-c*}}\
%{?ghc_pkg_obsoletes:Obsoletes: %{ghc_pkg_obsoletes}}\
%{?ghc_pkg_obsoletes:Obsoletes: %(echo "%{ghc_pkg_obsoletes}" | sed -e "s/\\(ghc-[^, ]*\\)-devel/\\1-doc/g")}\
Obsoletes: %{basepkg}-doc < %{pkgver}-%{release}\
Provides: %{basepkg}-doc = %{pkgver}-%{release}\
Obsoletes: %{basepkg}-prof < %{pkgver}-%{release}\
%if %{undefined without_prof}\
Provides: %{basepkg}-prof = %{pkgver}-%{release}\
%endif
# ghc_devel_description
%ghc_devel_description()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%description -n %{basepkg}-devel\
%{?common_description}%{!?common_description:Haskell %{pkgname} library.}\
\
This package contains the development files.
# ghc_devel_post_postun
%ghc_devel_post_postun()\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%post -n %{basepkg}-devel\
%ghc_pkg_recache\
\
%postun -n %{basepkg}-devel\
%ghc_pkg_recache
# ghc_package_devel [-c cdepslist] [-h pkgdepslist] [-l licensetag] [name] [version]
%ghc_package_devel(c:h:l:)\
%define pkgname %{?1}%{!?1:%{pkg_name}}\
%define basepkg ghc-%{pkgname}\
%ghc_devel_package\
\
%ghc_devel_description\
\
%ghc_devel_post_postun\
\
%ghc_devel_files\
%{nil}

@ -1,16 +1,15 @@
%global debug_package %{nil} %global debug_package %{nil}
%global macros_file %{_sysconfdir}/rpm/macros.ghc %global macros_dir %{_sysconfdir}/rpm
# uncomment to bootstrap without hscolour # uncomment to bootstrap without hscolour
#%%global without_hscolour 1 #%%global without_hscolour 1
Name: ghc-rpm-macros Name: ghc-rpm-macros
Version: 0.98.1 Version: 0.99
Release: 4%{?dist} Release: 1%{?dist}
Summary: Macros for building packages for GHC Summary: RPM macros for building packages for GHC
Group: Development/Libraries
License: GPLv3 License: GPLv3
URL: https://fedoraproject.org/wiki/Haskell_SIG URL: https://fedoraproject.org/wiki/Haskell_SIG
@ -24,6 +23,7 @@ Source2: AUTHORS
Source3: ghc-deps.sh Source3: ghc-deps.sh
Source4: cabal-tweak-dep-ver Source4: cabal-tweak-dep-ver
Source5: cabal-tweak-flag Source5: cabal-tweak-flag
Source6: ghc-rpm-macros.ghc-extra
Requires: redhat-rpm-config Requires: redhat-rpm-config
%if %{undefined without_hscolour} %if %{undefined without_hscolour}
BuildRequires: redhat-rpm-config BuildRequires: redhat-rpm-config
@ -37,6 +37,13 @@ of the Fedora Haskell SIG. ghc needs to be installed in order to make use of
these macros. these macros.
%package extra
Summary: Extra RPM macros for building Haskell packages with several libs
Requires: %{name} = %{version}-%{release}
%description extra
%prep %prep
%setup -c -T %setup -c -T
cp %{SOURCE1} %{SOURCE2} . cp %{SOURCE1} %{SOURCE2} .
@ -47,7 +54,8 @@ echo no build stage needed
%install %install
install -p -D -m 0644 %{SOURCE0} ${RPM_BUILD_ROOT}/%{macros_file} install -p -D -m 0644 %{SOURCE0} ${RPM_BUILD_ROOT}/%{macros_dir}/macros.ghc
install -p -D -m 0644 %{SOURCE6} ${RPM_BUILD_ROOT}/%{macros_dir}/macros.ghc-extra
install -p -D -m 0755 %{SOURCE3} %{buildroot}/%{_prefix}/lib/rpm/ghc-deps.sh install -p -D -m 0755 %{SOURCE3} %{buildroot}/%{_prefix}/lib/rpm/ghc-deps.sh
@ -57,7 +65,7 @@ install -p -D -m 0755 %{SOURCE5} %{buildroot}/%{_bindir}/cabal-tweak-flag
# this is why this package is now arch-dependent: # this is why this package is now arch-dependent:
# turn off shared libs and dynamic linking on secondary archs # turn off shared libs and dynamic linking on secondary archs
%ifnarch %{ix86} x86_64 %ifnarch %{ix86} x86_64
cat >> %{buildroot}/%{macros_file} <<EOF cat >> %{buildroot}/%{macros_dir}/macros.ghc <<EOF
# shared libraries are only supported on primary intel archs # shared libraries are only supported on primary intel archs
%%ghc_without_dynamic 1 %%ghc_without_dynamic 1
@ -68,13 +76,27 @@ EOF
%files %files
%doc COPYING AUTHORS %doc COPYING AUTHORS
%{macros_file} %{macros_dir}/macros.ghc
%{_prefix}/lib/rpm/ghc-deps.sh %{_prefix}/lib/rpm/ghc-deps.sh
%{_bindir}/cabal-tweak-dep-ver %{_bindir}/cabal-tweak-dep-ver
%{_bindir}/cabal-tweak-flag %{_bindir}/cabal-tweak-flag
%files extra
%{macros_dir}/macros.ghc-extra
%changelog %changelog
* Tue Apr 23 2013 Jens Petersen <petersen@redhat.com> - 0.99-1
- update for simplified revised Haskell Packaging Guidelines
(https://fedorahosted.org/fpc/ticket/194)
- packaging for without_shared is now done the same way as shared
to make non-shared arch packages same as shared ones:
so all archs will now have base library binary packages
- move spec section metamacros and multiple library packaging macros still
needed for ghc and haskell-platform to new extra subpackage
- drop ghc_add_basepkg_file macro and ghc_exclude_docdir
* Wed Mar 20 2013 Ralf Corsépius <corsepiu@fedoraproject.org> - 0.98.1-4 * Wed Mar 20 2013 Ralf Corsépius <corsepiu@fedoraproject.org> - 0.98.1-4
- Remove %%config from %%{_sysconfdir}/rpm/macros.* - Remove %%config from %%{_sysconfdir}/rpm/macros.*
(https://fedorahosted.org/fpc/ticket/259). (https://fedorahosted.org/fpc/ticket/259).

Loading…
Cancel
Save