Windows 上で Linux 風環境を実現するライブラリ・ツール群である Cygwin に関してです。Beta 時代から使ってるんで思えば長いもんですね。ちまっとパッチを当てたものとか、野良ビルドしたものとかを setup.exe でインストールできるように公開しております。よろしかったらどーぞ。インストールする際には、setup.exe 用 URLの記述を確認ください。cygport 化したものはソースパッケージもありますが、他はバイナリパッケージのみでソースパッケージはありません。自前パッチを当てている場合はそのパッチは置いてあります。なお、パッチ自体は cygwin ソースパッケージのパッチを当てた状態で作成されています。従って、ソースパッケージをインストールした後、↓のようにしてバイナリパッケージを生成するのが典型的な使い方でしょう。
$ ./package-0.00.0-0.sh mkdirs prep $ patch -p0 < package-0.00.0-0.patch # ここでパッチを適用 $ ./package-0.00.0-0.sh conf build install strip pkg
cygport 化されたものについてはほぼ通常通りですが、大抵ビルドに cygport-usrlocal が必要なことと、環境変数 USRLOCAL を設定すると /usr/local 以下に配置されるパッケージが作成される点が異なります。
$ cygport ./package-0.00.0-0.cygport all # cygwin 標準配置 $ env USRLOCAL=1 cygport ./package-0.00.0-0.cygport all # /usr/local 以下に置きたい場合
setup.exe にて署名の検証が必要となったため、
setup-legacy.exe -X
として setup.exe を起動し、署名の確認をスキップするか、
setup-legacy.exe -K <ダウンロードした公開鍵のパス>
として、Yak! の公開鍵を渡してください。公開鍵の情報は以下の通りです。
setup.exe なんていらねぇ、直接展開してやる、という方はリンクを辿ればディレクトリの Index になるのでそこからダウンロードしてください。release-legacy フォルダ内が Cygwin 1.5 用パッケージになっています。パッチ適用版については標準配布版と区別するために setup.ini 内のパッケージ名には _hogehoge といったものをつけていますが、setup.ini 内の requires の問題とか考えるとつけない方がいいのかもしれません。なお、ファイル名自体は同じなので気をつけてください。どうするのがいいのかよく分からないので意見ください。各パッケージに関する詳細は以下を参照してください。
Cygwin 上の Subversion で日本語ファイル名が扱えない問題を解消するため、↓ Windows ロケール強制パッチ適用版を作成したわけですが、下記の通り、環境変数 LANG 等の設定が効きません。これを解決するには、ロケールをまともに実装するのが正道なのですが、さすがにそう簡単にできることではありません。そこで、APR で可能な設定の一つ、ファイルシステム周りは UTF-8 で、その他文字列はロケール設定に従う設定を有効にしたものがこの UTF-8 Cygwin hack 版です。ファイルシステム周りが UTF-8 になる点は UTF-8 Cygwin に任せることになります。ロケール設定の文字コード判別には libcharset を使用しています。使用には UTF-8 Cygwin のインストールが必要です。また、LANG 等の環境変数を ja_JP.eucJP 等適当に設定してください。この APR だけを導入するとコマンドライン引数もロケール設定に従ったエンコーディングで渡す必要があります。通常、UTF-8 Cygwin 環境下ではシェルによるパス名展開の結果も UTF-8 になるためそのまま渡すことができません(svn add *.txt が通らない場合がある)。コマンドライン引数を UTF-8 としたい場合は↓の Subversion - UTF-8 Cygwin hack 版を併用してください。
Cygwin 上の Subversion で日本語ファイル名が扱えない問題を解消するためのものです。本来 UNIX 系では環境変数 LANG 等の指定によって文字コード周りの挙動が変わるはずなのですが、Cygwin ではこの辺の実装が不十分なので正しく動きません。そこで Windows 上での指定をそのまま使うようにしています。日本語環境だと CP932(Shift_JIS) になります。LANG 等の環境変数には影響されませんので注意してください。パッチ自体は Windows 用の実装をそのまま #include して使うというお気楽極楽実装となっております。subversion-1.2.3-1 以前は libapr0、subversion-1.3.0 以降は libapr1 とリンクしていますので必要な方を入れてください。
C++ の準標準ライブラリ(一部は TR1 として次期標準に採用が決定しています)ともいえる Boost C++ Library をビルドしたものです。基本的に cygwin 本家ベースでソースだけそれより新しいバージョンにしたものです(1.33.1 → 1.40)。
コマンドライン WebDAV クライアントである cadaver は本家配布パッケージにも含まれていますが、もともと文字コードに関する扱いが貧弱で、cygwin 環境のみならず UTF-8 環境下以外では日本語ファイル名を扱うのが困難です。これに対する i18n パッチが WebDAV Resource JP で公開されています。この i18n パッチの 更新版 + nl_langinfo 対応パッチ が webdav-jp ML で公開されており、これを適用することで以下の機能が追加されます。
このパッチを適用した上で、さらに次のような点についても修正を行ったパッケージです。
nl_langinfo(というかロケール)がまともに機能しない点に対しては、↑の APR - Windows ロケール強制パッチ適用版と同じ対処をしており、日本語環境だと文字コードとしては CP932(Shift_JIS) になります。なお、ロケール強制以外のパッチは cygwin 以外の環境でも有効だと思われますので、cadaver 公式配布ソースに対するパッチも置いておきます(こちらは旧バージョン(0.22.2)用のまま更新していません)。とりあえず FreeBSD 6 でのコンパイル、動作を確認しました。なお、cygwin ソースパッケージのパッチによる DESTDIR への対応も含めてあります。
次期 C++ 標準規格 C++0x に提案されている Concepts 等を、GCC に(試験的に)導入した実装である ConceptGCC について Subversion リポジトリからソースを取得、コンパイルしたものです。2007/4/6 現在 ConceptGCC 4.1.1 alpha 5 が本家ページからダウンロードできるようになっていますが、最新版にて実装された(らしい)、Decltype、Rvalue References、Variadic Templates あたりが使ってみたくなってコンパイルしたものです。configure のオプションは本家配布版に合わせてあります。tar.bz2 で 20MB 強ありますので注意してください。また、usrlocal、mixed のパッケージですが、例外的に /opt 以下にインストールされます。2007/4/11 に ConceptGCC 4.3.0 alpha 6 が本家ページで公開されたため全く意味がありません。とっとと本家ページでダウンロードするのがよいでしょう。
Cygwin 本家のパッケージでも続々と cygport 利用に移行しているわけですが、当物置でもやっとこさ cygport に移行しました。少々食わず嫌いな面があったのですが、実際使ってみると、パッケージ作成の大半が自動化されるというのは超便利です。が、あくまでも「野良ビルドは /usr/local」が私の基本方針であるため、prefix 等を切り替えられるように追加の cygclass を作成してみました(cygclass とは cygport に機能を追加するシェル関数群みたいなもので .cygport ファイル中で選択的に追加できます)。ついでに、完成度が低いながら README, setup.hint の作成補助機能もつけたものが cygport-usrlocal です。当物置でソースパッケージ付きで配布しているものの再ビルドに必要になります。環境変数 USRLOCAL が定義されている場合は /usr/local 下に、未定義の場合は Cygwin 標準のディレクトリ配置に従うパッケージが作成されます。0.2-1 では、コマンド mydobin, mydolib, 設定用環境変数 OLD_CONFIGURE を追加しています。
もう一つ OCaml ライブラリ用に cygport-ocaml を作成しました。と言っても ocaml.cygclass yak-ocaml.cygclass (本家での ocaml.cygclass 配布に伴い改名) 1 ファイルだけですが。OCaml のライブラリはビルド手順があまり標準化されていないので、大抵は .cygport で各個撃破する必要がありますが、ld.conf 修正用 postinstall / preremove スクリプトの作成を共通化しています。
双方とも内部処理の説明がありませんが、.cygport を書く人ならシェルスクリプトぐらい余裕で書けると思うのでそのまま中を見てもらった方が早いと思います。
fep と言っても漢字変換ではなくて、行入力指向のプログラムに対して行編集機能を提供する汎用フロントエンドプロセッサです。ぶっちゃけ OCaml(Objective Caml) の勉強中なのですがトップレベル対話環境(ocmal)に行編集機能がないのでマニュアルに記述のあったこれ(fep)を持ってきました。オリジナル版は SRA から配布されていますが、動作環境が限定されているため数式処理環境である OpenXM の contrib から抜き出してビルドしてあります。
本家配布パッケージにあるrlwrap の方が多機能ですのでそちらを使用する方がいいでしょう。
UNIX 系のオープンソースソフトウェアを Cygwin 上に移植する際に、よくぶつかる問題の一つとして「Windows 上では DLL 作成時に全ての参照が解決されていなければならない」という点があります。詳細は edll のページでも参照してもらうとして、特にプラグインを使用しているソフトでぶつかることが多いです。ここで配布しているソフトでは Graphviz なんかがそうですね。で、よく見かける解決策が前記 edll のページで言うところの "The sub-DLL solution" ですが、コード構成自体を変更しなければならないのでそう簡単ではありません。edll はリンカとローダを自前で実装してしまうという豪快な手段でこの問題を解決していますが、FlexDLL はちょっとだけ穏便に、リンカ、ローダは通常のものを使用し、そこにフック的に自前で参照を解決する仕組みを導入することで問題を解決しています。Windows 版 OCaml でも使用されておりこれにより Cygwin 上の OCaml で動的ロードが可能になっています。同様にプラグイン的なものを使用するソフトを移植する際の選択肢と考えられると思います。
なお、MSVC 用オブジェクトは含まれていません。また、Native 版でコンパイルすることを推奨されていたので Cygwin 版ではなく、Native 版 OCaml を使用してコンパイルしてあります(渡すパスは Cygwin パスで問題ありません)。さらに、本家配布版に対して以下の変更を加えてあります。独自修正は(一旦)取り除きました。また symlink を取り扱えず gcc 自体見失ってしまうため Cygwin 版 OCaml を使用してコンパイルしています。
グラフィックス描画ライブラリである GD に対して、拡張子無指定時のフォント検索 の際、拡張子 .ttc も検索するようにパッチをあてただけのものです。白状すると、Graphviz で fontname=msmincho と書きたいがため「だけ」に当てたパッチです。あほですね。
ソースコードタグシステムである GNU GLOBAL をビルドしたものです。もともとはタグジャンプの実現用のものですが、htags を使うことによりソースコードをハイパーリンク付きで HTML 化することもできます。ソースコード解析のお供にどうぞ。
グラフ視覚化ソフトウェアである Graphviz に cygwin での DLL ビルドを可能にするパッチを適用したものです(ラベル中で日本語&エスケープシーケンスを使う際の不具合は本家 2.4 で解消されましたので、_jp をはずしたパッケージ名に変更しました)。グラフと言っても円グラフとか棒グラフとかそっちのグラフではなくて、点と線、ノードとエッジからなるグラフ構造のことです。簡単な書式でグラフ構造を表すテキストファイルを書き、それを食わせてやると画像ファイルを生成してくれます。Doxygen でも階層構造を視覚化するのに使えるそうです。状態遷移図とかいちいち図を書くのが面倒な時などにも有効だと思います。以下の点に注意してください。
本家パッケージ化に伴い削除。
文字コード変換等を含む国際化ライブラリである ICU(International Component for Unicode) を単純にビルドしたのち配置を変更、symlink を加えたものです。単純にビルドすると DLL が cyg プレフィクスではなく lib プレフィクスで /usr/local/lib 内にできますが、このパッケージでは実体は /usr/local/bin に置き、そこから /usr/local/lib 以下(および短縮されていない名前)に symlink してありますので注意してください。
ctags 相当の機能を高速、低容量で実現するID utilsです。GNU GLOBALと連携が可能です。
標準パッケージで配布されているグラフィックスライブラリ Imlib の後継バージョンであるImlib2 をビルドしたものです。動的ライブラリを検索する際に、.so ではなくて .dll を検索するように変更してあります。ぶっちゃけ libcaca が依存していたのでビルドしたものだったり。giflib ではなくて本家配布の libungif とリンクしています。ビルド時のオプションは、JPEG, PNG, TIFF, GIF, ZLIB, BZIP2 は yes、MMX と AMD64 は no です。
日本語表示を可能にした less、いわゆる jless に less-358-iso254-imd1 非公式パッチ を less-382-iso262 用に調整したものをあててビルドしたものです。超ものぐさな人向け。
旧版は色々とビルド時にミスっていました。たまたま JIS X 0213 用変換が有効だったため、一部の文字以外が表示できていただけです。今版で非公式パッチの効果を得るためには、環境変数 JLESSCHARSET を japanese90-sjis 等にする必要があります。japanese-sjis の場合、JIS X 0213 に存在しない(正確には JIS X 0213 では異なるコードポイント側だけ採用されている(参考))一部の NEC 特殊文字(例:≒ 0x8790)が正しく表示できません。
カラー表示に対応したテキスト表示によるグラフィックス(要するに AA)ライブラリである libcaca をビルドしたものです。ホゲゆに を読んであまりのアレゲ度にパッケージ作成を決意しました。表示ドライバとしては win32, ncurese, x11 が利用可能です。デフォルトだと win32 になりますので、環境変数 CACA_DRIVER を指定すると良いでしょう。
文字コード変換ライブラリである libiconv に対して、いわゆる cp932 パッチをあててビルドしたものです。
文字コード変換ライブラリである libiconv に対して、日本語エンコーディング全般の一括パッチをあててビルドしたものです。
漢字コード変換フィルタである nkf です。
本家で配布されているバージョン(3.08.1)はモジュールの動的ロードができませんが、最新版では natdynlink ブランチ(The natdynlink branch in OCaml's CVS)の成果が取り込まれ Cygwin 版でも動的ロードが可能となっています。
なお、以下の変更を加えてあります。
natdynlink ブランチ(The natdynlink branch in OCaml's CVS)の結果が本家に取り込まれましたのでそちらをご使用ください。
↑ OCaml に適合しません。ビルドし直す予定です。
fep のところでも書きましたが、現在 OCaml(Objective Caml) の勉強中です。で、いくつか OCaml 用ライブラリをビルドしてみました。ocamlkf はここを、pcre-ocaml はここを、それ以外はここを参照してください。
↑ OCaml に適合しません。ビルドし直す予定です。
↑のnatdynlink branch 版 OCaml用にビルドし直した OCaml 用ライブラリです。今のところ usrlocal のみです。
夏休み中に 簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング を読んで感動したので作成。ODE(Open Dynamics Engine) は剛体の動力学を扱うオープンソースの物理計算エンジンです。こんな簡単に 3D で物理シュミレーションできるようになるとはすごい時代ですね。通常インストール対象にならない drawstuff ライブラリ等も含んでいます。0.11 以降では drawstuff も DLL を作成し、かつ、その DLL 内に必要なリソースが入るようになりました。また、DLL 命名規則が cygwin 標準に沿うようになりましたので DLL のパッケージ名に番号をつけています。
Pango は GNOME で利用されている国際化テキストのレイアウト・レンダリングライブラリ(公式サイト)ですが、Graphviz が cairo と統合された以降のバージョンを要求するため、GLib を更新せずに済む範囲内で最新のバージョンをビルドしました。
Python 用の GTK+ バインディング PyGTK は Cygwin 本家パッケージに pygtk2 として含まれていますが、Python のパッケージは既に 2.5 に移行しているのに、pygtk2 のパッケージは Python 2.4 用になっています。ということで Python 2.5 用に再ビルドしました。
高速なデータベースライブラリである QDBM をビルドしたものです。データベースと言っても RDBMS ではありません。UNIX DBM 相当です。B+木、ハッシュを扱うことができます。
SDL(Simple Directmedia Library) はオープンソースなクロスプラットフォームマルチメディアライブラリとして有名ですが、通常 Cygwin 上でビルドすると Native (MinGW) 版としてビルドされます。生成物の配布を考えた場合には、cygwin1.dll とリンクされると、完全に GPLv2 に従うか、あるいはオープンソースとして配布する必要があるため(Cygwin ライセンスの例外条項による)、あまり嬉しいことはないのですが、適当に個人で使う場合には全て Cygwin 環境下でまかなうことができるためそれはそれで便利だったりします。ということで、msvcrt ではなくて cygwin1.dll とリンクする SDL を作成してみました。完全に Cygwin 上に持ってくるなら X 上で動作するようにするのが筋かもしれませんが、SDL の目的を考えるとそこまではやるのはオーバーヘッドが大きすぎということで、基本的に Win32 用レイヤーを使用します。Cygwin が影響するのはファイル入出力周りだけです(多分)。
仮想端末多重化ソフトとでも言えばいいのか、CUI 使いの強い味方 GNU Screenが遂に Cygwin 本家配布パッケージとなりました。以前配布していたものの代わりに、本家配布版に対してでかいの企画さんの非公式パッチ、2ch で公開されたパッチ等↓各種パッチをあてtた上、256 色表示を有効にして再ビルドしたものです。本家版と同様コマンドプロンプトで使用する場合には環境変数 CYGWIN で tty を設定しておく必要があります。詳しくは Cygwin User's Guide の Environment Variables、The CYGWIN environment variableの項、および ML でのアナウンスを参照してください。なお、パッケージをインストールしても termcap、terminfo の設定はされませんので、必要があれば screencap、screeninfo.src を参考に設定を行ってください。←は、オリジナルのソースから抜き出してきたファイルです。256 色表示については The 256 color mode of xterm の下の方 &Applications that support 256 colors - screen& のような設定が必要かもしれません。
上記 GNU screen に対して、さらに encoding sjis における Unicode との変換を、Microsoft による変換(いわゆる cp932)に置き換えたものです。変換用テーブルの修正に加えて、IBM 拡張文字に対しても sjis として変換が行われるように一部コードを修正してあります。変換に用いているテーブルは Unicode Consortium の CP932.TXT を元に作成しています。GNU screen の配布ソースに含まれる変換テーブルは JIS0208.TXT 相当です。テーブルを差し替えるだけでも IBM 拡張文字以外は Microsoft による変換に従うようになります。なお修正に際しては、森山 将之さんの Windows-31J 情報 のページを参考にさせていただきました。
↑ APR - UTF-8 Cygwin hack 版使用時に、コマンドライン引数は UTF-8 として解釈するようにしたものです。
YAML の比較的高速なパーサライブラリである Syck です。Perl(YAML::Syck)、OCaml(ocaml-syck) で使いたかったので作成。今なら Syck じゃなくて LibYAML でしょうか。
OCaml で作成されたファイル同期ツールである Unison の cp932 ファイル名向け修正版です。こちらのパッチをベースにいくつか修正を加えています。詳細については /.-j の日記エントリにでも書くつもりです。が、残念ながら cygwin1.dll 自体が cp932 に対応していないため、ファイル名、ディレクトリ名末尾が 0x5C で終了している場合、正常に処理できないというでかい問題が残っています。ぶっちゃけ配布されている Cygwin 使わない版の方がよっぽど常用に耐えると思います。どうしても駄目なら Win32 native 版でパッチ込みのものを作成するか、UTF-8 Cygwin で非パッチ版を使用するのがよいと思います。