Pixel <[EMAIL PROTECTED]> wrote,

> I've found the "x86 HC files, for building from source without a previous
> installation of GHC" which seemed promising. Alas i don't know what to do with
> it. I tried untaring it together with the source:
> 
> pixel@no:~/rpm/SPECS>rpm -bp ghc.spec

The .spec file (if it is the "standard" GHC spec file)
builds from Haskell source assuming that ghc is already
installed (see also the build dependency).

The spec file that comes with the ghc tar ball is not
working with the 5.00 release - partly because I was too
slow in fixing it and partly because of two bugs in the
source tar ball itself (configure is missing, ie, autoconf
was not run, and make install does not create the
%{prefix}/bin directory early enough during the install).

I am just building rpms as we speak and have attached the
revised .spec file below (which also evades the two
mentioned bugs).  Note that the spec file as it is builds a
compiler without the interactive system.  Search for
``GhcWithInterpreter=No'' and change it to `YES' to build an
interactive system.  However, note that you *cannot* build
an interactive system with an existing 4.08 compiler.  To do
this you need a compiler that links whatever it compiles
with the new 5.00 runtime system, which is why you have to
compiler 5.00 without interactive from 4.08, and then, use
this non-interactive 5.00 to produce an interactive 5.00
compiler. 

However, all this is still assuming that we build from
Haskell source using an existing GHC.

For building from .hc files, there is a script in the tar
ball at

  ghc-5.00/distrib/hc-build

which automates the process.  More details at

  http://haskell.cs.yale.edu/ghc/docs/4.08.2/building/sec-booting-from-c.html

I just found that this documentation seems to have disappeared
since the 5.00 release.  I think, I am going to resurrect it
as part of the GHC Commentary.

Cheers,
Manuel
# RPM spec file for GHC
#
# Copyright [1998..2000] Manuel M. T. Chakravarty <[EMAIL PROTECTED]>
# Thanks to Zoltan Vorosbaranyi <[EMAIL PROTECTED]> for suggestions in 
# earlier versions and Pixel <[EMAIL PROTECTED]> for coding tips.
#
# This file is subject to the same free software license as GHC.

# Values for 5.00 and 1 are set by the `configure' script.  
# SNAP releases are CVS snapshots.  Official releases should replace SNAP by
# an appropriate release numbers (they are usually numbered starting from 1).

%define version    5.00
%define patchlevel 1
%define release    1
%define prefix     /usr

Summary: Glasgow Haskell Compilation system
Name: ghc
Version: %{version}
Release: %{release}
Copyright: BSD style w/o adv. clause
Group: Development/Languages
Source: http://haskell.org/ghc/dist/%{version}/ghc-%{version}-src.tar.bz2
URL: http://haskell.org/ghc/
BuildRoot: /var/tmp/ghc-%{version}-%{release}-root
Requires: gmp-devel
Provides: haskell
BuildRequires: happy >= 1.9, ghc, stylesheets

%description
Haskell is a standard lazy 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++, whatever).

A wide variety of Haskell related resources (tutorials, libraries,
specifications, documentation, compilers, interpreters, references,
contact information, links to research groups) are available from the
Haskell home page at <http://www.haskell.org/>.

%package prof
Summary: Profiling libraries for GHC
Group: Development/Libraries
Requires: ghc = %{PACKAGE_VERSION}

%description prof
Profiling libraries for Glorious Glasgow Haskell Compilation System (GHC).
They should be installed when GHC's profiling subsystem is needed.

%changelog

* Mon Apr 16 2001 Manuel Chakravarty
- revised for 5.00
- also runs autoconf automagically if no ./configure found

* Thu Jun 22 2000 Sven Panne
- removed explicit usage of hslibs/docs, it belongs to ghc/docs/set

* Sun Apr 23 2000 Manuel Chakravarty
- revised for ghc 4.07; added suggestions from Pixel <[EMAIL PROTECTED]>
- added profiling package

* Tue Dec 7 1999 Manuel Chakravarty
- version for use from CVS

* Thu Sep 16 1999 Manuel Chakravarty
- modified for GHC 4.04, patchlevel 1 (no more 62 tuple stuff); minimises use
  of patch files - instead emits a build.mk on-the-fly

* Sat Jul 31 1999 Manuel Chakravarty
- modified for GHC 4.04

* Wed Jun 30 1999 Manuel Chakravarty
- some more improvements from vbzoli

* Fri Feb 26 1999 Manuel Chakravarty
- modified for GHC 4.02

* Thu Dec 24 1998 Zoltan Vorosbaranyi 
- added BuildRoot
- files located in /usr/local/bin, /usr/local/lib moved to /usr/bin, /usr/lib

* Tue Jul 28 1998 Manuel Chakravarty
- original version

%prep
%setup

# generate our own `build.mk'
#
# * this is a kludge (is it still needed?)
#
cat >mk/build.mk <<END
GhcLibWays = p
SRC_HAPPY_OPTS += -agc
GhcWithInterpreter=No
#GhcWithInterpreter=YES
END

# run autoconf if necessary
#
[ ! -x configure ] && autoconf && cd ghc && autoconf

%build
./configure --prefix=%{prefix} --libdir=%{prefix}/lib/ghc-%{version}
make boot
make -C glafp-utils sgmlverb
make all
make -C docs ps html
make -C ghc/docs ps html

%install
# compress the non-html docs
#
for j in docs ghc/docs; do
  dir=`pwd`
  cd $j
  for i in ps dvi sgml verb idx; do
    find . -name '*.'$i -exec gzip -9 '{}' ';' -print
  done
  cd $dir
done
rm -rf $RPM_BUILD_ROOT

# FIXME: this is necessary due to brokenness in ghc-5.00/mk/target.mk
make prefix=$RPM_BUILD_ROOT%{prefix}\
     libdir=$RPM_BUILD_ROOT%{prefix}/lib/ghc-%{version} install-dirs

make prefix=$RPM_BUILD_ROOT%{prefix}\
     libdir=$RPM_BUILD_ROOT%{prefix}/lib/ghc-%{version} install

# generate the file list for lib/ _excluding_ all files needed for profiling
# only
#
# * generating file lists in a BUILD_ROOT spec is a bit tricky: the file list
#   has to contain complete paths, _but_ without the BUILD_ROOT, we also do
#   _not_ want have directory names in the list; furthermore, we have to make
#   sure that any leading / is removed from %{prefix}/lib, as find has to 
#   interpret the argument as a relative path; however, we have to include the
#   leading / again in the final file list (otherwise, rpm complains)
# * isn't there an easier way to do all this?
#
dir=`pwd`
cd $RPM_BUILD_ROOT
libdir=`echo %{prefix}/lib | sed 's|^/||'`
find $libdir ! -type d ! -name '*.p_hi' ! -name '*_p.a' -print | sed 's|^|/|'\
     >$dir/rpm-noprof-lib-files
cd $dir

%clean
rm -rf $RPM_BUILD_ROOT

%files -f rpm-noprof-lib-files
%doc docs/
%doc ghc/ANNOUNCE ghc/README ghc/docs/
%{prefix}/bin/*

%files prof
%{prefix}/lib/ghc-%{version}/imports/*/*.p_hi
%{prefix}/lib/ghc-%{version}/libHS*_p.a

Reply via email to