cygportを使ってみる

cygwinのパッケージを作るのにcygport(cygwin ports)というのが
使われているらしいのだけど今まで使い方がわからなかった。
cygportそのものの公式サイトは見つからなかった。


ドキュメント類は皆無なのにわりかし使われているような感じなので
どこから情報を得ているのかと思ったが、
cygport自身がシェルスクリプトで書いてあるので読めという
ことらしい。

$ file /usr/bin/cygport
/usr/bin/cygport: Bourne-Again shell script text executable

読めばわかる。
たぶん

minttyをcygportでビルドしてみる。

cygportをsetup.exeでインストール


http://mintty.googlecode.com/svn/branches/0.4/cygport/mintty-0.4.0-1.cygport
をゲットしてきて
/usr/srcに配置

$ cd /usr/src
$ cygport mintty-0.4.0-1.cygport almostall

ソースが無いと文句言われる。
almostallはdownloadしないらしい。

$ cygport mintty-0.4.0-1.cygport download

ソース取得

$ cygport mintty-0.4.0-1.cygport almostall

途中ファイアウォールに許可するか聞かれたのでYesといっておいた。
almostall

$ cygport mintty-0.4.0-1 prep compile install package

を実行するのと同じ


こんな感じに

$ ls mintty-0.4.0-*
mintty-0.4.0-1-src.tar.bz2   # ソースパッケージ
mintty-0.4.0-1.tar.bz2 # バイナリパッケージ
mintty-0.4.0-1.cygport*     
mintty-0.4.0-src.tar.bz2 # downloadしたソース

mintty-0.4.0-1:
CYGWIN-PATCHES@  config/  inst/  origsrc/  spkg/  temp/
build/           dist/    log/   patch/    src/

buildの中にバイナリmintty.exeが出来上がっていた。


そういえばCJK widthオプションが無くなっているがはて?

追記

allを実行すると作業ディレクトリ(mintty-0.4.0-1)が削除される


installでは実際の/usr/binなどにインストールするのではなく
mintty-0.4.0-1/instをrootとする階層に展開していた。
これをpackageでtarに固めていると思う。

prepでrsyncのエラーが出る場合

rsync: Failed to dup/close: Socket operation on non-socket (108)
rsync error: error in IPC code (code 14) at /home/lapo/packaging/rsync-3.0.5-1/src/rsync-3.0.5/pipe.c(147) [receiver=3.0.5]
rsync: writefd_unbuffered failed to write 4 bytes [sender]: Connection reset by peer (104)
rsync error: error in IPC code (code 14) at /home/lapo/packaging/rsync-3.0.5-1/src/rsync-3.0.5/io.c(1509) [sender=3.0.5]

とか。
たぶん、アンチウイルスとかファイアウォールの類がwinsockに干渉している。
動けばいいという場合はとりあえずcygportの918行あたりを以下のように改造。

  #rsync -aq --delete-before ${origsrcdir}/ ${srcdir}/;
  (cd ${origsrcdir}; tar cf - .)|(cd ${srcdir}; tar xf -)
  rm -rf ${origsrcdir}