rhel6の新しいgccバージョンをいくつかのバージョンでビルドしました(4.7.xから5.3.1以降)。
kojiで見つかった RedhatのJakub Jelinek fedora gccビルドのおかげで、プロセスはかなり簡単です
必要なバージョン(たとえば5.3.1)の最新のsrc rpmを取得するだけです。
基本的にはrpm -qpR src.rpm
、バージョン要件の検索を発行してビルド要件を決定することから始めます。
rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3
退屈な部分が来ます-ディストリビューションのyumで提供されているバージョンよりも高いバージョンのパッケージはすべてkojiからダウンロードする必要があり、依存関係のすべての要件が満たされるまでプロセスを再帰的に繰り返します。
不正行為です。
私は通常、rpmを再パッケージして、gnu機能を使用して正しいビルドツリーを含め、正しく配置され名前が付けられた要件を使用します。そのため、gmp / mpc / mpfr / isl(cloogは不要)がダウンロードされ、正しいパスに送られます。 (肥大化した)tarは、パッケージ化された(rpm)バージョンに依存することなく、新しいsrc rpmに(スペックファイルに小さな変更を加えて)再構築されます。ADAを使用している人はいないので、スペックファイルからgnatに関連する部分を削除するだけで、ビルドプロセスがさらに簡素化され、心配するbinutilsだけが残ります。
Gccは実際には古いbinutilsでビルドできるため、急いでいる場合は、スペックファイルをさらに編集して、システムにすでに存在するbinutilsバージョンを要求します。これにより、gccがわずかに機能しなくなりますが、ほとんどの場合、十分に機能します。
これはほとんど問題なく機能します。
アップデート1
src rpmを開く最も簡単な方法は、おそらくrpmをインストールして〜/ rpmbuildの下にあるすべてにアクセスすることですが、私は好みます
mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-java
sed -i '/gcc-java/ s/^/#/' gcc.spec
また、プレフィックスを設定して、このrpmがディストリビューションrpmを壊すことなく並べてインストールするように選択することもできます(ただし、名前の変更と内部パッケージ名の変更が必要です)。通常は環境モジュールを追加して、必要に応じて(コレクションの動作と同様に)このgccをロードおよびアンロードできるようにします(したがって、新しい依存関係を追加します)。
最後にrpmbuildツリーを作成し、ファイルを配置してビルドする場所に配置します。
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
アップデート2
通常、開発には「サーバー」OSを使用すべきではありません。そのため、最新のgccがすでに付属しているfedoraがあります。特定の要件がありますが、本当のアプリを実行するためのrhel / centos、それらのアプリを開発するためのfedoraなど、タスクに適切なツールの使用を検討する必要があります。