Chris Johns b8b0f4452f config: Use ${build_top} to change dir to parent.
On NetBSD with ksh changing into a symlink made PWD the link's
target path so a 'cd ..' returned you to that parent and not
the parent you started from. Record the build top and then
change back to that path.

Change the package names to the actual packages and remove the
extra directory in the build tree. This makes the paths simpler.
2013-09-10 16:19:20 +10:00

214 lines
6.4 KiB
INI

#
# GCC Common Support.
#
# This configuration file configure's, make's and install's gcc. It uses
# newlib, MPFR, MPC, and GMP in a one-tree build configuration.
#
%include %{_configdir}/checks.cfg
%ifn %{defined gcc_version_message}
%error No GCC Version message defined.
%endif
#
# The package description.
#
Name: %{_target}-gcc-%{gcc_version}-newlib-%{newlib_version}-%{release}
Summary: GCC v%{gcc_version} and Newlib v%{newlib_version} for target %{_target} on host %{_host}
Version: %{gcc_version}
Release: %{release}
URL: http://gcc.gnu.org/
BuildRoot: %{_tmppath}/%{name}-root-%(%{__id_u} -n)
#
# Supports Candian Cross (Cxc).
#
%define allow_cxc
#
# The GCC library directory
#
%global _gcclibdir %{_prefix}/lib
#
# Prepare the source code.
#
%prep
# save the build top directory and cd back to it rather than
# using 'cd ..' because some shells change $PWD to a symlink's
# target location and 'cd ..' fails.
build_top=$(pwd)
# gcc and optional the g++ core if separate packages
source_dir_0="gcc-%{gcc_version}"
%setup -q -n gcc-%{gcc_version}
%{?source1:%setup -q -D -T -n gcc-%{gcc_version} -b1}
%{?patch0:%patch0 %{?patch0_opts:%{patch0_opts}}%{!?patch0_opts:-p1}}
%{?patch1:%patch1 %{?patch1_opts:%{patch1_opts}}%{!?patch1_opts:-p1}}
%{?patch2:%patch2 %{?patch2_opts:%{patch2_opts}}%{!?patch2_opts:-p1}}
%{?patch3:%patch3 %{?patch3_opts:%{patch3_opts}}%{!?patch3_opts:-p1}}
%{?patch4:%patch4 %{?patch4_opts:%{patch4_opts}}%{!?patch4_opts:-p1}}
%{?patch5:%patch5 %{?patch5_opts:%{patch5_opts}}%{!?patch5_opts:-p1}}
%{?patch6:%patch6 %{?patch6_opts:%{patch6_opts}}%{!?patch6_opts:-p1}}
%{?patch7:%patch7 %{?patch7_opts:%{patch7_opts}}%{!?patch7_opts:-p1}}
%{?patch8:%patch8 %{?patch8_opts:%{patch8_opts}}%{!?patch8_opts:-p1}}
%{?patch9:%patch9 %{?patch9_opts:%{patch9_opts}}%{!?patch9_opts:-p1}}
cd ${build_top}
# newlib
source_dir_10="newlib-%{newlib_version}"
%setup -q -D -T -n newlib-%{newlib_version} -b10
%{?patch10:%patch10 %{?patch10_opts:%{patch10_opts}}%{!?patch10_opts:-p1}}
%{?patch11:%patch11 %{?patch11_opts:%{patch11_opts}}%{!?patch11_opts:-p1}}
%{?patch12:%patch12 %{?patch12_opts:%{patch12_opts}}%{!?patch12_opts:-p1}}
%{?patch13:%patch13 %{?patch13_opts:%{patch13_opts}}%{!?patch13_opts:-p1}}
%{?patch14:%patch14 %{?patch14_opts:%{patch14_opts}}%{!?patch14_opts:-p1}}
%{?patch15:%patch15 %{?patch15_opts:%{patch15_opts}}%{!?patch15_opts:-p1}}
%{?patch16:%patch16 %{?patch16_opts:%{patch16_opts}}%{!?patch16_opts:-p1}}
%{?patch17:%patch17 %{?patch17_opts:%{patch17_opts}}%{!?patch17_opts:-p1}}
%{?patch18:%patch18 %{?patch18_opts:%{patch18_opts}}%{!?patch18_opts:-p1}}
%{?patch19:%patch19 %{?patch19_opts:%{patch19_opts}}%{!?patch19_opts:-p1}}
cd ${build_top}
# Link newlib into the gcc source tree
%{__rmfile} ${source_dir_0}/newlib
%{__ln_s} $PWD/${source_dir_10}/newlib ${source_dir_0}/newlib
# MPFR
source_dir_20="mpfr-%{mpfr_version}"
%setup -q -D -T -n mpfr-%{mpfr_version} -b20
%{?patch20:%patch20 -p1}
cd ${build_top}
# Build MPFR one-tree style
%{__rmfile} ${source_dir_0}/mpfr
%{__ln_s} $PWD/${source_dir_20} ${source_dir_0}/mpfr
# MPC
source_dir_21="mpc-%{mpc_version}"
%setup -q -D -T -n mpc-%{mpc_version} -b21
%{?patch21:%patch21 -p1}
cd ${build_top}
# Build MPC one-tree style
%{__rmfile} ${source_dir_0}/mpc
%{__ln_s} $PWD/${source_dir_21} ${source_dir_0}/mpc
# GMP
source_dir_22="gmp-%{gmp_version}"
%setup -q -D -T -n gmp-%{gmp_version} -b22
%{?patch22:%patch22 -p1}
cd ${build_top}
# Build GMP one-tree style
%{__rmfile} ${source_dir_0}/gmp
%{__ln_s} $PWD/${source_dir_22} ${source_dir_0}/gmp
echo "%{gcc_version_message}" > ${source_dir_0}/gcc/DEV-PHASE
# Fix timestamps
cd ${source_dir_0}
contrib/gcc_update --touch
cd ${build_top}
%build
build_top=$(pwd)
%{build_directory}
mkdir -p ${build_dir}
cd ${build_dir}
# Languages.
languages="c"
%if %{enable_cxx}
languages="$languages,c++"
%endif
%if %{enable_ada}
languages="$languages,ada"
%endif
%if %{enable_go}
languages="$languages,go"
%endif
%if %{enable_fortran}
languages="$languages,fortran"
%endif
%if %{enable_java}
languages="$languages,java"
%endif
%if %{enable_objc}
languages="$languages,objc"
%endif
%{host_build_flags}
../${source_dir_0}/configure \
--prefix=%{_prefix} \
--bindir=%{_bindir} \
--exec_prefix=%{_exec_prefix} \
--includedir=%{_includedir} \
--libdir=%{_gcclibdir} \
--libexecdir=%{_libexecdir} \
--mandir=%{_mandir} \
--infodir=%{_infodir} \
--datadir=%{_datadir} \
--build=%{_build} --host=%{_host} \
--target=%{_target} \
--disable-libstdcxx-pch \
--with-gnu-as --with-gnu-ld --verbose \
--with-newlib \
--with-system-zlib \
--disable-nls --without-included-gettext \
--disable-win32-registry \
--enable-version-specific-runtime-libs \
--disable-lto \
--enable-newlib-io-c99-formats \
%{?with_iconv:--enable-newlib-iconv} \
%{?with_iconv:--enable-newlib-iconv-encodings=%{_newlib_iconv_encodings}} \
%{?with_threads:--enable-threads}%{!?with_threads:--disable-threads} \
%{?with_plugin:--enable-plugin}%{!?with_plugin:--disable-plugin} \
%{?enable_obsolete:--enable-obsolete} \
%{?gcc_configure_extra_options:%{gcc_configure_extra_options}} \
--enable-languages="$languages"
if test "%_host" != "%_build" ; then
# Bug in gcc-3.2.1:
# Somehow, gcc doesn't get syslimits.h right for Cdn-Xs
mkdir -p gcc/include
cp ../${source_dir_0}/gcc/gsyslimits.h gcc/include/syslimits.h
fi
%{__make} %{?_smp_mflags} all
cd ${build_top}
%install
build_top=$(pwd)
%{__rmdir} $SB_BUILD_ROOT
cd ${build_dir}
%{__make} DESTDIR=$SB_BUILD_ROOT install
cd ${build_top}
# libiberty doesn't honor --libdir, but always installs to a
# magically guessed _libdir
%{__rmfile} ${SB_BUILD_ROOT}%{_libdir}/libiberty.a
# We use the version from binutils
%{__rmfile} $SB_BUILD_ROOT%{_bindir}/%{_target}-c++filt%{_exeext}
# We don't ship info/dir
%{__rmfile} $SB_BUILD_ROOT%{_infodir}/dir
# Don't want libffi's man-pages
%{__rmfile} $SB_BUILD_ROOT%{_mandir}/man3/*ffi*
# Clean the symlinks away incase the source is a repo
%{__rmfile} ${source_dir_0}/newlib
%{__rmfile} ${source_dir_0}/mpfr
%{__rmfile} ${source_dir_0}/mpc
%{__rmfile} ${source_dir_0}/gmp
%testing
# Add testing here.
export RUNTESTFLAGS=--target_board=%{_target}-run