Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2016-08-15

TeX Live (win32) をビルドしてみる実験(2)

前回の記事にいただいたコメントで、少し先に進めるようになった。

ビルド手順(つづき)

前回の途中から再挑戦。

[3'] libs のビルド(やりなおし)

前回、zlib → libpng → xpdf とビルドしていて、xpdf でエラーが出てしまった。そのままではビルドに失敗するのは、以下の2つのファイルである:

SplashOutputDev.cc(1552) : error C3861: 'unlink': identifier not found
TextOutputDev.cc(4202) : error C3861: 'setmode': identifier not found
TextOutputDev.cc(4202) : error C3861: 'fileno': identifier not found

これは、VS2013 が昔の VS とは仕様が変わっていることが原因だったようだ。したがって、Microsoft 公式の案内に従い、使われなくなった関数を書き換える:

  • SplashOutputDev.cc 1552行目 → unlink_unlink
  • TextOutputDev.cc 4202行目 → setmode_setmode に、fileno_fileno

こうすると w32tex-src\ktx\libs\xpdf\xpdf で nmake に成功し、libxpdf.lib が生成する*1。次いで、xpdf のほかのディレクトリもビルドする。

> cd ..
> cd fofi
> nmake

これで libfofi.lib が生成し、さらに

> cd ..
> cd goo
> nmake

これで libGoo.lib が生成している。

[4'] web2c のビルド(やりなおし)

改めて web2c をビルドしよう。

> cd ktx\texk\web2c
> make

前回に比べて、アプリケーションが増えた!

  • pdftex.dll
  • wopl2ofm.exe
  • wofm2opl.exe
  • wovf2ovp.exe
  • wovp2ovf.exe
  • pdftosrc.exe
  • aleph.dll
  • synctex.exe

今度は以下のエラーで止まる:

make: *** No rule to make target `mp.web', needed by `mp.p'.  Stop.

たしかに mp.web が見当たらない…後日調べてみよう。

[5] texk のビルド

ほかのプログラムもビルドしてみよう。なんとなく dvipdfm-x をビルドできると便利そうなので、挑戦してみることにした。

> cd w32tex-src\ktx\texk\dvipdfm-x
> make

早速エラーが出る:

make: *** No rule to make target `jp2image.obj', needed by `dvipdfmx.dll'.  Stop.

どうやら .obj の make が出来ないらしいので、Makefile に以下の3行を追加してみた(これが最適な方法かどうかは不明):

.SUFFIXES: .c .obj
.c.obj:
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<

改めて make すると .obj がビルドでき、ライブラリが見つからないと怒られる。

make: *** No rule to make target `../../libs/libpaper/lib/libpaper.lib', needed
by `dvipdfmx.dll'.  Stop.

というわけで、今度は libs の libpaper のビルド。

> cd ..\..
> cd libs\libpaper
> make

今度もまたエラー。

cl -nologo -MD -O2 -DWIN32=1 -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPREC
ATE -D_CRT_OBSOLETE_NO_DEPRECATE -D_SECURE_SCL=0 -DHAVE_CONFIG_H -D_REENTRANT -I
. -I.. -c -Folibpaper_la-paper.obj paper.c
paper.c
paper.c(21) : fatal error C1083: Cannot open include file: 'unistd.h': No such f
ile or directory
make: *** [libpaper_la-paper.obj] Error 2

VC で unistd.h を使いたいのだが、そもそも Unix 系でないため unistd.h が存在するはずはない。そこで、とりあえずココに例示してあるヘッダをコピペして unistd.h というファイル名で保存し、texk\libs\libpaper\lib に置き、改めて make してみると、幸いなことにビルドが通って lib 以下に libpaper.lib が生成した。警告が出ていたので一応メモしておく:

.\unistd.h(92) : warning C4273: '_getpid' : inconsistent dll linkage
        C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\process.h
(69) : see previous definition of '_getpid'
.\unistd.h(105) : warning C4293: '>>' : shift count negative or too big, undefin
ed behavior

これで、改めて texk\dvipdfm-x に戻って make すると

  • dvipdfmx.dll

が出来た。

make: *** No rule to make target `../calldll/dvipdfmx.exe', needed by `calldll.e
xe'.  Stop.

なるエラーが出ているが、その先はまた後日。

続編 (2016-08-26):XeTeX のビルドに挑戦してみた

*1:これとは別に「w32tex-src\ktx\libs\xpdf\xpdf\Makefile を編集して CXXFLAGS の値から -DWIN32=1 を外す」という方法でもビルドに成功することに気づいた。この方法は、xpdf の本家ソースに付属している ms_make.bat でビルドする場合にこのオプションが付いていないことに由来するが、詳細不明なので今回は不採用とした。

kmaedakmaeda 2016/08/16 07:59 実は paper.c の #include <unistd.h> はコメントアウトしても通るのでは.Linux ですが,手元ではコメントアウトでも大丈夫でした.そうすると警告も消えると思います.

acetaminophenacetaminophen 2016/08/16 14:18 確かに OS X でもコメントアウトで通りました。Win32 ではあとで試してみます。盲点でした…ありがとうございます。

acetaminophenacetaminophen 2016/08/16 18:51 #include <unistd.h> をコメントアウトしてみたところ、Win32 で正常にビルドできました。最初から要らなかったんですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証