Published: 2021-09-05 14:30 +0900 by Chirimen
UNIX系 (NetBSD) で Ghostscript 7.07 をソースからコンパイルしてインストールし、 日本語フォントを利用できるようにするまでの手順のまとめ。
はじめに
Windows 用 Ghostscript 7.07 の環境設定 でも触れたように、日本語縦書きの機能を利用するために Ghostscript 7.07 が必要とされる場面があるが、 古いソフトであるため、環境を構築することは困難になりつつある。
今後のために、現時点で入手可能な情報をもとにした Ghostscript 7.07 のソースとその関連ファイルの入手法、 コンパイルの手順と設定方法について、記録を残しておく。
参考
ダウンロード
- Ghostscript 7.07 のソース
Sourceforge にあった Ghostscript のページ (gnu-gs) が削除されたため、7.07 は入手困難になっているが、7.07b が入手可能。 - パッチ
そのままだと多くの TrueType フォントでエラーとなってしまうので、 山田泰司さんのページで紹介されているパッチが必要。 パッチの数が多いので、パッチのダウンロードもコンパイルの節に記述する。 - 依存ライブラリ (jpeg, libpng, zlib)
- jpeg
jpegsrc.v6b.tar.gz が必要。 Sourceforge の libjpeg のページ (libjpeg), GNU のサイト, 山形大のミラー からダウンロードできる。 - libpng
最新の 1.6 系列ではコンパイルできない。 1.4系列であれば可能。 1.4系列の最終版 libpng-1.4.22.tar.gz が Sourceforge の libpng のページ (libpng) からダウンロードできる。 - zlib
システム付属の zlib が使用できることが多い。 その場合は zlib のソースは不要。 NetBSD 9 の場合でも不要だった。 ソースからコンパイルする場合は、1.1 系列が必要。 zlib-1.1.3.tar.gz が GNU のサイト, 山形大のミラー からダウンロードできる。
- jpeg
- Ghostscript のフォント
Sourceforge の Ghostscript font のページ (gs-fonts) からダウンロードできる。 同ページには同内容でライセンスが異なるパッケージが用意されているので、 適切なものを使用することが望ましい。 - CMap Resource
GitHub の Adobe Type tools にある cmap-resources からダウンロードできる。 同リリースページから、 “Source code (tar.gz)” をダウンロードすればよい。 現時点での最新版は cmap-resources-20190730.tar.gz (ダウンロードする際にファイル名が付与される)。
コンパイルとインストール
ghostscript-7.07b のソースを展開する
ダウンロードした ghostscript-7.07b.tar.gz を展開する。 ビルドやインストールに関する手順が doc/Make.htm, doc/Install.htm に記述されているので、 一通り目を通しておく。
$ tar xzf ghostscript-7.07b.tar.gz
ghostscript-7.07b のソースにパッチを適用する
素の ghostscript-7.07b のままだと、 使用できる日本語 TrueType フォントがあまりなかったりする。
対応可能な日本語 TrueType フォントを増やすためのパッチが 山田泰司さんのページ で紹介されているので、パッチをダウンロードして ghostscript-7.07b のソースにパッチを適用する。
パッチファイルのダウンロード
必要なパッチファイルの数が多いので、 ダウンロードのコマンドを列挙したシェルスクリプトを準備して実行することにした。
パッチを当てる工程に合わせて、 ダウンロードしたパッチファイルは4つのディレクトリに分けて管理している。
今のところはすべてのパッチをダウンロードできているが、 フォルダ名のパスに tmp が含まれているのを見ると、 いつまでダウンロード可能かは心配である。
#! /bin/sh
(
mkdir step1
cd step1
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/tagoh.jp_junk/ghostscript-7.07-bigposttable.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/tagoh.jp_junk/ghostscript-7.07-gsublookuptable.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/tagoh.jp_junk/ghostscript-7.07-coverage-glyphcount.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/fix_rename_font_gs_cidfn.ps.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/fix_cidfontname_Encoding_CIDToGIDMap_DW_W.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/modify_ps2pdfwr.patch
)
(
mkdir step2
cd step2
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-bigcmaptable.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-noglyph-gid0.patch
)
(
mkdir step3
cd step3
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/fix_cidfonttype2_Adobe-CNS1-4.patch
)
(
mkdir step4
cd step4
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-seekCFFtable.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-readFDSelect.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-write_GSubrs.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/ghostscript-7.07-nosyoffsetcheck.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/fix_cidfonttype2_Adobe-Japan1-6.patch
curl -RO https://www.aihara.co.jp/~taiji/gyve/tmp/modify_ps2pdfwr-20050921.patch
)
パッチファイルを適用する
ダウンロードしたパッチファイルを指定された順で適用する。
指定する patch のオプションや、 実行するディレクトリがパッチファイルによって異なるので、 こちらもあらかじめシェルスクリプトとして記述したものを実行するようにした。
#! /bin/sh
target=../ghostscript-7.07b
patch -p1 -d $target < step1/ghostscript-7.07-bigposttable.patch
patch -p1 -d $target < step1/ghostscript-7.07-gsublookuptable.patch
patch -p1 -d $target < step1/ghostscript-7.07-coverage-glyphcount.patch
patch -p1 -d $target < step1/fix_rename_font_gs_cidfn.ps.patch
patch -p1 -d $target < step1/fix_cidfontname_Encoding_CIDToGIDMap_DW_W.patch
patch -p0 -d $target/lib < step1/modify_ps2pdfwr.patch
patch -p0 -d $target < step2/ghostscript-7.07-bigcmaptable.patch
patch -p0 -d $target < step2/ghostscript-7.07-noglyph-gid0.patch
patch -p0 -d $target < step3/fix_cidfonttype2_Adobe-CNS1-4.patch
patch -p0 -d $target < step4/ghostscript-7.07-seekCFFtable.patch
patch -p0 -d $target < step4/ghostscript-7.07-readFDSelect.patch
patch -p0 -d $target < step4/ghostscript-7.07-write_GSubrs.patch
patch -p0 -d $target < step4/ghostscript-7.07-nosyoffsetcheck.patch
patch -p0 -d $target < step4/fix_cidfonttype2_Adobe-Japan1-6.patch
patch -p0 -d $target/lib < step4/modify_ps2pdfwr-20050921.patch
依存ライブラリのソースを展開する
NetBSD 9 (他の多くのシステムも) ではシステムの zlib が使用できるので、 jpeg と libpng のみソースを設置する。
$ cd ghostscript-7.07b
$ tar xzf ../jpegsrc.v6b.tar.gz
$ mv jpeg-6b jpeg
$ cd ghostscript-7.07b
$ tar xzf ../libpng-1.4.22.tar.gz
$ mv libpng-1.4.22 libpng
設定のために configure を実行する
多くのフリーソフトと同様に、 ソースに同梱されている configure を実行してコンパイルのための設定を行う。
$ ./configure
デフォルトでは /usr/local
以下にインストールされる設定となっている。
NetBSD では pkg 管理下のアプリケーションは /usr/pkg
下にインストールされるので、
デフォルトのままで問題ないと思われるが、
アプリケーション管理ツールが /usr/local
を使用するシステムの場合は、
競合を避けるために別のディレクトリを使用したほうがよいだろう。
confighure のオプション --prefix=path
を指定すると、
デフォルトの /usr/local
の代わりに path
を使用することができる (path
は任意)。
コンパイル (make) の実行
GNU make で make を実行する。
NetBSD のシステムに含まれている BSD make は仕様が異なるので動作しないようである。 NetBSD 環境なので gmake (GNU make) をインストールし、 gmake を実行する。
$ gmake
NetBSD 9.2 で X window system をインストールしていない環境下でコンパイルした結果。
$ ldd ./bin/gs
./bin/gs:
-lz.1 => /usr/lib/libz.so.1
-lc.12 => /usr/lib/libc.so.12
-lm.0 => /usr/lib/libm.so.0
zlib はシステムのものが動的リンクされており、 jpeg や libpng は静的リンクされている。
インストール (make install) の実行
gmake install
を実行してインストールを行う。
デフォルトの設定のままであれば
/usr/local/bin
下に実行ファルが、
/usr/local/share/ghostscript
下に他の必要ファイル群がインストールされる。
$ gmake install
そのままだと、Resource の参照先が適切でないので修正する必要がある。
具体的には
lib/gs_res.ps
(/usr/local/share/ghostscript/7.07/lib/gs_res.ps
)
の249–250行
/FontResourceDir (/Resource/Font/) readonly .forcedef % pssys'params is r-o
/GenericResourceDir (/Resource/) readonly .forcedef % pssys'params is r-o
の /Resource/
(2箇所)を
/usr/local/share/ghostscript/Resource/
のように修正する。
/FontResourceDir (/usr/local/share/ghostscript/Resource/Font/) readonly .forcedef % pssys'params is r-o
/GenericResourceDir (/usr/local/share/ghostscript/Resource/) readonly .forcedef % pssys'params is r-o
標準フォントのインストール
ダウンロードした標準フォント
ghostscript-fonts-std-8.11.tar.gz,
ghostscript-fonts-other-6.0.tar.gz
の内容を /usr/local/ghostscript/fonts
に設置する。
$ sudo tar xzf ghostscript-fonts-std-8.11.tar.gz -C /usr/local/share/ghostscript
$ sudo tar xzf ghostscript-fonts-other-6.0.tar.gz -C /usr/local/share/ghostscript
ファイルのオーナーやパーミッションは環境に合わせて設定する。
CMap Resource のインストール
ダウンロードした cmap-resouorce ファイルを展開し、
Adobe-Japan1-7
などのディレクトリの下にある
CMap
ディレクトリを /usr/local/share/ghostscript/Resource
にコピーする。
$ unzip cmap-resources-20190730.zip
$ cd cmap-resources
$ sudo mkdir /usr/local/share/ghostscript/Resource
$ for d in Adobe-*; do sudo cp -pr $d/CMap /usr/local/share/ghostscript/Resource; done
ファイルのオーナーやパーミッションなどは環境や好みに合わせて設定する。
環境設定
ghostscript の検索パス (search path)
TrueType フォントは ghostscript の検索パス (search path) から読み込まれる。
検索パスは gs -h
で確認することができる。
デフォルトでは
.
, /usr/local/share/ghostscript/7.07/lib
, /usr/local/share/ghostscript/font
の順に検索される。
$ gs -h
GNU Ghostscript 7.07 (2003-05-17)
Copyright (C) 2003 artofcode LLC, Benicia, CA. All rights reserved.
(snip)
Search path:
. : /usr/local/share/ghostscript/7.07/lib :
/usr/local/share/ghostscript/fonts
For more information, see /usr/local/share/ghostscript/7.07/doc/Use.htm.
Report bugs to bug-gs@ghostscript.com, using the form in Bug-form.htm.
検索パスは、環境変数 GS_LIB
やオプション -I
で追加することができる。
追加したパスはカレントディレクトリ .
の次に検索される。
環境変数 GS_LIB
で指定する場合は次のようになる。
分離記号 :
(UNIX系の場合) を用いて複数のディレクトリを指定することもできる。
$ GS_LIB=lib:fonts gs -h
(snip)
Search path:
. : lib : fonts : /usr/local/share/ghostscript/7.07/lib :
/usr/local/share/ghostscript/fonts
オプション -I
で指定する場合は次のようになる。
オプション文字列 -I
とパス文字列の間に空白を入れてはいけない。
また、-h
で検索パスを確認する際は、
-h
は -I
より後に指定する必要がある。
複数のディレクトリを指定するには、
-I
オプションを複数回使用するか、
$ gs -Ilib -Ifonts -h
(snip)
Search path:
. : lib : fonts : /usr/local/share/ghostscript/7.07/lib :
/usr/local/share/ghostscript/fonts
GS_LIB
の場合と同様に分離記号 :
を使用する方法がある。
$ gs -Ilib:fonts -h
(snip)
Search path:
. : lib : fonts : /usr/local/share/ghostscript/7.07/lib :
/usr/local/share/ghostscript/fonts
日本語 TrueType フォントの設置と設定
フォントファイルの設置
日本語 TrueType フォントファイルは ghostscript の検索パスが通っているディレクトリ、 またはそのディレクトリからの相対パスで参照可能なサブディレクトリに設置する。
フォントファイルは絶対パスで指定することもできる。
オプション -dSAFER
が指定されていると、
親ディレクトリへの参照 ..
はエラーになる。
CIDFnmap の設定
日本語 TrueType フォントの設定を CIDFnmap
で行う。
CIDFnmap
は /usr/local/share/ghostscript/7.07/lib
にあるが、
カレントディレクトリの CIDFnmap
が優先される。
フォントの指定は次のようになる。
%!
% IPA明朝・ゴシック
% 等幅は縦書きでも問題ない。
% プロポーショナルでは縦書き時にカーニングされてしまう。
/IPAMincho (ipam.ttc) 1 ; % IPA明朝 TTC (Ver.003.03)
/IPAPMincho (ipam.ttc) 2 ; % IPAP明朝 TTC (Ver.003.03)
/IPAGothic (ipag.ttc) 1 ; % IPAゴシック TTC (Ver.003.03)
/IPAPGothic (ipag.ttc) 2 ; % IPAPゴシック TTC (Ver.003.03)
% IPAex明朝・ゴシック
% 縦書き時に横書き用グリフが使用されてしまう。
/IPAexMincho (ipaexm.ttf) ; % IPAex明朝 (Ver.004.01)
/IPAexGothic (ipaexg.ttf) ; % IPAexゴシック (Ver.004.01)
% Windows 10 のMS明朝・ゴシック
% エラーで使用できない。古い (XP) のだとおそらく使える。
/MS-Mincho (msmincho.ttc) 1 ; % MS明朝
/MS-Gothic (msgothic.ttc) 1 ; % MSゴシック
% Windows 10 の BIZ UD シリーズ
% 等幅は縦書きでも問題ない。
% プロポーショナルでは縦書き時にカーニングが行われる。また、カッコの文字間がおかしい
/BIZ-UDMincho-Medium (BIZ-UDMinchoM.ttc) 1 ; % BIZ UD明朝 Medium
/BIZ-UDPMincho-Medium (BIZ-UDMinchoM.ttc) 2 ; % BIZ UDP明朝 Medium
/BIZ-UDGothic-Regular (BIZ-UDGothicR.ttc) 1 ; % BIZ UDゴシック Regular
/BIZ-UDPGothic-Regular (BIZ-UDGothicR.ttc) 2 ; % BIZ UDPゴシック Regular
/BIZ-UDGothic-Bold (BIZ-UDGothicB.ttc) 1 ; % BIZ UDゴシック Bold
/BIZ-UDPGothic-Bold (BIZ-UDGothicB.ttc) 2 ; % BIZ UDPゴシック Bold
% Windows 10 の UDデジタル教科書体
% 縦書き時に横書き用グリフが使用されてしまう。
/UDDigiKyokashoN-R (UDDigiKyokashoN-R.ttc) 1 ; % UDデジタル教科書体 N-R
/UDDigiKyokashoNP-R (UDDigiKyokashoN-R.ttc) 2 ; % UDデジタル教科書体 NP-R
/UDDigiKyokashoNK-R (UDDigiKyokashoN-R.ttc) 3 ; % UDデジタル教科書体 NK-R
% 古い商用 TrueType フォント (ヒラギノ)
% 縦書きでも問題ない。
/HiraginoMin-W3-90ms-RKSJ-H (DShirmn3.ttc) 2 ; % ヒラギノ明朝体3等幅
/HiraginoMin-W5-90ms-RKSJ-H (DShirmn5.ttc) 2 ; % ヒラギノ明朝体5等幅
/HiraginoMin-W7-90ms-RKSJ-H (DShirmn7.ttc) 2 ; % ヒラギノ明朝体7等幅
/HiraginoMin-W3-90msp-RKSJ-H (DShirmn3.ttc) 1 ; % ヒラギノ明朝体3
/HiraginoMin-W5-90msp-RKSJ-H (DShirmn5.ttc) 1 ; % ヒラギノ明朝体5
/HiraginoMin-W7-90msp-RKSJ-H (DShirmn7.ttc) 1 ; % ヒラギノ明朝体7
/HiraginoKaku-W3-90ms-RKSJ-H (DShirkg3.ttc) 2 ; % ヒラギノ角ゴ3等幅
/HiraginoKaku-W5-90ms-RKSJ-H (DShirkg5.ttc) 2 ; % ヒラギノ角ゴ5等幅
/HiraginoKaku-W7-90ms-RKSJ-H (DShirkg7.ttc) 2 ; % ヒラギノ角ゴ7等幅
/HiraginoKaku-W3-90msp-RKSJ-H (DShirkg3.ttc) 1 ; % ヒラギノ角ゴ3
/HiraginoKaku-W5-90msp-RKSJ-H (DShirkg5.ttc) 1 ; % ヒラギノ角ゴ5
/HiraginoKaku-W7-90msp-RKSJ-H (DShirkg7.ttc) 1 ; % ヒラギノ角ゴ7
/HiraginoGyoDS-W4-90ms-RKSJ-H (DShirgy4.ttc) 2 ; % ヒラギノ行書等幅
/HiraginoGyoDS-W4-90msp-RKSJ-H (DShirgy4.ttc) 1 ; % ヒラギノ行書
% 原ノ味フォント OTF
% 縦書き時の文字高さ(文字送り量)がおかしい。
/HaranoAjiMincho-Regular (HaranoAjiMincho-Regular.otf) ; % 原ノ味明朝
/HaranoAjiGothic-Medium (HaranoAjiGothic-Medium.otf) ; % 原ノ味ゴシック
/Ryumin-Light /IPAMincho ;
/GothicBBB-Medium /IPAGothic ;
動作確認
上記の CIDFnmap をカレントディレクトリに、
日本語フォントファイルを fonts
(./fonts
)
に置いて動作確認を行った。
テスト用のファイル fontexample.ps を gist に掲載しておく。
gs -Ifonts -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -r150 -sOutputFile=result-p%d.png fontexample.ps