トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

port2pkgを試してみる

はじめに

port2pkgとは、FreeBSDのportをpkgsrcのパッケージに変換するユーティリティです。

こんなに風に試してみました、という例です。正しいかどうかはわかりませんが、まぁこんなもんということで。([nbug:09042] Re: port2pkg に投げたものを少し書き換えたものです。)

お約束

  • The pkgsrc developer's guide (The pkgsrc guide Part II.): 本家の解説文書。英語が苦手な人でも、Chapter 15. Debuggingだけでもみておくとよいかと。同じ文書は、pkgsrc/doc/pkgsrc.{txt,html}にあります。
  • pkgsrc/doc/Makefile-example: ちらっとながめておいて損はありません。

実践

 準備

まず、

  • pkgtools/pkglint
  • pkgtools/port2pkg
  • pkgtools/pkgdiff
  • pkgtools/url2pkg

をインストール or アップデートしてから、始めます。

ちなみに、わたくしの環境は、

   % uname -mrs
   NetBSD 2.0.2_STABLE i386

です。ThinkPad 240です。

 port2pkg

まず、port2pkgのmanを読みます。BUGSが先の苦労を予感させます。

今回のターゲットは、ports/astro/gpsdriveです。pkgsrcにも、geography/gpsdriveがあるのですが、古いので新しいのが欲しいのです。

portを取ってきます。Fresh Portsにアクセスして、CVSWebのところから、tarballを取ってきて、展開します。あとは、manどおり、

 port2pkg /path/to/gpsdrive /usr/pkgsrc/geography/gpsdrive.new

として、変換してみましょう。

 WARN: Makefile:17: USE_PERL5 is deprecated. Use USE_TOOLS+=perl (and maybe TOOLS_DEPMETHOD.perl=DEPENDS) instead.
 WARN: Makefile:18: USE_GMAKE is deprecated. Use USE_TOOLS+=gmake instead.
 FATAL: Extra item "PORTREVISION" placed in the DISTNAME section.
 WARN: COMMENT should not begin with 'A '.
 WARN: MESSAGE:1: Expected a line of exactly 75 "=" characters.
 FATAL: MESSAGE:2: "$NetBSD$" expected.
 WARN: MESSAGE:5: Expected a line of exactly 75 "=" characters.
 WARN: PLIST:65: Use "@dirrm" instead of "@unexec rmdir".
 FATAL: distinfo: patch-aa is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-ab is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-ac is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-ad is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-ae is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-af is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-ltmain.sh is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-src::gpsserial.c is not recorded. Rerun '/usr/bin/make makepatchsum'.
 FATAL: distinfo: patch-src::splash.c is not recorded. Rerun '/usr/bin/make makepatchsum'.

うわ、なんかいっぱいエラーがでましたね。このエラーは、pkglintというチェッカーが出したエラーです。これが出ないようにするところまでいきましょう。

 Makefile

依存関係

まずは、Makefileをみます。

最近ではDEPENDS=はほとんど使わなくてもよくなりました。buildlink3.mkがあるものは、それをincludeするのが正しいみたいです。pcreもあるので、そうします。

 .include "../../devel/pcre/buildlink3.mk"

Fresh Portsのページをみて、依存関係を写していきます。基本的に上とおんなじで、buildlink3.mkがあるものは、include追加、です。しかし、すごいたくさんです。本当にこんなにたくさん書くべきなのか悩みますが、とりあえず書きます。

 .include "../../devel/atk/buildlink3.mk"
 .include "../../devel/gettext-lib/buildlink3.mk"
 .include "../../devel/glib2/buildlink3.mk"
 .include "../../devel/libgetopt/buildlink3.mk"
 .include "../../devel/pango/buildlink3.mk"
 .include "../../devel/pkgconfig/buildlink3.mk"
 .include "../../textproc/intltool/buildlink3.mk"
 .include "../../x11/gtk2/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"

portsでは、USE_*という変数を使うことが多いみたいですが、pkgsrcでは、これもbuildlink3.mkをincludeするという形になっているものが多いです。既に上記でincludeで書いたので、書いたものは消していきます。

このソフトは、make時にperlとgmakeをつかうみたいです。portsでは(昔のpkgsrcも)、USE_GMAKEとかUSE_PERL5とかを使うのですが、pkgsrcでは、最近、USE_TOOLSを使うようになりました。(pkglintで警告が出てましたね。)

 USE_TOOLS+=     gmake perl

Xを使うものは、mk/x11.buildlink3.mkをincludeすればいいみたいです。昔のUSE_X11ですね(たぶん)。

 .include "../../mk/x11.buildlink3.mk"

libtoolを使うときは、USE_LIBTOOL=yesがいるようです。pkgsrc.txtをgrepしてみるもんです。追加します。

USE_INC_LIBTOOL_VERとUSE_REINPLACEはよくわかんないので消します。

その他

astroカテゴリはpkgsrcにはないので、geographyにします。PKGREVISIONはports用の変数で、pkgsrcではいらないので、消します。

pkglint曰く、COMMENTはAで始めちゃいけないようです。なおします。

幸いなことに、前のVer.のパッケージがpkgsrc/geography/gpsdriveにあるので、Makefileをのぞきます。

前のVer.はgpsdを分離しているようです。このパッケージでは、今回はそこまで手が回らない?ので、分離しないことにします。CONFLICTSを指定しておきます。

USE_LANGUAGEは書いてあると、distccを使う時、幸せになれるみたいです。今回もソースをのぞくと、.cppファイルがたくさんので、C++ みたいです。前のVer.を真似して指定しておきます。

 USE_PKGLOCALEDIR=       YES

は、こちらでもいりそうです。追加します。

わからないときは、他のパッケージをひたすら見て、真似するのが重要です。(というか、それしか手がない。^^;)

Makefile以外

Makefile以外の部分をみます。

ほとんどのパッケージのpatchは、patch-[a-z][a-z]というファイル名です。とりあえず、その流儀にしたがい、なおします。

distinfoをみると、SHA1しかないので、make makesumでRMD160も追加します。パッチのチェックサムもファイル名を変えちゃったので、distinfoのパッチの行を削除した後、make mpsで再度追加します。

DESCRをみると、WWW行があります。これは必要ないので、削除します。署名欄を削るべきかどうかは毎度悩みますが、そのままにしておきます。

MESSAGESをみます。RCSタグの行が$NetBSD$じゃないので、なおします。=の数が、75でないといけないみたいなのでなおします。

PLISTはあとまわしです。

makeしてみる

makeしてみます。

configureの途中で、

   checking whether time.h and sys/time.h may both be included... yes
   test: ==: unexpected operator
   checking locale.h usability... yes

と出ます。気になったので、止めて確認します。

configureの11426行目と、configure.acの194行めが変みたいです。(ここだけif文の等号が"=="になっている。ほかはみな"="。)これであっているかどうかわかりませんが、とりあえずパッチをつくります。

pkgdiffパッケージの出番です。主にpkgviとmkpatchesを使います。上記で紹介した"Chapter 15. Debugging"の例の通りで問題ありません。

make mpsしてdistinfoを更新し、make cleanしてmakeをやりなおします。

configureの途中のエラーは、出なくなったので、あってたのでしょうか。

makeがとまったら、原因を調べて、Makefileを修正したり、パッチを作ったり、これを繰り返して、makeが通るようにします。

makeとおった

makeとおりました。わーい。

make installしてみます。

installできました。

PLISTをこしらえます。make print-PLISTです。PLIST.newに書きだし、PLISTと比較します。

 make print-PLIST > PLIST.new

置き換えても問題ないみたいなので、置き換えます。

さいご

あとは、上記で紹介した"Chapter 15. Debugging"の例の通りで問題ありません。

   @dirrm share/pixmaps
   @dirrm share/applications

を、PLISTに残すべきかは悩みますが、実害はないので、そのままにしておきます。

できたもの

Makefileは下記のとおり。

 # $NetBSD$
 
 DISTNAME=	gpsdrive-2.09
 CATEGORIES=	geograry
 MASTER_SITES=	http://www.gpsdrive.cc/           \
 		http://www.gpsdrive.oc512.us/     \
 		http://gpsdrive.teachlinux.com/   \
 		http://gpsdrive.flugfunk.de/
 
 MAINTAINER=	tech-pkg@NetBSD.org
 HOMEPAGE=	http://www.gpsdrive.cc/
 COMMENT=	GPS navigation system
 
 CONFLICTS=	gpsd-[0-9]*
 
 GNU_CONFIGURE=		YES
 USE_LIBTOOL=	YES
 USE_PKGLOCALEDIR=	YES
 USE_TOOLS+=	gmake perl
 CONFIGURE_ARGS+=	--disable-gramin
 
 USE_LANGUAGE=	c c++
 
 .include "../../devel/atk/buildlink3.mk"
 .include "../../devel/gettext-lib/buildlink3.mk"
 .include "../../devel/glib2/buildlink3.mk"
 .include "../../devel/libgetopt/buildlink3.mk"
 .include "../../devel/pango/buildlink3.mk"
 .include "../../devel/pcre/buildlink3.mk"
 .include "../../devel/pkgconfig/buildlink3.mk"
 .include "../../textproc/intltool/buildlink3.mk"
 .include "../../x11/gtk2/buildlink3.mk"
 .include "../../mk/x11.buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"

できたパッケージは、http://www.tunagu.gr.jp/~isihara/gpsdrive.tar.gzにおいときます。

わからんとこ

  • share/pixmaps や share/applications はpkgsrc的にいいもんか
    • でも、share/pixmap は audio/easytag や audio/gqmpeg でもつかわれている
    • share/applications は audio/easytag や multimedia/gxine や imputmethod/uim でも使われている
  • ほんとにあれだけいろいろなbuildlink3.mkをincludeしないかんのか
    • でも、NetBSD以外でpkgsrcを使うことを考えるといるのかも

謝辞

nbug MLのみなさま、特に、島岡さんとこにしさんに感謝です。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2005年06月26日 13時16分31秒