Blob Blame History Raw
# -fstack-protector leads to segfaults because GCL uses its own conflicting
# stack protection scheme.
%global __global_cflags %(printf %%s '%__global_cflags' | sed 's/-fstack-protector --param=ssp-buffer-size=4//')

# Prerelease of 2.6.8
%global alphatag 20120109cvs

Name:           gcl
Version:        2.6.8
Release:        0.10.%{alphatag}%{?dist}
Summary:        GNU Common Lisp

Group:          Development/Languages
License:        GPL+ and LGPLv2+
# The source for this package was pulled from upstream's CVS repository.  Use
# the following commands to generate the tarball:
#   cvs export \
#     -r Version_2_6_8pre -D 2012-01-10 -d gcl-2.6.8 gcl
#   tar cvf gcl-2.6.8.tar gcl-2.6.8
#   xz gcl-2.6.8.tar
Source0:        gcl-%{version}.tar.xz
Source1:        gcl.el
# This is some info files that are needed for the DESCRIBE function to do
# something useful.  These files are present in CVS HEAD (i.e., the upcoming
# 2.7.0 release), but are missing in the 2.6 branch.
Source2:        gcl-2.6.8-info.tar.xz
# This patch was last sent upstream on 29 Dec 2008.  It fixes a file descriptor
# leak, as well as combining 4 system calls into only 2 on an exec().
Patch0:         gcl-2.6.8-fd-leak.patch
# This patch was last sent upstream on 29 Dec 2008.  It updates one source file
# from LaTeX 2.09 to LaTeX 2e, thereby eliminating LaTeX warnings about running
# in compatibility mode.
Patch1:         gcl-2.6.8-latex.patch
# This patch was last sent upstream on 29 Dec 2008.  It eliminates a few minor
# texinfo warnings.
Patch2:         gcl-2.6.8-texinfo.patch
# This patch was last sent upstream on 29 Dec 2008.  It fixes a large number of
# compile- and run-time problems with the Emacs interface code.
Patch3:         gcl-2.6.8-elisp.patch
# This patch was last sent upstream on 17 Jan 2009.  It adds support for
# compiling and running on an SELinux-enabled host.
Patch4:         gcl-2.6.8-selinux.patch
# This patch was last sent upstream on 29 Dec 2008.  It uses the rename()
# system call when it is available to avoid spawning a subshell and suffering a
# context switch just to rename a file.
Patch5:         gcl-2.6.8-rename.patch
# This patch was last sent upstream on 29 Dec 2008.  It eliminates a
# compilation problem due to the fact that, at high optimization levels,
# getcwd() is an inline function.
Patch6:         gcl-2.6.8-getcwd.patch
# This patch was last sent upstream on 29 Dec 2008.  It updates the autoconf
# and libtool files to newer versions.  By itself, this patch accomplishes
# little of interest.  However, some of the later patches change
# Without this patch, autoconf appears to run successfully, but generates a
# configure script that contains invalid shell script syntax.
Patch7:         gcl-2.6.8-infrastructure.patch
# This patch was last sent upstream on 29 Dec 2008.  It simplifies the handling
# of alloca() detection in the configure script.
Patch8:         gcl-2.6.8-alloca.patch
# This patch was last sent upstream on 29 Dec 2008.  It rationalizes the
# handling of system extensions.  For example, on glibc-based systems, some
# functionality is available only when _GNU_SOURCE is defined.
Patch9:        gcl-2.6.8-extension.patch
# This patch was last sent upstream on 29 Dec 2008.  It fixes a compilation
# error on newer GCC systems due to an include inside a function.  This affects
# the "unrandomize" sbrk() functionality, hence the name of the patch.
Patch10:        gcl-2.6.8-unrandomize.patch
# This is a Fedora-specific patch.  Do not delete C files produced from D files
# so they can be pulled into the debuginfo package.
Patch11:        gcl-2.6.8-debuginfo.patch
# The need for this patch was last communicated to upstream on 21 May 2009.
# Without this patch, compilation fails due to conflicting type definitions
# between glibc and Linux kernel headers.  This patch prevents the kernel
# headers from being used.
Patch12:        gcl-2.6.8-asm-signal-h.patch
# This patch was last sent upstream on 13 Oct 2009.  It fixes two bugs in the
# reading of PLT information.
Patch13:        gcl-2.6.8-plt.patch
# This patch was last sent upstream on 13 Oct 2009.  It fixes several malformed
# function prototypes involving an ellipsis.
Patch14:        gcl-2.6.8-ellipsis.patch
# This patch was last sent upstream on 30 Dec 2010.  It fixes some malformed
# man page constructions.
Patch15:        gcl-2.6.8-man.patch

BuildRequires:  libSM-devel
BuildRequires:  libXext-devel
BuildRequires:  libXaw-devel
BuildRequires:  readline-devel
BuildRequires:  binutils-devel
BuildRequires:  binutils-static
BuildRequires:  tk-devel
BuildRequires:  tcl-devel
BuildRequires:  gmp-devel
BuildRequires:  tex(latex)
BuildRequires:  texinfo
BuildRequires:  emacs
BuildRequires:  xemacs
BuildRequires:  xemacs-packages-extra
BuildRequires:  selinux-policy
Requires:       gcl-selinux%{?_isa} = %{version}-%{release}
Requires(post): info
Requires(postun): info

# GCL currently fails to build on PPC64 platforms.  See bugzilla #480519.
ExcludeArch: ppc64

GCL is a Common Lisp currently compliant with the ANSI standard.  Lisp
compilation produces native code through the intermediary of the
system's C compiler, from which GCL derives efficient performance and
facile portability. Currently uses TCL/Tk as GUI.

%package emacs
Group:          Development/Languages
Summary:        Emacs mode for interacting with GCL
Requires:       %{name} = %{version}-%{release}
Requires:       emacs(bin) >= %{_emacs_version}
BuildArch:      noarch

%description emacs
Emacs mode for interacting with GCL

%package emacs-el
Group:          Development/Languages
Summary:        Source for Emacs mode for interacting with GCL
Requires:       %{name}-emacs = %{version}-%{release}
BuildArch:      noarch

%description emacs-el
Source Elisp code for Emacs mode for interacting with GCL

%package xemacs
Group:          Development/Languages
Summary:        XEmacs mode for interacting with GCL
Requires:       %{name} = %{version}-%{release}
Requires:       xemacs(bin) >= %{_xemacs_version}, xemacs-packages-extra
BuildArch:      noarch

%description xemacs
XEmacs mode for interacting with GCL

%package xemacs-el
Group:          Development/Languages
Summary:        Source for XEmacs mode for interacting with GCL
Requires:       %{name}-xemacs = %{version}-%{release}
BuildArch:      noarch

%description xemacs-el
Source Elisp code for XEmacs mode for interacting with GCL

%package selinux
Group:          Development/Languages
Summary:        SELinux policy for GCL images
Requires(post): policycoreutils
Requires(postun): policycoreutils

%description selinux
SELinux policy for GCL images.  All programs that dump GCL images to be run on
SELinux-enabled hosts should Require this package, and give the image the type

%setup -q
%setup -q -T -D -a 2
%patch4 -p1

# Don't let the configure script add compiler flags we don't want
sed -i -e 's/"-fomit-frame-pointer"/""/' -e 's/-O3/-O2/g' configure

# Fix a path in the launch script
sed -i -e 's|/usr/lib/tk|%{_datadir}/tk|' debian/

# The archive is so full of spurious executable bits that we just remove them
# all here, then add back the ones that should exist
find . -type f -perm /0111 | xargs chmod a-x
chmod a+x add-defs add-defs1 config.guess config.sub configure
chmod a+x bin/info bin/info1 gcl-tk/ gcl-tk/ngcltksrv mp/gcclab
chmod a+x o/egrep-def utils/replace xbin/*

%configure --enable-readline --enable-ansi --enable-dynsysgmp --enable-xgcl \
  --enable-tclconfig=%{_libdir} --enable-tkconfig=%{_libdir}
# FIXME: %%{?_smp_mflags} breaks the build

# Build, which is needed for DESCRIBE to work properly
make -C info

# dwdoc needs one extra LaTeX run to resolve references
cd xgcl-2
pdflatex dwdoc.tex

# Build the SELinux policy
cd ../selinux
make -f %{_datadir}/selinux/devel/Makefile


# Get rid of the parts that we don't want
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc
rm -rf $RPM_BUILD_ROOT%{_datadir}/emacs
rm -rf $RPM_BUILD_ROOT%{_prefix}/lib/gcl-*/info

# Install the man page
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
cp -pf man/man1/* $RPM_BUILD_ROOT%{_mandir}/man1

# Install the HTML documentation
mkdir -p html
cp -pfr info/gcl-si info/gcl-tk html

# Install and compile the Emacs code
mkdir -p $RPM_BUILD_ROOT%{_emacs_sitelispdir}/gcl
cp -pfr elisp/* $RPM_BUILD_ROOT%{_emacs_sitelispdir}/gcl
rm -f $RPM_BUILD_ROOT%{_emacs_sitelispdir}/gcl/makefile
rm -f $RPM_BUILD_ROOT%{_emacs_sitelispdir}/gcl/readme
mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir}
sed -e "s|%LISP_DIR%|%{_emacs_sitelispdir}|" %{SOURCE1} > $RPM_BUILD_ROOT%{_emacs_sitestartdir}/gcl.el
pushd $RPM_BUILD_ROOT%{_emacs_sitelispdir}/gcl
%{_emacs_bytecompile} *.el

# Install and compile the XEmacs code
mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/gcl
cp -fr elisp/* $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/gcl
rm -f $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/gcl/makefile
rm -f $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/gcl/readme
mkdir -p $RPM_BUILD_ROOT%{_xemacs_sitestartdir}
sed -e "s|%LISP_DIR%|%{_xemacs_sitelispdir}|" %{SOURCE1} > $RPM_BUILD_ROOT%{_xemacs_sitestartdir}/gcl.el
pushd $RPM_BUILD_ROOT%{_xemacs_sitelispdir}/gcl
%{_xemacs_bytecompile} *.el

# Save the policy file away for later installation
mkdir -p $RPM_BUILD_ROOT%{_datadir}/selinux/packages/gcl
cp -p selinux/gcl.pp $RPM_BUILD_ROOT%{_datadir}/selinux/packages/gcl

# The image has garbage strings containing RPM_BUILD_ROOT

rm -f /tmp/gazonk_* /tmp/gcl_*

/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir \
  --entry="* gcl: (gcl).	GNU Common Lisp Manual." \
  2>/dev/null || :
/sbin/install-info %{_infodir}/%{name} %{_infodir}/dir \
  --entry="* gcl-si: (gcl-si).	GNU Common Lisp System Internals." \
  2>/dev/null || :
/sbin/install-info %{_infodir}/%{name} %{_infodir}/dir \
  --entry="* gcl-tk: (gcl-tk).	GNU Common Lisp Tk Manual." \
  2>/dev/null || :
/sbin/fixfiles -R gcl restore || :

%post selinux
/usr/sbin/semodule -i %{_datadir}/selinux/packages/gcl/gcl.pp || :
/sbin/restorecon -R %{_libdir}/maxima

if [ $1 = 0 ]; then
    /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir 2>/dev/null || :
    /sbin/install-info --delete %{_infodir}/%{name} %{_infodir}/dir 2>/dev/null || :
    /sbin/install-info --delete %{_infodir}/%{name} %{_infodir}/dir 2>/dev/null || :

%postun selinux
if [ $1 = 0 ]; then
    /usr/sbin/semodule -r gcl || :

%doc COPYING* readme readme.xgcl RELEASE* ChangeLog* faq doc
%doc gcl*.jpg gcl.ico gcl.png
%doc --parent html

%files emacs
%doc elisp/readme
%dir %{_emacs_sitelispdir}/gcl

%files emacs-el

%files xemacs
%doc elisp/readme
%dir %{_xemacs_sitelispdir}/gcl

%files xemacs-el

%files selinux

* Mon Jan  9 2012 Jerry James <> - 2.6.8-0.10.20120109cvs
- Update to 20120109 snapshot

* Thu Oct 20 2011 Marcela Mašláňová <> - 2.6.8-0.9.20110516cvs.2
- rebuild with new gmp without compat lib

* Tue Oct 11 2011 Peter Schiffer <> - 2.6.8-0.9.20110516cvs.1
- rebuild with new gmp

* Thu Jun 16 2011 Jerry James <> - 2.6.8-0.9.20110516cvs
- Rebuild due to bz 712251
- Use explicitly versioned Requires on gcl-selinux
- Drop defattr

* Wed Jun  1 2011 Jerry James <> - 2.6.8-0.8.20110516cvs
- Update to 20110516 CVS snapshot for more bug fixes
- Fix SELinux policy for maxima (bz 650279)
- Drop upstreamed volatile patch

* Tue Feb 08 2011 Fedora Release Engineering <> - 2.6.8-0.8.20101115cvs
- Rebuilt for

* Thu Dec 30 2010 Jerry James <> - 2.6.8-0.7.20101115cvs
- Update to 20101115 CVS snapshot for more bug fixes
- Drop upstreamed loginname patch
- Add man page patch
- Add license file to -selinux package
- Don't force dynamic BFD so we can use custreloc instead

* Tue Mar 23 2010 Jerry James <> - 2.6.8-0.7.20100201cvs
- Update to 20100201 CVS snapshot for multiple bug fixes including, I hope,
  bz 573534
- Drop upstreamed sigprocmask-linux patch
- Work around binutils-devel/binutils-static brokenness in F-13+.

* Mon Nov 30 2009 Jerry James <> - 2.6.8-0.7.20090701cvs
- Fix scripts to reflect actual installation order (bz 541050)
- Update PLT patch for GNU ld >= 2.19 (bz 542004)
- Use (X)Emacs macros to simplify the spec file

* Tue Oct 20 2009 Jerry James <> - 2.6.8-0.6.20090701cvs
- Update SELinux policy for confined users (bz 529757)

* Tue Sep  6 2009 Jerry James <> - 2.6.8-0.5.20090701cvs
- Update SELinux files to give compiled maxima files the right context
- Drop SELinux compatibility kludge for early F-11 selinux-policy packages

* Tue Aug 11 2009 Jerry James <> - 2.6.8-0.4.20090701cvs
- Update to 20090701 CVS snapshot, fixes bz 511483
- Break fix for <asm/signal.h> out into a separate patch and do it right
- Add -plt patch to fix reading of PLT info
- Add -ellipsis patch to eliminate nondeterministic behavior
- Use xz payloads instead of bz2
- Minor spec file cleanups

* Fri Jul 24 2009 Fedora Release Engineering <> - 2.6.8-0.4.20090303cvs
- Rebuilt for

* Mon Apr 27 2009 Jerry James <> - 2.6.8-0.3.20090303cvs
- Update to 20090303 CVS snapshot
- Drop upstreamed BFD patch
- Make separate -selinux subpackage

* Tue Feb 24 2009 Fedora Release Engineering <> - 2.6.8-0.3.20080902cvs
- Rebuilt for

* Sat Feb 21 2009 Jerry James <> - 2.6.8-0.2.20080902cvs
- Add -fno-strict-aliasing to fix build problems in Rawhide.
- Fix the broken version number scheme I used on the last two releases.

* Mon Jan 26 2009 Jerry James <> - 2.6.8-0.1.20080902cvs.2
- Add missing files required to build, which is needed for the
  DESCRIBE function to work properly.
- Specify the info entries explicitly, else a mangled version is written.

* Sat Jan 17 2009 Jerry James <> - 2.6.8-0.1.20080902cvs.1
- ExcludeArch ppc64 for now until I can figure out why it doesn't build

* Fri Jan  9 2009 Jerry James <> - 2.6.8-0.1.20080902cvs
- Update from CVS to fix many build problems
- Fix SELinux and BFD problems that blocked the build
- Add patches to address various build and runtime problems
- Drop old patches that are obsoleted by the update from CVS
- Split out emacs and xemacs subpackages

* Mon Jul 21 2008 Tom "spot" Callaway <> - 2.6.7-19
- fix license tag

* Mon Feb 18 2008 Fedora Release Engineering <> - 2.6.7-18
- Autorebuild for GCC 4.3

* Mon Jan 14 2008 Gerard Milmeister <> - 2.6.7-17
- exclude arch x86_64 for now

* Thu Jan 03 2008 Alex Lancaster <alexlan at> - 2.6.7-16
- Rebuild for new Tcl (8.5)

* Tue Aug 14 2007 Gerard Milmeister <> - 2.6.7-15
- Fix post-install script path on x64_64

* Wed Dec 27 2006 Gerard Milmeister <> - 2.6.7-14
- added req ncurses-devel

* Thu Dec 21 2006 Gerard Milmeister <> - 2.6.7-13
- Fix for compiling with readline library

* Mon Aug 28 2006 Gerard Milmeister <> - 2.6.7-12
- Rebuild for FE6

* Sat May  6 2006 Gerard Milmeister <> - 2.6.7-11
- fixed summary text (CLtL1 -> ANSI)
- configure: readine -> readline

* Fri Apr 14 2006 Gerard Milmeister <> - 2.6.7-10
- added changes to SELinux policy

* Wed Mar  8 2006 Gerard Milmeister <> - 2.6.7-7
- Patch gcl-bash.patch for configure

* Sat Feb 18 2006 Gerard Milmeister <> - 2.6.7-6
- Rebuild for Fedora Extras 5

* Fri Sep  9 2005 Gerard Milmeister <> - 2.6.7-1
- New Version 2.6.7

* Sun Apr 17 2005 Gerard Milmeister <> - 2.6.6-2
- Added buildreq tetex and texinfo

* Wed Apr  6 2005 Gerard Milmeister <> - 2.6.6-1
- New Version 2.6.6

* Fri Feb 18 2005 Gerard Milmeister <> - 0:2.6.5-1
- First Fedora release