ビルドの概要

ビルドは以下の手順で進めます。

  1. ビルドに必要なものを入手し適切な場所に用意します
  2. 日本語環境でのビルドのための修正を加えます
  3. ビルドの環境設定を行います
  4. ビルドの実行を行います

ビルドに必要なもの

ハードウェア

ハードウェアの条件は英語版ドキュメントによれば以下の通りです。

ソフトウェア

Windows 版をビルドするには以下のソフトウェアが必要になります。

すべてオープンソースでビルドできるのが理想的なのですが、残念ながらそうはいきません。最初の三つはオープンソースでなく、しかも有償のソフトです。

筆者の環境は Windows xp Professional です。

英語版ドキュメントではこうなっていますが、サービスパック 3 以降であれば大丈夫みたいです。Visual C++.netでもビルド可能かもしれませんが、筆者は試していません。

4NT は Windows NT 環境で動くコマンドシェルです。他のオープンソースシェルもしくはWindows 標準のシェル(コマンド プロンプト)では現在のところOpenOffice.org のビルドは実行できません。

4NT をインストールしたら、インストール先ディレクトリに4NT.ini というファイルが以下の内容で出来ているか確認してください。

(この内容は英語版ドキュメントの通りですが、4NTのバージョンによっては内容が違っているかもしれません。内容が違っていたら念のためこのセクションを4NT.ini にコピーしちゃいます。)

[4NT]
CommandSep = ^
EscapeChar = Ctrl-X
ParameterChar = &
LocalAliases = Yes

以降の無償で入手できるツールも必要です。

おなじみの Windows で *unix* 互換のツールを動かす環境とコマンドツール群のキットです。

英語版の解説には使用する Cygwinツールキットのバージョンごとの注意事項や準備事項がいろいろ書いてありますが、最新のものを入手するほうが手っとり早いです。ただし、一つだけやっておくことがあります。

Cygwin ツールキットのコマンドの中には *uinx*互換のシンボリックリンク (Windows のショートカットのようなもの)になっているものがあります。ビルドは 4NTの環境で実行しますが、この中ではシンボリックリンクが認識されません。したがって該当のファイルをコピーしておく必要があります。Cygwinのシェルで以下の一行コマンドを実行し awk.exe, gunzip.exe, tar.exe を実際にコピーします。

$ cd /usr/bin && for files in awk.exe tar.exe gunzip.exe; do cp -p $files $files.new && rm $files && cp -p $files.new $files && rm $files.new; done

アセンブラは Visual C++ もしくは Visual Studioと一緒にすでにインストールされている可能性があります。必要なファイル(ML.EXE と ML.ERR) の所在を確認してみてください。存在しない場合はフリーなバージョンを入手する方法がhttp://www2.dgsys.com/~raymoon/faq/masm.html#9にあります。

Cygwin ツールキットにも Info-zip の zip.exe は含まれていますが、これはCygwin の DLL を必要としますので Cygwin 環境以外でうまく動作しません。Windows の DLL のみで動くバージョンを Info-zip のオリジナルサイトhttp://www.info-zip.org/から入手し、Cygwin のものと置き換えます。

実行パスの検索順序で誤って Cygwinのものが動いてしまわないよう、置き換えてしまうことが肝心です。

マイクロソフトの開発環境と一緒にインストールされていれば更新する必要はないのかもしれませんが、念のため最新版をhttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/から入手しましょう。*ヒント* (643 以前のバージョンをビルドする場合は MDAC SDK を実際にインストールしなくてもかまいませんが、代わりに MDAC SDK のキャビネットもしくはインストールディレクトリから AdoCtint..h と SqlUcode.h をソース展開後のディレクトリの external/download にコピーします。)

Windows 95/98/Me では Windows のユニコード APIについてはごく限定されたものしかサポートされません。これを補完するのがこの DLL で、再配布可能なファイルとしてマイクロソフトが提供しています。あらかじめ開発環境で Windows ディレクトリに入れておきます。http://download.microsoft.com/download/platformsdk/Redist/1.0/W9XMe/EN-US/unicows.exeから入手しましょう。

http://www.cs.man.ac.uk/aig/staff/alan/software/にあります。tarball をダウンロードして解凍し、ライブラリに含まれるソースコードから gpc.c と gpc.h をソース展開後のディレクトリの external/gpc にコピーします。

ソースコードの入手

最後に、もちろんソースが必要です。

英語版以外のヘルプはソースからビルドされませんので、別に入手する必要があります。

OpenOffice.org の一部のモジュールだけをビルドしたい場合にはソースと一緒に solver を入手しておくと便利です。フルビルドには solver のビルドも含まれるのでフルビルドする場合は solver を入手する必要はありません。

ソースおよび solver は http://www.openoffice.org/dev_docs/source/download.htmlから tarball を入手し解凍します。ディレクトリ名に空白を含むパスの下にインストールするとビルドでトラブってしまいますので避けたほうがいいです。*ヒント*

一部のモジュールだけをビルドしたい場合には最新の solver を入手・解凍するとともに、ソース全体の tarball からモジュールに必要なサブディレクトリのみを解凍するか、該当のサブディレクトリツリーを CVS で入手します。モジュールは開発プロジェクトごとにサブツリーに分かれていますが、config_office 以下のサブツリーはビルド環境を設定するためには必ず必要です。

ヘルプは http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/helpcontent/helpcontent_81_wnt.zip から入手します。

'81' は国際電話の際の日本の国コードです。日本語以外のヘルプソースも各種提供されています。

解凍した後に出てくる autocorr81.zip... などのファイルをソース展開後のディレクトリの solver/643/wntmsci7.pro/pck ('643' はソースのバージョンです。)に入れておきます。一つだけ各言語共通のファイルがありますが、内容は同じですから同じものが存在する場合は上書きしてしまってもコピーしなくても問題はありません。

日本語環境でのビルドのための修正

OpenOffice.org の原型はドイツで開発され、ソースコード内の文字(列)定数およびコメントにドイツ語で使用される0x80以上のラテン文字が含まれます。これらのラテン文字の一部には日本語版のマイクロソフト Visual C++ のプリプロセッサ及びコンパイラで日本語シフト JIS 文字の一バイト目と解釈され、次に続く改行文字やコンパイラで解釈される特殊文字が正しく解釈されない場合があります。

ソースコードをチェックし、これらを修正します。Cygwin内でこのスクリプトを走らせるとうまくいくかもしれません。

ビルドの環境設定

ビルドは 4NT シェルで実行しますが、環境設定は Cygwin ツールキットの中で bash (bourne again シェル) でコマンドを走らせて実行します。

$ cd /cygdrive/c/oo_643c_src/config_office

(Cygwin 中では、各ドライブのルートドライブを "/cygdrive/[ドライブ文字]" と表記します。またパス名中の各ディレクトリ名の区切りは "/" を使います。)

$ bash configure --with-lang=ENUS,JAPN

(画面にいろいろ出力される)

Please enter the Java home directory: /cygdrive/c/jdk1.3.1_06

(JDK の存在場所を聞いてきています。Cygwin 流の表記で答えます。)

Please enter the path where the ml.exe assembler is located: /cygdrive/c/progra~1/masm

(ツール類の存在場所に実行ファイル検索パスが通っていない場合は聞いてきます。同じく Cygwin 流で答えますが、ディレクトリ名に空白を含んではいけません。名前に空白を含むディレクトリは短い MS-DOS ファイル名を使います。)

(またまた画面にいろいろ出力される)

$ exit

ソースツリーの一番上のディレクトリに winenv.bat というバッチファイルが作成されています。これを 4NT シェルの中で実行するとビルド環境が設定されます。

英語版では開発中のソースで環境設定する場合の注意事項が書いてありますが、tarball で公開されているソースからのビルドであれば気にする必要はないでしょう。

ビルドの実行

ビルドは 4NT シェルの中で実行します。winenv.bat はビルドのつど実行してください。環境が変わっていなければ再度configureを実行する必要はありません。

初めて winenv.bat を実行するときには dmake ツールがコンパイルされます。

フルビルド

ソースツリーの一番上のディレクトリ (以降 $SRC_ROOT と表記します) に移動します。

C:\4NT cd $SRC_ROOT

ソースに変更を加えずに再ビルドする場合 (一度ビルドしたあとデバッグ情報を加えて再ビルドするなど) は、先に中間ファイル、出力ファイルを削除します。Cygwin 内でやるのが便利です。

$ rm -r /cygdrive/c/$SRC_ROOT/*/wntmsci7.pro

4NT シェル内で以下のコマンドでビルドを行います。

$SRC_ROOT dmake

ペンティアム III にRAM 256M バイトのマシンでも10時間かかるそうです。

英語版ドキュメントでは依存関係に注意しながら個別のサブディレクトリごとにビルドしても良いと書いてありますが、フルビルドするのだったらそんな必要はありませんよね。

インストーラとアプリケーションの配布ファイルは サブツリー instsetoo の下、$SRC_ROOT\instsetoo\wntmsci7.pro\81\normal というディレクトリに作られます。'81' は例によって国コードです。ソースのバージョンによっては拡張子 .zip のファイルが出来ていますが、これは配布する必要がありません。

一部分だけのビルド

OpenOffice.org の要素はいくつかのプロジェクトに分かれて開発されており、さらにその中の各モジュールがソースツリーの中のサブツリーになっています。

各モジュールは相互にかなり複雑な依存関係がありますが、他のモジュールが依存するファイルは直接の依存でなく、すべて solver というサブツリーにコピーされ solver 以下のファイルに依存するよう環境設定されています。

従って、solver が最新の状態になっていれば、フルビルドを行わなくても個々のモジュールのサブツリー中のソースに変更を加えたものをビルドしたり、デバッグ情報を加えてビルドしたりすることが可能です。

該当モジュールのサブディレクトリに移動します。

C:\4NT cd $SRC_ROOT\(module)

ソースに変更を加えずに再ビルドする場合 (一度ビルドしたあとデバッグ情報を加えて再ビルドするなど) は、先に中間ファイル、出力ファイルを削除します。

$SRC_ROOT\(module) rm -r wntmsci7.pro

ビルドします。

$SRC_ROOT\(module) build

デバッグ情報付きでビルドする場合は以下のようになります。

$SRC_ROOT\(module) build debug=true

ビルドが終わったら必要なファイルを solver にコピーします。

$SRC_ROOT\(module) deliver

インストーラとアプリケーションの配布ファイルを完全に作り直したい場合は、サブツリー instsetoo でも build を行う必要があります。ファイルはサブツリー instsetoo の下、$SRC_ROOT\instsetoo\wntmsci7.pro\81\normal というディレクトリに作られます。'81' は例によって国コードです。

ちょっとしたヒント

空白を含むパスにソースを置いてもパス名の指定に常に短いファイル名を使ってやればビルドは出来そうに思えます。しかし実際はリソースコンパイラがリソースをインクルードするときに"~"(チルダ記号)を含むパスを受け付けないためビルドが止まってしまいます。配布されているメイクファイルにオマジナイをしてチルダを含むパスの代わりに相対パスを使うようにしてやればうまくいきます。

>$ cd $SRC_ROOT/solenv/inc && cp -p _tg_app.mk _tg_app.mk.orig && sed -e 's/\$(APP\([0-9][0-9]*\)ICON) >>/icons\\\$(APP\1ICON:b).ico >>/' _tg_app.mk > temp && mv temp _tg_app.mk

Microsoft Core SDK に含まれるunicows.libの2002年10月21日のタイムスタンプのものにバグがあり、ビルド643cではリンク時にエラーが出ます。バグのあるモジュールはたぶん使っていないので、該当の関数を除外してやりましょう。

$ cd $SRC_ROOT/sal/systools/win32/uwinapi && cp -p unicows.dxp unicows.dxp.orig && sed -e 's/RasDialW/;&/' unicows.dxp > temp && mv temp unicows.dxp

debug=true 指定等の条件つきビルドは充分テストされていないらしく、エラーがバンバン出ます。これはコツコツ修正するしかないでしょう。