jdk で mak extract 済みなのに build を再開するのにソースが必要な理由 ― 2007年12月11日 13時56分08秒
make extract
が終わっているのであれば、make build
をすると、extract までの処理を一気に飛ばして再開する。
そのために、一度 extract を終わらせておけば、distfiles に何もなくても、ports の build を終了できる。一部には patch が distfiles に置かれるものもあるので、それらは make patch
が終わっていなければいけないが。laptop 等の持ち運び出来る PC を使っている場合には、便利に使える。時間の掛かる ports を出先でもコンパイルする事が出来て、膨大なファイルのある distfiles を持ち運ぶ必要もない。
ところが jdk 関連はそうはいかない。何故だか、extract 済みでも distfiles が要求される。COOKIE を点検すると確かに /ports/tmp/usr/ports/java/jdk15/work/.extract_done.jdk-1.5.0.13p7_1._usr_loc が存在する。ずっと不思議に、そして不便に思っていたのだ。そこで、Makefile を見た。
一行が長すぎるので改行した。
# Check for JDK sources and patch file
.if !defined(PACKAGE_BUILDING) && \
(!exists(${DISTDIR}/${JRL_SRCFILE}) || \
!exists(${DISTDIR}/${JRL_BINFILE}) || \
!exists(${DISTDIR}/${JRL_MOZFILE}) || \
(defined(WITH_POLICY) && !exists(${DISTDIR}/${POLICYFILE})) || \
(defined(WITH_TZUPDATE) && !exists(${DISTDIR}/${TZUPDATEFILE})) || \
!exists(${DISTDIR}/${PATCHSETFILE}))#{
ECHO_MSG=/usr/bin/printf
IGNORE= :\n\
Due to licensing restrictions, certain files must be fetched manually.\n\n
...
簡単にいうと、自前でファイルがあるかを調べているのだ。そして、そこには !exists(PATCH_COOKIE)
がない。そこで、COOKIE を調べるコードを追加したが、うまくいかない。更に調べると、この COOKIE は bsd.port.porst.mk にて、定義される。そのため、この exists のある場所では使えないのだ。
この問題はかなり根が深く、簡単には修正できそうもない。COOKIE 定義場所を移すには、全ての ports への影響を調べる必要がある。だからといって jdk 内で、システムのデフォルトと同じ COOKIE を作るのは、おかしい。
最近のコメント