OpenSUSE 13: cmake 3.6をインストールする

Fedora 25のsrc.rpmを利用してcmake 3.6をインストールします。

1 jsoncpp-develをインストールする

Fedora 25のcmake 3.6はjsoncpp-develをBuildRequiresとしています。jsoncpp-develはpackmanリポジトリにあるので、以下のコマンドでpackmanリポジトリを追加します。

> sudo zypper ar -f http://packman.inode.at/suse/openSUSE_13.2/ packman
> sudo zypper -n --gpg-auto-import-keys up

2 cmake 3.6をインストールする

Fedora 25のcmake 3.6のsrc.rpmを利用します。

> F=https://dl.fedoraproject.org/pub/fedora/linux/releases/25
> wget -q ${F}/Everything/source/tree/Packages/c/cmake-3.6.2-6.fc25.src.rpm
> rpm -i cmake-3.6.2-6.fc25.src.rpm
> cd ~/rpmbuild

BuildRequiresのパッケージ名をOpenSUSE 13のものに変更します。

> B="BuildRequires:"
> sed -e "s/^${B}\( *\)qt-devel/${B}\1libqt4-devel/g" \
    -e "s/^${B}\( *\)pkgconfig(Qt5)/${B}\1patterns-openSUSE-devel_qt5/g" \
    -e "s/^${B}\( *\)bzip2-devel/${B}\1libbz2-devel/g" \
    -e "s/^${B}\( *\)expat-devel/${B}\1libexpat-devel/g" \
    -e "s/^${B}\( *\)gcc-gfortran/${B}\1gcc-fortran/g" \
    -e "s/^${B}\( *\)libarchive3-devel/${B}\1libarchive-devel/g" \
    -e "s/^${B}\( *\)python2-devel/${B}\1python-devel/g" \
    -e "s/^${B}\( *\)python%{python3_pkgversion}-devel/${B}\1python3-devel/g" \
    -e "s;^${B}\( *\)/usr/bin/sphinx-build;#${B}\1/usr/bin/sphinx-build;g" \
    -i SPECS/cmake.spec

Fedora固有のRPMマクロ変数の判定を常にtrueになるように変更します。これはこの判定がfalseの場合にpackingエラーとなるのを回避する為です。

> sed -e 's/%if 0%{?fedora} || 0%{?rhel} >= 7/%if 1/g' -i SPECS/cmake.spec

Fedora 25では%_docdirが/usr/share/docであるのに対し、OpenSUSE 13では/usr/share/doc/packageです。この違いによりpackingエラーとなるのを回避する為に、%_docdirを/usr/share/docに変更します。

> sed -e 's;%{_docdir};/usr/share/doc;g' -i SPECS/cmake.spec

OpenSUSE 13には/usr/lib/rpm/macros.d/macros.emacsがないので、定義されているRPMマクロをコマンドに置き換えます。

> sed -e "s;%{_emacs_bytecompile};/usr/bin/emacs -batch --no-init-file \
--no-site-file --eval '(progn (setq load-path (cons \".\" load-path)))' \
-f batch-byte-compile;g" \
    -e 's;%{_emacs_sitelispdir};/usr/share/emacs/site-lisp;g' \
    -e 's;%{_emacs_sitestartdir};/usr/share/emacs/site-lisp/site-start.d;g' \
    -i SPECS/cmake.spec

OpenSUSE 13にはemacs-filesystemがないので、Requresから削除します。

> sed -e 's/Requires: emacs-filesystem\(.*\)/#Requires: emacs-filesystem\1/g' \
    -i SPECS/cmake.spec

BuildRequiresのパッケージをインストールします。jsoncpp-develはここでインストールされます。

> sudo zypper -n in $(grep "^${B}" SPECS/cmake.spec | \
                       sed -e "s/^${B}//g" -e 's/,/ /g')

FedoraやUbuntuには/usr/include/ncurses/form.hと同じファイルが/usr/include/form.hに存在しますが、OpenSUSE 13にはありません。これはOpenSUSE 13の問題かもしれません。/usr/include/ncurses/form.hのシンボリックリンクを/usr/include/form.hに作成します。

> sudo ln -s /usr/include/ncurses/form.h /usr/include/

バージョンが古い為か、python-sphinxはcmake 3.6のhtml出力ができないので–without sphinxをつけてrpmbuildを実行します。30分ほど時間がかかります。

> rpmbuild -ba SPECS/cmake.spec --without sphinx

cmake 3.6をインストールします。

> sudo zypper -n in RPMS/noarch/cmake-*.rpm RPMS/x86_64/cmake-*.rpm

3 cmake 3.6をインストールするスクリプト

以下のスクリプトを実行すればcmake 3.6をインストールできます。

#!/bin/sh


# Need jsoncpp in packman.
sudo zypper ar -f http://packman.inode.at/suse/openSUSE_13.2/ packman
sudo zypper -n --gpg-auto-import-keys up

# Download Fedora 25 src.rpm.
F=https://dl.fedoraproject.org/pub/fedora/linux/releases/25
wget -q ${F}/Everything/source/tree/Packages/c/cmake-3.6.2-6.fc25.src.rpm
rpm -i cmake-3.6.2-6.fc25.src.rpm
cd ~/rpmbuild

# Replace package names from Fedora 25 to OpenSUSE 13.
B="BuildRequires:"
sed -e "s/^${B}\( *\)qt-devel/${B}\1libqt4-devel/g" \
    -e "s/^${B}\( *\)pkgconfig(Qt5)/${B}\1patterns-openSUSE-devel_qt5/g" \
    -e "s/^${B}\( *\)bzip2-devel/${B}\1libbz2-devel/g" \
    -e "s/^${B}\( *\)expat-devel/${B}\1libexpat-devel/g" \
    -e "s/^${B}\( *\)gcc-gfortran/${B}\1gcc-fortran/g" \
    -e "s/^${B}\( *\)libarchive3-devel/${B}\1libarchive-devel/g" \
    -e "s/^${B}\( *\)python2-devel/${B}\1python-devel/g" \
    -e "s/^${B}\( *\)python%{python3_pkgversion}-devel/${B}\1python3-devel/g" \
    -e "s;^${B}\( *\)/usr/bin/sphinx-build;#${B}\1/usr/bin/sphinx-build;g" \
    -i SPECS/cmake.spec

# Packing will be error when '%if 0%{?fedora} || 0%{?rhel} >= 7' is false.
# This is Fedora's problem.
sed -e 's/%if 0%{?fedora} || 0%{?rhel} >= 7/%if 1/g' -i SPECS/cmake.spec

# Fedora 25's %_docdir is /usr/share/doc and OpenSUSE 13's is
# /usr/share/doc/package. This causes packing error.
sed -e 's;%{_docdir};/usr/share/doc;g' -i SPECS/cmake.spec

# OpenSUSE 13 does not have /usr/lib/rpm/macros.d/macros.emacs.
sed -e "s;%{_emacs_bytecompile};/usr/bin/emacs -batch --no-init-file \
--no-site-file --eval '(progn (setq load-path (cons \".\" load-path)))' \
-f batch-byte-compile;g" \
    -e 's;%{_emacs_sitelispdir};/usr/share/emacs/site-lisp;g' \
    -e 's;%{_emacs_sitestartdir};/usr/share/emacs/site-lisp/site-start.d;g' \
    -i SPECS/cmake.spec

# Remove emacs-filesystem from cmake-data's dependencies.
sed -e 's/Requires: emacs-filesystem\(.*\)/#Requires: emacs-filesystem\1/g' \
    -i SPECS/cmake.spec

# Install BuildRequires packages.
sudo zypper -n in $(grep "^${B}" SPECS/cmake.spec | \
                       sed -e "s/^${B}//g" -e 's/,/ /g')

# Fedora and Ubuntu have /usr/include/form.h.
# This might be OpenSUSE 13's issue.
sudo ln -s /usr/include/ncurses/form.h /usr/include/

# Build and install rpm. sphinx-build cannot build html.
# Use rpmbuild with "--without sphinx".
rpmbuild -ba SPECS/cmake.spec --without sphinx

# Install cmake.
sudo zypper -n in RPMS/noarch/cmake-*.rpm RPMS/x86_64/cmake-*.rpm