solaris10/sparc pkgsrc

かなりcaamに頼った。

自分メモ。net/gnutls は、libtoolさしかえ。

security/policykit は src/polkit-dbus/polkit-read-auth-helper.c に

#define dirfd(dirp)     ((dirp)->dd_fd)

追加。あと、bmake install 時に -lpolkit を探せないので work/.*/bin が見えないようディレクトリ名を変えた。

sysutils/hal の hald の rule.h に追加。

typedef uint32_t u_int32_t;

sysutils/gnome-vfs の libgnomevfs は、PREFIXが残るので

p=/home1/pkg/200901/pkg
gmake CC="gcc -DPREFIX=\\\"$p\\\" \
-DPKG_SYSCONFDIR=\\\"$p/etc\\\" -DPKGLOCALEDIR=\\\"$p/share/local\\\""

さらにlibtool差し替え。MakefileのGSSAPI_CFLAGS等にゴミが残るので削除。

devel/libgnome もcaamしてからlibtool差し替え。

databases/shared-mime-info も PREFIX 残り。

gtk2は、こんなエラー。

Undefined                       first referenced
 symbol                             in file
gdk_pixdata_from_pixbuf             gdk-pixbuf-csource.o
gdk_pixdata_to_csource              gdk-pixbuf-csource.o
gdk_pixbuf_new_from_file            gdk-pixbuf-csource.o

gdk-pixbuf/.libs/libgdk-pixbuf-2.0.so がこんな風。

nm .libs/libgdk-pixbuf-2.0.so
    :
[57]    |     87848|    1640|FUNC |LOCL |2    |13     |gdk_pixdata_from_pixbuf
    :

LOCLになってるのが問題か。ははーん、libtool で nm を使って グローバルシンボルを抽出するんだが、nmの出力がBSD互換形式であると 決め打ちしているのか。じゃあ Solaris の nm のままじゃ無理だ。 てことで生成される libtool の変数設定を以下のように。

NM="nm -p"
  :
  :
  :
global_symbol_pipe="sed -n -e 's/^.*[ 	]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ 	][ 	]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'"

いやまて、configureのときに NM="nm -p" としておくほうがいいかな? 次からそうしよう。あ、エラーが出なくなった。なんだ最初からそうしておけば。

次、devel/libglade。もろもろ -std=c9x ではコンパイルできないから オプションを除去。net/py-ORBIT、graphics/py-cairo も同様。

databases/sqlite3 で、src/btreeInt.h が2重インクルードされて 変数の2重定義エラーが出る。初歩的バグ。src/btreeInt.h 全体を 以下の記述で包む。

#ifdef _BTREEINT_H_
#define _BTREEINT_H_
   :
   :
   :
#endif

さらにリンク時に sqlite3_version が見えない。 何も考えず sqlite3.c を、

#ifndef SQLITE_AMALGAMATION
SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
#else
const char sqlite3_version[] = SQLITE_VERSION;
#endif

とかしておしまい。あうまくいっちゃった。

sysutils/libgtop の sysdeps/solaris/glibtop_server.h に不足あり。

#define GLIBTOP_SUID_PROC_WD            0
#define GLIBTOP_SUID_PROC_AFFINITY      0

と思ってコンパイルは通ったが別のツールのリンクでこける。 そもそもSolaris用の関数が全く実装されていない。おぃおぃ。こりゃ 手に追えないなあと半ばあきらめながら検索したら OpenSolaris用のパッチ が見つかった。Local copy

net/bug-buddy は icon のインストールを行なう Makefile で、 sh のfor文に空のリストを渡している。それで /usr/xpg4/bin/sh がこける。 なので CONFIG_SHELL=/bin/bash に設定してからcaamに助けてもらう。

graphics/cheese が #if defined(__sun) で挟んで sys/videodev2.h とやらを include しようとしてるが、sparcにゃそんなもん ない。から外した。通った。

sysutils/gnome-mount もSolaris対応がダメ。 src/ 内の gnome-mount-properties-view.c と gnome-mount.c だ。 パッチも見当たらない。しゃーない作るか。あってるかどうか分からないが。

--- gnome-mount-0.8/src/gnome-mount-properties-view.c.orig      Sat Jan 24 07:09:38 2009
+++ gnome-mount-0.8/src/gnome-mount-properties-view.c   Sat Jan 24 07:36:51 2009
@@ -42,6 +42,8 @@
 #include <sys/mount.h>
 #include <limits.h>
 #include <pwd.h>
+#elif defined(sun)
+#include <sys/mnttab.h>
 #else
 #include <mntent.h>
 #endif
@@ -536,6 +538,16 @@
                *mount_options = g_string_free(optstr, FALSE);
                *mount_fstype = mtab->mounts[mtab->iter++].f_fstypename;
                return TRUE;
+       } else {
+               return FALSE;
+       }
+#elif defined(sun)
+       struct mnttab mtb;
+       int result = getmntent(handle, &#109;tb);
+       if (result==0) {
+               *device_file = mtb.mnt_special;
+               *mount_options = mtb.mnt_mntopts;
+               *mount_fstype = mtb.mnt_fstype;
        } else {
                return FALSE;
        }
--- gnome-mount-0.8/src/gnome-mount.c.orig      Sat Jan 24 07:28:33 2009
+++ gnome-mount-0.8/src/gnome-mount.c   Sat Jan 24 07:33:58 2009
@@ -892,6 +892,15 @@
        }
 
        return fstab ? fstab->fs_spec : NULL;
+#elif defined(sun)
+       struct mnttab mtb;
+       int result;
+       result = getmntent(handle, &#109;tb);
+
+       if (result == 0 &amp; mtb.mnt_mountp != NULL) {
+               *mount_point = mtb.mnt_mountp;
+       }
+       return result==0 ? mtb.mnt_fstype : NULL;
 #else
        struct mntent *mnt;
 

x11/gnome-panel ヘルプのインストールで omf ファイルの元ファイル名が おかしい。拡張子 .out なしに書き換える。

chat/telepathy-gabble で lib/gibber/giber-util.c は

#ifdef sun
typedef uint32_t u_int32_t;
typedef uint16_t u_int16_t;
#endif

を追加。src/bytestream-socks5.h に #include <sys/sockio.h> を追加。

chat/telepathy-idle リンクに -lcrypto が必要。

devel/exempi は char** を const char** へキャストしている 部分がこけるがこれは #ifdef __NetBSD__ してある部分を使えば よいので、とりあえず #if defined(__NetBSD__) || defined(sun) にした。

net/avahi も要らないんだけどなあ。まず configure でこける。 --with-distro=none にしないと。さらに configure で HAVE_SETEGID と HAVE_SETEUID のセットに失敗しているようだ。さらに dbus_connection_disconnect という古い名前の関数を使っている ようだ。config.h で

#define HAVE_SETEGID 1
#define HAVE_SETEUID 1
#define dbus_connection_disconnect dbus_connection_close

しちゃった。あと、-std=c99 を削除。 perl -i -pe 's/ -std=c9.//' **/Makefile

x11/qt3-tools はややこしくてわからん。qtlibsが $PKG に 入っているにもかかわらず、ソースツリーから生成される lib/.libs/libqt-mt.so を二重リンクしに行って libtool が怒る。 ソースツリーの lib/.libs/libqt-mt.la を引数から除去して通った。 通じるかいな。

sysutils/gvfs は struct msghdr のメンバーがsolaris的に未定義。 /usr/include/sys/socket.h を見ればわかるが _XPG4_2 をdefineしていないと msg_control なんかは定義されない。とりあえず gmake CC='gcc -D_XPG4_2 -std=c99' で回す。 std=c99 だと通らないのもあるので普通にgmakeで継続。あと,mkdtemp()を 無条件で使ってるので,それのないsolarisではリンクエラーになる。 むう,適度に簡単な関数だから一瞬書いちゃおうかと迷ったが これだけ便利な関数ならどっか別のパッケージのライブラリで実装してるん ちゃうかと思って nm $pkg/lib/lib*so で探したら, めーっけ,gettextlib にあった。てことで gvfsd-burn を生成する コマンドラインに -lgettextlib を追加してみて,通った。 おお,これは個人的に新しい work around 方法を発見。

security/seahorse の libseahorse/seahorse-passphrase.c で include している err.h なんてsolarisにない。

--- daemon/seahorse-daemon.c.bak   Fri Jan 30 16:23:02 2009
+++ daemon/seahorse-daemon.c    Fri Jan 30 16:15:59 2009
@@ -67,6 +67,19 @@
     { NULL }
 };
 
+#ifdef sun
+int warn(char *msg)
+{
+  write(2, msg, strlen(msg));
+  write(2, "\n", 1);
+}
+int err(int status, char *msg)
+{
+  warn(msg);
+  write(2, "\n", 1);
+  exit(status);
+}
+#endif
 static void
 daemonize ()
 {

はい,おしまい。

misc/yelp はリンク時に未解決シンボルでまくり。

Undefined                       first referenced
 symbol                             in file
nsCOMPtr_base::assign_from_helper(nsCOMPtr_helper const, nsID const)yelp-Yelper.o  (symbol belongs to implicit dependency /home1/pkg/200901/pkg/lib/firefox/libxpcom_core.so)
nsCOMPtr_base::begin_assignment()      yelp-Yelper.o  (symbol belongs to implicit dependency /home1/pkg/200901/pkg/lib/firefox/libxpcom_core.so)
  :
  :

最後の libtool 呼出しに -lxpcom_core を追加。