Cygwin情報/Snapshot について

Last modified: 2008/04/06 14:49:16 JST

Cygwin Snapshots とは

Cygwin Snapshotsでは、開発中の Cygwin DLL のソースコードとバイナリが公開されています。 ここで用いられている配布形式は以下の 5 つです

winsup-src-date.tar.bz2
最新の winsup が含まれています。
cygwin1-date.dll.bz2
最新の source tree からコンパイルした cygwin1.dll です。
cygwin1-date.dbg.bz2
cygwin1.dll のデバッグ情報です。
cygwin-inst-date.tar.bz2
最新の source tree で make install したときに、 インストールされるファイルがすべて含まれています。
cygwin-src-date.tar.bz2
winsup と newlib を含む Cygwin DLL のコンパイルに必要なファイルが、すべて含まれています。

Cygwin DLL は主に winsup と newlib の二つのパッケージからなっています。 winsup には UNIX のシステムコールのエミュレータ、いくつかのツール、 およびアプリケーション開発に必要な必要なヘッダファイルが含まれています。 Cygwin の開発チームがメンテナンスしているのは winsup だけです。 newlib は主に組み込み環境を対象とした C 言語のライブラリ関数の実装です。 こちらは Red Hat の Jeff Johnston によってメンテナンスされています。

snapshot の利用法

Cygwin DLLに加えられたの変更点の大半は、C:/cygwin/bin/cygwin1.dll を cygwin1-date.dll.bz2 を解凍したものと入れ換えるだけで反映されます。 cygwin1.dll を入れ替える場合には Cygwin のアプリケーションをすべて終了して、 コマンドプロンプトかエクスプローラで入れ替えます。 古い cygwin1.dll は念のため保存しておきましょう。

Cygwin DLL のバグに気付いたら、cygwin1.dll だけを最新の snapshot と入れ替えてみてください。 すでにそのバグは直っているかもしれません。 snapshot は致命的なバグが入った状態で公開されることもあるので、 入れ替えるとかえって事態が悪くなることもあります。 そんなときには少し前の日付けの snapshot を試してみましょう。

Cygwin DLL の API に関する変更は cygwin1.dll を入れ替えるだけでは反映されません。 cygwin-inst-date.tar.bz2 をインストールして、アプリケーションをコンパイルしなおす必要があります。

アプリケーションをコンパイルしていて、 UNIX ならあるはずの関数や変数が見つからないと怒られた場合には、 ChangeLog を調べて、 その関数や変数が追加されていないか確認してみましょう。 もし追加されていたら、 最新の cygwin-inst-date.tar.bz2 をインストールしてコンパイルしなおすと、 コンパイルが通るかもしれません。

ちなみに、API が変更されると、winsup-src-date.tar.bz2 に含まれる version.h の CYGWIN_VERSION_API_MINOR の値が変更されます。 この値は uname -r を実行することでも確認できます。 以下の37という数字がそれです。

$ uname -r
1.3.0(0.37/3/2)

Cygwin DLL に導入された新しい機能を利用するために、 コマンドの入れ替え/追加が必要な場合もあります。 その際には、cygwin-inst-date.tar.bz2 をインストールするか、必要なファイルだけを取り出してインストールします。

snapshot のコンパイル

最新のソースコードから Cygwin DLL のバイナリを作成する方法を説明します。

source tree の作成

CVS のリポジトリから取得する方法と、Cygwin Snapshots から作成する方法があります。

CVSの場合

まず環境変数 CVSROOT を設定してログインします。

$ export CVSROOT=:pserver:anoncvs@cygwin.com:/cvs/src
$ cvs login
(Logging in to anoncvs@sources.redhat.com)
CVS password: anoncvs

必要なファイルをチェックアウトします。 最初にトップディレクトリのファイルをチェックアウトして、 次に必要なサブディレクトリをチェックアウトします。

$ cvs -z3 checkout -l src
cvs server: Updating src
U src/.cvsignore
U src/COPYING
...
$ cvs -z3 checkout src/winsup src/newlib src/libiberty src/include src/config src/etc
cvs server: Updating src/winsup
U src/winsup/CYGWIN_LICENSE
U src/winsup/ChangeLog
...
$ cd src

Cygwin Snapshots の場合

Cygwin Snapshots から最新の cygwin-src-date.tar.bz2 を取ってきて展開します。 たとえば cygwin-src-20000828.tar.bz2 が最新なら

$ mkdir src; cd src
$ bzcat cygwin-src-20000828.tar.bz2 | tar xf -

configure の実行

ソースを展開したディレクトリとは別のディレクトリで configure を実行します。 winsup の Makefile は、ソースと同じディレクトリで make することを想定していないので、そのまま configure を実行すると失敗する可能性があります。

$ mkdir BUILD; cd BUILD
$ CFLAGS=-O2 CXXFLAGS=-O2 ../configure --prefix=/usr

make とインストール

make を実行すると、i686-pc-cygwin/winsup/cygwin/ に new-cygwin1.dll が生成されます。これが新しい cygwin1.dll です。 前述したように、Cygwin のアプリケーションをすべて終了して、 コマンドプロンプトかエクスプローラで C:/cygwin/bin/cygwin1.dll と入れ替えます。

cygwin-inst-date.tar.bz2 をインストールするのと同じ状態にする場合には、以下のように make を実行します。

$ cd i686-pc-cygwin/newlib
$ make tooldir=/usr install
$ cd ../winsup
$ make -i install_cygwin install_utils install_cygserver

newlib で make を実行するときに tooldir=/usr を付けないと、/usr/i686-pc-cygwin にファイルがインストールされてしまいます。 winsup で make を実行するときに -i を付けるのは、cygwin1.dll の入れ替えでエラーになったときに、そこで止まるのを防ぐためです。

注意事項

バージョンの異なる cygwin1.dll は同時に一つのコンピュータに同居できません。 親プロセスと子プロセスにリンクされる cygwin1.dll のバージョンが違うと、fork の実行に失敗します。


Cygwin情報に戻る