いけむランド

はてダからやってきました

Cygport Internal

cygport は bash で書かれたスクリプトであり、いざ読んでみると中にはいろいろと変数や関数があるため、気になった点について、ざっと書いてみる。ちなみに以下の話で「現時点」と言っているのは cygport-0.3.8 を意味している。

fetch

{http,ftp} 経由でのファイルの取得
  • ファイルの取得には wget, curl の順に使用される。
(variable) _USE_{cvs,svn,git,bzr}_FETCH
  • それぞれの変数をセットしておくと、それぞれのプロトコルで (ヴァージョン管理システムから) ソースを取得するようになる。
(function) {cvs,svn,git,bzr}_fetch
  • 上記の変数をセットしている場合にそれぞれのプロトコルでソースを取得するように定義しておく必要がある関数。
(variable) PATCH_URI
  • 既にパッチが存在する場合はこの変数にセットしておくと、SRC_URI と同じようにパッチをダウンロードする。
mirror:// の使い方
  • SRC_URI のスキームを mirror にすると、ミラーサイトを順番に探すようになる。
  • ミラーサイトのリストは変数 mirror_サイト名 にセットしておく必要がある。
  • 使用例は以下のとおり。
mirror_sourceforge_jp="
    qgpop.dl.sourceforge.jp
    keihanna.dl.sourceforge.jp
    osdn.dl.sourceforge.jp
"
SRC_URI="mirror://sourceforge_jp/nkf/26243/nkf-2.0.8b.tar.gz"

prep

(function) __mkdirs
(variable) CYGPORT_USE_UNSTABLE_API
  • この変数をセットしておくと、非公式 API を使用することができる。
  • ただし、現時点でこれにより使用できるようになる API は src_unpack_hook のみである。
(function) src_unpack_hook
  • この関数を定義しておくと、ソースを展開した後に呼ばれる。
  • 上述のとおり、現時点では別途 CYGPORT_USE_UNSTABLE_API という変数を定義しておかないと使えない。
(function) __check_unstable
  • CYGPORT_USE_UNSTABLE_API が定義されている場合にのみ、引数で渡された関数を呼ぶ。
  • 使用例は以下のとおり。
check_unstable src_unpack_hook

compile

(variable) CYGCONF_ARGS
  • 言わずと知れた、configure に渡す引数をセットしておく変数。
  • 現時点では cygconf で直接渡された引数の後方に追加されることを覚えておくと、何かの役に立つかもしれない。
(variable) MAKEOPTS
  • make に渡す引数をセットしておく変数。
  • デフォルトでは並列ビルドさせるために -j2 がセットされているが、Makefile がきちんと書かれていないと依存性の解釈を失敗して、こける可能性もある。そういう場合には -j1 をセットしておくと良い。
  • ただし、現時点でこの変数は cygmake に渡された引数よりも前方に追加される。これは cygmake -j2 と書かれたら、この変数に -j1 をセットしていても無視されてしまうことを意味している。
(function) cygcmake
  • cmake を使いたい場合には src_compile からこの関数を呼べばいいはず。
  • cmake は使ったことないため、それ以上はわかりません。
(function) src_test
  • デフォルトでは make check とか make test があれば実行するが、他の標準関数の何処からも呼ばれないため、呼びたい場合は自分で src_compile などの再定義が必要となる。

install

*.la
  • relink_command の行を sed で削除する。
(variable) USE_DESTDIR
  • この変数を 0 にセットしておくと、一般的な make 変数 DESTDIR を使わず、できるだけ詳細にインストールディレクトリを設定する。
cyginstall() {
        case ${USE_DESTDIR:-1} in
                1|[Yy]|[Yy][Ee][Ss])
                        make ${MAKEOPTS} install DESTDIR=${D} "${@}" || error "make install DESTDIR failed"
                        ;;
                0|[Nn]|[Nn][Oo])
                        make ${MAKEOPTS} install \
                                prefix=${D}/usr \
                                exec_prefix=${D}/usr \
                                bindir=${D}/usr/bin/ \
                                includedir=${D}/usr/include \
                                libdir=${D}/usr/lib \
                                sbindir=${D}/usr/sbin \
                                libexecdir=${D}/usr/sbin \
                                datadir=${D}/usr/share \
                                infodir=${D}/usr/share/info \
                                mandir=${D}/usr/share/man \
                                localstatedir=${D}/var \
                                sysconfdir=${D}/etc \
                                "${@}" \
                                || error "make install No-DESTDIR failed"
                        ;;
                *)
                        error "USE_DESTDIR should be set to either 0 or 1 (default).";
                        ;;
        esac
}
(variable) DOCS
  • README などの標準的な文書は /usr/share/doc/${P} 配下に自動でインストールされるが、追加のファイルがある場合はこの変数にセットしておく。
  • ただし、ディレクトリは指定できない。(指定してもディレクトリ内のファイルを再帰的にインストールしてくれない。)
(variable) HTMLDOCS
  • /usr/share/doc/${P}/html 配下にインストールしたい HTML ファイルをセットしておく変数。
README
  • /usr/share/doc/Cygwin 配下にインストールされる README は CYGWIN-PATCHES 配下の README または ${PN}.README が選択される。
  • また、PKG_NAME[i].REAMDE や PKG_HINT[i].README も存在すれば、選択される。
インストールスクリプト
ファイル名 インストール先
postinstall.sh /etc/postinstall/${PN}.sh
preremove.sh /etc/preremoce/${PN}.sh
profile.d.sh /etc/profile.d/${PN}.sh
profile.d.csh /etc/profile.d/${PN}.csh
man
  • gzip で圧縮される。
(function) __prep_empty_dirs
(function) keepdir
  • 関数 __prep_empty_dirs で削除されたくないディレクトリにダミーのファイルを touch しておく関数。
  • 必要な場合には src_install で呼んでおけばいい。
*.exe
  • strip される。
(variable) _CYGPORT_RESTRICT_strip_
  • exe ファイルを strip されたくない場合にセットしておく変数で、デバッグ可能なファイルを作成する時などに使用する。

info

(variable) HOMEPAGE, DESCRIPTION
  • info サブコマンドで表示されるパッケージの情報をセットしておく。

dep

(function) __list_deps
  • objdump の結果から "DLL Name:" を grep するため、日本語のカタログメッセージ「DLL 名:」だと検索できない。
  • そのため、dep を有効に使用するためには cygport ファイル内でそれを抑止しておく必要がある。
export LC_ALL=C

pkg

(function) __pkg_pkgcheck
  • 各パッケージ内のもれとかかぶりとかをチェックしてくれる関数。
(variable) _CYGPORT_RESTRICT_diff_
  • この変数をセットしておくと、パッチファイルを作成しない。
(variable) DIFF_EXCLUDES
  • この変数にはパッチに含みたくないファイル (のリスト) をセットしておくと、-x オプションでそれぞれ diff に渡される。
  • -x つきのリストでも解釈される。

その他

(variable) SIG
  • gpg も使う場合にセットしておく。使ったことがないため、それ以上はわかりません。
(variable) CYGPORT_DEPEND
  • 必要な cygport のヴァージョンを指定しておくと、そのヴァージョン以下でパッケージを作成しようとした場合にエラーになる。
(variable) RESTRICT
  • _CYGPORT_RESTRICT_{strip,diff}_ を設定したい場合にはこの変数に strip および diff を設定しておけばいい。
RESTRICT="strip"
他のフックがあればいいかも
  • exe を upx するための install フックとか。