Blob Blame History Raw
# Add --with pcc option to build with pcc (for sanity testing the compiler)
%bcond_with pcc

# Use our own configure in order to prevent --target, which makes autotools believe we are cross compiling
%global pccconfigure \
 export CFLAGS="${FLAGS}"; \
 export CXXFLAGS="${FLAGS}"; \
 export FFLAGS="${FLAGS} -I%{_fmoddir}"; \
 ./configure --program-prefix= --prefix=%{_prefix} --exec-prefix=%{_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --infodir=%{_infodir}

# Used CVS snapshot
%global snapshot 20200203

# RPM does not play well with pcc compiled package
%if %{with pcc}
%define debug_package %{nil}
%endif

# Release tag
%define rel 1.1.%{snapshot}cvs

Name:           pcc
Version:        1.1.0

%if %{with pcc}
Release:        %{rel}_pcc%{?dist}.9
%else
Release:        %{rel}%{?dist}.9
%endif

Summary:        The Portable C Compiler
License:        BSD with advertising and BSD and ISC 
URL:            http://pcc.ludd.ltu.se/
Source0:        http://pcc.ludd.ltu.se/ftp/pub/pcc/pcc-%{snapshot}.tgz
Source1:        http://pcc.ludd.ltu.se/ftp/pub/pcc-libs/pcc-libs-%{snapshot}.tgz
# Patch to disable the use of -g in pcc-libs/csu/linux/ which is partly assembler code.
# Also, inlineing is disabled because it will break the code.
# Also, remove default -O flag from the code.
Patch0:         pcc-20141210-flags.patch

# Currently only x86 and x86_64 supported both in ppc and ppc-libs
ExclusiveArch:  %{ix86} x86_64
BuildRequires: make
BuildRequires:  bison
BuildRequires:  flex
Requires:       glibc-devel

%if %{with pcc}
BuildRequires:  pcc
%else
BuildRequires:  gcc
%endif

%description
The compiler is based on the original Portable C Compiler by Stephen
C. Johnson, written in the late 70's. Even though much of the
compiler has been rewritten, some of the basics still remain.

PCC debuted in Unix Version 7 and replaced the DMR compiler (Dennis
Ritchie's original C compiler) in both System V and the BSD 4.x
releases. Some history about pcc is in the A History of UNIX before
Berkeley: UNIX Evolution: 1975-1984 and in the Evolution of C.

About 50% of the front-end code and 80% of the back-end code has been
rewritten.  Most stuff is written by Anders Magnusson, with the
exception of the data-flow analysis part and the SSA conversion code
which is written by Peter A. Jonsson, and the Mips port that were
written as part of a project by undergraduate students at LuleƄ
University of Technology (LTU).

%prep
%setup -q -n pcc-%{snapshot} -a1
# Rename the libs directory
mv pcc-libs-%{snapshot} pcc-libs

# Apply patches
%patch0 -p1 -b .flags

%build
# Set architecture directory needed for include flag
%ifarch x86_64
export archdir=amd64
%endif
%ifarch %{ix86}
export archdir=i386
%endif

# Use pcc to build?
%if %{with pcc}
export FLAGS="-g -O"
export CC="pcc"
export CPP="pcc -E"
%else
export FLAGS="%{optflags}"
export CC="gcc"
export CPP="gcc -E"
%endif

# Flags for files that can't be built as debug
export CFLAGS_NODEBUG=`echo ${FLAGS} -fno-inline|sed "s| -g | |g"`

# First, build the library.
cd pcc-libs
%pccconfigure
make CFLAGS="-I${archdir} -Ilinux -I. ${FLAGS}" CFLAGS_NODEBUG="-I${archdir} -Ilinux -I. $CFLAGS_NODEBUG" 
#%{?_smp_mflags}
cd ..
# Then, build the compiler
%pccconfigure --with-assembler=%{_bindir}/as --with-linker=%{_bindir}/ld \
 --with-libdir=%{_libdir} --with-incdir=%{_includedir} --enable-tls \
 --disable-stripping
make 
#%{?_smp_mflags}


%install
rm -rf %{buildroot}
# Install the libraries
make -C pcc-libs install DESTDIR=%{buildroot}
# Install the compiler
make install DESTDIR=%{buildroot}
# Fix man file perms
chmod 644 %{buildroot}%{_mandir}/man1/*
# Rename cpp man page
mv  %{buildroot}%{_mandir}/man1/{,pcc-}cpp.1
# Directory for pcc-specific include files
mkdir -p %{buildroot}%{_includedir}/pcc

# Replace identical copied binary with hardlink
cd %{buildroot}%{_bindir}
if diff pcc pcpp > /dev/null; then
   ln -f pcc pcpp
fi

%files
%{_bindir}/pcc
%{_bindir}/p++
%{_bindir}/pcpp
%{_libdir}/pcc/
%{_includedir}/pcc/
%{_libexecdir}/cpp
%{_libexecdir}/cxxcom
%{_libexecdir}/ccom
%{_mandir}/man1/ccom.1.*
%{_mandir}/man1/pcc-cpp.1.*
%{_mandir}/man1/pcc.1.*
%{_mandir}/man1/p++.1.*
%{_mandir}/man1/pcpp.1.*

%changelog
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild

* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild

* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild

* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild

* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild

* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild

* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild

* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20200203cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild

* Tue Feb 04 2020 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20200203cvs
- Update to 20200203 snapshot.

* Sun Feb 02 2020 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20200201cvs
- Update to 20200201 snapshot.

* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20180504cvs.4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20180504cvs.3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20180504cvs.2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20180504cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

* Fri May 04 2018 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20180504cvs
- Update to 20180504 snapshot, fixing BZ #1551537.

* Wed Feb 28 2018 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20180228cvs
- Update to 20180228 snapshot.
- Added gcc buildrequires.

* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20161201cvs.4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20161201cvs.3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20161201cvs.2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20161201cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild

* Thu Dec 01 2016 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20161201cvs
- Update to 20161201 snapshot.

* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-1.1.20160115cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild

* Fri Jan 15 2016 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20160115cvs
- Update to 20160115 snapshot.

* Thu Dec 31 2015 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.1.20151231cvs
- Update to 20151231 snapshot.

* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.0-1.0.20141210cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild

* Wed Dec 10 2014 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-1.0.20141210cvs
- Update to 20141210, the PCC 1.1.0 release.

* Sun Aug 17 2014 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-0.1.20140817cvs
- Update to 20140817.

* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.0-0.2.20140420cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Fri Jun 06 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.0-0.1.20140420cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

* Sun Apr 20 2014 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.1.0-0.1.20140420cvs
- Disable inlining in low level functions where it should not be done.
- Update to newest CVS release.

* Mon Aug 19 2013 Susi Lehtola <jussilehtola@fedoraproject.org> - 1.0.0-3.20111216cvs
- Fix FTBFS on rawhide.

* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.0-2.20111216cvs.2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild

* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.0-2.20111216cvs.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild

* Fri Jul 20 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.0-2.20111216cvs
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.0-2.20111216cvs
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild

* Fri Dec 16 2011 Jussi Lehtola <jussilehtola@fedoraproject.org> - 1.0-2.20111216cvs
- Use cvs checkout once again, fixing BZ #708305.

* Fri Apr 01 2011 Jussi Lehtola <jussilehtola@fedoraproject.org> - 1.0-1
- Switch to using stable releases.
- Update to 1.0.

* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.9-0.4.20110203cvs
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild

* Thu Feb 03 2011 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.4.20110203cvs
- Update to 20110203.

* Fri Nov 19 2010 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.4.101119cvs
- Update to 20101119. x86_64 works now.
- Added possibility in the spec file to build pcc with itself.

* Wed Apr 14 2010 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.4.100413cvs
- Update to 20100413.

* Sun Aug 16 2009 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.4.090816cvs
- Update to 20090816, adding support for x86_64.
- Use own configure macro to disable cross compilation.

* Thu Aug 13 2009 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.3.090813cvs
- Removed unneeded BR: byacc.
- Update to 20090813.

* Tue Aug 11 2009 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.2.090811cvs
- Spec file cleanups.
- Update to 20090811.

* Sun Aug 09 2009 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.2.090809cvs
- Changed --with-libdir to %%{_libdir} to make pcc use the glibc version of
  crt0.o by suggestion of upstream.
- Update to 20090809.

* Sat Aug 08 2009 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.9.9-0.1.090808cvs
- First release.