diff --git a/cabal-bin-template.spec.in b/cabal-bin-template.spec.in new file mode 100644 index 0000000..acb26b0 --- /dev/null +++ b/cabal-bin-template.spec.in @@ -0,0 +1,48 @@ +# ghc does not emit debug information +%define debug_package %{nil} + +Name: @PACKAGE@ +Version: @VERSION@ +Release: 1%{?dist} +Summary: *FIXME* + +Group: *FIXME* +License: BSD? +URL: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/%{name} +Source0: http://hackage.haskell.org/packages/archive/%{name}/%{version}/%{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +ExclusiveArch: i386 x86_64 ppc + +BuildRequires: ghc + +%description +*FIXME* + + +%prep +%setup -q + + +%build +%cabal_configure +%cabal_build + + +%install +rm -rf $RPM_BUILD_ROOT +%cabal_install + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,root,root,-) +%doc LICENSE +%{_bindir}/%{name} + + +%changelog +* @DATE@ @PACKAGER@ <@EMAIL@> - @VERSION@-1 +- initial packaging for Fedora created by cabal2spec diff --git a/cabal-binlib-template.spec.in b/cabal-binlib-template.spec.in new file mode 100644 index 0000000..d35d42c --- /dev/null +++ b/cabal-binlib-template.spec.in @@ -0,0 +1,122 @@ +%define ghc_version @GHC_VERSION@ + +%define pkg_libdir %{_libdir}/ghc-%{ghc_version}/%{name}-%{version} +%define pkg_docdir %{_docdir}/ghc/libraries/%{name} + +%define build_prof 1 +%define build_doc 1 + +# ghc does not emit debug information +%define debug_package %{nil} + +Name: @PACKAGE@ +Version: @VERSION@ +Release: 1%{?dist} +Summary: *FIXME* + +Group: *FIXME* +License: BSD? +URL: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/%{name} +Source0: http://hackage.haskell.org/packages/archive/%{name}/%{version}/%{name}-%{version}.tar.gz +Provides: %{name}-devel = %{version}-%{release} +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# ghc has only been bootstrapped on the following archs: +ExclusiveArch: i386 x86_64 ppc +BuildRequires: ghc = %{ghc_version} +%if %{build_prof} +BuildRequires: ghc-prof = %{ghc_version} +%endif + +%description +*FIXME* + + +%package -n ghc-%{name} +Summary: Haskell %{name} library *FIXME* +Group: Development/Libraries +Provides: ghc-%{name}-devel = %{version}-%{release} +Requires: ghc = %{ghc_version} +Requires(post): ghc = %{ghc_version} +Requires(preun): ghc = %{ghc_version} +Requires(postun): ghc = %{ghc_version} + +%description -n ghc-%{name} +Haskell %{name} library for ghc-%{ghc_version}. *FIXME* + + +%if %{build_prof} +%package prof +Summary: Profiling libraries for ghc-%{name} +Group: Development/Libraries +Requires: ghc-prof = %{ghc_version} + +%description prof +This package contains profiling libraries for ghc %{ghc_version}. +%endif + + +%prep +%setup -q -n %{name}-%{version} + + +%build +%cabal_configure --ghc \ +%if %{build_prof} + -p +%else +%{nil} +%endif +%cabal_build +%if %{build_doc} +%cabal_haddock +%endif +%ghc_gen_scripts + + +%install +rm -rf $RPM_BUILD_ROOT +%cabal_install +%ghc_install_scripts +%ghc_gen_filelists %{name} + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%post +%ghc_postinst_script +%if %{build_doc} +%ghc_reindex_haddock +%endif + + +%preun +%ghc_preun_script + + +%postun +if [ "$1" -eq 0 ] ; then +%if %{build_doc} + %ghc_reindex_haddock +%endif +fi + + +%files -f %{name}.files +%defattr(-,root,root,-) +%doc LICENSE +%if %{build_doc} +%{pkg_docdir} +%endif + + +%if %{build_prof} +%files prof -f %{name}-prof.files +%defattr(-,root,root,-) +%endif + + +%changelog +* @DATE@ @PACKAGER@ <@EMAIL@> - @VERSION@-1 +- initial packaging for Fedora created by cabal2spec diff --git a/cabal-lib-template.spec b/cabal-lib-template.spec.in similarity index 66% rename from cabal-lib-template.spec rename to cabal-lib-template.spec.in index fca146d..4d4f58e 100644 --- a/cabal-lib-template.spec +++ b/cabal-lib-template.spec.in @@ -10,25 +10,25 @@ # ghc does not emit debug information %define debug_package %{nil} -Name: ghc-%{pkg_name} -Version: @VERSION@ -Release: 1%{?dist} -Summary: Haskell %{pkg_name} library *FIXME* - -Group: Development/Libraries -License: BSD -URL: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/%{pkg_name} -Source0: http://hackage.haskell.org/packages/archive/%{pkg_name}/%{version}/%{pkg_name}-%{version}.tar.gz -Provides: %{name}-devel = %{version}-%{release} -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Name: ghc-%{pkg_name} +Version: @VERSION@ +Release: 1%{?dist} +Summary: Haskell %{pkg_name} library *FIXME* + +Group: Development/Libraries +License: BSD? +URL: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/%{pkg_name} +Source0: http://hackage.haskell.org/packages/archive/%{pkg_name}/%{version}/%{pkg_name}-%{version}.tar.gz +Provides: %{name}-devel = %{version}-%{release} +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # ghc has only been bootstrapped on the following archs: -ExclusiveArch: i386 x86_64 ppc -BuildRequires: ghc = %{ghc_version} +ExclusiveArch: i386 x86_64 ppc +BuildRequires: ghc = %{ghc_version} %if %{build_prof} -BuildRequires: ghc-prof = %{ghc_version} +BuildRequires: ghc-prof = %{ghc_version} %endif -Requires: ghc = %{ghc_version} -Requires(post): ghc = %{ghc_version} +Requires: ghc = %{ghc_version} +Requires(post): ghc = %{ghc_version} Requires(preun): ghc = %{ghc_version} Requires(postun): ghc = %{ghc_version} @@ -106,10 +106,9 @@ fi %if %{build_prof} %files prof -f %{name}-prof.files %defattr(-,root,root,-) -%doc LICENSE %endif %changelog * @DATE@ @PACKAGER@ <@EMAIL@> - @VERSION@-1 -- initial packaging for Fedora +- initial packaging for Fedora created by cabal2spec diff --git a/cabal2spec b/cabal2spec index dd6b542..d16978b 100755 --- a/cabal2spec +++ b/cabal2spec @@ -1,23 +1,43 @@ #!/bin/sh -[ $# -ne 1 ] && echo "Usage: $0 lib-ver[.tar.gz]" && exit 1 +set -e -INPUT=$1 +[ $# -ne 1 -o ! -r $1 ] && echo "Usage: $0 hackage-version.tar.gz" && exit 1 -case $INPUT in - */*) INPUT=$(basename $INPUT) ;; -esac +HACKAGE=$1 -INPUT=$(echo $INPUT | sed -e "s/.tar.gz//") - -VERSION=$(echo $INPUT | sed -e "s/[A-Za-z-]*-//") +INPUT=$(basename $HACKAGE .tar.gz) +VERSION=$(echo $INPUT | sed -e "s/.*-//") NAME=$(echo $INPUT | sed -e "s/-$VERSION//") -[ -r ghc-$NAME.spec ] && echo "ghc-$NAME.spec already exists!" && exit 1 +TMPDIR=$(mktemp -d) +CURRENT_DIR=$PWD +cd $TMPDIR +tar zxf $HACKAGE "*.cabal" + +if grep -qi exposed-modules: */*.cabal; then + HAS_LIB=yes +fi + +if grep -qi executable */*.cabal; then + HAS_BIN=yes +fi +cd - +rm -rf $TMPDIR + +if [ "$HAS_LIB" -a ! "$HAS_BIN" ]; then + PREFIX=ghc- +fi + +SPECFILE=$PREFIX$NAME.spec + +[ -r $SPECFILE ] && echo "$SPECFILE already exists!" && exit 1 + +cp /usr/share/ghc/cabal-${HAS_BIN:+bin}${HAS_LIB:+lib}-template.spec.in $SPECFILE -cp /usr/share/ghc/cabal-lib-template.spec ghc-$NAME.spec +echo "created $SPECFILE (${HAS_BIN:+bin}${HAS_LIB:+lib})" -echo "created ghc-$NAME.spec" +DATE=$(env LANG=C date +"%a %b %e %Y") -sed -i -e "s/@PACKAGE@/$NAME/" -e "s/@GHC_VERSION@/$(ghc --numeric-version)/" -e "s/@VERSION@/$VERSION/" -e "s/@DATE@/`date +\"%a %b %e %Y\"`/" ghc-$NAME.spec +sed -i -e "s/@PACKAGE@/$NAME/" -e "s/@GHC_VERSION@/$(ghc --numeric-version)/" -e "s/@VERSION@/$VERSION/" -e "s/@DATE@/$DATE/" $SPECFILE diff --git a/ghc.spec b/ghc.spec index 34a1edc..84a489c 100644 --- a/ghc.spec +++ b/ghc.spec @@ -25,8 +25,10 @@ Group: Development/Languages Source0: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}-src.tar.bz2 Source1: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}-src-extralibs.tar.bz2 Source2: ghc-rpm-macros.ghc -Source3: cabal-lib-template.spec -Source4: cabal2spec +Source3: cabal2spec +Source4: cabal-bin-template.spec.in +Source5: cabal-lib-template.spec.in +Source6: cabal-binlib-template.spec.in URL: http://haskell.org/ghc/ Requires: gcc, gmp-devel, libedit-devel Requires(post): policycoreutils @@ -130,11 +132,11 @@ mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/rpm cp -p %{SOURCE2} ${RPM_BUILD_ROOT}/%{_sysconfdir}/rpm/macros.ghc # spec templating -# cabal-lib-template.spec -mkdir -p ${RPM_BUILD_ROOT}/%{_datadir}/ghc -cp -p %{SOURCE3} ${RPM_BUILD_ROOT}/%{_datadir}/ghc/ # cabal2spec -install -m 0755 -p %{SOURCE4} ${RPM_BUILD_ROOT}/%{_bindir} +install -m 0755 -p %{SOURCE3} ${RPM_BUILD_ROOT}/%{_bindir} +# templates for bin, lib and binlib cabal hackages +mkdir -p ${RPM_BUILD_ROOT}/%{_datadir}/ghc +cp -p %{SOURCE4} %{SOURCE5} %{SOURCE6} ${RPM_BUILD_ROOT}/%{_datadir}/ghc/ SRC_TOP=$PWD rm -f rpm-*-filelist rpm-*.files @@ -228,7 +230,7 @@ fi %changelog * Tue Nov 25 2008 Jens Petersen - 6.10.1-5 -- add cabal2spec and cabal-lib-template.spec for easy Cabal library packaging +- add cabal2spec and template files for easy cabal hackage packaging - simplify script macros: make ghc_preinst_script and ghc_postun_script no-ops and ghc_preun_script only unregister for uninstall