mattintosh note

どこかのエンジニアモドキの備忘録

Mac で p7zip のセルフビルド

MacPorts 版を使ってるけどセルフビルドを試してみたかったので。

MacPorts のポートファイルを見てみたら makefile.machine を変更することでカスタマイズできそう。makefile.macosx_64bitsmakefile.machine にコピーして OPTFLAGS=-OOPTFLAGS=-O3 -mtune=native にすることにする。

OPTFLAGS=-O

# don't use -DNDEBUG in order to use MacOSX wxWidgets

ALLFLAGS=-m64 ${OPTFLAGS}  \
	-DENV_MACOSX \
    	-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
	-D_REENTRANT -DENV_UNIX \
	$(LOCAL_FLAGS)

CXX=c++ $(ALLFLAGS)
CC=cc $(ALLFLAGS)
LINK_SHARED=-bundle

LOCAL_LIBS=-framework CoreFoundation
LOCAL_LIBS_DLL=$(LOCAL_LIBS)

OBJ_CRC32=$(OBJ_CRC32_C)

ソースのダウンロードからインストールまでの作業をスクリプトにしておく。/tmp 内のファイルは再起動すれば勝手に消えるのでソースは放置。Automator でインストーラーにしておいた方が楽かな。

#!/bin/bash

distname="p7zip_9.20.1"
distfile="${distname}_src_all.tar.bz2"

cd /tmp
rm -rf $distname $distfile
curl -LO "http://downloads.sourceforge.net/project/p7zip/p7zip/9.20.1/$distfile"
tar jxf $distfile
cd $distname
sed "2s|.*|OPTFLAGS=-O3 -mtune=native|" makefile.macosx_64bits > makefile.machine
make -j4 all3
make install

uninstall ターゲットが無いようなのでアンインストールは手動?インストールログからアンインストール用に削除対象ファイルを書き出しておく。

rm -rf  /usr/local/bin/7z \
        /usr/local/bin/7za \
        /usr/local/bin/7zr \
        /usr/local/lib/p7zip \
        /usr/local/man/man1/7z.1 \
        /usr/local/man/man1/7za.1 \
        /usr/local/man/man1/7zr.1 \
        /usr/local/share/doc/p7zip

p7zip のソースで MacPorts 版と圧縮速度を比較してみたけど1秒くらいしか変わらないから最適化の効果はあまり無いかも。

7z は結構好きなんだけどあまり普及していないのが残念。