かなり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, mtb);
+ 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, mtb);
+
+ if (result == 0 & 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 を追加。